472540: Support reading of forward compatible EPUB 3 files

* Generate Java 7 compliant code (new minimum BREE)
* Switch to EMF 2.9.
* Fix problem in dc.ecore "Role" declaration
* Ignore optional compile problems in src-gen
* Relaxed check on EPUB version.
* Added EPUBPublication to represent the EPUB 3.0 version of the OEBPS.
* Added new attributes in opf.ecores and adjusted validation to support
  both versions of the specification.

Change-Id: I1657279412f8cde51803636b30f7f56927ac1fbd
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=472540
diff --git a/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java b/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java
index 41897f5..29fea40 100644
--- a/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java
+++ b/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2014 Torkild U. Resheim.
+ * Copyright (c) 2011, 2015 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -20,7 +20,6 @@
 import org.apache.tools.ant.Task;
 import org.eclipse.mylyn.docs.epub.core.EPUB;
 import org.eclipse.mylyn.docs.epub.core.OPSPublication;
-import org.eclipse.mylyn.docs.epub.core.Publication;
 import org.eclipse.mylyn.docs.epub.opf.Role;
 import org.eclipse.mylyn.internal.docs.epub.core.EclipseTocImporter;
 
@@ -33,7 +32,8 @@
 @SuppressWarnings("restriction")
 public class EpubTask extends Task {
 
-	private Publication oebps = null;
+	/** Ant task only supports EPUB 2.0 */
+	private OPSPublication oebps = null;
 
 	private ArrayList<FileSetType> filesets = null;
 
diff --git a/org.eclipse.mylyn.docs.epub.core/.classpath b/org.eclipse.mylyn.docs.epub.core/.classpath
index 32258f1..15961c3 100644
--- a/org.eclipse.mylyn.docs.epub.core/.classpath
+++ b/org.eclipse.mylyn.docs.epub.core/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/org.eclipse.mylyn.docs.epub.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.docs.epub.core/.settings/org.eclipse.jdt.core.prefs
index 8840a93..d6f77e8 100644
--- a/org.eclipse.mylyn.docs.epub.core/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.mylyn.docs.epub.core/.settings/org.eclipse.jdt.core.prefs
@@ -7,6 +7,12 @@
 org.eclipse.jdt.core.codeComplete.localSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -17,12 +23,15 @@
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -30,31 +39,50 @@
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
@@ -64,14 +92,17 @@
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.mylyn.docs.epub.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.docs.epub.core/META-INF/MANIFEST.MF
index 7d4e9a7..e134cfa 100644
--- a/org.eclipse.mylyn.docs.epub.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.docs.epub.core/META-INF/MANIFEST.MF
@@ -2,18 +2,27 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.mylyn.docs.epub.core;singleton:=true
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Require-Bundle: org.eclipse.emf.ecore;bundle-version="2.5.0",
- org.eclipse.emf.common;bundle-version="2.5.0",
+Require-Bundle: org.eclipse.core.runtime.compatibility,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;bundle-version="2.5.0",
  org.eclipse.emf.ecore.xmi;bundle-version="2.5.0",
+ org.eclipse.emf.common;bundle-version="2.5.0",
  org.eclipse.mylyn.wikitext.core;bundle-version="1.9.0",
  org.apache.tika.core;bundle-version="1.3.0",
  org.apache.tika.parsers;bundle-version="1.3.0"
-Export-Package: org.eclipse.mylyn.docs.epub.core;uses:="org.eclipse.mylyn.docs.epub.dc,org.eclipse.mylyn.docs.epub.opf,org.eclipse.mylyn.docs.epub.ncx",
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.mylyn.docs.epub.core;
+  uses:="org.eclipse.mylyn.docs.epub.dc,
+   org.eclipse.mylyn.docs.epub.opf,
+   org.eclipse.mylyn.docs.epub.ncx",
  org.eclipse.mylyn.docs.epub.core.wikitext,
- org.eclipse.mylyn.docs.epub.dc;uses:="org.eclipse.emf.ecore.util,org.eclipse.emf.ecore,org.eclipse.mylyn.docs.epub.opf",
+ org.eclipse.mylyn.docs.epub.dc;
+  uses:="org.eclipse.emf.ecore.util,
+   org.eclipse.emf.ecore,
+   org.eclipse.mylyn.docs.epub.opf",
  org.eclipse.mylyn.docs.epub.dc.impl;
   uses:="org.eclipse.emf.ecore.util,
    org.eclipse.emf.ecore,
@@ -32,7 +41,10 @@
    org.eclipse.emf.ecore,
    org.eclipse.emf.common.notify.impl,
    org.eclipse.mylyn.docs.epub.dc",
- org.eclipse.mylyn.docs.epub.ncx;uses:="org.eclipse.emf.ecore.util,org.eclipse.emf.ecore,org.eclipse.emf.common.util",
+ org.eclipse.mylyn.docs.epub.ncx;
+  uses:="org.eclipse.emf.ecore.util,
+   org.eclipse.emf.ecore,
+   org.eclipse.emf.common.util",
  org.eclipse.mylyn.docs.epub.ncx.impl;
   uses:="org.eclipse.emf.ecore.util,
    org.eclipse.emf.ecore,
@@ -54,7 +66,10 @@
  org.eclipse.mylyn.docs.epub.ocf,
  org.eclipse.mylyn.docs.epub.ocf.impl,
  org.eclipse.mylyn.docs.epub.ocf.util,
- org.eclipse.mylyn.docs.epub.opf;uses:="org.eclipse.emf.ecore,org.eclipse.emf.common.util,org.eclipse.mylyn.docs.epub.dc",
+ org.eclipse.mylyn.docs.epub.opf;
+  uses:="org.eclipse.emf.ecore,
+   org.eclipse.emf.common.util,
+   org.eclipse.mylyn.docs.epub.dc",
  org.eclipse.mylyn.docs.epub.opf.impl;
   uses:="org.eclipse.emf.ecore,
    org.eclipse.emf.common.util,
@@ -76,4 +91,3 @@
  org.eclipse.mylyn.internal.docs.epub.core;x-internal:=true
 Bundle-ClassPath: .
 Bundle-Localization: OSGI-INF/l10n/bundle
-
diff --git a/org.eclipse.mylyn.docs.epub.core/model/dc.ecore b/org.eclipse.mylyn.docs.epub.core/model/dc.ecore
index a0ef544..86576d6 100644
--- a/org.eclipse.mylyn.docs.epub.core/model/dc.ecore
+++ b/org.eclipse.mylyn.docs.epub.core/model/dc.ecore
@@ -42,8 +42,7 @@
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="kind" value="mixed"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" eType="ecore:EEnum opf.ecore#//Role"
-        defaultValueLiteral="" unsettable="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" eType="ecore:EEnum opf.ecore#//Role">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="namespace" value="http://www.idpf.org/2007/opf"/>
       </eAnnotations>
diff --git a/org.eclipse.mylyn.docs.epub.core/model/ncx.genmodel b/org.eclipse.mylyn.docs.epub.core/model/ncx.genmodel
index 4a28a21..2ef5751 100644
--- a/org.eclipse.mylyn.docs.epub.core/model/ncx.genmodel
+++ b/org.eclipse.mylyn.docs.epub.core/model/ncx.genmodel
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen"
-    modelPluginID="org.eclipse.mylyn.docs.epub.core" modelName="NCX-2005-1" importerID="org.eclipse.emf.importer.ecore"
-    complianceLevel="5.0" copyrightFields="false" runtimeVersion="2.6">
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen" modelPluginID="org.eclipse.mylyn.docs.epub.core"
+    modelName="NCX-2005-1" importerID="org.eclipse.emf.importer.ecore" complianceLevel="7.0"
+    copyrightFields="false" runtimeVersion="2.9">
   <foreignModel>ncx.ecore</foreignModel>
   <genPackages prefix="NCX" basePackage="org.eclipse.mylyn.docs.epub" resource="XML"
       disposableProviderFactory="true" ecorePackage="ncx.ecore#/">
@@ -69,9 +68,9 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//DocTitle/lang"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//Head">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute ncx.ecore#//Head/group"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference ncx.ecore#//Head/smilCustomTest"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference ncx.ecore#//Head/meta"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute ncx.ecore#//Head/groups"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference ncx.ecore#//Head/smilCustomTests"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference ncx.ecore#//Head/metas"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//Img">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//Img/class"/>
@@ -98,28 +97,28 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavLabel/lang"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//NavList">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navInfo"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navLabel"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navTarget"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navInfos"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navLabels"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavList/navTargets"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavList/class"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavList/id"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//NavMap">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navInfo"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navLabel"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navPoint"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navInfos"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navLabels"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavMap/navPoints"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavMap/id"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//NavPoint">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavPoint/navLabels"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavPoint/content"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavPoint/navPoint"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavPoint/navPoints"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavPoint/class"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavPoint/id"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavPoint/playOrder"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//NavTarget">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavTarget/navLabel"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavTarget/navLabels"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//NavTarget/content"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavTarget/class"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//NavTarget/id"/>
@@ -129,23 +128,23 @@
     <genClasses ecoreClass="ncx.ecore#//Ncx">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/head"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/docTitle"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/docAuthor"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/docAuthors"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/navMap"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/pageList"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/navList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//Ncx/navLists"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//Ncx/dir"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//Ncx/lang"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//Ncx/version"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//PageList">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/navInfo"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/navLabel"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/pageTarget"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/navInfos"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/navLabels"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageList/pageTargets"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//PageList/class"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//PageList/id"/>
     </genClasses>
     <genClasses ecoreClass="ncx.ecore#//PageTarget">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageTarget/navLabel"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageTarget/navLabels"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ncx.ecore#//PageTarget/content"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//PageTarget/class"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ncx.ecore#//PageTarget/id"/>
diff --git a/org.eclipse.mylyn.docs.epub.core/model/ocf.genmodel b/org.eclipse.mylyn.docs.epub.core/model/ocf.genmodel
index 90d7704..d06a991 100644
--- a/org.eclipse.mylyn.docs.epub.core/model/ocf.genmodel
+++ b/org.eclipse.mylyn.docs.epub.core/model/ocf.genmodel
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen"
-    modelPluginID="org.eclipse.mylyn.docs.epub.core" modelName="Ocf" importerID="org.eclipse.emf.importer.ecore"
-    complianceLevel="5.0" copyrightFields="false" runtimeVersion="2.6">
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen" modelPluginID="org.eclipse.mylyn.docs.epub.core"
+    modelName="Ocf" importerID="org.eclipse.emf.importer.ecore" complianceLevel="7.0"
+    copyrightFields="false" runtimeVersion="2.9">
   <foreignModel>ocf.ecore</foreignModel>
   <genPackages prefix="OCF" basePackage="org.eclipse.mylyn.docs.epub" resource="XML"
       disposableProviderFactory="true" ecorePackage="ocf.ecore#/">
     <genClasses ecoreClass="ocf.ecore#//Container">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ocf.ecore#//Container/rootfiles"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ocf.ecore#//Container/version"/>
     </genClasses>
     <genClasses ecoreClass="ocf.ecore#//RootFiles">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ocf.ecore#//RootFiles/rootfiles"/>
@@ -16,6 +16,7 @@
     <genClasses ecoreClass="ocf.ecore#//RootFile">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ocf.ecore#//RootFile/fullPath"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ocf.ecore#//RootFile/mediaType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ocf.ecore#//RootFile/publication"/>
     </genClasses>
   </genPackages>
 </genmodel:GenModel>
diff --git a/org.eclipse.mylyn.docs.epub.core/model/opf.ecore b/org.eclipse.mylyn.docs.epub.core/model/opf.ecore
index b8560db..6e47093 100644
--- a/org.eclipse.mylyn.docs.epub.core/model/opf.ecore
+++ b/org.eclipse.mylyn.docs.epub.core/model/opf.ecore
@@ -50,6 +50,26 @@
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" transient="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="includeReferencedResources"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lang" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dir" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Metadata">
     <eStructuralFeatures xsi:type="ecore:EReference" name="titles" lowerBound="1"
@@ -201,15 +221,49 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="file" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
-        transient="true"/>
+        transient="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Used by the tooling, is not serialized."/>
+      </eAnnotations>
+    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="noToc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        transient="true"/>
+        transient="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Used by the tooling, is not serialized."/>
+      </eAnnotations>
+    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
-        transient="true"/>
+        transient="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Used by the tooling, is not serialized."/>
+      </eAnnotations>
+    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="generated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        transient="true"/>
+        transient="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Used by the tooling, is not serialized."/>
+      </eAnnotations>
+    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourcePath" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
-        transient="true"/>
+        transient="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Used by the tooling, is not serialized."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="properties" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-item-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="media_overlay" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-item-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+        <details key="name" value="media-overlay"/>
+        <details key="namespace" value="http://www.idpf.org/2007/opf"/>
+      </eAnnotations>
+    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Spine">
     <eStructuralFeatures xsi:type="ecore:EReference" name="spineItems" upperBound="-1"
@@ -492,8 +546,33 @@
     <eLiterals name="Text" value="17" literal="text"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Meta">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="content" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="content" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem&#xA;@since 3.0"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="property" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem&#xA;@since 3.0&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="refines" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem&#xA;@since 3.0&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scheme" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem&#xA;@since 3.0&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dir" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem&#xA;@since 3.0&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
   </eClassifiers>
 </ecore:EPackage>
diff --git a/org.eclipse.mylyn.docs.epub.core/model/opf.genmodel b/org.eclipse.mylyn.docs.epub.core/model/opf.genmodel
index 1b40138..e378002 100644
--- a/org.eclipse.mylyn.docs.epub.core/model/opf.genmodel
+++ b/org.eclipse.mylyn.docs.epub.core/model/opf.genmodel
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen"
-    modelPluginID="org.eclipse.mylyn.docs.epub.core" modelName="OPF-2.0.1" modelPluginClass=""
-    nonNLSMarkers="true" runtimeCompatibility="true" testsDirectory="/org.eclipse.mylyn.docs.epub.tests/src-gen"
-    importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0" copyrightFields="false"
-    publicConstructors="true" runtimeVersion="2.6" language="en" interfaceNamePattern="">
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.mylyn.docs.epub.core/src-gen" modelPluginID="org.eclipse.mylyn.docs.epub.core"
+    modelName="OPF" modelPluginClass="" nonNLSMarkers="true" runtimeCompatibility="true"
+    testsDirectory="/org.eclipse.mylyn.docs.epub.tests/src-gen" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="7.0" copyrightFields="false" publicConstructors="true" runtimeVersion="2.9"
+    language="en" interfaceNamePattern="">
   <foreignModel>opf.ecore</foreignModel>
   <genPackages prefix="OPF" basePackage="org.eclipse.mylyn.docs.epub" resource="XML"
       disposableProviderFactory="true" dataTypeConverters="true" ecorePackage="opf.ecore#/">
@@ -264,6 +263,10 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/generateCoverHTML"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/generateTableOfContents"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/includeReferencedResources"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/prefix"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/lang"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/dir"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Package/id"/>
     </genClasses>
     <genClasses ecoreClass="opf.ecore#//Metadata">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference opf.ecore#//Metadata/titles"/>
@@ -320,6 +323,10 @@
     <genClasses ecoreClass="opf.ecore#//Meta">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/content"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/id"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/property"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/refines"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute opf.ecore#//Meta/scheme"/>
     </genClasses>
   </genPackages>
   <genPackages prefix="DC" basePackage="org.eclipse.mylyn.docs.epub" resource="XML"
diff --git a/org.eclipse.mylyn.docs.epub.core/model/readme.txt b/org.eclipse.mylyn.docs.epub.core/model/readme.txt
deleted file mode 100644
index 55f410f..0000000
--- a/org.eclipse.mylyn.docs.epub.core/model/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This implementation is based on EPUB version 2.0.1 http://idpf.org/epub/201.
-There is a newer version in the works (3.0).
-
diff --git a/org.eclipse.mylyn.docs.epub.core/plugin.xml b/org.eclipse.mylyn.docs.epub.core/plugin.xml
index eb9ea4f..97cccdc 100644
--- a/org.eclipse.mylyn.docs.epub.core/plugin.xml
+++ b/org.eclipse.mylyn.docs.epub.core/plugin.xml
@@ -19,5 +19,27 @@
       </package>
    </extension>
 
+   <extension point="org.eclipse.emf.ecore.extension_parser">
+      <!-- @generated opf -->
+      <parser
+            type="opf"
+            class="org.eclipse.mylyn.docs.epub.opf.util.OPFResourceFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated opf -->
+      <package
+            uri="http://purl.org/dc/elements/1.1/"
+            class="org.eclipse.mylyn.docs.epub.dc.DCPackage"
+            genModel="model/opf.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.extension_parser">
+      <!-- @generated opf -->
+      <parser
+            type="dc"
+            class="org.eclipse.mylyn.docs.epub.dc.util.DCResourceFactoryImpl"/>
+   </extension>
+
 
 </plugin>
diff --git a/org.eclipse.mylyn.docs.epub.core/pom.xml b/org.eclipse.mylyn.docs.epub.core/pom.xml
index 4a6985f..9c2180e 100644
--- a/org.eclipse.mylyn.docs.epub.core/pom.xml
+++ b/org.eclipse.mylyn.docs.epub.core/pom.xml
@@ -8,7 +8,7 @@
     <version>2.6.0-SNAPSHOT</version>
   </parent>
   <artifactId>org.eclipse.mylyn.docs.epub.core</artifactId>
-  <version>2.1.0-SNAPSHOT</version>
+  <version>3.0.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <target-version>${alt-target-version}</target-version>
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Contributor.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Contributor.java
index b834098..da67d29 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Contributor.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Contributor.java
@@ -15,11 +15,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Contributor#getRole <em>Role</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Contributor#getFileAs <em>File As</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getContributor()
  * @model extendedMetaData="kind='mixed'"
@@ -28,7 +28,6 @@
 public interface Contributor extends LocalizedDCType {
 	/**
 	 * Returns the value of the '<em><b>Role</b></em>' attribute.
-	 * The default value is <code>""</code>.
 	 * The literals are from the enumeration {@link org.eclipse.mylyn.docs.epub.opf.Role}.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -38,12 +37,9 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Role</em>' attribute.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Role
-	 * @see #isSetRole()
-	 * @see #unsetRole()
 	 * @see #setRole(Role)
 	 * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getContributor_Role()
-	 * @model default="" unsettable="true"
-	 *        extendedMetaData="namespace='http://www.idpf.org/2007/opf'"
+	 * @model extendedMetaData="namespace='http://www.idpf.org/2007/opf'"
 	 * @generated
 	 */
 	Role getRole();
@@ -54,37 +50,12 @@
 	 * <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Role</em>' attribute.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Role
-	 * @see #isSetRole()
-	 * @see #unsetRole()
 	 * @see #getRole()
 	 * @generated
 	 */
 	void setRole(Role value);
 
 	/**
-	 * Unsets the value of the '{@link org.eclipse.mylyn.docs.epub.dc.Contributor#getRole <em>Role</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isSetRole()
-	 * @see #getRole()
-	 * @see #setRole(Role)
-	 * @generated
-	 */
-	void unsetRole();
-
-	/**
-	 * Returns whether the value of the '{@link org.eclipse.mylyn.docs.epub.dc.Contributor#getRole <em>Role</em>}' attribute is set.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return whether the value of the '<em>Role</em>' attribute is set.
-	 * @see #unsetRole()
-	 * @see #getRole()
-	 * @see #setRole(Role)
-	 * @generated
-	 */
-	boolean isSetRole();
-
-	/**
 	 * Returns the value of the '<em><b>File As</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Creator.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Creator.java
index 93baea2..042347c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Creator.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Creator.java
@@ -15,11 +15,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Creator#getRole <em>Role</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Creator#getFileAs <em>File As</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getCreator()
  * @model extendedMetaData="kind='mixed'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/DCType.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/DCType.java
index 1ab435a..03b2062 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/DCType.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/DCType.java
@@ -17,11 +17,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.DCType#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.DCType#getMixed <em>Mixed</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getDCType()
  * @model abstract="true"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Date.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Date.java
index 3ac2488..7b7e040 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Date.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Date.java
@@ -14,10 +14,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Date#getEvent <em>Event</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getDate()
  * @model extendedMetaData="kind='mixed'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Identifier.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Identifier.java
index d85dbbd..6f13f7f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Identifier.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Identifier.java
@@ -17,12 +17,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Identifier#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Identifier#getScheme <em>Scheme</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Identifier#getMixed <em>Mixed</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getIdentifier()
  * @model extendedMetaData="kind='mixed'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Language.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Language.java
index dada875..c171603 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Language.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/Language.java
@@ -14,10 +14,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.Language#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getLanguage()
  * @model extendedMetaData="kind='mixed'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/LocalizedDCType.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/LocalizedDCType.java
index 4d6ce1d..22522b0 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/LocalizedDCType.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/LocalizedDCType.java
@@ -14,10 +14,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.LocalizedDCType#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage#getLocalizedDCType()
  * @model abstract="true"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/ContributorImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/ContributorImpl.java
index 41855eb..188b72b 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/ContributorImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/ContributorImpl.java
@@ -23,11 +23,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.ContributorImpl#getRole <em>Role</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.ContributorImpl#getFileAs <em>File As</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -53,15 +53,6 @@
 	protected Role role = ROLE_EDEFAULT;
 
 	/**
-	 * This is true if the Role attribute has been set.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean roleESet;
-
-	/**
 	 * The default value of the '{@link #getFileAs() <em>File As</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -117,33 +108,8 @@
 	public void setRole(Role newRole) {
 		Role oldRole = role;
 		role = newRole == null ? ROLE_EDEFAULT : newRole;
-		boolean oldRoleESet = roleESet;
-		roleESet = true;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DCPackage.CONTRIBUTOR__ROLE, oldRole, role, !oldRoleESet));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void unsetRole() {
-		Role oldRole = role;
-		boolean oldRoleESet = roleESet;
-		role = ROLE_EDEFAULT;
-		roleESet = false;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.UNSET, DCPackage.CONTRIBUTOR__ROLE, oldRole, ROLE_EDEFAULT, oldRoleESet));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isSetRole() {
-		return roleESet;
+			eNotify(new ENotificationImpl(this, Notification.SET, DCPackage.CONTRIBUTOR__ROLE, oldRole, role));
 	}
 
 	/**
@@ -210,7 +176,7 @@
 	public void eUnset(int featureID) {
 		switch (featureID) {
 			case DCPackage.CONTRIBUTOR__ROLE:
-				unsetRole();
+				setRole(ROLE_EDEFAULT);
 				return;
 			case DCPackage.CONTRIBUTOR__FILE_AS:
 				setFileAs(FILE_AS_EDEFAULT);
@@ -228,7 +194,7 @@
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case DCPackage.CONTRIBUTOR__ROLE:
-				return isSetRole();
+				return role != ROLE_EDEFAULT;
 			case DCPackage.CONTRIBUTOR__FILE_AS:
 				return FILE_AS_EDEFAULT == null ? fileAs != null : !FILE_AS_EDEFAULT.equals(fileAs);
 		}
@@ -246,7 +212,7 @@
 
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (role: "); //$NON-NLS-1$
-		if (roleESet) result.append(role); else result.append("<unset>"); //$NON-NLS-1$
+		result.append(role);
 		result.append(", fileAs: "); //$NON-NLS-1$
 		result.append(fileAs);
 		result.append(')');
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CoverageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CoverageImpl.java
index 1f6ad9b..fd6ce81 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CoverageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CoverageImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Coverage</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CreatorImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CreatorImpl.java
index 7bd1a25..e88cbdd 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CreatorImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/CreatorImpl.java
@@ -23,11 +23,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.CreatorImpl#getRole <em>Role</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.CreatorImpl#getFileAs <em>File As</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCFactoryImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCFactoryImpl.java
index 5ded3af..8f8e843 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCFactoryImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCFactoryImpl.java
@@ -31,7 +31,7 @@
 	 */
 	public static DCFactory init() {
 		try {
-			DCFactory theDCFactory = (DCFactory)EPackage.Registry.INSTANCE.getEFactory("http://purl.org/dc/elements/1.1/"); //$NON-NLS-1$ 
+			DCFactory theDCFactory = (DCFactory)EPackage.Registry.INSTANCE.getEFactory(DCPackage.eNS_URI);
 			if (theDCFactory != null) {
 				return theDCFactory;
 			}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCPackageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCPackageImpl.java
index 5137e52..512ac0b 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCPackageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCPackageImpl.java
@@ -625,7 +625,7 @@
 		initEClass(publisherEClass, Publisher.class, "Publisher", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(contributorEClass, Contributor.class, "Contributor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getContributor_Role(), theOPFPackage.getRole(), "role", "", 0, 1, Contributor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getContributor_Role(), theOPFPackage.getRole(), "role", null, 0, 1, Contributor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getContributor_FileAs(), ecorePackage.getEString(), "fileAs", null, 0, 1, Contributor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(dateEClass, Date.class, "Date", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
@@ -673,167 +673,167 @@
 	 * @generated
 	 */
 	protected void createExtendedMetaDataAnnotations() {
-		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$		
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$	
 		addAnnotation
 		  (titleEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (creatorEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getCreator_Role(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getCreator_FileAs(), 
 		   source, 
 		   new String[] {
 			 "name", "file-as", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (subjectEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (descriptionEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (publisherEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (contributorEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getContributor_Role(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getContributor_FileAs(), 
 		   source, 
 		   new String[] {
 			 "name", "file-as", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (dateEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getDate_Event(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (typeEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (formatEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (identifierEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (identifierEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getIdentifier_Scheme(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getIdentifier_Mixed(), 
 		   source, 
 		   new String[] {
 			 "kind", "elementWildcard", //$NON-NLS-1$ //$NON-NLS-2$
 			 "name", ":mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (sourceEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (languageEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getLanguage_Type(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.w3.org/2001/XMLSchema-instance" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (relationEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (coverageEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (rightsEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (dcTypeEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getDCType_Mixed(), 
 		   source, 
 		   new String[] {
 			 "kind", "elementWildcard", //$NON-NLS-1$ //$NON-NLS-2$
 			 "name", ":mixed" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getLocalizedDCType_Lang(), 
 		   source, 
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCTypeImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCTypeImpl.java
index dc70c45..9d67dff 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCTypeImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DCTypeImpl.java
@@ -28,11 +28,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.DCTypeImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.DCTypeImpl#getMixed <em>Mixed</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DateImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DateImpl.java
index bfc67ab..c962cfe 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DateImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DateImpl.java
@@ -21,10 +21,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.DateImpl#getEvent <em>Event</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DescriptionImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DescriptionImpl.java
index 3d164c5..ae2c87d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DescriptionImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/DescriptionImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Description</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/FormatImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/FormatImpl.java
index 41a3621..bab1465 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/FormatImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/FormatImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Format</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/IdentifierImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/IdentifierImpl.java
index f4e562c..a939cb3 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/IdentifierImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/IdentifierImpl.java
@@ -28,12 +28,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.IdentifierImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.IdentifierImpl#getScheme <em>Scheme</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.IdentifierImpl#getMixed <em>Mixed</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LanguageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LanguageImpl.java
index 8473c89..b117f55 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LanguageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LanguageImpl.java
@@ -21,10 +21,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.LanguageImpl#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LocalizedDCTypeImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LocalizedDCTypeImpl.java
index 8b35af1..dbfb579 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LocalizedDCTypeImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/LocalizedDCTypeImpl.java
@@ -21,10 +21,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.dc.impl.LocalizedDCTypeImpl#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/PublisherImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/PublisherImpl.java
index d49a170..8fe3711 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/PublisherImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/PublisherImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Publisher</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RelationImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RelationImpl.java
index a019258..216517c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RelationImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RelationImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Relation</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RightsImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RightsImpl.java
index 4e5c92c..257c1c4 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RightsImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/RightsImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Rights</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SourceImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SourceImpl.java
index c4bb8e0..5adbf2c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SourceImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SourceImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Source</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SubjectImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SubjectImpl.java
index 9026568..d3c6e7d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SubjectImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/SubjectImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Subject</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TitleImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TitleImpl.java
index 3114c8d..95d95d0 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TitleImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TitleImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Title</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TypeImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TypeImpl.java
index 680ae1d..2a5356a 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TypeImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/impl/TypeImpl.java
@@ -15,8 +15,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Type</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/util/DCSwitch.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/util/DCSwitch.java
index ade8ec7..49b9069 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/util/DCSwitch.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/dc/util/DCSwitch.java
@@ -11,6 +11,8 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
 import org.eclipse.mylyn.docs.epub.dc.*;
 
 /**
@@ -26,7 +28,7 @@
  * @see org.eclipse.mylyn.docs.epub.dc.DCPackage
  * @generated
  */
-public class DCSwitch<T> {
+public class DCSwitch<T> extends Switch<T> {
 	/**
 	 * The cached model package
 	 * <!-- begin-user-doc -->
@@ -48,14 +50,16 @@
 	}
 
 	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
-	public T doSwitch(EObject theEObject) {
-		return doSwitch(theEObject.eClass(), theEObject);
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
 	}
 
 	/**
@@ -65,26 +69,7 @@
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
-	protected T doSwitch(EClass theEClass, EObject theEObject) {
-		if (theEClass.eContainer() == modelPackage) {
-			return doSwitch(theEClass.getClassifierID(), theEObject);
-		}
-		else {
-			List<EClass> eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch(eSuperTypes.get(0), theEObject);
-		}
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
+	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
 			case DCPackage.TITLE: {
@@ -484,6 +469,7 @@
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
 	 * @generated
 	 */
+	@Override
 	public T defaultCase(EObject object) {
 		return null;
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Audio.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Audio.java
index 37c4221..f8084fb 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Audio.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Audio.java
@@ -15,6 +15,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Audio#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Audio#getClipBegin <em>Clip Begin</em>}</li>
@@ -22,7 +23,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Audio#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Audio#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getAudio()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/BookStruct.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/BookStruct.java
index ae1ded2..cc87981 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/BookStruct.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/BookStruct.java
@@ -226,6 +226,8 @@
 	 * Returns the '<em><b>Book Struct</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BookStruct get(String literal) {
@@ -242,6 +244,8 @@
 	 * Returns the '<em><b>Book Struct</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BookStruct getByName(String name) {
@@ -258,6 +262,8 @@
 	 * Returns the '<em><b>Book Struct</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static BookStruct get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Content.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Content.java
index 91c77bb..3246bdd 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Content.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Content.java
@@ -15,11 +15,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Content#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Content#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getContent()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DefaultState.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DefaultState.java
index 917a347..305de0b 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DefaultState.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DefaultState.java
@@ -96,6 +96,8 @@
 	 * Returns the '<em><b>Default State</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DefaultState get(String literal) {
@@ -112,6 +114,8 @@
 	 * Returns the '<em><b>Default State</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DefaultState getByName(String name) {
@@ -128,6 +132,8 @@
 	 * Returns the '<em><b>Default State</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DefaultState get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DirType.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DirType.java
index e381eef..7fd8ecb 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DirType.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DirType.java
@@ -96,6 +96,8 @@
 	 * Returns the '<em><b>Dir Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DirType get(String literal) {
@@ -112,6 +114,8 @@
 	 * Returns the '<em><b>Dir Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DirType getByName(String name) {
@@ -128,6 +132,8 @@
 	 * Returns the '<em><b>Dir Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static DirType get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocAuthor.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocAuthor.java
index 670abb2..b1141e3 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocAuthor.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocAuthor.java
@@ -15,6 +15,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocAuthor#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocAuthor#getAudio <em>Audio</em>}</li>
@@ -23,7 +24,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocAuthor#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocAuthor#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getDocAuthor()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocTitle.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocTitle.java
index a5ac99b..81141d4 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocTitle.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/DocTitle.java
@@ -15,6 +15,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocTitle#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocTitle#getAudio <em>Audio</em>}</li>
@@ -23,7 +24,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocTitle#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.DocTitle#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getDocTitle()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Head.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Head.java
index 8905fec..259ff74 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Head.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Head.java
@@ -19,12 +19,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Head#getGroups <em>Groups</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Head#getSmilCustomTests <em>Smil Custom Tests</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Head#getMetas <em>Metas</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getHead()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Img.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Img.java
index 0adc853..828a318 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Img.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Img.java
@@ -15,12 +15,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Img#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Img#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Img#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getImg()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Meta.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Meta.java
index 849da7c..3af7b33 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Meta.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Meta.java
@@ -15,12 +15,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Meta#getContent <em>Content</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Meta#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Meta#getScheme <em>Scheme</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getMeta()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavInfo.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavInfo.java
index bac6da3..808dc35 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavInfo.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavInfo.java
@@ -15,6 +15,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavInfo#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavInfo#getAudio <em>Audio</em>}</li>
@@ -22,7 +23,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavInfo#getDir <em>Dir</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavInfo#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavInfo()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavLabel.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavLabel.java
index 4360071..bfdaac7 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavLabel.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavLabel.java
@@ -15,6 +15,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavLabel#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavLabel#getAudio <em>Audio</em>}</li>
@@ -22,7 +23,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavLabel#getDir <em>Dir</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavLabel#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavLabel()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavList.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavList.java
index c862a04..d80c3eb 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavList.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavList.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavList#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavList#getNavLabels <em>Nav Labels</em>}</li>
@@ -24,7 +25,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavList#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavList#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavList()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavMap.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavMap.java
index 7575bc8..725cb2c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavMap.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavMap.java
@@ -17,13 +17,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavMap#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavMap#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavMap#getNavPoints <em>Nav Points</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavMap#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavMap()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavPoint.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavPoint.java
index 74ccee1..40c241d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavPoint.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavPoint.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavPoint#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavPoint#getContent <em>Content</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavPoint#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavPoint#getPlayOrder <em>Play Order</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavPoint()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavTarget.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavTarget.java
index 478d079..2729876 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavTarget.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/NavTarget.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavTarget#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavTarget#getContent <em>Content</em>}</li>
@@ -25,7 +26,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavTarget#getPlayOrder <em>Play Order</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.NavTarget#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNavTarget()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Ncx.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Ncx.java
index 08f0a0d..2fb5404 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Ncx.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Ncx.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Ncx#getHead <em>Head</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Ncx#getDocTitle <em>Doc Title</em>}</li>
@@ -28,7 +29,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Ncx#getLang <em>Lang</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Ncx#getVersion <em>Version</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getNcx()
  * @model extendedMetaData="name='ncx'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/OverrideType.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/OverrideType.java
index 51906f9..2e032b8 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/OverrideType.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/OverrideType.java
@@ -96,6 +96,8 @@
 	 * Returns the '<em><b>Override Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static OverrideType get(String literal) {
@@ -112,6 +114,8 @@
 	 * Returns the '<em><b>Override Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static OverrideType getByName(String name) {
@@ -128,6 +132,8 @@
 	 * Returns the '<em><b>Override Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static OverrideType get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageList.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageList.java
index 18052a8..e35c2af 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageList.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageList.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageList#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageList#getNavLabels <em>Nav Labels</em>}</li>
@@ -24,7 +25,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageList#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageList#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getPageList()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageTarget.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageTarget.java
index 0fd33cf..317f28c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageTarget.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/PageTarget.java
@@ -17,6 +17,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageTarget#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageTarget#getContent <em>Content</em>}</li>
@@ -26,7 +27,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageTarget#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.PageTarget#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getPageTarget()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/SmilCustomTest.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/SmilCustomTest.java
index 113d74a..ecd40c7 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/SmilCustomTest.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/SmilCustomTest.java
@@ -15,13 +15,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.SmilCustomTest#getBookStruct <em>Book Struct</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.SmilCustomTest#getDefaultState <em>Default State</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.SmilCustomTest#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.SmilCustomTest#getOverride <em>Override</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getSmilCustomTest()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Text.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Text.java
index 3b188f4..1fe6b94 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Text.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Text.java
@@ -17,12 +17,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Text#getMixed <em>Mixed</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Text#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.Text#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage#getText()
  * @model extendedMetaData="kind='mixed'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Type.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Type.java
index d100149..f5a233e 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Type.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/Type.java
@@ -122,6 +122,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type get(String literal) {
@@ -138,6 +140,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type getByName(String name) {
@@ -154,6 +158,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/AudioImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/AudioImpl.java
index 4d4652f..931bbe7 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/AudioImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/AudioImpl.java
@@ -22,6 +22,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.AudioImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.AudioImpl#getClipBegin <em>Clip Begin</em>}</li>
@@ -29,7 +30,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.AudioImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.AudioImpl#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ContentImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ContentImpl.java
index 8777f2d..95378e6 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ContentImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ContentImpl.java
@@ -22,11 +22,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.ContentImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.ContentImpl#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocAuthorImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocAuthorImpl.java
index b1ad3ae..31c6e9d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocAuthorImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocAuthorImpl.java
@@ -28,6 +28,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocAuthorImpl#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocAuthorImpl#getAudio <em>Audio</em>}</li>
@@ -36,7 +37,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocAuthorImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocAuthorImpl#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocTitleImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocTitleImpl.java
index 37e5d95..86de1c2 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocTitleImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/DocTitleImpl.java
@@ -28,6 +28,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocTitleImpl#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocTitleImpl#getAudio <em>Audio</em>}</li>
@@ -36,7 +37,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocTitleImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.DocTitleImpl#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/HeadImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/HeadImpl.java
index e404ed3..d6fc1e6 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/HeadImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/HeadImpl.java
@@ -32,12 +32,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.HeadImpl#getGroups <em>Groups</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.HeadImpl#getSmilCustomTests <em>Smil Custom Tests</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.HeadImpl#getMetas <em>Metas</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ImgImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ImgImpl.java
index 7ab2aa0..6a69e23 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ImgImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/ImgImpl.java
@@ -22,12 +22,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.ImgImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.ImgImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.ImgImpl#getSrc <em>Src</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/MetaImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/MetaImpl.java
index 72ddd82..f5b5b87 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/MetaImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/MetaImpl.java
@@ -22,12 +22,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.MetaImpl#getContent <em>Content</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.MetaImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.MetaImpl#getScheme <em>Scheme</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXFactoryImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXFactoryImpl.java
index 530d202..7e539c1 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXFactoryImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXFactoryImpl.java
@@ -37,7 +37,7 @@
 	 */
 	public static NCXFactory init() {
 		try {
-			NCXFactory theNCXFactory = (NCXFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.daisy.org/z3986/2005/ncx/"); 
+			NCXFactory theNCXFactory = (NCXFactory)EPackage.Registry.INSTANCE.getEFactory(NCXPackage.eNS_URI);
 			if (theNCXFactory != null) {
 				return theNCXFactory;
 			}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXPackageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXPackageImpl.java
index 468d815..7b8645a 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXPackageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NCXPackageImpl.java
@@ -1772,76 +1772,76 @@
 	 * @generated
 	 */
 	protected void createExtendedMetaDataAnnotations() {
-		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";		
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";	
 		addAnnotation
 		  (getAudio_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getAudio_ClipBegin(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "clipBegin"
-		   });		
+		   });	
 		addAnnotation
 		  (getAudio_ClipEnd(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "clipEnd"
-		   });		
+		   });	
 		addAnnotation
 		  (getAudio_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getAudio_Src(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "src"
-		   });		
+		   });	
 		addAnnotation
 		  (bookStructEEnum, 
 		   source, 
 		   new String[] {
 			 "name", "bookStruct_._type"
-		   });		
+		   });	
 		addAnnotation
 		  (bookStructObjectEDataType, 
 		   source, 
 		   new String[] {
 			 "name", "bookStruct_._type:Object",
 			 "baseType", "bookStruct_._type"
-		   });		
+		   });	
 		addAnnotation
 		  (getContent_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getContent_Src(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "src"
-		   });		
+		   });	
 		addAnnotation
 		  (defaultStateObjectEDataType, 
 		   source, 
 		   new String[] {
 			 "name", "defaultState_._type:Object",
 			 "baseType", "defaultState_._type"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Text(), 
 		   source, 
@@ -1849,7 +1849,7 @@
 			 "kind", "element",
 			 "name", "text",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Audio(), 
 		   source, 
@@ -1857,7 +1857,7 @@
 			 "kind", "element",
 			 "name", "audio",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Img(), 
 		   source, 
@@ -1865,21 +1865,21 @@
 			 "kind", "element",
 			 "name", "img",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Dir(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "dir"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocAuthor_Lang(), 
 		   source, 
@@ -1887,7 +1887,7 @@
 			 "kind", "attribute",
 			 "name", "lang",
 			 "namespace", "http://www.w3.org/XML/1998/namespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Text(), 
 		   source, 
@@ -1895,7 +1895,7 @@
 			 "kind", "element",
 			 "name", "text",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Audio(), 
 		   source, 
@@ -1903,7 +1903,7 @@
 			 "kind", "element",
 			 "name", "audio",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Img(), 
 		   source, 
@@ -1911,21 +1911,21 @@
 			 "kind", "element",
 			 "name", "img",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Dir(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "dir"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getDocTitle_Lang(), 
 		   source, 
@@ -1933,14 +1933,14 @@
 			 "kind", "attribute",
 			 "name", "lang",
 			 "namespace", "http://www.w3.org/XML/1998/namespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getHead_Groups(), 
 		   source, 
 		   new String[] {
 			 "kind", "group",
 			 "name", "group:0"
-		   });		
+		   });	
 		addAnnotation
 		  (getHead_SmilCustomTests(), 
 		   source, 
@@ -1949,7 +1949,7 @@
 			 "name", "smilCustomTest",
 			 "namespace", "##targetNamespace",
 			 "group", "#group:0"
-		   });		
+		   });	
 		addAnnotation
 		  (getHead_Metas(), 
 		   source, 
@@ -1958,49 +1958,49 @@
 			 "name", "meta",
 			 "namespace", "##targetNamespace",
 			 "group", "#group:0"
-		   });		
+		   });	
 		addAnnotation
 		  (getImg_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getImg_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getImg_Src(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "src"
-		   });		
+		   });	
 		addAnnotation
 		  (getMeta_Content(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "content"
-		   });		
+		   });	
 		addAnnotation
 		  (getMeta_Name(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "name"
-		   });		
+		   });	
 		addAnnotation
 		  (getMeta_Scheme(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "scheme"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavInfo_Text(), 
 		   source, 
@@ -2008,7 +2008,7 @@
 			 "kind", "element",
 			 "name", "text",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavInfo_Audio(), 
 		   source, 
@@ -2016,7 +2016,7 @@
 			 "kind", "element",
 			 "name", "audio",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavInfo_Img(), 
 		   source, 
@@ -2024,14 +2024,14 @@
 			 "kind", "element",
 			 "name", "img",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavInfo_Dir(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "dir"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavInfo_Lang(), 
 		   source, 
@@ -2039,7 +2039,7 @@
 			 "kind", "attribute",
 			 "name", "lang",
 			 "namespace", "http://www.w3.org/XML/1998/namespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavLabel_Text(), 
 		   source, 
@@ -2047,7 +2047,7 @@
 			 "kind", "element",
 			 "name", "text",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavLabel_Audio(), 
 		   source, 
@@ -2055,7 +2055,7 @@
 			 "kind", "element",
 			 "name", "audio",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavLabel_Img(), 
 		   source, 
@@ -2063,14 +2063,14 @@
 			 "kind", "element",
 			 "name", "img",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavLabel_Dir(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "dir"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavLabel_Lang(), 
 		   source, 
@@ -2078,7 +2078,7 @@
 			 "kind", "attribute",
 			 "name", "lang",
 			 "namespace", "http://www.w3.org/XML/1998/namespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavList_NavInfos(), 
 		   source, 
@@ -2086,7 +2086,7 @@
 			 "kind", "element",
 			 "name", "navInfo",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavList_NavLabels(), 
 		   source, 
@@ -2094,7 +2094,7 @@
 			 "kind", "element",
 			 "name", "navLabel",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavList_NavTargets(), 
 		   source, 
@@ -2102,21 +2102,21 @@
 			 "kind", "element",
 			 "name", "navTarget",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavList_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavList_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavMap_NavInfos(), 
 		   source, 
@@ -2124,7 +2124,7 @@
 			 "kind", "element",
 			 "name", "navInfo",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavMap_NavLabels(), 
 		   source, 
@@ -2132,7 +2132,7 @@
 			 "kind", "element",
 			 "name", "navLabel",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavMap_NavPoints(), 
 		   source, 
@@ -2140,21 +2140,21 @@
 			 "kind", "element",
 			 "name", "navPoint",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavMap_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_NavLabels(), 
 		   source, 
 		   new String[] {
 			 "name", "navLabel",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_Content(), 
 		   source, 
@@ -2162,7 +2162,7 @@
 			 "kind", "element",
 			 "name", "content",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_NavPoints(), 
 		   source, 
@@ -2170,28 +2170,28 @@
 			 "kind", "element",
 			 "name", "navPoint",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavPoint_PlayOrder(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "playOrder"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_NavLabels(), 
 		   source, 
@@ -2199,7 +2199,7 @@
 			 "kind", "element",
 			 "name", "navLabel",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_Content(), 
 		   source, 
@@ -2207,41 +2207,41 @@
 			 "kind", "element",
 			 "name", "content",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_PlayOrder(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "playOrder"
-		   });		
+		   });	
 		addAnnotation
 		  (getNavTarget_Value(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "value"
-		   });		
+		   });	
 		addAnnotation
 		  (ncxEClass, 
 		   source, 
 		   new String[] {
 			 "name", "ncx"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_Head(), 
 		   source, 
@@ -2249,7 +2249,7 @@
 			 "kind", "element",
 			 "name", "head",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_DocTitle(), 
 		   source, 
@@ -2257,7 +2257,7 @@
 			 "kind", "element",
 			 "name", "docTitle",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_DocAuthors(), 
 		   source, 
@@ -2265,7 +2265,7 @@
 			 "kind", "element",
 			 "name", "docAuthor",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_NavMap(), 
 		   source, 
@@ -2273,7 +2273,7 @@
 			 "kind", "element",
 			 "name", "navMap",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_PageList(), 
 		   source, 
@@ -2281,7 +2281,7 @@
 			 "kind", "element",
 			 "name", "pageList",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_NavLists(), 
 		   source, 
@@ -2289,14 +2289,14 @@
 			 "kind", "element",
 			 "name", "navList",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_Dir(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "dir"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_Lang(), 
 		   source, 
@@ -2304,14 +2304,14 @@
 			 "kind", "attribute",
 			 "name", "lang",
 			 "namespace", "http://www.w3.org/XML/1998/namespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getNcx_Version(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "version"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageList_NavInfos(), 
 		   source, 
@@ -2319,7 +2319,7 @@
 			 "kind", "element",
 			 "name", "navInfo",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageList_NavLabels(), 
 		   source, 
@@ -2327,7 +2327,7 @@
 			 "kind", "element",
 			 "name", "navLabel",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageList_PageTargets(), 
 		   source, 
@@ -2335,74 +2335,74 @@
 			 "kind", "element",
 			 "name", "pageTarget",
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageList_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageList_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageTarget_NavLabels(), 
 		   source, 
 		   new String[] {
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (getPageTarget_Content(), 
 		   source, 
 		   new String[] {
 			 "namespace", "##targetNamespace"
-		   });		
+		   });	
 		addAnnotation
 		  (smiLtimeValEDataType, 
 		   source, 
 		   new String[] {
 			 "name", "SMILtimeVal",
 			 "baseType", "http://www.eclipse.org/emf/2003/XMLType#string"
-		   });		
+		   });	
 		addAnnotation
 		  (textEClass, 
 		   source, 
 		   new String[] {
 			 "kind", "mixed"
-		   });		
+		   });	
 		addAnnotation
 		  (getText_Mixed(), 
 		   source, 
 		   new String[] {
 			 "kind", "elementWildcard",
 			 "name", ":mixed"
-		   });		
+		   });	
 		addAnnotation
 		  (getText_Class(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "class"
-		   });		
+		   });	
 		addAnnotation
 		  (getText_Id(), 
 		   source, 
 		   new String[] {
 			 "kind", "attribute",
 			 "name", "id"
-		   });		
+		   });	
 		addAnnotation
 		  (uriEDataType, 
 		   source, 
 		   new String[] {
 			 "name", "URI",
 			 "baseType", "http://www.eclipse.org/emf/2003/XMLType#string"
-		   });		
+		   });	
 		addAnnotation
 		  (versionObjectEDataType, 
 		   source, 
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavInfoImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavInfoImpl.java
index b570963..572673d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavInfoImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavInfoImpl.java
@@ -28,6 +28,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavInfoImpl#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavInfoImpl#getAudio <em>Audio</em>}</li>
@@ -35,7 +36,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavInfoImpl#getDir <em>Dir</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavInfoImpl#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavLabelImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavLabelImpl.java
index 44e0f6c..bda8293 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavLabelImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavLabelImpl.java
@@ -28,6 +28,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavLabelImpl#getText <em>Text</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavLabelImpl#getAudio <em>Audio</em>}</li>
@@ -35,7 +36,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavLabelImpl#getDir <em>Dir</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavLabelImpl#getLang <em>Lang</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavListImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavListImpl.java
index 4a74ef4..5c81343 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavListImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavListImpl.java
@@ -34,6 +34,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavListImpl#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavListImpl#getNavLabels <em>Nav Labels</em>}</li>
@@ -41,7 +42,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavListImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavListImpl#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavMapImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavMapImpl.java
index c7f219a..944ef47 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavMapImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavMapImpl.java
@@ -34,13 +34,13 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavMapImpl#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavMapImpl#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavMapImpl#getNavPoints <em>Nav Points</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavMapImpl#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavPointImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavPointImpl.java
index dd16c9a..a3afe71 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavPointImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavPointImpl.java
@@ -33,6 +33,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavPointImpl#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavPointImpl#getContent <em>Content</em>}</li>
@@ -41,7 +42,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavPointImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavPointImpl#getPlayOrder <em>Play Order</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavTargetImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavTargetImpl.java
index ef5ef0f..e88bdbc 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavTargetImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NavTargetImpl.java
@@ -33,6 +33,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavTargetImpl#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavTargetImpl#getContent <em>Content</em>}</li>
@@ -41,7 +42,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavTargetImpl#getPlayOrder <em>Play Order</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NavTargetImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NcxImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NcxImpl.java
index 0b78475..3cf8078 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NcxImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/NcxImpl.java
@@ -38,6 +38,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NcxImpl#getHead <em>Head</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NcxImpl#getDocTitle <em>Doc Title</em>}</li>
@@ -49,7 +50,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NcxImpl#getLang <em>Lang</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.NcxImpl#getVersion <em>Version</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageListImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageListImpl.java
index 8b1cab2..5f22033 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageListImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageListImpl.java
@@ -34,6 +34,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageListImpl#getNavInfos <em>Nav Infos</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageListImpl#getNavLabels <em>Nav Labels</em>}</li>
@@ -41,7 +42,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageListImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageListImpl#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageTargetImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageTargetImpl.java
index 4f9f89e..2f00428 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageTargetImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/PageTargetImpl.java
@@ -34,6 +34,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageTargetImpl#getNavLabels <em>Nav Labels</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageTargetImpl#getContent <em>Content</em>}</li>
@@ -43,7 +44,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageTargetImpl#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.PageTargetImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/SmilCustomTestImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/SmilCustomTestImpl.java
index efd4e80..80a5e44 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/SmilCustomTestImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/SmilCustomTestImpl.java
@@ -25,13 +25,13 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.SmilCustomTestImpl#getBookStruct <em>Book Struct</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.SmilCustomTestImpl#getDefaultState <em>Default State</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.SmilCustomTestImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.SmilCustomTestImpl#getOverride <em>Override</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/TextImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/TextImpl.java
index 2591071..4ac0fed 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/TextImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/impl/TextImpl.java
@@ -28,12 +28,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.TextImpl#getMixed <em>Mixed</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.TextImpl#getClass_ <em>Class</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ncx.impl.TextImpl#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/util/NCXSwitch.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/util/NCXSwitch.java
index aa3569d..51009a9 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/util/NCXSwitch.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ncx/util/NCXSwitch.java
@@ -11,6 +11,8 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
 import org.eclipse.mylyn.docs.epub.ncx.*;
 
 /**
@@ -26,7 +28,7 @@
  * @see org.eclipse.mylyn.docs.epub.ncx.NCXPackage
  * @generated
  */
-public class NCXSwitch<T> {
+public class NCXSwitch<T> extends Switch<T> {
 	/**
 	 * The cached model package
 	 * <!-- begin-user-doc -->
@@ -48,14 +50,16 @@
 	}
 
 	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
-	public T doSwitch(EObject theEObject) {
-		return doSwitch(theEObject.eClass(), theEObject);
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
 	}
 
 	/**
@@ -65,26 +69,7 @@
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
-	protected T doSwitch(EClass theEClass, EObject theEObject) {
-		if (theEClass.eContainer() == modelPackage) {
-			return doSwitch(theEClass.getClassifierID(), theEObject);
-		}
-		else {
-			List<EClass> eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch(eSuperTypes.get(0), theEObject);
-		}
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
+	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
 			case NCXPackage.AUDIO: {
@@ -480,6 +465,7 @@
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
 	 * @generated
 	 */
+	@Override
 	public T defaultCase(EObject object) {
 		return null;
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/Container.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/Container.java
index 7d1328d..259783f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/Container.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/Container.java
@@ -15,11 +15,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.Container#getRootfiles <em>Rootfiles</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.Container#getVersion <em>Version</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ocf.OCFPackage#getContainer()
  * @model extendedMetaData="name='container' namespace='urn:oasis:names:tc:opendocument:xmlns:container'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFile.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFile.java
index e1ad6b5..e465111 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFile.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFile.java
@@ -15,12 +15,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.RootFile#getFullPath <em>Full Path</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.RootFile#getMediaType <em>Media Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.RootFile#getPublication <em>Publication</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ocf.OCFPackage#getRootFile()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFiles.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFiles.java
index 0c24ce1..7b01327 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFiles.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/RootFiles.java
@@ -17,10 +17,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.RootFiles#getRootfiles <em>Rootfiles</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.ocf.OCFPackage#getRootFiles()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/ContainerImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/ContainerImpl.java
index c41f6f5..97732bf 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/ContainerImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/ContainerImpl.java
@@ -25,11 +25,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.ContainerImpl#getRootfiles <em>Rootfiles</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.ContainerImpl#getVersion <em>Version</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFFactoryImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFFactoryImpl.java
index 3291290..be1911d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFFactoryImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFFactoryImpl.java
@@ -31,7 +31,7 @@
 	 */
 	public static OCFFactory init() {
 		try {
-			OCFFactory theOCFFactory = (OCFFactory)EPackage.Registry.INSTANCE.getEFactory("urn:oasis:names:tc:opendocument:xmlns:container"); 
+			OCFFactory theOCFFactory = (OCFFactory)EPackage.Registry.INSTANCE.getEFactory(OCFPackage.eNS_URI);
 			if (theOCFFactory != null) {
 				return theOCFFactory;
 			}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFPackageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFPackageImpl.java
index 9a3857e..bce792f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFPackageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/OCFPackageImpl.java
@@ -286,34 +286,34 @@
 	 * @generated
 	 */
 	protected void createExtendedMetaDataAnnotations() {
-		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";		
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";	
 		addAnnotation
 		  (containerEClass, 
 		   source, 
 		   new String[] {
 			 "name", "container",
 			 "namespace", "urn:oasis:names:tc:opendocument:xmlns:container"
-		   });		
+		   });	
 		addAnnotation
 		  (getContainer_Rootfiles(), 
 		   source, 
 		   new String[] {
 			 "name", "rootfiles",
 			 "namespace", "urn:oasis:names:tc:opendocument:xmlns:container"
-		   });		
+		   });	
 		addAnnotation
 		  (getRootFiles_Rootfiles(), 
 		   source, 
 		   new String[] {
 			 "name", "rootfile",
 			 "namespace", "urn:oasis:names:tc:opendocument:xmlns:container"
-		   });		
+		   });	
 		addAnnotation
 		  (getRootFile_FullPath(), 
 		   source, 
 		   new String[] {
 			 "name", "full-path"
-		   });		
+		   });	
 		addAnnotation
 		  (getRootFile_MediaType(), 
 		   source, 
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFileImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFileImpl.java
index 82a37ee..e7c7fa3 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFileImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFileImpl.java
@@ -22,12 +22,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.RootFileImpl#getFullPath <em>Full Path</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.RootFileImpl#getMediaType <em>Media Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.RootFileImpl#getPublication <em>Publication</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFilesImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFilesImpl.java
index 9d296ac..6d7085d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFilesImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/impl/RootFilesImpl.java
@@ -30,10 +30,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.ocf.impl.RootFilesImpl#getRootfiles <em>Rootfiles</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/util/OCFSwitch.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/util/OCFSwitch.java
index 8447ed4..fd1c84d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/util/OCFSwitch.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/ocf/util/OCFSwitch.java
@@ -11,6 +11,8 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
 import org.eclipse.mylyn.docs.epub.ocf.*;
 
 /**
@@ -26,7 +28,7 @@
  * @see org.eclipse.mylyn.docs.epub.ocf.OCFPackage
  * @generated
  */
-public class OCFSwitch<T> {
+public class OCFSwitch<T> extends Switch<T> {
 	/**
 	 * The cached model package
 	 * <!-- begin-user-doc -->
@@ -48,14 +50,16 @@
 	}
 
 	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
-	public T doSwitch(EObject theEObject) {
-		return doSwitch(theEObject.eClass(), theEObject);
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
 	}
 
 	/**
@@ -65,26 +69,7 @@
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
-	protected T doSwitch(EClass theEClass, EObject theEObject) {
-		if (theEClass.eContainer() == modelPackage) {
-			return doSwitch(theEClass.getClassifierID(), theEObject);
-		}
-		else {
-			List<EClass> eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch(eSuperTypes.get(0), theEObject);
-		}
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
+	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
 			case OCFPackage.CONTAINER: {
@@ -165,6 +150,7 @@
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
 	 * @generated
 	 */
+	@Override
 	public T defaultCase(EObject object) {
 		return null;
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Guide.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Guide.java
index c5b1729..a3b280b 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Guide.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Guide.java
@@ -17,10 +17,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Guide#getGuideItems <em>Guide Items</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getGuide()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Item.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Item.java
index e0441a0..a45209f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Item.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Item.java
@@ -9,12 +9,11 @@
 import org.eclipse.emf.ecore.EObject;
 
 /**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Item</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> A representation of the model object '<em><b>Item</b></em>'. <!-- end-user-doc -->
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getHref <em>Href</em>}</li>
@@ -28,8 +27,9 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getTitle <em>Title</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#isGenerated <em>Generated</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getSourcePath <em>Source Path</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getProperties <em>Properties</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Item#getMedia_overlay <em>Media overlay</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem()
  * @model
@@ -40,8 +40,7 @@
 	 * Returns the value of the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear, there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Id</em>' attribute.
@@ -53,10 +52,11 @@
 	String getId();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getId <em>Id</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Id</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getId <em>Id</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Id</em>' attribute.
 	 * @see #getId()
 	 * @generated
 	 */
@@ -66,8 +66,7 @@
 	 * Returns the value of the '<em><b>Href</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Href</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Href</em>' attribute isn't clear, there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Href</em>' attribute.
@@ -79,10 +78,11 @@
 	String getHref();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getHref <em>Href</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Href</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getHref <em>Href</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Href</em>' attribute.
 	 * @see #getHref()
 	 * @generated
 	 */
@@ -92,8 +92,8 @@
 	 * Returns the value of the '<em><b>Media type</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Media type</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Media type</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Media type</em>' attribute.
@@ -107,8 +107,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getMedia_type <em>Media type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Media type</em>' attribute.
 	 * @see #getMedia_type()
 	 * @generated
@@ -119,8 +118,8 @@
 	 * Returns the value of the '<em><b>Fallback</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Fallback</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Fallback</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Fallback</em>' attribute.
@@ -133,8 +132,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFallback <em>Fallback</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Fallback</em>' attribute.
 	 * @see #getFallback()
 	 * @generated
@@ -145,8 +143,8 @@
 	 * Returns the value of the '<em><b>Fallback style</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Fallback style</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Fallback style</em>' attribute isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Fallback style</em>' attribute.
@@ -159,8 +157,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFallback_style <em>Fallback style</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Fallback style</em>' attribute.
 	 * @see #getFallback_style()
 	 * @generated
@@ -171,8 +168,8 @@
 	 * Returns the value of the '<em><b>Required namespace</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Required namespace</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Required namespace</em>' attribute isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Required namespace</em>' attribute.
@@ -185,8 +182,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getRequired_namespace <em>Required namespace</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Required namespace</em>' attribute.
 	 * @see #getRequired_namespace()
 	 * @generated
@@ -197,8 +193,8 @@
 	 * Returns the value of the '<em><b>Required modules</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Required modules</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Required modules</em>' attribute isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Required modules</em>' attribute.
@@ -211,8 +207,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getRequired_modules <em>Required modules</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Required modules</em>' attribute.
 	 * @see #getRequired_modules()
 	 * @generated
@@ -220,13 +215,12 @@
 	void setRequired_modules(String value);
 
 	/**
-	 * Returns the value of the '<em><b>File</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>File</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>File</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>File</em>' attribute isn't clear, there really should be more of a description here...
 	 * </p>
-	 * <!-- end-user-doc -->
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> Used by the tooling, is not serialized. <!-- end-model-doc -->
+	 *
 	 * @return the value of the '<em>File</em>' attribute.
 	 * @see #setFile(String)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_File()
@@ -236,23 +230,24 @@
 	String getFile();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFile <em>File</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>File</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFile <em>File</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>File</em>' attribute.
 	 * @see #getFile()
 	 * @generated
 	 */
 	void setFile(String value);
 
 	/**
-	 * Returns the value of the '<em><b>No Toc</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>No Toc</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>No Toc</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>No Toc</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
-	 * <!-- end-user-doc -->
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> Used by the tooling, is not serialized. <!-- end-model-doc -->
+	 *
 	 * @return the value of the '<em>No Toc</em>' attribute.
 	 * @see #setNoToc(boolean)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_NoToc()
@@ -262,23 +257,24 @@
 	boolean isNoToc();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#isNoToc <em>No Toc</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>No Toc</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#isNoToc <em>No Toc</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>No Toc</em>' attribute.
 	 * @see #isNoToc()
 	 * @generated
 	 */
 	void setNoToc(boolean value);
 
 	/**
-	 * Returns the value of the '<em><b>Title</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Title</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Title</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Title</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
-	 * <!-- end-user-doc -->
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> Used by the tooling, is not serialized. <!-- end-model-doc -->
+	 *
 	 * @return the value of the '<em>Title</em>' attribute.
 	 * @see #setTitle(String)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_Title()
@@ -288,23 +284,24 @@
 	String getTitle();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getTitle <em>Title</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Title</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getTitle <em>Title</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Title</em>' attribute.
 	 * @see #getTitle()
 	 * @generated
 	 */
 	void setTitle(String value);
 
 	/**
-	 * Returns the value of the '<em><b>Generated</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Generated</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Generated</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Generated</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
-	 * <!-- end-user-doc -->
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> Used by the tooling, is not serialized. <!-- end-model-doc -->
+	 *
 	 * @return the value of the '<em>Generated</em>' attribute.
 	 * @see #setGenerated(boolean)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_Generated()
@@ -315,9 +312,8 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#isGenerated <em>Generated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * Indicates that the item has been generated by the EPUB tools. This applies for instance to the cover page HTML code.
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> Indicates that the item has been generated by the EPUB tools. This applies for instance
+	 * to the cover page HTML code. <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Generated</em>' attribute.
 	 * @see #isGenerated()
 	 * @generated
@@ -325,13 +321,13 @@
 	void setGenerated(boolean value);
 
 	/**
-	 * Returns the value of the '<em><b>Source Path</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Source Path</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Source Path</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Source Path</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
-	 * <!-- end-user-doc -->
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> Used by the tooling, is not serialized. <!-- end-model-doc -->
+	 *
 	 * @return the value of the '<em>Source Path</em>' attribute.
 	 * @see #setSourcePath(String)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_SourcePath()
@@ -342,12 +338,66 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getSourcePath <em>Source Path</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Source Path</em>' attribute.
 	 * @see #getSourcePath()
 	 * @generated
 	 */
 	void setSourcePath(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Properties</b></em>' attribute. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Properties</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> EPUB 3 -
+	 * http://www.idpf.org/epub/301/spec/epub-publications.html#sec-item-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Properties</em>' attribute.
+	 * @see #setProperties(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_Properties()
+	 * @model
+	 * @generated
+	 */
+	String getProperties();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getProperties <em>Properties</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Properties</em>' attribute.
+	 * @see #getProperties()
+	 * @generated
+	 */
+	void setProperties(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Media overlay</b></em>' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-item-elem
+	 * @since 3.0
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Media overlay</em>' attribute.
+	 * @see #setMedia_overlay(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItem_Media_overlay()
+	 * @model extendedMetaData="name='media-overlay' namespace='http://www.idpf.org/2007/opf'"
+	 * @generated
+	 */
+	String getMedia_overlay();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Item#getMedia_overlay <em>Media overlay</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Media overlay</em>' attribute.
+	 * @see #getMedia_overlay()
+	 * @generated
+	 */
+	void setMedia_overlay(String value);
+
 } // Item
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Itemref.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Itemref.java
index b6971af..c57e898 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Itemref.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Itemref.java
@@ -15,11 +15,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Itemref#getIdref <em>Idref</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Itemref#getLinear <em>Linear</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getItemref()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Manifest.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Manifest.java
index 876c117..5cd0e25 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Manifest.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Manifest.java
@@ -17,10 +17,10 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Manifest#getItems <em>Items</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getManifest()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Meta.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Meta.java
index 54b3064..ecf6d5f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Meta.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Meta.java
@@ -9,17 +9,19 @@
 import org.eclipse.emf.ecore.EObject;
 
 /**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Meta</b></em>'.
- * <!-- end-user-doc -->
- *
+ * <!-- begin-user-doc --> A representation of the model object '<em><b>Meta</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getContent <em>Content</em>}</li>
- * </ul>
  * </p>
+ * <ul>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getContent <em>Content</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getProperty <em>Property</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getRefines <em>Refines</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getScheme <em>Scheme</em>}</li>
+ * <li>{@link org.eclipse.mylyn.docs.epub.opf.Meta#getDir <em>Dir</em>}</li>
+ * </ul>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta()
  * @model
@@ -27,55 +29,201 @@
  */
 public interface Meta extends EObject {
 	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Name</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear, there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 *
 	 * @return the value of the '<em>Name</em>' attribute.
 	 * @see #setName(String)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Name()
-	 * @model required="true"
+	 * @model
 	 * @generated
 	 */
 	String getName();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getName <em>Name</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Name</em>' attribute.
 	 * @see #getName()
 	 * @generated
 	 */
 	void setName(String value);
 
 	/**
-	 * Returns the value of the '<em><b>Content</b></em>' attribute.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Content</b></em>' attribute. <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Content</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Content</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 *
 	 * @return the value of the '<em>Content</em>' attribute.
 	 * @see #setContent(String)
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Content()
-	 * @model required="true"
+	 * @model
 	 * @generated
 	 */
 	String getContent();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getContent <em>Content</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Content</em>' attribute.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getContent <em>Content</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Content</em>' attribute.
 	 * @see #getContent()
 	 * @generated
 	 */
 	void setContent(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear, there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> EPUB 3 -
+	 * http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Id()
+	 * @model
+	 * @generated
+	 */
+	String getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getId <em>Id</em>}' attribute. <!--
+	 * begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value
+	 *            the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 */
+	void setId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Property</b></em>' attribute. The default value is <code>""</code>. <!--
+	 * begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Property</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> EPUB 3 -
+	 * http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Property</em>' attribute.
+	 * @see #setProperty(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Property()
+	 * @model default=""
+	 * @generated
+	 */
+	String getProperty();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getProperty <em>Property</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value
+	 *            the new value of the '<em>Property</em>' attribute.
+	 * @see #getProperty()
+	 * @generated
+	 */
+	void setProperty(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Refines</b></em>' attribute. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Refines</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> EPUB 3 -
+	 * http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Refines</em>' attribute.
+	 * @see #setRefines(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Refines()
+	 * @model
+	 * @generated
+	 */
+	String getRefines();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getRefines <em>Refines</em>}' attribute. <!--
+	 * begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value
+	 *            the new value of the '<em>Refines</em>' attribute.
+	 * @see #getRefines()
+	 * @generated
+	 */
+	void setRefines(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Scheme</b></em>' attribute. <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Scheme</em>' attribute isn't clear, there really should be more of a description
+	 * here...
+	 * </p>
+	 * <!-- end-user-doc --> <!-- begin-model-doc --> EPUB 3 -
+	 * http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Scheme</em>' attribute.
+	 * @see #setScheme(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Scheme()
+	 * @model
+	 * @generated
+	 */
+	String getScheme();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getScheme <em>Scheme</em>}' attribute. <!--
+	 * begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value
+	 *            the new value of the '<em>Scheme</em>' attribute.
+	 * @see #getScheme()
+	 * @generated
+	 */
+	void setScheme(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Dir</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> <!--
+	 * begin-model-doc --> EPUB 3 - http://www.idpf.org/epub/301/spec/epub-publications.html#sec-meta-elem
+	 *
+	 * @since 3.0 <!-- end-model-doc -->
+	 * @return the value of the '<em>Dir</em>' attribute.
+	 * @see #setDir(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMeta_Dir()
+	 * @model
+	 * @generated
+	 */
+	String getDir();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getDir <em>Dir</em>}' attribute. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @param value
+	 *            the new value of the '<em>Dir</em>' attribute.
+	 * @see #getDir()
+	 * @generated
+	 */
+	void setDir(String value);
+
 } // Meta
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Metadata.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Metadata.java
index f59047f..0b8d325 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Metadata.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Metadata.java
@@ -33,6 +33,7 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getTitles <em>Titles</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getCreators <em>Creators</em>}</li>
@@ -51,7 +52,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getRights <em>Rights</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getMetas <em>Metas</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getMetadata()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/OPFPackage.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/OPFPackage.java
index 9b3d97a..ba21bb6 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/OPFPackage.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/OPFPackage.java
@@ -13,14 +13,12 @@
 import org.eclipse.emf.ecore.EReference;
 
 /**
- * <!-- begin-user-doc -->
- * The <b>Package</b> for the model.
- * It contains accessors for the meta objects to represent
+ * <!-- begin-user-doc --> The <b>Package</b> for the model. It contains accessors for the meta objects to represent
  * <ul>
- *   <li>each class,</li>
- *   <li>each feature of each class,</li>
- *   <li>each enum,</li>
- *   <li>and each data type</li>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
  * </ul>
  * <!-- end-user-doc -->
  * @see org.eclipse.mylyn.docs.epub.opf.OPFFactory
@@ -30,40 +28,35 @@
 public interface OPFPackage extends EPackage {
 	/**
 	 * The package name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	String eNAME = "opf"; //$NON-NLS-1$
 
 	/**
 	 * The package namespace URI.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	String eNS_URI = "http://www.idpf.org/2007/opf"; //$NON-NLS-1$
 
 	/**
 	 * The package namespace name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	String eNS_PREFIX = "opf"; //$NON-NLS-1$
 
 	/**
 	 * The singleton instance of the package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	OPFPackage eINSTANCE = org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl.init();
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl <em>Package</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getPackage()
 	 * @generated
@@ -72,8 +65,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Metadata</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -81,26 +74,26 @@
 
 	/**
 	 * The feature id for the '<em><b>Manifest</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int PACKAGE__MANIFEST = 1;
 
 	/**
-	 * The feature id for the '<em><b>Spine</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Spine</b></em>' containment reference. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
 	int PACKAGE__SPINE = 2;
 
 	/**
-	 * The feature id for the '<em><b>Guide</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Guide</b></em>' containment reference. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
@@ -108,8 +101,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Tours</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -117,26 +109,25 @@
 
 	/**
 	 * The feature id for the '<em><b>Version</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int PACKAGE__VERSION = 5;
 
 	/**
-	 * The feature id for the '<em><b>Unique Identifier</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Unique Identifier</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
 	int PACKAGE__UNIQUE_IDENTIFIER = 6;
 
 	/**
-	 * The feature id for the '<em><b>Generate Cover HTML</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Generate Cover HTML</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
@@ -144,8 +135,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Generate Table Of Contents</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -153,26 +144,64 @@
 
 	/**
 	 * The feature id for the '<em><b>Include Referenced Resources</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int PACKAGE__INCLUDE_REFERENCED_RESOURCES = 9;
 
 	/**
-	 * The number of structural features of the '<em>Package</em>' class.
+	 * The feature id for the '<em><b>Prefix</b></em>' attribute.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PACKAGE_FEATURE_COUNT = 10;
+	int PACKAGE__PREFIX = 10;
+
+	/**
+	 * The feature id for the '<em><b>Lang</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE__LANG = 11;
+
+	/**
+	 * The feature id for the '<em><b>Dir</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE__DIR = 12;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE__ID = 13;
+
+	/**
+	 * The number of structural features of the '<em>Package</em>' class.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE_FEATURE_COUNT = 14;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl <em>Metadata</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getMetadata()
 	 * @generated
@@ -181,8 +210,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Titles</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -190,8 +219,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Creators</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -199,8 +228,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Subjects</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -208,8 +237,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Descriptions</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -217,8 +246,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Publishers</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -226,8 +255,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Contributors</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -235,8 +264,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Dates</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -244,8 +273,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Types</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -253,8 +282,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Formats</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -262,8 +291,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Identifiers</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -271,8 +300,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Sources</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -280,8 +309,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Languages</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -289,8 +318,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Relations</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -298,8 +327,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Coverages</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -307,8 +336,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Rights</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -316,8 +345,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Metas</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -325,8 +354,7 @@
 
 	/**
 	 * The number of structural features of the '<em>Metadata</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -334,8 +362,7 @@
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ManifestImpl <em>Manifest</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.ManifestImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getManifest()
 	 * @generated
@@ -344,8 +371,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Items</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -353,17 +380,16 @@
 
 	/**
 	 * The number of structural features of the '<em>Manifest</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int MANIFEST_FEATURE_COUNT = 1;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl <em>Item</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl <em>Item</em>}' class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getItem()
 	 * @generated
@@ -372,8 +398,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Id</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -381,8 +406,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Href</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -390,8 +414,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Media type</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -399,8 +422,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Fallback</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -408,26 +430,25 @@
 
 	/**
 	 * The feature id for the '<em><b>Fallback style</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int ITEM__FALLBACK_STYLE = 4;
 
 	/**
-	 * The feature id for the '<em><b>Required namespace</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Required namespace</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
 	int ITEM__REQUIRED_NAMESPACE = 5;
 
 	/**
-	 * The feature id for the '<em><b>Required modules</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The feature id for the '<em><b>Required modules</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
@@ -435,8 +456,7 @@
 
 	/**
 	 * The feature id for the '<em><b>File</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -444,8 +464,7 @@
 
 	/**
 	 * The feature id for the '<em><b>No Toc</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -453,8 +472,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Title</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -462,8 +480,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Generated</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -471,26 +488,44 @@
 
 	/**
 	 * The feature id for the '<em><b>Source Path</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int ITEM__SOURCE_PATH = 11;
 
 	/**
-	 * The number of structural features of the '<em>Item</em>' class.
+	 * The feature id for the '<em><b>Properties</b></em>' attribute.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ITEM_FEATURE_COUNT = 12;
+	int ITEM__PROPERTIES = 12;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl <em>Spine</em>}' class.
+	 * The feature id for the '<em><b>Media overlay</b></em>' attribute.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITEM__MEDIA_OVERLAY = 13;
+
+	/**
+	 * The number of structural features of the '<em>Item</em>' class.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITEM_FEATURE_COUNT = 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl <em>Spine</em>}' class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getSpine()
 	 * @generated
@@ -499,8 +534,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Spine Items</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -508,8 +543,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Toc</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -517,17 +551,16 @@
 
 	/**
 	 * The number of structural features of the '<em>Spine</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int SPINE_FEATURE_COUNT = 2;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl <em>Guide</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl <em>Guide</em>}' class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getGuide()
 	 * @generated
@@ -536,8 +569,8 @@
 
 	/**
 	 * The feature id for the '<em><b>Guide Items</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -545,8 +578,7 @@
 
 	/**
 	 * The number of structural features of the '<em>Guide</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -554,8 +586,7 @@
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl <em>Reference</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getReference()
 	 * @generated
@@ -564,8 +595,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -573,8 +603,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Title</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -582,17 +611,16 @@
 
 	/**
 	 * The feature id for the '<em><b>Href</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int REFERENCE__HREF = 2;
 
 	/**
-	 * The number of structural features of the '<em>Reference</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The number of structural features of the '<em>Reference</em>' class. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @generated
 	 * @ordered
 	 */
@@ -600,8 +628,7 @@
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl <em>Itemref</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getItemref()
 	 * @generated
@@ -610,8 +637,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Idref</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -619,8 +645,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Linear</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -628,17 +653,16 @@
 
 	/**
 	 * The number of structural features of the '<em>Itemref</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int ITEMREF_FEATURE_COUNT = 2;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ToursImpl <em>Tours</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ToursImpl <em>Tours</em>}' class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.ToursImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getTours()
 	 * @generated
@@ -647,17 +671,16 @@
 
 	/**
 	 * The number of structural features of the '<em>Tours</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int TOURS_FEATURE_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl <em>Meta</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl <em>Meta</em>}' class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getMeta()
 	 * @generated
@@ -666,8 +689,7 @@
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
@@ -675,26 +697,74 @@
 
 	/**
 	 * The feature id for the '<em><b>Content</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
 	int META__CONTENT = 1;
 
 	/**
-	 * The number of structural features of the '<em>Meta</em>' class.
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int META_FEATURE_COUNT = 2;
+	int META__ID = 2;
+
+	/**
+	 * The feature id for the '<em><b>Property</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META__PROPERTY = 3;
+
+	/**
+	 * The feature id for the '<em><b>Refines</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META__REFINES = 4;
+
+	/**
+	 * The feature id for the '<em><b>Scheme</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META__SCHEME = 5;
+
+	/**
+	 * The feature id for the '<em><b>Dir</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META__DIR = 6;
+
+	/**
+	 * The number of structural features of the '<em>Meta</em>' class.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META_FEATURE_COUNT = 7;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.Role <em>Role</em>}' enum.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.Role
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getRole()
 	 * @generated
@@ -703,19 +773,18 @@
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.mylyn.docs.epub.opf.Type <em>Type</em>}' enum.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
 	 * @see org.eclipse.mylyn.docs.epub.opf.Type
 	 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getType()
 	 * @generated
 	 */
 	int TYPE = 11;
 
-
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Package <em>Package</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Package <em>Package</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Package</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package
 	 * @generated
@@ -724,8 +793,7 @@
 
 	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.mylyn.docs.epub.opf.Package#getMetadata <em>Metadata</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the containment reference '<em>Metadata</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getMetadata()
 	 * @see #getPackage()
@@ -735,8 +803,7 @@
 
 	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.mylyn.docs.epub.opf.Package#getManifest <em>Manifest</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the containment reference '<em>Manifest</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getManifest()
 	 * @see #getPackage()
@@ -746,8 +813,7 @@
 
 	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.mylyn.docs.epub.opf.Package#getSpine <em>Spine</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the containment reference '<em>Spine</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getSpine()
 	 * @see #getPackage()
@@ -757,8 +823,7 @@
 
 	/**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.mylyn.docs.epub.opf.Package#getGuide <em>Guide</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the containment reference '<em>Guide</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getGuide()
 	 * @see #getPackage()
@@ -768,8 +833,7 @@
 
 	/**
 	 * Returns the meta object for the reference '{@link org.eclipse.mylyn.docs.epub.opf.Package#getTours <em>Tours</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the reference '<em>Tours</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getTours()
 	 * @see #getPackage()
@@ -779,8 +843,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getVersion <em>Version</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Version</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getVersion()
 	 * @see #getPackage()
@@ -790,8 +853,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getUniqueIdentifier <em>Unique Identifier</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Unique Identifier</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getUniqueIdentifier()
 	 * @see #getPackage()
@@ -801,8 +863,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateCoverHTML <em>Generate Cover HTML</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Generate Cover HTML</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#isGenerateCoverHTML()
 	 * @see #getPackage()
@@ -812,8 +873,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateTableOfContents <em>Generate Table Of Contents</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Generate Table Of Contents</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#isGenerateTableOfContents()
 	 * @see #getPackage()
@@ -823,8 +883,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#isIncludeReferencedResources <em>Include Referenced Resources</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Include Referenced Resources</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Package#isIncludeReferencedResources()
 	 * @see #getPackage()
@@ -833,9 +892,57 @@
 	EAttribute getPackage_IncludeReferencedResources();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Metadata <em>Metadata</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getPrefix <em>Prefix</em>}'.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Prefix</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getPrefix()
+	 * @see #getPackage()
+	 * @generated
+	 */
+	EAttribute getPackage_Prefix();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getLang <em>Lang</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Lang</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getLang()
+	 * @see #getPackage()
+	 * @generated
+	 */
+	EAttribute getPackage_Lang();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getDir <em>Dir</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Dir</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getDir()
+	 * @see #getPackage()
+	 * @generated
+	 */
+	EAttribute getPackage_Dir();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Package#getId <em>Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Package#getId()
+	 * @see #getPackage()
+	 * @generated
+	 */
+	EAttribute getPackage_Id();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Metadata <em>Metadata</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Metadata</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata
 	 * @generated
@@ -844,8 +951,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getTitles <em>Titles</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Titles</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getTitles()
 	 * @see #getMetadata()
@@ -855,8 +962,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getCreators <em>Creators</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Creators</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getCreators()
 	 * @see #getMetadata()
@@ -866,8 +973,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getSubjects <em>Subjects</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Subjects</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getSubjects()
 	 * @see #getMetadata()
@@ -888,8 +995,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getPublishers <em>Publishers</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Publishers</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getPublishers()
 	 * @see #getMetadata()
@@ -910,8 +1017,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getDates <em>Dates</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Dates</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getDates()
 	 * @see #getMetadata()
@@ -921,8 +1028,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getTypes <em>Types</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Types</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getTypes()
 	 * @see #getMetadata()
@@ -932,8 +1039,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getFormats <em>Formats</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Formats</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getFormats()
 	 * @see #getMetadata()
@@ -954,8 +1061,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getSources <em>Sources</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Sources</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getSources()
 	 * @see #getMetadata()
@@ -965,8 +1072,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getLanguages <em>Languages</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Languages</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getLanguages()
 	 * @see #getMetadata()
@@ -976,8 +1083,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getRelations <em>Relations</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Relations</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getRelations()
 	 * @see #getMetadata()
@@ -987,8 +1094,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getCoverages <em>Coverages</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Coverages</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getCoverages()
 	 * @see #getMetadata()
@@ -998,8 +1105,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getRights <em>Rights</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Rights</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getRights()
 	 * @see #getMetadata()
@@ -1009,8 +1116,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Metadata#getMetas <em>Metas</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Metas</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Metadata#getMetas()
 	 * @see #getMetadata()
@@ -1019,9 +1126,9 @@
 	EReference getMetadata_Metas();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Manifest <em>Manifest</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Manifest <em>Manifest</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Manifest</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Manifest
 	 * @generated
@@ -1030,8 +1137,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Manifest#getItems <em>Items</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Items</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Manifest#getItems()
 	 * @see #getManifest()
@@ -1040,9 +1147,9 @@
 	EReference getManifest_Items();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Item <em>Item</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Item <em>Item</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Item</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item
 	 * @generated
@@ -1050,9 +1157,9 @@
 	EClass getItem();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getId <em>Id</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getId <em>Id</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for the attribute '<em>Id</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getId()
 	 * @see #getItem()
@@ -1062,8 +1169,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getHref <em>Href</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Href</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getHref()
 	 * @see #getItem()
@@ -1073,8 +1179,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getMedia_type <em>Media type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Media type</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getMedia_type()
 	 * @see #getItem()
@@ -1084,8 +1189,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFallback <em>Fallback</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Fallback</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getFallback()
 	 * @see #getItem()
@@ -1095,8 +1199,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFallback_style <em>Fallback style</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Fallback style</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getFallback_style()
 	 * @see #getItem()
@@ -1106,8 +1209,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getRequired_namespace <em>Required namespace</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Required namespace</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getRequired_namespace()
 	 * @see #getItem()
@@ -1117,8 +1219,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getRequired_modules <em>Required modules</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Required modules</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getRequired_modules()
 	 * @see #getItem()
@@ -1128,8 +1229,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getFile <em>File</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>File</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getFile()
 	 * @see #getItem()
@@ -1139,8 +1239,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#isNoToc <em>No Toc</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>No Toc</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#isNoToc()
 	 * @see #getItem()
@@ -1150,8 +1249,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getTitle <em>Title</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Title</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getTitle()
 	 * @see #getItem()
@@ -1161,8 +1259,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#isGenerated <em>Generated</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Generated</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#isGenerated()
 	 * @see #getItem()
@@ -1172,8 +1269,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getSourcePath <em>Source Path</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Source Path</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getSourcePath()
 	 * @see #getItem()
@@ -1182,9 +1278,33 @@
 	EAttribute getItem_SourcePath();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Spine <em>Spine</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getProperties <em>Properties</em>}'.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Properties</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getProperties()
+	 * @see #getItem()
+	 * @generated
+	 */
+	EAttribute getItem_Properties();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Item#getMedia_overlay <em>Media overlay</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Media overlay</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Item#getMedia_overlay()
+	 * @see #getItem()
+	 * @generated
+	 */
+	EAttribute getItem_Media_overlay();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Spine <em>Spine</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Spine</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Spine
 	 * @generated
@@ -1193,8 +1313,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Spine#getSpineItems <em>Spine Items</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Spine Items</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Spine#getSpineItems()
 	 * @see #getSpine()
@@ -1204,8 +1324,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Spine#getToc <em>Toc</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Toc</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Spine#getToc()
 	 * @see #getSpine()
@@ -1214,9 +1333,9 @@
 	EAttribute getSpine_Toc();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Guide <em>Guide</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Guide <em>Guide</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Guide</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Guide
 	 * @generated
@@ -1225,8 +1344,8 @@
 
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.mylyn.docs.epub.opf.Guide#getGuideItems <em>Guide Items</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @return the meta object for the containment reference list '<em>Guide Items</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Guide#getGuideItems()
 	 * @see #getGuide()
@@ -1235,9 +1354,9 @@
 	EReference getGuide_GuideItems();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Reference <em>Reference</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Reference <em>Reference</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Reference</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Reference
 	 * @generated
@@ -1246,8 +1365,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Reference#getType <em>Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Type</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Reference#getType()
 	 * @see #getReference()
@@ -1257,8 +1375,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Reference#getTitle <em>Title</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Title</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Reference#getTitle()
 	 * @see #getReference()
@@ -1268,8 +1385,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Reference#getHref <em>Href</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Href</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Reference#getHref()
 	 * @see #getReference()
@@ -1278,9 +1394,9 @@
 	EAttribute getReference_Href();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Itemref <em>Itemref</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Itemref <em>Itemref</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Itemref</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Itemref
 	 * @generated
@@ -1289,8 +1405,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Itemref#getIdref <em>Idref</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Idref</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Itemref#getIdref()
 	 * @see #getItemref()
@@ -1300,8 +1415,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Itemref#getLinear <em>Linear</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Linear</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Itemref#getLinear()
 	 * @see #getItemref()
@@ -1310,9 +1424,9 @@
 	EAttribute getItemref_Linear();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Tours <em>Tours</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Tours <em>Tours</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Tours</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Tours
 	 * @generated
@@ -1320,9 +1434,9 @@
 	EClass getTours();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Meta <em>Meta</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for class '{@link org.eclipse.mylyn.docs.epub.opf.Meta <em>Meta</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for class '<em>Meta</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Meta
 	 * @generated
@@ -1331,8 +1445,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getName <em>Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Name</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getName()
 	 * @see #getMeta()
@@ -1342,8 +1455,7 @@
 
 	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getContent <em>Content</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the meta object for the attribute '<em>Content</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getContent()
 	 * @see #getMeta()
@@ -1352,9 +1464,69 @@
 	EAttribute getMeta_Content();
 
 	/**
-	 * Returns the meta object for enum '{@link org.eclipse.mylyn.docs.epub.opf.Role <em>Role</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getId <em>Id</em>}'.
 	 * <!-- begin-user-doc -->
+	 * @since 3.0
 	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getId()
+	 * @see #getMeta()
+	 * @generated
+	 */
+	EAttribute getMeta_Id();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getProperty <em>Property</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Property</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getProperty()
+	 * @see #getMeta()
+	 * @generated
+	 */
+	EAttribute getMeta_Property();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getRefines <em>Refines</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Refines</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getRefines()
+	 * @see #getMeta()
+	 * @generated
+	 */
+	EAttribute getMeta_Refines();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getScheme <em>Scheme</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Scheme</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getScheme()
+	 * @see #getMeta()
+	 * @generated
+	 */
+	EAttribute getMeta_Scheme();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.mylyn.docs.epub.opf.Meta#getDir <em>Dir</em>}'.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Dir</em>'.
+	 * @see org.eclipse.mylyn.docs.epub.opf.Meta#getDir()
+	 * @see #getMeta()
+	 * @generated
+	 */
+	EAttribute getMeta_Dir();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.mylyn.docs.epub.opf.Role <em>Role</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for enum '<em>Role</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Role
 	 * @generated
@@ -1362,9 +1534,9 @@
 	EEnum getRole();
 
 	/**
-	 * Returns the meta object for enum '{@link org.eclipse.mylyn.docs.epub.opf.Type <em>Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Returns the meta object for enum '{@link org.eclipse.mylyn.docs.epub.opf.Type <em>Type</em>}'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @return the meta object for enum '<em>Type</em>'.
 	 * @see org.eclipse.mylyn.docs.epub.opf.Type
 	 * @generated
@@ -1373,21 +1545,19 @@
 
 	/**
 	 * Returns the factory that creates the instances of the model.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return the factory that creates the instances of the model.
 	 * @generated
 	 */
 	OPFFactory getOPFFactory();
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * Defines literals for the meta objects that represent
+	 * <!-- begin-user-doc --> Defines literals for the meta objects that represent
 	 * <ul>
-	 *   <li>each class,</li>
-	 *   <li>each feature of each class,</li>
-	 *   <li>each enum,</li>
-	 *   <li>and each data type</li>
+	 * <li>each class,</li>
+	 * <li>each feature of each class,</li>
+	 * <li>each enum,</li>
+	 * <li>and each data type</li>
 	 * </ul>
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -1395,8 +1565,7 @@
 	interface Literals {
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl <em>Package</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getPackage()
 		 * @generated
@@ -1405,88 +1574,123 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Metadata</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EReference PACKAGE__METADATA = eINSTANCE.getPackage_Metadata();
 
 		/**
 		 * The meta object literal for the '<em><b>Manifest</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EReference PACKAGE__MANIFEST = eINSTANCE.getPackage_Manifest();
 
 		/**
 		 * The meta object literal for the '<em><b>Spine</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EReference PACKAGE__SPINE = eINSTANCE.getPackage_Spine();
 
 		/**
 		 * The meta object literal for the '<em><b>Guide</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EReference PACKAGE__GUIDE = eINSTANCE.getPackage_Guide();
 
 		/**
 		 * The meta object literal for the '<em><b>Tours</b></em>' reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EReference PACKAGE__TOURS = eINSTANCE.getPackage_Tours();
 
 		/**
 		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute PACKAGE__VERSION = eINSTANCE.getPackage_Version();
 
 		/**
 		 * The meta object literal for the '<em><b>Unique Identifier</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EAttribute PACKAGE__UNIQUE_IDENTIFIER = eINSTANCE.getPackage_UniqueIdentifier();
 
 		/**
 		 * The meta object literal for the '<em><b>Generate Cover HTML</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EAttribute PACKAGE__GENERATE_COVER_HTML = eINSTANCE.getPackage_GenerateCoverHTML();
 
 		/**
-		 * The meta object literal for the '<em><b>Generate Table Of Contents</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Generate Table Of Contents</b></em>' attribute feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EAttribute PACKAGE__GENERATE_TABLE_OF_CONTENTS = eINSTANCE.getPackage_GenerateTableOfContents();
 
 		/**
-		 * The meta object literal for the '<em><b>Include Referenced Resources</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Include Referenced Resources</b></em>' attribute feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EAttribute PACKAGE__INCLUDE_REFERENCED_RESOURCES = eINSTANCE.getPackage_IncludeReferencedResources();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl <em>Metadata</em>}' class.
+		 * The meta object literal for the '<em><b>Prefix</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
+		 * @since 3.0
 		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PACKAGE__PREFIX = eINSTANCE.getPackage_Prefix();
+
+		/**
+		 * The meta object literal for the '<em><b>Lang</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PACKAGE__LANG = eINSTANCE.getPackage_Lang();
+
+		/**
+		 * The meta object literal for the '<em><b>Dir</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PACKAGE__DIR = eINSTANCE.getPackage_Dir();
+
+		/**
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PACKAGE__ID = eINSTANCE.getPackage_Id();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl <em>Metadata</em>}' class.
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getMetadata()
 		 * @generated
@@ -1494,137 +1698,136 @@
 		EClass METADATA = eINSTANCE.getMetadata();
 
 		/**
-		 * The meta object literal for the '<em><b>Titles</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Titles</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__TITLES = eINSTANCE.getMetadata_Titles();
 
 		/**
-		 * The meta object literal for the '<em><b>Creators</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Creators</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__CREATORS = eINSTANCE.getMetadata_Creators();
 
 		/**
-		 * The meta object literal for the '<em><b>Subjects</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Subjects</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__SUBJECTS = eINSTANCE.getMetadata_Subjects();
 
 		/**
-		 * The meta object literal for the '<em><b>Descriptions</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Descriptions</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__DESCRIPTIONS = eINSTANCE.getMetadata_Descriptions();
 
 		/**
-		 * The meta object literal for the '<em><b>Publishers</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Publishers</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__PUBLISHERS = eINSTANCE.getMetadata_Publishers();
 
 		/**
-		 * The meta object literal for the '<em><b>Contributors</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Contributors</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__CONTRIBUTORS = eINSTANCE.getMetadata_Contributors();
 
 		/**
-		 * The meta object literal for the '<em><b>Dates</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Dates</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__DATES = eINSTANCE.getMetadata_Dates();
 
 		/**
-		 * The meta object literal for the '<em><b>Types</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Types</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__TYPES = eINSTANCE.getMetadata_Types();
 
 		/**
-		 * The meta object literal for the '<em><b>Formats</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Formats</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__FORMATS = eINSTANCE.getMetadata_Formats();
 
 		/**
-		 * The meta object literal for the '<em><b>Identifiers</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Identifiers</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__IDENTIFIERS = eINSTANCE.getMetadata_Identifiers();
 
 		/**
-		 * The meta object literal for the '<em><b>Sources</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Sources</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__SOURCES = eINSTANCE.getMetadata_Sources();
 
 		/**
-		 * The meta object literal for the '<em><b>Languages</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Languages</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__LANGUAGES = eINSTANCE.getMetadata_Languages();
 
 		/**
-		 * The meta object literal for the '<em><b>Relations</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Relations</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__RELATIONS = eINSTANCE.getMetadata_Relations();
 
 		/**
-		 * The meta object literal for the '<em><b>Coverages</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Coverages</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__COVERAGES = eINSTANCE.getMetadata_Coverages();
 
 		/**
-		 * The meta object literal for the '<em><b>Rights</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Rights</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__RIGHTS = eINSTANCE.getMetadata_Rights();
 
 		/**
-		 * The meta object literal for the '<em><b>Metas</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Metas</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference METADATA__METAS = eINSTANCE.getMetadata_Metas();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ManifestImpl <em>Manifest</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.ManifestImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getManifest()
 		 * @generated
@@ -1632,17 +1835,16 @@
 		EClass MANIFEST = eINSTANCE.getManifest();
 
 		/**
-		 * The meta object literal for the '<em><b>Items</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Items</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference MANIFEST__ITEMS = eINSTANCE.getManifest_Items();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl <em>Item</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getItem()
 		 * @generated
@@ -1651,32 +1853,32 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__ID = eINSTANCE.getItem_Id();
 
 		/**
 		 * The meta object literal for the '<em><b>Href</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__HREF = eINSTANCE.getItem_Href();
 
 		/**
 		 * The meta object literal for the '<em><b>Media type</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__MEDIA_TYPE = eINSTANCE.getItem_Media_type();
 
 		/**
 		 * The meta object literal for the '<em><b>Fallback</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__FALLBACK = eINSTANCE.getItem_Fallback();
@@ -1691,8 +1893,8 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Required namespace</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc
+		 * --> <!-- end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__REQUIRED_NAMESPACE = eINSTANCE.getItem_Required_namespace();
@@ -1707,48 +1909,65 @@
 
 		/**
 		 * The meta object literal for the '<em><b>File</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__FILE = eINSTANCE.getItem_File();
 
 		/**
 		 * The meta object literal for the '<em><b>No Toc</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__NO_TOC = eINSTANCE.getItem_NoToc();
 
 		/**
 		 * The meta object literal for the '<em><b>Title</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__TITLE = eINSTANCE.getItem_Title();
 
 		/**
 		 * The meta object literal for the '<em><b>Generated</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__GENERATED = eINSTANCE.getItem_Generated();
 
 		/**
 		 * The meta object literal for the '<em><b>Source Path</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEM__SOURCE_PATH = eINSTANCE.getItem_SourcePath();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl <em>Spine</em>}' class.
+		 * The meta object literal for the '<em><b>Properties</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
+		 * @since 3.0
 		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ITEM__PROPERTIES = eINSTANCE.getItem_Properties();
+
+		/**
+		 * The meta object literal for the '<em><b>Media overlay</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ITEM__MEDIA_OVERLAY = eINSTANCE.getItem_Media_overlay();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl <em>Spine</em>}' class.
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getSpine()
 		 * @generated
@@ -1756,25 +1975,24 @@
 		EClass SPINE = eINSTANCE.getSpine();
 
 		/**
-		 * The meta object literal for the '<em><b>Spine Items</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Spine Items</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference SPINE__SPINE_ITEMS = eINSTANCE.getSpine_SpineItems();
 
 		/**
 		 * The meta object literal for the '<em><b>Toc</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute SPINE__TOC = eINSTANCE.getSpine_Toc();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl <em>Guide</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getGuide()
 		 * @generated
@@ -1782,17 +2000,16 @@
 		EClass GUIDE = eINSTANCE.getGuide();
 
 		/**
-		 * The meta object literal for the '<em><b>Guide Items</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '<em><b>Guide Items</b></em>' containment reference list feature. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @generated
 		 */
 		EReference GUIDE__GUIDE_ITEMS = eINSTANCE.getGuide_GuideItems();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl <em>Reference</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getReference()
 		 * @generated
@@ -1801,32 +2018,31 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute REFERENCE__TYPE = eINSTANCE.getReference_Type();
 
 		/**
 		 * The meta object literal for the '<em><b>Title</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute REFERENCE__TITLE = eINSTANCE.getReference_Title();
 
 		/**
 		 * The meta object literal for the '<em><b>Href</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute REFERENCE__HREF = eINSTANCE.getReference_Href();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl <em>Itemref</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getItemref()
 		 * @generated
@@ -1835,24 +2051,23 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Idref</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEMREF__IDREF = eINSTANCE.getItemref_Idref();
 
 		/**
 		 * The meta object literal for the '<em><b>Linear</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute ITEMREF__LINEAR = eINSTANCE.getItemref_Linear();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.ToursImpl <em>Tours</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.ToursImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getTours()
 		 * @generated
@@ -1861,8 +2076,7 @@
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl <em>Meta</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getMeta()
 		 * @generated
@@ -1871,24 +2085,69 @@
 
 		/**
 		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute META__NAME = eINSTANCE.getMeta_Name();
 
 		/**
 		 * The meta object literal for the '<em><b>Content</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
 		 * @generated
 		 */
 		EAttribute META__CONTENT = eINSTANCE.getMeta_Content();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.Role <em>Role</em>}' enum.
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
+		 * @since 3.0
 		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META__ID = eINSTANCE.getMeta_Id();
+
+		/**
+		 * The meta object literal for the '<em><b>Property</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META__PROPERTY = eINSTANCE.getMeta_Property();
+
+		/**
+		 * The meta object literal for the '<em><b>Refines</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META__REFINES = eINSTANCE.getMeta_Refines();
+
+		/**
+		 * The meta object literal for the '<em><b>Scheme</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META__SCHEME = eINSTANCE.getMeta_Scheme();
+
+		/**
+		 * The meta object literal for the '<em><b>Dir</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * @since 3.0
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META__DIR = eINSTANCE.getMeta_Dir();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.Role <em>Role</em>}' enum. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @see org.eclipse.mylyn.docs.epub.opf.Role
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getRole()
 		 * @generated
@@ -1896,9 +2155,9 @@
 		EEnum ROLE = eINSTANCE.getRole();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.Type <em>Type</em>}' enum.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
+		 * The meta object literal for the '{@link org.eclipse.mylyn.docs.epub.opf.Type <em>Type</em>}' enum. <!--
+		 * begin-user-doc --> <!-- end-user-doc -->
+		 *
 		 * @see org.eclipse.mylyn.docs.epub.opf.Type
 		 * @see org.eclipse.mylyn.docs.epub.opf.impl.OPFPackageImpl#getType()
 		 * @generated
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Package.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Package.java
index 8ade3d4..fbd2567 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Package.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Package.java
@@ -9,12 +9,11 @@
 import org.eclipse.emf.ecore.EObject;
 
 /**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Package</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> A representation of the model object '<em><b>Package</b></em>'. <!-- end-user-doc -->
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getMetadata <em>Metadata</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getManifest <em>Manifest</em>}</li>
@@ -26,8 +25,11 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateCoverHTML <em>Generate Cover HTML</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateTableOfContents <em>Generate Table Of Contents</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#isIncludeReferencedResources <em>Include Referenced Resources</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getPrefix <em>Prefix</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getLang <em>Lang</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getDir <em>Dir</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Package#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getPackage()
  * @model extendedMetaData="name='package' namespace='http://www.idpf.org/2007/opf'"
@@ -38,8 +40,8 @@
 	 * Returns the value of the '<em><b>Metadata</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Metadata</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Metadata</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Metadata</em>' containment reference.
@@ -53,8 +55,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getMetadata <em>Metadata</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Metadata</em>' containment reference.
 	 * @see #getMetadata()
 	 * @generated
@@ -65,8 +66,8 @@
 	 * Returns the value of the '<em><b>Manifest</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Manifest</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Manifest</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Manifest</em>' containment reference.
@@ -80,8 +81,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getManifest <em>Manifest</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Manifest</em>' containment reference.
 	 * @see #getManifest()
 	 * @generated
@@ -92,8 +92,8 @@
 	 * Returns the value of the '<em><b>Spine</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Spine</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Spine</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Spine</em>' containment reference.
@@ -107,8 +107,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getSpine <em>Spine</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Spine</em>' containment reference.
 	 * @see #getSpine()
 	 * @generated
@@ -119,8 +118,8 @@
 	 * Returns the value of the '<em><b>Guide</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Guide</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Guide</em>' containment reference isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Guide</em>' containment reference.
@@ -134,8 +133,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getGuide <em>Guide</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Guide</em>' containment reference.
 	 * @see #getGuide()
 	 * @generated
@@ -146,8 +144,8 @@
 	 * Returns the value of the '<em><b>Tours</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Tours</em>' reference isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Tours</em>' reference isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Tours</em>' reference.
@@ -159,24 +157,25 @@
 	Tours getTours();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getTours <em>Tours</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Tours</em>' reference.
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getTours <em>Tours</em>}' reference. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Tours</em>' reference.
 	 * @see #getTours()
 	 * @generated
 	 */
 	void setTours(Tours value);
 
 	/**
-	 * Returns the value of the '<em><b>Version</b></em>' attribute.
-	 * The default value is <code>"2.0"</code>.
-	 * <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Version</b></em>' attribute. The default value is <code>"2.0"</code>. <!--
+	 * begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear, there really should be more of a description
+	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 *
 	 * @return the value of the '<em>Version</em>' attribute.
 	 * @see #isSetVersion()
 	 * @see #unsetVersion()
@@ -189,8 +188,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getVersion <em>Version</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Version</em>' attribute.
 	 * @see #isSetVersion()
 	 * @see #unsetVersion()
@@ -201,8 +199,7 @@
 
 	/**
 	 * Unsets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getVersion <em>Version</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #isSetVersion()
 	 * @see #getVersion()
 	 * @see #setVersion(String)
@@ -212,8 +209,7 @@
 
 	/**
 	 * Returns whether the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getVersion <em>Version</em>}' attribute is set.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @return whether the value of the '<em>Version</em>' attribute is set.
 	 * @see #unsetVersion()
 	 * @see #getVersion()
@@ -226,8 +222,8 @@
 	 * Returns the value of the '<em><b>Unique Identifier</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Unique Identifier</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Unique Identifier</em>' attribute isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Unique Identifier</em>' attribute.
@@ -241,8 +237,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getUniqueIdentifier <em>Unique Identifier</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Unique Identifier</em>' attribute.
 	 * @see #getUniqueIdentifier()
 	 * @generated
@@ -253,8 +248,8 @@
 	 * Returns the value of the '<em><b>Generate Cover HTML</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Generate Cover HTML</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Generate Cover HTML</em>' attribute isn't clear, there really should be more of a
+	 * description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Generate Cover HTML</em>' attribute.
@@ -267,8 +262,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateCoverHTML <em>Generate Cover HTML</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Generate Cover HTML</em>' attribute.
 	 * @see #isGenerateCoverHTML()
 	 * @generated
@@ -279,8 +273,8 @@
 	 * Returns the value of the '<em><b>Generate Table Of Contents</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Generate Table Of Contents</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Generate Table Of Contents</em>' attribute isn't clear, there really should be more of
+	 * a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Generate Table Of Contents</em>' attribute.
@@ -293,8 +287,7 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#isGenerateTableOfContents <em>Generate Table Of Contents</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Generate Table Of Contents</em>' attribute.
 	 * @see #isGenerateTableOfContents()
 	 * @generated
@@ -305,8 +298,8 @@
 	 * Returns the value of the '<em><b>Include Referenced Resources</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Include Referenced Resources</em>' attribute isn't clear,
-	 * there really should be more of a description here...
+	 * If the meaning of the '<em>Include Referenced Resources</em>' attribute isn't clear, there really should be more
+	 * of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Include Referenced Resources</em>' attribute.
@@ -319,12 +312,115 @@
 
 	/**
 	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#isIncludeReferencedResources <em>Include Referenced Resources</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @param value the new value of the '<em>Include Referenced Resources</em>' attribute.
 	 * @see #isIncludeReferencedResources()
 	 * @generated
 	 */
 	void setIncludeReferencedResources(boolean value);
 
+	/**
+	 * Returns the value of the '<em><b>Prefix</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> <!--
+	 * begin-model-doc --> EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem <!--
+	 * end-model-doc -->
+	 *
+	 * @return the value of the '<em>Prefix</em>' attribute.
+	 * @see #setPrefix(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getPackage_Prefix()
+	 * @model
+	 * @generated
+	 * @since 3.0
+	 */
+	String getPrefix();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getPrefix <em>Prefix</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Prefix</em>' attribute.
+	 * @see #getPrefix()
+	 * @generated
+	 * @since 3.0
+	 */
+	void setPrefix(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Lang</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> <!--
+	 * begin-model-doc --> EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem <!--
+	 * end-model-doc -->
+	 *
+	 * @return the value of the '<em>Lang</em>' attribute.
+	 * @see #setLang(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getPackage_Lang()
+	 * @model
+	 * @generated
+	 * @since 3.0
+	 */
+	String getLang();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getLang <em>Lang</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Lang</em>' attribute.
+	 * @see #getLang()
+	 * @generated
+	 * @since 3.0
+	 */
+	void setLang(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Dir</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> <!--
+	 * begin-model-doc --> EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem <!--
+	 * end-model-doc -->
+	 *
+	 * @return the value of the '<em>Dir</em>' attribute.
+	 * @see #setDir(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getPackage_Dir()
+	 * @model
+	 * @generated
+	 * @since 3.0
+	 */
+	String getDir();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getDir <em>Dir</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Dir</em>' attribute.
+	 * @see #getDir()
+	 * @generated
+	 * @since 3.0
+	 */
+	void setDir(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> <!--
+	 * begin-model-doc --> EPUB 3 - http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-elem <!--
+	 * end-model-doc -->
+	 *
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(String)
+	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getPackage_Id()
+	 * @model
+	 * @generated
+	 * @since 3.0
+	 */
+	String getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.mylyn.docs.epub.opf.Package#getId <em>Id</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *            the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 * @since 3.0
+	 */
+	void setId(String value);
+
 } // Package
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Reference.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Reference.java
index 7b2c026..f392a8d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Reference.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Reference.java
@@ -15,12 +15,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Reference#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Reference#getTitle <em>Title</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Reference#getHref <em>Href</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getReference()
  * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='validType'"
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Role.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Role.java
index 6c2d68b..c22a469 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Role.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Role.java
@@ -5842,6 +5842,8 @@
 	 * Returns the '<em><b>Role</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Role get(String literal) {
@@ -5858,6 +5860,8 @@
 	 * Returns the '<em><b>Role</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Role getByName(String name) {
@@ -5874,6 +5878,8 @@
 	 * Returns the '<em><b>Role</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Role get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Spine.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Spine.java
index 4a3ed5d..e4dcb7c 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Spine.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Spine.java
@@ -17,11 +17,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Spine#getSpineItems <em>Spine Items</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.Spine#getToc <em>Toc</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#getSpine()
  * @model
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Type.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Type.java
index 16a2f18..7a4dc82 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Type.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/Type.java
@@ -486,6 +486,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type get(String literal) {
@@ -502,6 +504,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type getByName(String name) {
@@ -518,6 +522,8 @@
 	 * Returns the '<em><b>Type</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static Type get(int value) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/GuideImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/GuideImpl.java
index 7601ff7..0053fc1 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/GuideImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/GuideImpl.java
@@ -30,10 +30,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.GuideImpl#getGuideItems <em>Guide Items</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemImpl.java
index d4f71a9..b71fbae 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemImpl.java
@@ -7,21 +7,17 @@
 package org.eclipse.mylyn.docs.epub.opf.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
-
 import org.eclipse.mylyn.docs.epub.opf.Item;
 import org.eclipse.mylyn.docs.epub.opf.OPFPackage;
 
 /**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Item</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Item</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getId <em>Id</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getHref <em>Href</em>}</li>
@@ -35,16 +31,16 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getTitle <em>Title</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#isGenerated <em>Generated</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getSourcePath <em>Source Path</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getProperties <em>Properties</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemImpl#getMedia_overlay <em>Media overlay</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
 public class ItemImpl extends EObjectImpl implements Item {
 	/**
 	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getId()
 	 * @generated
 	 * @ordered
@@ -53,8 +49,7 @@
 
 	/**
 	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getId()
 	 * @generated
 	 * @ordered
@@ -62,9 +57,9 @@
 	protected String id = ID_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #getHref() <em>Href</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The default value of the '{@link #getHref() <em>Href</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getHref()
 	 * @generated
 	 * @ordered
@@ -72,9 +67,9 @@
 	protected static final String HREF_EDEFAULT = null;
 
 	/**
-	 * The cached value of the '{@link #getHref() <em>Href</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getHref() <em>Href</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getHref()
 	 * @generated
 	 * @ordered
@@ -83,8 +78,8 @@
 
 	/**
 	 * The default value of the '{@link #getMedia_type() <em>Media type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getMedia_type()
 	 * @generated
 	 * @ordered
@@ -93,8 +88,8 @@
 
 	/**
 	 * The cached value of the '{@link #getMedia_type() <em>Media type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getMedia_type()
 	 * @generated
 	 * @ordered
@@ -103,8 +98,8 @@
 
 	/**
 	 * The default value of the '{@link #getFallback() <em>Fallback</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getFallback()
 	 * @generated
 	 * @ordered
@@ -113,8 +108,8 @@
 
 	/**
 	 * The cached value of the '{@link #getFallback() <em>Fallback</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getFallback()
 	 * @generated
 	 * @ordered
@@ -123,8 +118,8 @@
 
 	/**
 	 * The default value of the '{@link #getFallback_style() <em>Fallback style</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
 	 * @see #getFallback_style()
 	 * @generated
 	 * @ordered
@@ -142,9 +137,9 @@
 	protected String fallback_style = FALLBACK_STYLE_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #getRequired_namespace() <em>Required namespace</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The default value of the '{@link #getRequired_namespace() <em>Required namespace</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see #getRequired_namespace()
 	 * @generated
 	 * @ordered
@@ -152,9 +147,9 @@
 	protected static final String REQUIRED_NAMESPACE_EDEFAULT = null;
 
 	/**
-	 * The cached value of the '{@link #getRequired_namespace() <em>Required namespace</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getRequired_namespace() <em>Required namespace</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see #getRequired_namespace()
 	 * @generated
 	 * @ordered
@@ -162,9 +157,9 @@
 	protected String required_namespace = REQUIRED_NAMESPACE_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #getRequired_modules() <em>Required modules</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The default value of the '{@link #getRequired_modules() <em>Required modules</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see #getRequired_modules()
 	 * @generated
 	 * @ordered
@@ -173,8 +168,8 @@
 
 	/**
 	 * The cached value of the '{@link #getRequired_modules() <em>Required modules</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
 	 * @see #getRequired_modules()
 	 * @generated
 	 * @ordered
@@ -182,9 +177,9 @@
 	protected String required_modules = REQUIRED_MODULES_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #getFile() <em>File</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The default value of the '{@link #getFile() <em>File</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getFile()
 	 * @generated
 	 * @ordered
@@ -192,9 +187,9 @@
 	protected static final String FILE_EDEFAULT = null;
 
 	/**
-	 * The cached value of the '{@link #getFile() <em>File</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getFile() <em>File</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getFile()
 	 * @generated
 	 * @ordered
@@ -203,8 +198,8 @@
 
 	/**
 	 * The default value of the '{@link #isNoToc() <em>No Toc</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #isNoToc()
 	 * @generated
 	 * @ordered
@@ -212,9 +207,9 @@
 	protected static final boolean NO_TOC_EDEFAULT = false;
 
 	/**
-	 * The cached value of the '{@link #isNoToc() <em>No Toc</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #isNoToc() <em>No Toc</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #isNoToc()
 	 * @generated
 	 * @ordered
@@ -223,8 +218,8 @@
 
 	/**
 	 * The default value of the '{@link #getTitle() <em>Title</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getTitle()
 	 * @generated
 	 * @ordered
@@ -232,9 +227,9 @@
 	protected static final String TITLE_EDEFAULT = null;
 
 	/**
-	 * The cached value of the '{@link #getTitle() <em>Title</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getTitle()
 	 * @generated
 	 * @ordered
@@ -243,8 +238,8 @@
 
 	/**
 	 * The default value of the '{@link #isGenerated() <em>Generated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #isGenerated()
 	 * @generated
 	 * @ordered
@@ -253,8 +248,8 @@
 
 	/**
 	 * The cached value of the '{@link #isGenerated() <em>Generated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #isGenerated()
 	 * @generated
 	 * @ordered
@@ -263,8 +258,8 @@
 
 	/**
 	 * The default value of the '{@link #getSourcePath() <em>Source Path</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getSourcePath()
 	 * @generated
 	 * @ordered
@@ -273,8 +268,8 @@
 
 	/**
 	 * The cached value of the '{@link #getSourcePath() <em>Source Path</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getSourcePath()
 	 * @generated
 	 * @ordered
@@ -282,8 +277,51 @@
 	protected String sourcePath = SOURCE_PATH_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getProperties() <em>Properties</em>}' attribute.
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getProperties()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PROPERTIES_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getProperties()
+	 * @generated
+	 * @ordered
+	 */
+	protected String properties = PROPERTIES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMedia_overlay() <em>Media overlay</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getMedia_overlay()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String MEDIA_OVERLAY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getMedia_overlay() <em>Media overlay</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getMedia_overlay()
+	 * @generated
+	 * @ordered
+	 */
+	protected String media_overlay = MEDIA_OVERLAY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public ItemImpl() {
@@ -291,8 +329,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -301,8 +338,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getId() {
@@ -310,8 +346,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setId(String newId) {
@@ -322,8 +357,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getHref() {
@@ -331,8 +365,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setHref(String newHref) {
@@ -343,8 +376,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getMedia_type() {
@@ -352,8 +384,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setMedia_type(String newMedia_type) {
@@ -364,8 +395,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getFallback() {
@@ -373,8 +403,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setFallback(String newFallback) {
@@ -385,8 +414,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getFallback_style() {
@@ -394,8 +422,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setFallback_style(String newFallback_style) {
@@ -406,8 +433,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getRequired_namespace() {
@@ -415,8 +441,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setRequired_namespace(String newRequired_namespace) {
@@ -427,8 +452,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getRequired_modules() {
@@ -436,8 +460,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setRequired_modules(String newRequired_modules) {
@@ -448,8 +471,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getFile() {
@@ -457,8 +479,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setFile(String newFile) {
@@ -469,8 +490,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public boolean isNoToc() {
@@ -478,8 +498,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setNoToc(boolean newNoToc) {
@@ -490,8 +509,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getTitle() {
@@ -499,8 +517,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setTitle(String newTitle) {
@@ -511,8 +528,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public boolean isGenerated() {
@@ -520,8 +536,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setGenerated(boolean newGenerated) {
@@ -532,8 +547,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getSourcePath() {
@@ -541,8 +555,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setSourcePath(String newSourcePath) {
@@ -554,7 +567,52 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getProperties() {
+		return properties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProperties(String newProperties) {
+		String oldProperties = properties;
+		properties = newProperties;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.ITEM__PROPERTIES, oldProperties, properties));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getMedia_overlay() {
+		return media_overlay;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMedia_overlay(String newMedia_overlay) {
+		String oldMedia_overlay = media_overlay;
+		media_overlay = newMedia_overlay;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.ITEM__MEDIA_OVERLAY, oldMedia_overlay, media_overlay));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -584,13 +642,16 @@
 				return isGenerated();
 			case OPFPackage.ITEM__SOURCE_PATH:
 				return getSourcePath();
+			case OPFPackage.ITEM__PROPERTIES:
+				return getProperties();
+			case OPFPackage.ITEM__MEDIA_OVERLAY:
+				return getMedia_overlay();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -632,13 +693,18 @@
 			case OPFPackage.ITEM__SOURCE_PATH:
 				setSourcePath((String)newValue);
 				return;
+			case OPFPackage.ITEM__PROPERTIES:
+				setProperties((String)newValue);
+				return;
+			case OPFPackage.ITEM__MEDIA_OVERLAY:
+				setMedia_overlay((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -680,13 +746,18 @@
 			case OPFPackage.ITEM__SOURCE_PATH:
 				setSourcePath(SOURCE_PATH_EDEFAULT);
 				return;
+			case OPFPackage.ITEM__PROPERTIES:
+				setProperties(PROPERTIES_EDEFAULT);
+				return;
+			case OPFPackage.ITEM__MEDIA_OVERLAY:
+				setMedia_overlay(MEDIA_OVERLAY_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -716,13 +787,16 @@
 				return generated != GENERATED_EDEFAULT;
 			case OPFPackage.ITEM__SOURCE_PATH:
 				return SOURCE_PATH_EDEFAULT == null ? sourcePath != null : !SOURCE_PATH_EDEFAULT.equals(sourcePath);
+			case OPFPackage.ITEM__PROPERTIES:
+				return PROPERTIES_EDEFAULT == null ? properties != null : !PROPERTIES_EDEFAULT.equals(properties);
+			case OPFPackage.ITEM__MEDIA_OVERLAY:
+				return MEDIA_OVERLAY_EDEFAULT == null ? media_overlay != null : !MEDIA_OVERLAY_EDEFAULT.equals(media_overlay);
 		}
 		return super.eIsSet(featureID);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -754,6 +828,10 @@
 		result.append(generated);
 		result.append(", sourcePath: "); //$NON-NLS-1$
 		result.append(sourcePath);
+		result.append(", properties: "); //$NON-NLS-1$
+		result.append(properties);
+		result.append(", media_overlay: "); //$NON-NLS-1$
+		result.append(media_overlay);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemrefImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemrefImpl.java
index 024c0b3..99a8123 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemrefImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ItemrefImpl.java
@@ -22,11 +22,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl#getIdref <em>Idref</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ItemrefImpl#getLinear <em>Linear</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ManifestImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ManifestImpl.java
index 90b4d7e..12bfaae 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ManifestImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ManifestImpl.java
@@ -30,10 +30,10 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ManifestImpl#getItems <em>Items</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetaImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetaImpl.java
index b25108c..e429bfc 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetaImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetaImpl.java
@@ -7,34 +7,34 @@
 package org.eclipse.mylyn.docs.epub.opf.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
-
 import org.eclipse.mylyn.docs.epub.opf.Meta;
 import org.eclipse.mylyn.docs.epub.opf.OPFPackage;
 
 /**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Meta</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Meta</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getContent <em>Content</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getProperty <em>Property</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getRefines <em>Refines</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getScheme <em>Scheme</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetaImpl#getDir <em>Dir</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
 public class MetaImpl extends EObjectImpl implements Meta {
 	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getName()
 	 * @generated
 	 * @ordered
@@ -42,9 +42,9 @@
 	protected static final String NAME_EDEFAULT = null;
 
 	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 *
 	 * @see #getName()
 	 * @generated
 	 * @ordered
@@ -53,8 +53,8 @@
 
 	/**
 	 * The default value of the '{@link #getContent() <em>Content</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getContent()
 	 * @generated
 	 * @ordered
@@ -63,8 +63,8 @@
 
 	/**
 	 * The cached value of the '{@link #getContent() <em>Content</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @see #getContent()
 	 * @generated
 	 * @ordered
@@ -72,8 +72,117 @@
 	protected String content = CONTENT_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String id = ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProperty() <em>Property</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getProperty()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PROPERTY_EDEFAULT = ""; //$NON-NLS-1$
+
+	/**
+	 * The cached value of the '{@link #getProperty() <em>Property</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getProperty()
+	 * @generated
+	 * @ordered
+	 */
+	protected String property = PROPERTY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRefines() <em>Refines</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getRefines()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REFINES_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRefines() <em>Refines</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getRefines()
+	 * @generated
+	 * @ordered
+	 */
+	protected String refines = REFINES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getScheme() <em>Scheme</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getScheme()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SCHEME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getScheme() <em>Scheme</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getScheme()
+	 * @generated
+	 * @ordered
+	 */
+	protected String scheme = SCHEME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDir() <em>Dir</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getDir()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DIR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDir() <em>Dir</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @see #getDir()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dir = DIR_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public MetaImpl() {
@@ -81,8 +190,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -91,8 +199,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getName() {
@@ -100,8 +207,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setName(String newName) {
@@ -112,8 +218,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public String getContent() {
@@ -121,8 +226,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setContent(String newContent) {
@@ -134,7 +238,121 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setId(String newId) {
+		String oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.META__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getProperty() {
+		return property;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProperty(String newProperty) {
+		String oldProperty = property;
+		property = newProperty;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.META__PROPERTY, oldProperty, property));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRefines() {
+		return refines;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRefines(String newRefines) {
+		String oldRefines = refines;
+		refines = newRefines;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.META__REFINES, oldRefines, refines));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getScheme() {
+		return scheme;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScheme(String newScheme) {
+		String oldScheme = scheme;
+		scheme = newScheme;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.META__SCHEME, oldScheme, scheme));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDir() {
+		return dir;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDir(String newDir) {
+		String oldDir = dir;
+		dir = newDir;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.META__DIR, oldDir, dir));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -144,13 +362,22 @@
 				return getName();
 			case OPFPackage.META__CONTENT:
 				return getContent();
+			case OPFPackage.META__ID:
+				return getId();
+			case OPFPackage.META__PROPERTY:
+				return getProperty();
+			case OPFPackage.META__REFINES:
+				return getRefines();
+			case OPFPackage.META__SCHEME:
+				return getScheme();
+			case OPFPackage.META__DIR:
+				return getDir();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -162,13 +389,27 @@
 			case OPFPackage.META__CONTENT:
 				setContent((String)newValue);
 				return;
+			case OPFPackage.META__ID:
+				setId((String)newValue);
+				return;
+			case OPFPackage.META__PROPERTY:
+				setProperty((String)newValue);
+				return;
+			case OPFPackage.META__REFINES:
+				setRefines((String)newValue);
+				return;
+			case OPFPackage.META__SCHEME:
+				setScheme((String)newValue);
+				return;
+			case OPFPackage.META__DIR:
+				setDir((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -180,13 +421,27 @@
 			case OPFPackage.META__CONTENT:
 				setContent(CONTENT_EDEFAULT);
 				return;
+			case OPFPackage.META__ID:
+				setId(ID_EDEFAULT);
+				return;
+			case OPFPackage.META__PROPERTY:
+				setProperty(PROPERTY_EDEFAULT);
+				return;
+			case OPFPackage.META__REFINES:
+				setRefines(REFINES_EDEFAULT);
+				return;
+			case OPFPackage.META__SCHEME:
+				setScheme(SCHEME_EDEFAULT);
+				return;
+			case OPFPackage.META__DIR:
+				setDir(DIR_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -196,13 +451,22 @@
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case OPFPackage.META__CONTENT:
 				return CONTENT_EDEFAULT == null ? content != null : !CONTENT_EDEFAULT.equals(content);
+			case OPFPackage.META__ID:
+				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
+			case OPFPackage.META__PROPERTY:
+				return PROPERTY_EDEFAULT == null ? property != null : !PROPERTY_EDEFAULT.equals(property);
+			case OPFPackage.META__REFINES:
+				return REFINES_EDEFAULT == null ? refines != null : !REFINES_EDEFAULT.equals(refines);
+			case OPFPackage.META__SCHEME:
+				return SCHEME_EDEFAULT == null ? scheme != null : !SCHEME_EDEFAULT.equals(scheme);
+			case OPFPackage.META__DIR:
+				return DIR_EDEFAULT == null ? dir != null : !DIR_EDEFAULT.equals(dir);
 		}
 		return super.eIsSet(featureID);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -214,6 +478,16 @@
 		result.append(name);
 		result.append(", content: "); //$NON-NLS-1$
 		result.append(content);
+		result.append(", id: "); //$NON-NLS-1$
+		result.append(id);
+		result.append(", property: "); //$NON-NLS-1$
+		result.append(property);
+		result.append(", refines: "); //$NON-NLS-1$
+		result.append(refines);
+		result.append(", scheme: "); //$NON-NLS-1$
+		result.append(scheme);
+		result.append(", dir: "); //$NON-NLS-1$
+		result.append(dir);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetadataImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetadataImpl.java
index d0653ac..c89d97d 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetadataImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/MetadataImpl.java
@@ -46,6 +46,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl#getTitles <em>Titles</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl#getCreators <em>Creators</em>}</li>
@@ -64,7 +65,6 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl#getRights <em>Rights</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.MetadataImpl#getMetas <em>Metas</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFFactoryImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFFactoryImpl.java
index 4b43d07..951d19e 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFFactoryImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFFactoryImpl.java
@@ -44,7 +44,7 @@
 	 */
 	public static OPFFactory init() {
 		try {
-			OPFFactory theOPFFactory = (OPFFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.idpf.org/2007/opf"); //$NON-NLS-1$ 
+			OPFFactory theOPFFactory = (OPFFactory)EPackage.Registry.INSTANCE.getEFactory(OPFPackage.eNS_URI);
 			if (theOPFFactory != null) {
 				return theOPFFactory;
 			}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFPackageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFPackageImpl.java
index ad82cbf..75870d8 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFPackageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/OPFPackageImpl.java
@@ -11,14 +11,10 @@
 import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
-
 import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
-
 import org.eclipse.mylyn.docs.epub.dc.DCPackage;
-
 import org.eclipse.mylyn.docs.epub.dc.impl.DCPackageImpl;
-
 import org.eclipse.mylyn.docs.epub.opf.Guide;
 import org.eclipse.mylyn.docs.epub.opf.Item;
 import org.eclipse.mylyn.docs.epub.opf.Itemref;
@@ -35,106 +31,90 @@
 import org.eclipse.mylyn.docs.epub.opf.util.OPFValidator;
 
 /**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model <b>Package</b>. <!-- end-user-doc -->
  * @generated
  */
 public class OPFPackageImpl extends EPackageImpl implements OPFPackage {
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass packageEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass metadataEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass manifestEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass itemEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass spineEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass guideEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass referenceEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass itemrefEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass toursEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EClass metaEClass = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EEnum roleEEnum = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private EEnum typeEEnum = null;
 
 	/**
-	 * Creates an instance of the model <b>Package</b>, registered with
-	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
-	 * package URI value.
-	 * <p>Note: the correct way to create the package is via the static
-	 * factory method {@link #init init()}, which also performs
-	 * initialization of the package, or returns the registered package,
-	 * if one already exists.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Creates an instance of the model <b>Package</b>, registered with {@link org.eclipse.emf.ecore.EPackage.Registry
+	 * EPackage.Registry} by the package package URI value.
+	 * <p>
+	 * Note: the correct way to create the package is via the static factory method {@link #init init()}, which also
+	 * performs initialization of the package, or returns the registered package, if one already exists. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 *
 	 * @see org.eclipse.emf.ecore.EPackage.Registry
 	 * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage#eNS_URI
 	 * @see #init()
@@ -145,8 +125,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private static boolean isInited = false;
@@ -201,8 +180,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getPackage() {
@@ -210,8 +188,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getPackage_Metadata() {
@@ -219,8 +196,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getPackage_Manifest() {
@@ -228,8 +204,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getPackage_Spine() {
@@ -237,8 +212,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getPackage_Guide() {
@@ -246,8 +220,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getPackage_Tours() {
@@ -255,8 +228,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPackage_Version() {
@@ -264,8 +236,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPackage_UniqueIdentifier() {
@@ -273,8 +244,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPackage_GenerateCoverHTML() {
@@ -282,8 +252,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPackage_GenerateTableOfContents() {
@@ -291,8 +260,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPackage_IncludeReferencedResources() {
@@ -301,7 +269,46 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPackage_Prefix() {
+		return (EAttribute)packageEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPackage_Lang() {
+		return (EAttribute)packageEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPackage_Dir() {
+		return (EAttribute)packageEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPackage_Id() {
+		return (EAttribute)packageEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getMetadata() {
@@ -309,8 +316,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Titles() {
@@ -318,8 +324,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Creators() {
@@ -327,8 +332,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Subjects() {
@@ -336,8 +340,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Descriptions() {
@@ -345,8 +348,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Publishers() {
@@ -354,8 +356,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Contributors() {
@@ -363,8 +364,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Dates() {
@@ -372,8 +372,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Types() {
@@ -381,8 +380,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Formats() {
@@ -390,8 +388,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Identifiers() {
@@ -399,8 +396,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Sources() {
@@ -408,8 +404,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Languages() {
@@ -417,8 +412,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Relations() {
@@ -426,8 +420,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Coverages() {
@@ -435,8 +428,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Rights() {
@@ -444,8 +436,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getMetadata_Metas() {
@@ -453,8 +444,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getManifest() {
@@ -462,8 +452,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getManifest_Items() {
@@ -471,8 +460,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getItem() {
@@ -480,8 +468,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Id() {
@@ -489,8 +476,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Href() {
@@ -498,8 +484,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Media_type() {
@@ -507,8 +492,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Fallback() {
@@ -516,8 +500,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Fallback_style() {
@@ -525,8 +508,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Required_namespace() {
@@ -534,8 +516,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Required_modules() {
@@ -543,8 +524,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_File() {
@@ -552,8 +532,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_NoToc() {
@@ -561,8 +540,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Title() {
@@ -570,8 +548,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_Generated() {
@@ -579,8 +556,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItem_SourcePath() {
@@ -589,7 +565,26 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getItem_Properties() {
+		return (EAttribute)itemEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getItem_Media_overlay() {
+		return (EAttribute)itemEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getSpine() {
@@ -597,8 +592,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getSpine_SpineItems() {
@@ -606,8 +600,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getSpine_Toc() {
@@ -615,8 +608,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getGuide() {
@@ -624,8 +616,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getGuide_GuideItems() {
@@ -633,8 +624,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getReference() {
@@ -642,8 +632,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getReference_Type() {
@@ -651,8 +640,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getReference_Title() {
@@ -660,8 +648,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getReference_Href() {
@@ -669,8 +656,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getItemref() {
@@ -678,8 +664,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItemref_Idref() {
@@ -687,8 +672,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getItemref_Linear() {
@@ -696,8 +680,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getTours() {
@@ -705,8 +688,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EClass getMeta() {
@@ -714,8 +696,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getMeta_Name() {
@@ -723,8 +704,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getMeta_Content() {
@@ -733,7 +713,56 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMeta_Id() {
+		return (EAttribute)metaEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMeta_Property() {
+		return (EAttribute)metaEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 *
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMeta_Refines() {
+		return (EAttribute)metaEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMeta_Scheme() {
+		return (EAttribute)metaEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @since 3.0 <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMeta_Dir() {
+		return (EAttribute)metaEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EEnum getRole() {
@@ -741,8 +770,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EEnum getType() {
@@ -750,8 +778,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public OPFFactory getOPFFactory() {
@@ -759,8 +786,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private boolean isCreated = false;
@@ -768,8 +794,7 @@
 	/**
 	 * Creates the meta-model objects for the package.  This method is
 	 * guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void createPackageContents() {
@@ -788,6 +813,10 @@
 		createEAttribute(packageEClass, PACKAGE__GENERATE_COVER_HTML);
 		createEAttribute(packageEClass, PACKAGE__GENERATE_TABLE_OF_CONTENTS);
 		createEAttribute(packageEClass, PACKAGE__INCLUDE_REFERENCED_RESOURCES);
+		createEAttribute(packageEClass, PACKAGE__PREFIX);
+		createEAttribute(packageEClass, PACKAGE__LANG);
+		createEAttribute(packageEClass, PACKAGE__DIR);
+		createEAttribute(packageEClass, PACKAGE__ID);
 
 		metadataEClass = createEClass(METADATA);
 		createEReference(metadataEClass, METADATA__TITLES);
@@ -823,6 +852,8 @@
 		createEAttribute(itemEClass, ITEM__TITLE);
 		createEAttribute(itemEClass, ITEM__GENERATED);
 		createEAttribute(itemEClass, ITEM__SOURCE_PATH);
+		createEAttribute(itemEClass, ITEM__PROPERTIES);
+		createEAttribute(itemEClass, ITEM__MEDIA_OVERLAY);
 
 		spineEClass = createEClass(SPINE);
 		createEReference(spineEClass, SPINE__SPINE_ITEMS);
@@ -845,6 +876,11 @@
 		metaEClass = createEClass(META);
 		createEAttribute(metaEClass, META__NAME);
 		createEAttribute(metaEClass, META__CONTENT);
+		createEAttribute(metaEClass, META__ID);
+		createEAttribute(metaEClass, META__PROPERTY);
+		createEAttribute(metaEClass, META__REFINES);
+		createEAttribute(metaEClass, META__SCHEME);
+		createEAttribute(metaEClass, META__DIR);
 
 		// Create enums
 		roleEEnum = createEEnum(ROLE);
@@ -852,8 +888,7 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private boolean isInitialized = false;
@@ -861,8 +896,7 @@
 	/**
 	 * Complete the initialization of the package and its meta-model.  This
 	 * method is guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void initializePackageContents() {
@@ -895,6 +929,10 @@
 		initEAttribute(getPackage_GenerateCoverHTML(), ecorePackage.getEBoolean(), "generateCoverHTML", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getPackage_GenerateTableOfContents(), ecorePackage.getEBoolean(), "generateTableOfContents", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getPackage_IncludeReferencedResources(), ecorePackage.getEBoolean(), "includeReferencedResources", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPackage_Prefix(), ecorePackage.getEString(), "prefix", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPackage_Lang(), ecorePackage.getEString(), "lang", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPackage_Dir(), ecorePackage.getEString(), "dir", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPackage_Id(), ecorePackage.getEString(), "id", null, 0, 1, org.eclipse.mylyn.docs.epub.opf.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(metadataEClass, Metadata.class, "Metadata", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getMetadata_Titles(), theDCPackage.getTitle(), null, "titles", null, 1, -1, Metadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
@@ -930,6 +968,8 @@
 		initEAttribute(getItem_Title(), ecorePackage.getEString(), "title", null, 0, 1, Item.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getItem_Generated(), ecorePackage.getEBoolean(), "generated", null, 0, 1, Item.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getItem_SourcePath(), ecorePackage.getEString(), "sourcePath", null, 0, 1, Item.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getItem_Properties(), ecorePackage.getEString(), "properties", null, 0, 1, Item.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getItem_Media_overlay(), ecorePackage.getEString(), "media_overlay", null, 0, 1, Item.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(spineEClass, Spine.class, "Spine", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getSpine_SpineItems(), this.getItemref(), null, "spineItems", null, 0, -1, Spine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
@@ -950,8 +990,13 @@
 		initEClass(toursEClass, Tours.class, "Tours", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(metaEClass, Meta.class, "Meta", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getMeta_Name(), ecorePackage.getEString(), "name", null, 1, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMeta_Content(), ecorePackage.getEString(), "content", null, 1, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Name(), ecorePackage.getEString(), "name", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Content(), ecorePackage.getEString(), "content", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Id(), ecorePackage.getEString(), "id", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Property(), ecorePackage.getEString(), "property", "", 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getMeta_Refines(), ecorePackage.getEString(), "refines", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Scheme(), ecorePackage.getEString(), "scheme", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMeta_Dir(), ecorePackage.getEString(), "dir", null, 0, 1, Meta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 
 		// Initialize enums and add enum literals
 		initEEnum(roleEEnum, Role.class, "Role"); //$NON-NLS-1$
@@ -1210,212 +1255,219 @@
 
 	/**
 	 * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	protected void createExtendedMetaDataAnnotations() {
-		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$		
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$	
 		addAnnotation
 		  (packageEClass, 
 		   source, 
 		   new String[] {
 			 "name", "package", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_Metadata(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_Manifest(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_Spine(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_Guide(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_Tours(), 
 		   source, 
 		   new String[] {
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getPackage_UniqueIdentifier(), 
 		   source, 
 		   new String[] {
 			 "name", "unique-identifier" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Titles(), 
 		   source, 
 		   new String[] {
 			 "name", "title", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Creators(), 
 		   source, 
 		   new String[] {
 			 "name", "creator", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Subjects(), 
 		   source, 
 		   new String[] {
 			 "name", "subject", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Descriptions(), 
 		   source, 
 		   new String[] {
 			 "name", "description", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Publishers(), 
 		   source, 
 		   new String[] {
 			 "name", "publisher", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Contributors(), 
 		   source, 
 		   new String[] {
 			 "name", "contributor", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Dates(), 
 		   source, 
 		   new String[] {
 			 "name", "date", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Types(), 
 		   source, 
 		   new String[] {
 			 "name", "type", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Formats(), 
 		   source, 
 		   new String[] {
 			 "name", "format", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Identifiers(), 
 		   source, 
 		   new String[] {
 			 "name", "identifier", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Sources(), 
 		   source, 
 		   new String[] {
 			 "name", "source", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Languages(), 
 		   source, 
 		   new String[] {
 			 "name", "language", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Relations(), 
 		   source, 
 		   new String[] {
 			 "name", "relation", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Coverages(), 
 		   source, 
 		   new String[] {
 			 "name", "coverage", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Rights(), 
 		   source, 
 		   new String[] {
 			 "name", "rights", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://purl.org/dc/elements/1.1/" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getMetadata_Metas(), 
 		   source, 
 		   new String[] {
 			 "name", "meta", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getManifest_Items(), 
 		   source, 
 		   new String[] {
 			 "name", "item", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getItem_Media_type(), 
 		   source, 
 		   new String[] {
 			 "name", "media-type" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getItem_Fallback_style(), 
 		   source, 
 		   new String[] {
 			 "name", "fallback-style" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getItem_Required_namespace(), 
 		   source, 
 		   new String[] {
 			 "name", "required-namespace" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getItem_Required_modules(), 
 		   source, 
 		   new String[] {
 			 "name", "required-modules" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
+		addAnnotation
+		  (getItem_Media_overlay(), 
+		   source, 
+		   new String[] {
+			 "name", "media-overlay", //$NON-NLS-1$ //$NON-NLS-2$
+			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
+		   });	
 		addAnnotation
 		  (getSpine_SpineItems(), 
 		   source, 
 		   new String[] {
 			 "name", "itemref", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });		
+		   });	
 		addAnnotation
 		  (getGuide_GuideItems(), 
 		   source, 
 		   new String[] {
 			 "name", "reference", //$NON-NLS-1$ //$NON-NLS-2$
 			 "namespace", "http://www.idpf.org/2007/opf" //$NON-NLS-1$ //$NON-NLS-2$
-		   });			
+		   });	
 		addAnnotation
 		  (roleEEnum, 
 		   source, 
@@ -1426,18 +1478,18 @@
 
 	/**
 	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
 	 * @generated
 	 */
 	protected void createEcoreAnnotations() {
-		String source = "http://www.eclipse.org/emf/2002/Ecore"; //$NON-NLS-1$																																
+		String source = "http://www.eclipse.org/emf/2002/Ecore"; //$NON-NLS-1$	
 		addAnnotation
 		  (referenceEClass, 
 		   source, 
 		   new String[] {
 			 "constraints", "validType" //$NON-NLS-1$ //$NON-NLS-2$
-		   });	
+		   });
 	}
 
 } //OPFPackageImpl
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/PackageImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/PackageImpl.java
index 0e2afd3..25f98f9 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/PackageImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/PackageImpl.java
@@ -28,6 +28,7 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getMetadata <em>Metadata</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getManifest <em>Manifest</em>}</li>
@@ -39,8 +40,11 @@
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#isGenerateCoverHTML <em>Generate Cover HTML</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#isGenerateTableOfContents <em>Generate Table Of Contents</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#isIncludeReferencedResources <em>Include Referenced Resources</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getPrefix <em>Prefix</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getLang <em>Lang</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getDir <em>Dir</em>}</li>
+ *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.PackageImpl#getId <em>Id</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -205,6 +209,94 @@
 	protected boolean includeReferencedResources = INCLUDE_REFERENCED_RESOURCES_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getPrefix() <em>Prefix</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getPrefix()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PREFIX_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPrefix() <em>Prefix</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getPrefix()
+	 * @generated
+	 * @ordered
+	 */
+	protected String prefix = PREFIX_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLang() <em>Lang</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getLang()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LANG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLang() <em>Lang</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getLang()
+	 * @generated
+	 * @ordered
+	 */
+	protected String lang = LANG_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDir() <em>Dir</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getDir()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DIR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDir() <em>Dir</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getDir()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dir = DIR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc --> 
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String id = ID_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -565,6 +657,98 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPrefix() {
+		return prefix;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPrefix(String newPrefix) {
+		String oldPrefix = prefix;
+		prefix = newPrefix;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.PACKAGE__PREFIX, oldPrefix, prefix));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLang() {
+		return lang;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLang(String newLang) {
+		String oldLang = lang;
+		lang = newLang;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.PACKAGE__LANG, oldLang, lang));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDir() {
+		return dir;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDir(String newDir) {
+		String oldDir = dir;
+		dir = newDir;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.PACKAGE__DIR, oldDir, dir));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @since 3.0 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setId(String newId) {
+		String oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OPFPackage.PACKAGE__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -612,6 +796,14 @@
 				return isGenerateTableOfContents();
 			case OPFPackage.PACKAGE__INCLUDE_REFERENCED_RESOURCES:
 				return isIncludeReferencedResources();
+			case OPFPackage.PACKAGE__PREFIX:
+				return getPrefix();
+			case OPFPackage.PACKAGE__LANG:
+				return getLang();
+			case OPFPackage.PACKAGE__DIR:
+				return getDir();
+			case OPFPackage.PACKAGE__ID:
+				return getId();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -654,6 +846,18 @@
 			case OPFPackage.PACKAGE__INCLUDE_REFERENCED_RESOURCES:
 				setIncludeReferencedResources((Boolean)newValue);
 				return;
+			case OPFPackage.PACKAGE__PREFIX:
+				setPrefix((String)newValue);
+				return;
+			case OPFPackage.PACKAGE__LANG:
+				setLang((String)newValue);
+				return;
+			case OPFPackage.PACKAGE__DIR:
+				setDir((String)newValue);
+				return;
+			case OPFPackage.PACKAGE__ID:
+				setId((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -696,6 +900,18 @@
 			case OPFPackage.PACKAGE__INCLUDE_REFERENCED_RESOURCES:
 				setIncludeReferencedResources(INCLUDE_REFERENCED_RESOURCES_EDEFAULT);
 				return;
+			case OPFPackage.PACKAGE__PREFIX:
+				setPrefix(PREFIX_EDEFAULT);
+				return;
+			case OPFPackage.PACKAGE__LANG:
+				setLang(LANG_EDEFAULT);
+				return;
+			case OPFPackage.PACKAGE__DIR:
+				setDir(DIR_EDEFAULT);
+				return;
+			case OPFPackage.PACKAGE__ID:
+				setId(ID_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -728,6 +944,14 @@
 				return generateTableOfContents != GENERATE_TABLE_OF_CONTENTS_EDEFAULT;
 			case OPFPackage.PACKAGE__INCLUDE_REFERENCED_RESOURCES:
 				return includeReferencedResources != INCLUDE_REFERENCED_RESOURCES_EDEFAULT;
+			case OPFPackage.PACKAGE__PREFIX:
+				return PREFIX_EDEFAULT == null ? prefix != null : !PREFIX_EDEFAULT.equals(prefix);
+			case OPFPackage.PACKAGE__LANG:
+				return LANG_EDEFAULT == null ? lang != null : !LANG_EDEFAULT.equals(lang);
+			case OPFPackage.PACKAGE__DIR:
+				return DIR_EDEFAULT == null ? dir != null : !DIR_EDEFAULT.equals(dir);
+			case OPFPackage.PACKAGE__ID:
+				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -752,6 +976,14 @@
 		result.append(generateTableOfContents);
 		result.append(", includeReferencedResources: "); //$NON-NLS-1$
 		result.append(includeReferencedResources);
+		result.append(", prefix: "); //$NON-NLS-1$
+		result.append(prefix);
+		result.append(", lang: "); //$NON-NLS-1$
+		result.append(lang);
+		result.append(", dir: "); //$NON-NLS-1$
+		result.append(dir);
+		result.append(", id: "); //$NON-NLS-1$
+		result.append(id);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ReferenceImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ReferenceImpl.java
index ee63635..7c84b39 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ReferenceImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ReferenceImpl.java
@@ -22,12 +22,12 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl#getType <em>Type</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl#getTitle <em>Title</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.ReferenceImpl#getHref <em>Href</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/SpineImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/SpineImpl.java
index 043aebf..14fe73f 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/SpineImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/SpineImpl.java
@@ -32,11 +32,11 @@
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl#getSpineItems <em>Spine Items</em>}</li>
  *   <li>{@link org.eclipse.mylyn.docs.epub.opf.impl.SpineImpl#getToc <em>Toc</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ToursImpl.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ToursImpl.java
index de7731b..3ab4a11 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ToursImpl.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/impl/ToursImpl.java
@@ -17,8 +17,6 @@
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Tours</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFSwitch.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFSwitch.java
index c1b7cf7..0da1acb 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFSwitch.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFSwitch.java
@@ -11,6 +11,8 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
 import org.eclipse.mylyn.docs.epub.opf.Guide;
 import org.eclipse.mylyn.docs.epub.opf.Item;
 import org.eclipse.mylyn.docs.epub.opf.Itemref;
@@ -35,7 +37,7 @@
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage
  * @generated
  */
-public class OPFSwitch<T> {
+public class OPFSwitch<T> extends Switch<T> {
 	/**
 	 * The cached model package
 	 * <!-- begin-user-doc -->
@@ -57,14 +59,16 @@
 	}
 
 	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
-	public T doSwitch(EObject theEObject) {
-		return doSwitch(theEObject.eClass(), theEObject);
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
 	}
 
 	/**
@@ -74,26 +78,7 @@
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
-	protected T doSwitch(EClass theEClass, EObject theEObject) {
-		if (theEClass.eContainer() == modelPackage) {
-			return doSwitch(theEClass.getClassifierID(), theEObject);
-		}
-		else {
-			List<EClass> eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch(eSuperTypes.get(0), theEObject);
-		}
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
+	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
 			case OPFPackage.PACKAGE: {
@@ -321,6 +306,7 @@
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
 	 * @generated
 	 */
+	@Override
 	public T defaultCase(EObject object) {
 		return null;
 	}
diff --git a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFValidator.java b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFValidator.java
index 6c6928e..44ecf28 100644
--- a/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFValidator.java
+++ b/org.eclipse.mylyn.docs.epub.core/src-gen/org/eclipse/mylyn/docs/epub/opf/util/OPFValidator.java
@@ -16,6 +16,7 @@
 import org.eclipse.mylyn.docs.epub.opf.Meta;
 import org.eclipse.mylyn.docs.epub.opf.Metadata;
 import org.eclipse.mylyn.docs.epub.opf.OPFPackage;
+import org.eclipse.mylyn.docs.epub.opf.Package;
 import org.eclipse.mylyn.docs.epub.opf.Reference;
 import org.eclipse.mylyn.docs.epub.opf.Role;
 import org.eclipse.mylyn.docs.epub.opf.Spine;
@@ -24,23 +25,21 @@
 
 /**
  * <!-- begin-user-doc --> The <b>Validator</b> for the model. <!-- end-user-doc -->
- * 
  * @see org.eclipse.mylyn.docs.epub.opf.OPFPackage
  * @generated
  */
 public class OPFValidator extends EObjectValidator {
 	/**
-	 * The cached model package <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * The cached model package
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public static final OPFValidator INSTANCE = new OPFValidator();
 
 	/**
-	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic
-	 * {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package. <!-- begin-user-doc --> <!--
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
-	 * 
 	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
 	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
 	 * @generated
@@ -50,22 +49,21 @@
 	/**
 	 * A constant with a fixed name that can be used as the base value for additional hand written constants. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 *
 	 * @generated
 	 */
 	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
 
 	/**
-	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a
-	 * derived class. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
 
 	/**
-	 * Creates an instance of the switch. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public OPFValidator() {
@@ -73,56 +71,56 @@
 	}
 
 	/**
-	 * Returns the package of this validator switch. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
 	protected EPackage getEPackage() {
-		return OPFPackage.eINSTANCE;
+	  return OPFPackage.eINSTANCE;
 	}
 
 	/**
-	 * Calls <code>validateXXX</code> for the corresponding classifier of the model. <!-- begin-user-doc --> <!--
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
-	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) {
+	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
 		switch (classifierID) {
-		case OPFPackage.PACKAGE:
-			return validatePackage((org.eclipse.mylyn.docs.epub.opf.Package) value, diagnostics, context);
-		case OPFPackage.METADATA:
-			return validateMetadata((Metadata) value, diagnostics, context);
-		case OPFPackage.MANIFEST:
-			return validateManifest((Manifest) value, diagnostics, context);
-		case OPFPackage.ITEM:
-			return validateItem((Item) value, diagnostics, context);
-		case OPFPackage.SPINE:
-			return validateSpine((Spine) value, diagnostics, context);
-		case OPFPackage.GUIDE:
-			return validateGuide((Guide) value, diagnostics, context);
-		case OPFPackage.REFERENCE:
-			return validateReference((Reference) value, diagnostics, context);
-		case OPFPackage.ITEMREF:
-			return validateItemref((Itemref) value, diagnostics, context);
-		case OPFPackage.TOURS:
-			return validateTours((Tours) value, diagnostics, context);
-		case OPFPackage.META:
-			return validateMeta((Meta) value, diagnostics, context);
-		case OPFPackage.ROLE:
-			return validateRole((Role) value, diagnostics, context);
-		case OPFPackage.TYPE:
-			return validateType((Type) value, diagnostics, context);
-		default:
-			return true;
+			case OPFPackage.PACKAGE:
+				return validatePackage((org.eclipse.mylyn.docs.epub.opf.Package)value, diagnostics, context);
+			case OPFPackage.METADATA:
+				return validateMetadata((Metadata)value, diagnostics, context);
+			case OPFPackage.MANIFEST:
+				return validateManifest((Manifest)value, diagnostics, context);
+			case OPFPackage.ITEM:
+				return validateItem((Item)value, diagnostics, context);
+			case OPFPackage.SPINE:
+				return validateSpine((Spine)value, diagnostics, context);
+			case OPFPackage.GUIDE:
+				return validateGuide((Guide)value, diagnostics, context);
+			case OPFPackage.REFERENCE:
+				return validateReference((Reference)value, diagnostics, context);
+			case OPFPackage.ITEMREF:
+				return validateItemref((Itemref)value, diagnostics, context);
+			case OPFPackage.TOURS:
+				return validateTours((Tours)value, diagnostics, context);
+			case OPFPackage.META:
+				return validateMeta((Meta)value, diagnostics, context);
+			case OPFPackage.ROLE:
+				return validateRole((Role)value, diagnostics, context);
+			case OPFPackage.TYPE:
+				return validateType((Type)value, diagnostics, context);
+			default:
+				return true;
 		}
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validatePackage(org.eclipse.mylyn.docs.epub.opf.Package package_, DiagnosticChain diagnostics,
@@ -132,7 +130,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateMetadata(Metadata metadata, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -141,7 +138,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateManifest(Manifest manifest, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -150,7 +146,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateItem(Item item, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -159,7 +154,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateSpine(Spine spine, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -168,7 +162,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateGuide(Guide guide, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -177,44 +170,25 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateReference(Reference reference, DiagnosticChain diagnostics, Map<Object, Object> context) {
-		if (!validate_NoCircularContainment(reference, diagnostics, context)) {
-			return false;
-		}
+		if (!validate_NoCircularContainment(reference, diagnostics, context)) return false;
 		boolean result = validate_EveryMultiplicityConforms(reference, diagnostics, context);
-		if (result || diagnostics != null) {
-			result &= validate_EveryDataValueConforms(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_EveryReferenceIsContained(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_EveryBidirectionalReferenceIsPaired(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_EveryProxyResolves(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_UniqueID(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_EveryKeyUnique(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validate_EveryMapEntryUnique(reference, diagnostics, context);
-		}
-		if (result || diagnostics != null) {
-			result &= validateReference_validType(reference, diagnostics, context);
-		}
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(reference, diagnostics, context);
+		if (result || diagnostics != null) result &= validateReference_validType(reference, diagnostics, context);
 		return result;
 	}
 
 	/**
 	 * Validates the validType constraint of '<em>Reference</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 *
 	 * @generated NOT
 	 */
 	public boolean validateReference_validType(Reference reference, DiagnosticChain diagnostics,
@@ -225,10 +199,10 @@
 		// Must match one of the defined types.
 		if (Type.get(reference.getType()) == null) {
 			if (diagnostics != null) {
-				diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0,
-						"_UI_GenericConstraint_diagnostic", //$NON-NLS-1$
-						new Object[] { "validType", getObjectLabel(reference, context) }, //$NON-NLS-1$
-						new Object[] { reference }, context));
+				diagnostics.add(
+						createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0, "_UI_GenericConstraint_diagnostic", //$NON-NLS-1$
+								new Object[] { "validType", getObjectLabel(reference, context) }, //$NON-NLS-1$
+								new Object[] { reference }, context));
 			}
 			return false;
 
@@ -238,7 +212,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateItemref(Itemref itemref, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -247,7 +220,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateTours(Tours tours, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -255,17 +227,31 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
-	 * @generated
+	 * The Meta items are very different in the EPUB 2 and 3 specifications.
+	 *
+	 * @generated NOT
 	 */
 	public boolean validateMeta(Meta meta, DiagnosticChain diagnostics, Map<Object, Object> context) {
-		return validate_EveryDefaultConstraint(meta, diagnostics, context);
+		org.eclipse.mylyn.docs.epub.opf.Package p = (Package) meta.eContainer().eContainer();
+		String version = p.getVersion();
+		if (version.equals("3.0")) {
+			// Anything goes
+			return validate_EveryDefaultConstraint(meta, diagnostics, context);
+		} else {
+			// May not use the 3.0 Meta element
+			return validate_EveryDefaultConstraint(meta, diagnostics, context)
+					&& !meta.eIsSet(OPFPackage.Literals.META__PROPERTY)
+					&& !meta.eIsSet(OPFPackage.Literals.META__REFINES)
+					&& !meta.eIsSet(OPFPackage.Literals.META__ID)
+					&& !meta.eIsSet(OPFPackage.Literals.META__DIR)
+					&& !meta.eIsSet(OPFPackage.Literals.META__SCHEME)
+					&& meta.eIsSet(OPFPackage.Literals.META__NAME)
+					&& meta.eIsSet(OPFPackage.Literals.META__CONTENT);
+		}
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateRole(Role role, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -274,7 +260,6 @@
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public boolean validateType(Type type, DiagnosticChain diagnostics, Map<Object, Object> context) {
@@ -284,7 +269,7 @@
 	/**
 	 * Returns the resource locator that will be used to fetch messages for this validator's diagnostics. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 *
 	 * @generated
 	 */
 	@Override
diff --git a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUB.java b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUB.java
index 647d562..373e9ba 100644
--- a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUB.java
+++ b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUB.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2014 Torkild U. Resheim.
+ * Copyright (c) 2011-2015 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -47,17 +47,14 @@
 import org.xml.sax.ext.DefaultHandler2;
 
 /**
- * Represents one EPUB file. Currently <b>only</b> version 2.0.1 of the EPUB specification is supported. One or more
- * publications can be added and will be a part of the distribution when packed. See the <a
- * href="http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm#Section1.2">OPS specification</a> for definitions of words and
- * terms.
+ * Represents one EPUB file. One or more publications can be added and will be a part of the distribution when packed.
  * <p>
  * The simplest usage of this API may look like the following:
  * </p>
  *
  * <pre>
  * EPUB epub = new EPUB();
- * OPSPublication oebps = new OPS2Publication();
+ * OPSPublication oebps = new OPSPublication();
  * oebps.addItem(new File(&quot;chapter.xhtml&quot;));
  * epub.add(oebps);
  * epub.pack(new File(&quot;book.epub&quot;));
@@ -69,10 +66,21 @@
  *
  * @author Torkild U. Resheim
  * @see http://www.idpf.org/doc_library/epub/OPS_2.0.1_draft.htm
+ * @see http://www.idpf.org/epub/301/spec/epub-publications.html
  */
 public class EPUB {
 
 	/**
+	 * @since 3.0
+	 */
+	public enum PublicationVersion {
+		/** Unsupported or undetected publication version. */
+		UNKNOWN, /** Open Publication Structure (OPS) 2.0.1 */
+		V2, /** EPUB Publications 3.0.1 */
+		V3
+	}
+
+	/**
 	 * SAX parser for detecting the version of an OEBPS contained within an EPUB.
 	 */
 	private class VersionDetector extends DefaultHandler2 {
@@ -80,7 +88,8 @@
 		private String versionString;
 
 		@Override
-		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes attributes)
+				throws SAXException {
 			if (qName.equals("opf:package") || qName.equals("package")) {//$NON-NLS-1$ //$NON-NLS-2$
 				versionString = attributes.getValue("version"); //$NON-NLS-1$
 			}
@@ -287,33 +296,31 @@
 	}
 
 	/**
-	 * Tests whether or not the OEBPS is in a version that is supported by this tooling.
+	 * Determines the publication version of the root file.
 	 *
 	 * @param rootFile
 	 *            the root file
-	 * @return <code>true</code> if the OEBPS can be read
+	 * @return the publication version
 	 */
-	private boolean isSupportedOEBPS(File rootFile) {
+	private PublicationVersion readPublicationVersion(File rootFile) {
 		try {
 			SAXParserFactory factory = SAXParserFactory.newInstance();
 			VersionDetector vd = new VersionDetector();
 			SAXParser parser = factory.newSAXParser();
 			parser.parse(rootFile, vd);
 			if (vd.versionString == null) {
-				return false;
+				return PublicationVersion.UNKNOWN;
 			}
 			String[] segments = vd.versionString.split("\\."); //$NON-NLS-1$
 			if (segments[0].equals("2") && segments[1].equals("0")) { //$NON-NLS-1$ //$NON-NLS-2$
-				return true;
+				return PublicationVersion.V2;
+			} else if (segments[0].equals("3") && segments[1].equals("0")) { //$NON-NLS-1$ //$NON-NLS-2$
+				return PublicationVersion.V3;
 			} else {
-				return false;
+				return PublicationVersion.UNKNOWN;
 			}
-		} catch (ParserConfigurationException e) {
-			return false;
-		} catch (SAXException e) {
-			return false;
-		} catch (IOException e) {
-			return false;
+		} catch (ParserConfigurationException | SAXException | IOException e) {
+			return PublicationVersion.UNKNOWN;
 		}
 	}
 
@@ -500,13 +507,21 @@
 		for (RootFile rootFile : rootFiles) {
 			if (rootFile.getMediaType().equals(MIMETYPE_OEBPS)) {
 				File root = new File(rootFolder.getAbsolutePath() + File.separator + rootFile.getFullPath());
-				if (isSupportedOEBPS(root)) {
-					Publication ops = Publication.getVersion2Instance();
-					ops.unpack(root);
-					rootFile.setPublication(ops);
-				} else {
+				switch (readPublicationVersion(root)) {
+				case V2:
+					Publication ops2 = Publication.getVersion2Instance();
+					ops2.unpack(root);
+					rootFile.setPublication(ops2);
+					break;
+				case V3:
+					Publication ops3 = Publication.getVersion3Instance();
+					ops3.unpack(root);
+					rootFile.setPublication(ops3);
+					break;
+				default:
 					log(MessageFormat.format("Unsupported OEBPS version in root file {0}", rootFile.getFullPath()), //$NON-NLS-1$
 							Severity.WARNING);
+					break;
 				}
 			}
 		}
diff --git a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUBPublication.java b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUBPublication.java
new file mode 100644
index 0000000..26d7ead
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/EPUBPublication.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Torkild U. Resheim and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Torkild U. Resheim - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.docs.epub.core;
+
+import org.eclipse.mylyn.docs.epub.opf.OPFFactory;
+
+/**
+ * This type represents one EPUB revision 3.0 formatted publication. It inherits from the EPUB revision 2.0.1
+ * implementation since this will allow for forward compatible publications to be produced.
+ *
+ * @author Torkild U. Resheim
+ * @since 3.0
+ * @see http://www.idpf.org/epub/301/spec/epub-publications.html
+ */
+public class EPUBPublication extends OPSPublication {
+
+	@Override
+	protected String getVersion() {
+		return "3.0"; //$NON-NLS-1$
+	}
+
+	/**
+	 * Adds a new EPUB 3 meta item to the publication.
+	 *
+	 * @param id
+	 *            optional identifier
+	 * @param property
+	 *            a required property
+	 * @param refines
+	 *            optional expression or resource augmented with the element
+	 * @param scheme
+	 *            the optional property data type
+	 * @return the new meta
+	 * @see http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-meta-elem
+	 * @since 3.0
+	 */
+	public org.eclipse.mylyn.docs.epub.opf.Meta addMeta(String id, String property, String refines, String scheme) {
+		if (property == null) {
+			throw new IllegalArgumentException("A property must be specified"); //$NON-NLS-1$
+		}
+		org.eclipse.mylyn.docs.epub.opf.Meta opf = OPFFactory.eINSTANCE.createMeta();
+		opf.setId(id);
+		opf.setProperty(property);
+		opf.setRefines(refines);
+		opf.setScheme(scheme);
+		opfPackage.getMetadata().getMetas().add(opf);
+		return opf;
+	}
+}
diff --git a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/OPSPublication.java b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/OPSPublication.java
index 72650ee..2a506f5 100644
--- a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/OPSPublication.java
+++ b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/OPSPublication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2014 Torkild U. Resheim.
+ * Copyright (c) 2011-2015 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -59,6 +59,7 @@
  * This type represents one EPUB revision 2.0.1 formatted publication.
  *
  * @author Torkild U. Resheim
+ * @see http://www.idpf.org/doc_library/epub/OPS_2.0.1_draft.htm
  */
 public class OPSPublication extends Publication {
 
@@ -102,6 +103,29 @@
 	}
 
 	/**
+	 * Adds a new EPUB 2 meta item to the publication.
+	 *
+	 * @param name
+	 *            name of the item
+	 * @param value
+	 *            content of the item
+	 * @return the new meta
+	 */
+	public org.eclipse.mylyn.docs.epub.opf.Meta addMeta(String name, String value) {
+		if (value == null) {
+			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
+		}
+		if (name == null) {
+			throw new IllegalArgumentException("A name must be specified"); //$NON-NLS-1$
+		}
+		org.eclipse.mylyn.docs.epub.opf.Meta opf = OPFFactory.eINSTANCE.createMeta();
+		opf.setName(name);
+		opf.setContent(value);
+		opfPackage.getMetadata().getMetas().add(opf);
+		return opf;
+	}
+
+	/**
 	 * This mechanism will traverse the spine of the publication (which is representing the reading order) and parse
 	 * each file for information that can be used to assemble a table of contents. Only XHTML type of files will be
 	 * taken into consideration.
@@ -135,7 +159,8 @@
 					&& referencedItem.getMedia_type().equals(MIMETYPE_XHTML)) {
 				File file = new File(referencedItem.getFile());
 				FileInputStream fis = new FileInputStream(file);
-				log(MessageFormat.format(Messages.getString("OPS2Publication.1"), referencedItem.getHref()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				log(MessageFormat.format(Messages.getString("OPS2Publication.1"), referencedItem.getHref()), //$NON-NLS-1$
+						Severity.VERBOSE, indent);
 				playOrder = TOCGenerator.parse(new InputSource(fis), referencedItem.getHref(), ncxTOC, playOrder);
 			}
 		}
@@ -152,6 +177,16 @@
 		return "2.0"; //$NON-NLS-1$
 	}
 
+	private boolean isLegalType(Item item) {
+		boolean legal = false;
+		for (String type : CORE_MEDIA_TYPES) {
+			if (item.getMedia_type().equals(type)) {
+				legal = true;
+			}
+		}
+		return legal;
+	}
+
 	@Override
 	protected void readTableOfContents(File tocFile) throws IOException {
 		ResourceSet resourceSet = new ResourceSetImpl();
@@ -206,6 +241,25 @@
 				});
 	}
 
+	/**
+	 * Convenience method for adding a cover to the publication. This method will make sure the required actions are
+	 * taken to provide a cover page for all reading systems.
+	 *
+	 * @param image
+	 *            the cover image (jpeg, png, svg or gif)
+	 * @param title
+	 *            title of the cover page
+	 */
+	@Override
+	public void setCover(File image, String title) {
+		// Add the cover image to the manifest
+		Item item = addItem(COVER_IMAGE_ID, null, image, null, null, false, false, true);
+		item.setTitle(title);
+		// Point to the cover using a meta tag
+		addMeta(COVER_ID, COVER_IMAGE_ID);
+		opfPackage.setGenerateCoverHTML(true);
+	}
+
 	@Override
 	public void setTableOfContents(File ncxFile) {
 		// Add the file to the publication and make sure we use the table of
@@ -264,24 +318,25 @@
 	 * @throws ParserConfigurationException
 	 */
 	@Override
-	protected List<ValidationMessage> validateContents() throws ParserConfigurationException, SAXException, IOException {
+	protected List<ValidationMessage> validateContents()
+			throws ParserConfigurationException, SAXException, IOException {
 		EList<Item> manifestItems = opfPackage.getManifest().getItems();
 		ArrayList<ValidationMessage> messages = new ArrayList<ValidationMessage>();
 		for (Item item : manifestItems) {
 			if (!isLegalType(item)) {
 				Item fallback = getItemById(item.getFallback());
 				if (fallback == null) {
-					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING, MessageFormat.format(
-							Messages.getString("OPS2Publication.13"), //$NON-NLS-1$
-							item.getHref())));
+					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING,
+							MessageFormat.format(Messages.getString("OPS2Publication.13"), //$NON-NLS-1$
+									item.getHref())));
 				} else if (!isLegalType(fallback)) {
-					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING, MessageFormat.format(
-							Messages.getString("OPS2Publication.14"), //$NON-NLS-1$
-							item.getHref())));
+					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING,
+							MessageFormat.format(Messages.getString("OPS2Publication.14"), //$NON-NLS-1$
+									item.getHref())));
 				} else {
-					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING, MessageFormat.format(
-							Messages.getString("OPS2Publication.15"), //$NON-NLS-1$
-							item.getHref())));
+					messages.add(new ValidationMessage(ValidationMessage.Severity.WARNING,
+							MessageFormat.format(Messages.getString("OPS2Publication.15"), //$NON-NLS-1$
+									item.getHref())));
 				}
 			}
 			// Validate the XHTML items to see if they contain illegal attributes and elements
@@ -294,16 +349,6 @@
 		return messages;
 	}
 
-	private boolean isLegalType(Item item) {
-		boolean legal = false;
-		for (String type : CORE_MEDIA_TYPES) {
-			if (item.getMedia_type().equals(type)) {
-				legal = true;
-			}
-		}
-		return legal;
-	}
-
 	/**
 	 * Writes the table of contents file in the specified folder using the NCX format. If a table of contents file has
 	 * not been specified an empty one will be created (since it is required to have one). If in addition it has been
@@ -318,8 +363,8 @@
 	 * @see {@link #setTableOfContents(File)}
 	 */
 	@Override
-	protected void writeTableOfContents(File oepbsFolder) throws IOException, ParserConfigurationException,
-			SAXException {
+	protected void writeTableOfContents(File oepbsFolder)
+			throws IOException, ParserConfigurationException, SAXException {
 		// If a table of contents file has not been specified we must create
 		// one. If it has been specified it will be copied.
 		if (getItemById(opfPackage.getSpine().getToc()) == null) {
diff --git a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/Publication.java b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/Publication.java
index 34a95df..3988d24 100644
--- a/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/Publication.java
+++ b/org.eclipse.mylyn.docs.epub.core/src/org/eclipse/mylyn/docs/epub/core/Publication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2014 Torkild U. Resheim.
+ * Copyright (c) 2011-2015 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -94,8 +94,12 @@
 	// * Keep all data in the model, use "transient" for temporary properties
 	// * Do not actually do anything before the final assemble
 
-	/** Default identifier for the cover page */
-	private static final String COVER_ID = "cover"; //$NON-NLS-1$
+	/**
+	 * Default identifier for the cover page
+	 *
+	 * @since 3.0
+	 */
+	protected static final String COVER_ID = "cover"; //$NON-NLS-1$
 
 	/** Publication identifier for the cover image item */
 	public static final String COVER_IMAGE_ID = "cover-image"; //$NON-NLS-1$
@@ -124,6 +128,16 @@
 		return new OPSPublication();
 	}
 
+	/**
+	 * Returns an <i>EPUB version 3.0</i> instance.
+	 *
+	 * @return an EPUB instance
+	 * @since 3.0
+	 */
+	public static Publication getVersion3Instance() {
+		return new EPUBPublication();
+	}
+
 	/** Indentation level used when logging */
 	protected int indent = 0;
 
@@ -219,7 +233,8 @@
 	 */
 	public Contributor addContributor(String id, Locale lang, String name, Role role, String fileAs) {
 		log(MessageFormat.format(Messages.getString("OPSPublication.2"), name, role, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Contributor dc = DCFactory.eINSTANCE.createContributor();
 		setDcLocalized(dc, id, lang, name);
 		if (role != null) {
@@ -291,9 +306,11 @@
 	 * @return the new creator
 	 */
 	public Creator addCreator(String id, Locale lang, String name, Role role, String fileAs) {
-		log(MessageFormat.format(Messages.getString("OPSPublication.4"), name, role, lang == null //$NON-NLS-1$
-				? Messages.getString("OPSPublication.3") //$NON-NLS-1$
-				: lang.getDisplayName()), Severity.VERBOSE, indent);
+		log(MessageFormat.format(Messages.getString("OPSPublication.4"), name, role, //$NON-NLS-1$
+				lang == null
+						? Messages.getString("OPSPublication.3") //$NON-NLS-1$
+						: lang.getDisplayName()),
+				Severity.VERBOSE, indent);
 		Creator dc = DCFactory.eINSTANCE.createCreator();
 		setDcLocalized(dc, id, lang, name);
 		if (role != null) {
@@ -320,10 +337,10 @@
 	}
 
 	/**
-	 * Date of publication, in the format defined by the W3C specification
-	 * "<a href="http://www.w3.org/TR/NOTE-datetime">Date and Time Formats</a>" and by ISO 8601. In particular, dates
-	 * without times must be represented in the form YYYY[-MM[-DD]]: a required 4-digit year, an optional 2-digit month,
-	 * and if the month is given, an optional 2-digit day of month.
+	 * Date of publication, in the format defined by the W3C specification "<a href="http://www.w3.org/TR/NOTE-datetime
+	 * ">Date and Time Formats</a>" and by ISO 8601. In particular, dates without times must be represented in the form
+	 * YYYY[-MM[-DD]]: a required 4-digit year, an optional 2-digit month, and if the month is given, an optional
+	 * 2-digit day of month.
 	 *
 	 * @param value
 	 *            the date string
@@ -360,11 +377,11 @@
 	}
 
 	/**
-	 * Date of publication, in the format defined by the W3C specification
-	 * "<a href="http://www.w3.org/TR/NOTE-datetime">Date and Time Formats</a>" and by ISO 8601. In particular, dates
-	 * without times must be represented in the form YYYY[-MM[-DD]]: a required 4-digit year, an optional 2-digit month,
-	 * and if the month is given, an optional 2-digit day of month. The event attribute is optional, possible values may
-	 * include: "creation", "publication", and "modification".
+	 * Date of publication, in the format defined by the W3C specification "<a href="http://www.w3.org/TR/NOTE-datetime
+	 * ">Date and Time Formats</a>" and by ISO 8601. In particular, dates without times must be represented in the form
+	 * YYYY[-MM[-DD]]: a required 4-digit year, an optional 2-digit month, and if the month is given, an optional
+	 * 2-digit day of month. The event attribute is optional, possible values may include: "creation", "publication",
+	 * and "modification".
 	 *
 	 * @param id
 	 *            optional identifier
@@ -413,8 +430,8 @@
 		if (value == null) {
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
-		log(MessageFormat.format(
-				Messages.getString("OPSPublication.6"), value, lang == null ? Messages.getString("OPSPublication.3") : lang), //$NON-NLS-1$ //$NON-NLS-2$
+		log(MessageFormat.format(Messages.getString("OPSPublication.6"), value, //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang), //$NON-NLS-1$
 				Severity.VERBOSE, indent);
 		Description dc = DCFactory.eINSTANCE.createDescription();
 		setDcLocalized(dc, id, lang, value);
@@ -601,29 +618,6 @@
 	}
 
 	/**
-	 * Adds a new meta item to the publication.
-	 *
-	 * @param name
-	 *            name of the item
-	 * @param value
-	 *            content of the item
-	 * @return the new meta
-	 */
-	public org.eclipse.mylyn.docs.epub.opf.Meta addMeta(String name, String value) {
-		if (value == null) {
-			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
-		}
-		if (name == null) {
-			throw new IllegalArgumentException("A name must be specified"); //$NON-NLS-1$
-		}
-		org.eclipse.mylyn.docs.epub.opf.Meta opf = OPFFactory.eINSTANCE.createMeta();
-		opf.setName(name);
-		opf.setContent(value);
-		opfPackage.getMetadata().getMetas().add(opf);
-		return opf;
-	}
-
-	/**
 	 * Adds a new publisher to the publication.
 	 *
 	 * @param value
@@ -650,7 +644,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.9"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Publisher dc = DCFactory.eINSTANCE.createPublisher();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getPublishers().add(dc);
@@ -715,7 +710,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.12"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Relation dc = DCFactory.eINSTANCE.createRelation();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getRelations().add(dc);
@@ -749,7 +745,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.14"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Rights dc = DCFactory.eINSTANCE.createRights();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getRights().add(dc);
@@ -783,7 +780,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.16"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Source dc = DCFactory.eINSTANCE.createSource();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getSources().add(dc);
@@ -815,7 +813,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.18"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Subject dc = DCFactory.eINSTANCE.createSubject();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getSubjects().add(dc);
@@ -849,7 +848,8 @@
 			throw new IllegalArgumentException("A value must be specified"); //$NON-NLS-1$
 		}
 		log(MessageFormat.format(Messages.getString("OPSPublication.20"), value, //$NON-NLS-1$
-				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, indent); //$NON-NLS-1$
+				lang == null ? Messages.getString("OPSPublication.3") : lang.getDisplayName()), Severity.VERBOSE, //$NON-NLS-1$
+				indent);
 		Title dc = DCFactory.eINSTANCE.createTitle();
 		setDcLocalized(dc, id, lang, value);
 		opfPackage.getMetadata().getTitles().add(dc);
@@ -1025,15 +1025,18 @@
 				File source = null;
 				if (item.getSourcePath() != null) {
 					source = new File(item.getSourcePath());
-					log(MessageFormat.format(Messages.getString("OPSPublication.24"), source), Severity.VERBOSE, indent); //$NON-NLS-1$
+					log(MessageFormat.format(Messages.getString("OPSPublication.24"), source), Severity.VERBOSE, //$NON-NLS-1$
+							indent);
 					references.put(source, ReferenceScanner.parse(item));
 				} else {
 					source = new File(item.getFile());
-					log(MessageFormat.format(Messages.getString("OPSPublication.25"), source), Severity.VERBOSE, indent); //$NON-NLS-1$
+					log(MessageFormat.format(Messages.getString("OPSPublication.25"), source), Severity.VERBOSE, //$NON-NLS-1$
+							indent);
 				}
 				references.put(source, ReferenceScanner.parse(item));
 			} else {
-				log(MessageFormat.format(Messages.getString("OPSPublication.26"), item.getFile()), Severity.DEBUG, indent); //$NON-NLS-1$
+				log(MessageFormat.format(Messages.getString("OPSPublication.26"), item.getFile()), Severity.DEBUG, //$NON-NLS-1$
+						indent);
 			}
 		}
 		indent--;
@@ -1060,8 +1063,9 @@
 					try {
 						addItem(null, null, file, relativePath.getParent(), null, false, false, false);
 					} catch (Exception e) {
-						throw new RuntimeException(String.format(
-								"Could not add file referenced from \"%1$s\", %2$s", root, e.getMessage()), //$NON-NLS-1$
+						throw new RuntimeException(
+								String.format("Could not add file referenced from \"%1$s\", %2$s", root, //$NON-NLS-1$
+										e.getMessage()),
 								e);
 					}
 				}
@@ -1238,15 +1242,7 @@
 	 * @param title
 	 *            title of the cover page
 	 */
-	public void setCover(File image, String title) {
-		// Add the cover image to the manifest
-		Item item = addItem(COVER_IMAGE_ID, null, image, null, null, false, false, true);
-		item.setTitle(title);
-		// Point to the cover using a meta tag
-		addMeta(COVER_ID, COVER_IMAGE_ID);
-		opfPackage.setGenerateCoverHTML(true);
-
-	}
+	public abstract void setCover(File image, String title);
 
 	/**
 	 * Sets common properties for <i>Dublin Core</i> elements.
@@ -1350,8 +1346,8 @@
 	 * @throws SAXException
 	 * @throws ParserConfigurationException
 	 */
-	protected abstract List<ValidationMessage> validateContents() throws FileNotFoundException, IOException,
-			SAXException, ParserConfigurationException;
+	protected abstract List<ValidationMessage> validateContents()
+			throws FileNotFoundException, IOException, SAXException, ParserConfigurationException;
 
 	/**
 	 * Validates the data model contents.
@@ -1403,7 +1399,8 @@
 						indent);
 				FileWriter fw = new FileWriter(coverFile);
 				fw.append("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n"); //$NON-NLS-1$
-				fw.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"); //$NON-NLS-1$
+				fw.append(
+						"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"); //$NON-NLS-1$
 				fw.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"); //$NON-NLS-1$
 				fw.append("  <head>\n"); //$NON-NLS-1$
 				fw.append("    <title>" + coverImage.getTitle() + "</title>\n"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1477,6 +1474,6 @@
 	 *            the folder to write in
 	 * @throws Exception
 	 */
-	protected abstract void writeTableOfContents(File rootFolder) throws IOException, ParserConfigurationException,
-			SAXException;
+	protected abstract void writeTableOfContents(File rootFolder)
+			throws IOException, ParserConfigurationException, SAXException;
 }
diff --git a/org.eclipse.mylyn.docs.epub.help/docs/introduction.textile b/org.eclipse.mylyn.docs.epub.help/docs/introduction.textile
index 17ed6ef..79fe4ec 100644
--- a/org.eclipse.mylyn.docs.epub.help/docs/introduction.textile
+++ b/org.eclipse.mylyn.docs.epub.help/docs/introduction.textile
@@ -8,6 +8,8 @@
 
 p. The EPUB support in Eclipse is built around an EMF data model describing the publication along with various mechanisms to manipulate this structure and assemble a EPUB file. The model is expressed in "Ecore":http://wiki.eclipse.org/Ecore, representing the "Open Packaging Format (OPF)":http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm, a subset of Dublin Core and the Navigation Control File (NCX). All required parts of a properly assembled EPUB file following the 2.0.1 revision of the standard.
 
+p. In addition support has been added for forward compatible EPUB 3 files to be read. These are EPUB 3 files that contains all the the artifacts and attributes required for an EPUB 2 reading system. Note that while EPUB 3 files can be read by these tools, corrently only EPUB 2 files can be produced.
+
 p. The mechanisms mentioned is an API for handling the EPUB and a Ant task that can be used during building. The following code shows the minimum Ant script required to generate a publication.
 
 bc.. 
diff --git a/org.eclipse.mylyn.docs.epub.sdk-feature/feature.xml b/org.eclipse.mylyn.docs.epub.sdk-feature/feature.xml
index 62cf842..2fadfd6 100644
--- a/org.eclipse.mylyn.docs.epub.sdk-feature/feature.xml
+++ b/org.eclipse.mylyn.docs.epub.sdk-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.mylyn.docs.epub.sdk"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="3.0.0.qualifier"
       provider-name="%providerName"
       plugin="org.eclipse.mylyn.docs.epub.core"
       license-feature="org.eclipse.license"
diff --git a/org.eclipse.mylyn.docs.epub.sdk-feature/pom.xml b/org.eclipse.mylyn.docs.epub.sdk-feature/pom.xml
index 0504195..f106d82 100644
--- a/org.eclipse.mylyn.docs.epub.sdk-feature/pom.xml
+++ b/org.eclipse.mylyn.docs.epub.sdk-feature/pom.xml
@@ -8,6 +8,6 @@
     <version>2.6.0-SNAPSHOT</version>
   </parent>
   <artifactId>org.eclipse.mylyn.docs.epub.sdk</artifactId>
-  <version>2.0.0-SNAPSHOT</version>
+  <version>3.0.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/org.eclipse.mylyn.docs.epub.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.docs.epub.tests/.settings/org.eclipse.jdt.core.prefs
index 8840a93..5dcf3f1 100644
--- a/org.eclipse.mylyn.docs.epub.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.mylyn.docs.epub.tests/.settings/org.eclipse.jdt.core.prefs
@@ -161,10 +161,8 @@
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
diff --git a/org.eclipse.mylyn.docs.epub.tests/META-INF/MANIFEST.MF b/org.eclipse.mylyn.docs.epub.tests/META-INF/MANIFEST.MF
index aaf31eb..ade3775 100644
--- a/org.eclipse.mylyn.docs.epub.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.docs.epub.tests/META-INF/MANIFEST.MF
@@ -2,14 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.mylyn.docs.epub.tests
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Require-Bundle: org.junit,
  org.apache.ant;bundle-version="1.8.0",
  org.apache.ant.source;bundle-version="1.8.0",
  org.eclipse.emf.ecore;bundle-version="2.5.0",
- org.eclipse.mylyn.docs.epub.core;bundle-version="1.0.0"
+ org.eclipse.mylyn.docs.epub.core;bundle-version="3.0.0",
+ org.eclipse.mylyn.docs.epub.core
 Bundle-ClassPath: .,
  epubcheck/epubcheck-3.0.1.jar,
  epubcheck/lib/commons-compress-1.4.1.jar,
@@ -17,7 +18,8 @@
  epubcheck/lib/jing-20120724.0.0.jar,
  epubcheck/lib/sac-1.3.jar,
  epubcheck/lib/Saxon-HE-9.4.0.6.jar
-Import-Package: org.junit
+Import-Package: org.eclipse.mylyn.docs.epub.core,
+ org.junit
 Export-Package: org.eclipse.mylyn.docs.epub.tests;x-internal:=true,
  org.eclipse.mylyn.docs.epub.tests.ant;x-internal:=true,
  org.eclipse.mylyn.docs.epub.tests.api;x-internal:=true,
diff --git a/org.eclipse.mylyn.docs.epub.tests/build.properties b/org.eclipse.mylyn.docs.epub.tests/build.properties
index 106d4c3..67916d4 100644
--- a/org.eclipse.mylyn.docs.epub.tests/build.properties
+++ b/org.eclipse.mylyn.docs.epub.tests/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2012 Torkild U. Resheim
+# Copyright (c) 2012-2015 Torkild U. Resheim
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/org.eclipse.mylyn.docs.epub.tests/pom.xml b/org.eclipse.mylyn.docs.epub.tests/pom.xml
index 5526f86..9869ed9 100644
--- a/org.eclipse.mylyn.docs.epub.tests/pom.xml
+++ b/org.eclipse.mylyn.docs.epub.tests/pom.xml
@@ -9,7 +9,7 @@
 		<version>2.6.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>org.eclipse.mylyn.docs.epub.tests</artifactId>
-	<version>2.1.0-SNAPSHOT</version>
+	<version>3.0.0-SNAPSHOT</version>
 	<packaging>eclipse-test-plugin</packaging>
   <properties>
     <test.suite>${project.artifactId}.AllTests</test.suite>
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/AllTests.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/AllTests.java
index a29bd4d..57e8470 100644
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/AllTests.java
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/AllTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2014 Torkild U. Resheim.
+ * Copyright (c) 2011-2015 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -11,17 +11,18 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.epub.tests;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.mylyn.docs.epub.tests.api.TestEPUB;
-import org.eclipse.mylyn.docs.epub.tests.api.TestOPS2Publication;
+import org.eclipse.mylyn.docs.epub.tests.api.TestEPUBPublication;
 import org.eclipse.mylyn.docs.epub.tests.api.TestOPSPublication;
+import org.eclipse.mylyn.docs.epub.tests.api.TestPublication;
 import org.eclipse.mylyn.docs.epub.tests.core.TestEPUBFileUtil;
 import org.eclipse.mylyn.docs.epub.tests.core.TestEclipseTocImporter;
 import org.eclipse.mylyn.docs.epub.tests.core.TestOPSValidator;
 import org.eclipse.mylyn.docs.epub.tests.core.TestTOCGenerator;
 
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
 @SuppressWarnings("nls")
 public class AllTests {
 	public static Test suite() {
@@ -32,8 +33,9 @@
 		TestSuite suite = new TestSuite("Tests for org.eclipse.mylyn.docs.epub");
 		// API tests
 		suite.addTestSuite(TestEPUB.class);
-		suite.addTestSuite(TestOPS2Publication.class);
 		suite.addTestSuite(TestOPSPublication.class);
+		suite.addTestSuite(TestEPUBPublication.class);
+		suite.addTestSuite(TestPublication.class);
 		// Core tests
 		suite.addTestSuite(TestEPUBFileUtil.class);
 		suite.addTestSuite(TestOPSValidator.class);
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/ValidationReport.j b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/ValidationReport.j
deleted file mode 100644
index a16d851..0000000
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/ValidationReport.j
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 Torkild U. Resheim and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Torkild U. Resheim - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.docs.epub.tests;
-
-import java.util.ArrayList;
-
-import com.adobe.epubcheck.api.Report;
-import com.adobe.epubcheck.util.FeatureEnum;
-
-public class ValidationReport implements Report {
-
-	private final ArrayList<String> errors;
-
-	private final ArrayList<String> warnings;
-
-	private final String ePubName;
-
-	public ValidationReport(String ePubName) {
-		this.ePubName = ePubName;
-		errors = new ArrayList<String>();
-		warnings = new ArrayList<String>();
-	}
-
-	@SuppressWarnings("nls")
-	public void error(String resource, int line, int column, String message) {
-		String log = "ERROR: " + ePubName + (resource == null ? "" : "/" + resource)
-				+ (line <= 0 ? "" : "(" + line + ")") + ": " + message;
-		errors.add(log);
-	}
-
-	public String getErrors() {
-		StringBuilder sb = new StringBuilder();
-		for (String error : errors) {
-			sb.append("\n"); //$NON-NLS-1$
-			sb.append(error);
-		}
-		return sb.toString();
-	}
-
-	public void exception(String arg0, Exception arg1) {
-		// ignore
-	}
-
-	@SuppressWarnings("nls")
-	public void warning(String resource, int line, String message) {
-		System.err.println("WARNING: " + ePubName + (resource == null ? "" : "/" + resource)
-				+ (line <= 0 ? "" : "(" + line + ")") + ": " + message);
-	}
-
-	public int getErrorCount() {
-		return errors.size();
-	}
-
-	public int getExceptionCount() {
-		return 0;
-	}
-
-	public int getWarningCount() {
-		return warnings.size();
-	}
-
-	public void info(String arg0, FeatureEnum arg1, String arg2) {
-		// ignore
-
-	}
-
-	public void warning(String arg0, int arg1, int arg2, String arg3) {
-		// ignore
-
-	}
-
-	@Override
-	public void hint(String arg0, int arg1, int arg2, String arg3) {
-	}
-}
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/AbstractTest.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/AbstractTest.java
index 1beb225..aba4bdd 100644
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/AbstractTest.java
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/AbstractTest.java
@@ -13,28 +13,24 @@
 
 import java.io.File;
 
-import junit.framework.TestCase;
-
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.FeatureMapUtil.FeatureEList;
 import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 import org.eclipse.mylyn.docs.epub.core.EPUB;
 import org.eclipse.mylyn.docs.epub.core.ILogger;
-import org.eclipse.mylyn.docs.epub.core.OPSPublication;
-import org.eclipse.mylyn.docs.epub.core.Publication;
 import org.eclipse.mylyn.docs.epub.dc.DCType;
 import org.eclipse.mylyn.docs.epub.dc.Identifier;
 import org.junit.After;
 import org.junit.Before;
 
+import junit.framework.TestCase;
+
 @SuppressWarnings("nls")
 public abstract class AbstractTest extends TestCase {
 
 	private static final boolean DEBUGGING = false;;
 
-	private boolean errorExpected;
-
 	private class StdOutLogger implements ILogger {
 
 		public void log(String message) {
@@ -77,8 +73,6 @@
 
 	protected final StdOutLogger logger = new StdOutLogger();
 
-	protected Publication oebps;
-
 	protected boolean deleteFolder(File folder) {
 		if (folder.isDirectory()) {
 			String[] children = folder.list();
@@ -122,7 +116,6 @@
 	@Override
 	@Before
 	public void setUp() throws Exception {
-		errorExpected = false;
 		if (epubFile.exists()) {
 			epubFile.delete();
 		}
@@ -131,14 +124,6 @@
 		}
 		epubFolder.mkdirs();
 		epub = new EPUB(logger);
-		oebps = new OPSPublication(logger);
-	}
-
-	/**
-	 * Call this method in a test when an EPUB validation error is expected.
-	 */
-	protected void setErrorExpected() {
-		errorExpected = true;
 	}
 
 	@Override
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUB.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUB.java
index 1fd345b..941a882 100644
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUB.java
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUB.java
@@ -1,12 +1,12 @@
 /*******************************************************************************
  * Copyright (c) 2011, 2014 Torkild U. Resheim.
- * 
+ *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
+ *
+ * Contributors:
  *   Torkild U. Resheim - initial API and implementation
  *******************************************************************************/
 package org.eclipse.mylyn.docs.epub.tests.api;
@@ -41,7 +41,20 @@
 	public final void testEPUB() {
 		EPUB epub = new EPUB();
 		assertEquals(true, epub.getOPSPublications().isEmpty());
+	}
 
+	/**
+	 * Verify that we can open a basic EPUB file.
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void testEPUB3() throws Exception {
+		EPUB epub = new EPUB();
+		File epub_3 = new File("testdata/epub/basic_3.epub");
+		assertEquals(true, epub.isEPUB(epub_3));
+		epub.unpack(epub_3);
+		assertEquals(1, epub.getOPSPublications().size());
 	}
 
 	/**
@@ -51,7 +64,7 @@
 	 * <li>Rootfile path shall be correct</li>
 	 * <li>Rootfile object shall be correct.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -72,7 +85,7 @@
 	 * <ul>
 	 * <li>Shall throw exception when unknown publication type is added.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -92,15 +105,14 @@
 	}
 
 	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.EPUB#add(org.eclipse.mylyn.docs.epub.core.Publication)} .
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.EPUB#add(org.eclipse.mylyn.docs.epub.core.Publication)} .
 	 * <ul>
 	 * <li>Container shall hold more than one OPS publication</li>
 	 * <li>OPS structures shall follow naming conventions.</li>
 	 * <li>OPS MIME-type shall be correct</li>
 	 * <li>Rootfile object shall be correct.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -126,7 +138,7 @@
 	 * <p>
 	 * One OPS-publication and one SVG drawing are added. Only the OPS-publication shall be returned.
 	 * </p>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -144,7 +156,7 @@
 	 * <ul>
 	 * <li>Temporary folder shall not exist when job is done.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -166,7 +178,7 @@
 	 * <li>Work folder shall contain EPUB artifacts.</li>
 	 * <li>Exception shall be thrown if working folder already exist.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -180,8 +192,8 @@
 		File metaFolder = new File(epubFolder.getAbsolutePath() + File.separator + "META-INF");
 		assertEquals(true, metaFolder.exists());
 		assertEquals(true, metaFolder.isDirectory());
-		File containerFile = new File(epubFolder.getAbsolutePath() + File.separator + "META-INF" + File.separator
-				+ "container.xml");
+		File containerFile = new File(
+				epubFolder.getAbsolutePath() + File.separator + "META-INF" + File.separator + "container.xml");
 		assertEquals(true, containerFile.exists());
 		assertEquals(false, containerFile.isDirectory());
 		File oebpsFolder = new File(epubFolder.getAbsolutePath() + File.separator + "OEBPS");
@@ -194,7 +206,7 @@
 	 * <ul>
 	 * <li>Exception shall be thrown if working folder already exist.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -215,7 +227,7 @@
 	 * <ul>
 	 * <li>Exception shall be thrown if the EPUB is empty.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -232,7 +244,7 @@
 	 * <ul>
 	 * <li>Unpacked EPUB shall have the same contents as the packed one.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -249,7 +261,7 @@
 
 	/**
 	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.EPUB#unpack(java.io.File, java.io.File)} .
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -270,8 +282,8 @@
 		File metaFolder = new File(epubFolder.getAbsolutePath() + File.separator + "META-INF");
 		assertEquals(true, metaFolder.exists());
 		assertEquals(true, metaFolder.isDirectory());
-		File containerFile = new File(epubFolder.getAbsolutePath() + File.separator + "META-INF" + File.separator
-				+ "container.xml");
+		File containerFile = new File(
+				epubFolder.getAbsolutePath() + File.separator + "META-INF" + File.separator + "container.xml");
 		assertEquals(true, containerFile.exists());
 		assertEquals(false, containerFile.isDirectory());
 		File oebpsFolder = new File(epubFolder.getAbsolutePath() + File.separator + "OEBPS");
@@ -288,7 +300,7 @@
 	/**
 	 * See if the OCF file generated by this tooling can be read. As of bug 378800 elements are no longer prefixed with
 	 * "ocf", however both are allowed and tested for.
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -306,7 +318,7 @@
 	 * This case was discovered when testing an EPUB file generated by DocBook Reading the OCF fails with a
 	 * java.net.SocketException: Unexpected end of file from server. On closer inspection we can see that the file is
 	 * declared as XHTML (which it of course is not). This is probably due to an issue in DocBook XSL 1.76.1
-	 * 
+	 *
 	 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537 &group_id=21935&atid=373747.
 	 * @throws Exception
 	 */
@@ -324,7 +336,7 @@
 	 * When attempting to open a file that is not an EPUB the tooling shall reply by throwing an
 	 * {@link IllegalArgumentException}.
 	 * </p>
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
@@ -347,28 +359,9 @@
 	}
 
 	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=378214">bug 378214</a>: [epub] Problem
-	 * when opening an EPUB3 file
-	 * <p>
-	 * There must be no OPS publications in the EPUB as there are none that are supported when reading an EPUB 3 file.
-	 * Also there must be no exceptions thrown.
-	 * </p>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug378214() throws Exception {
-		EPUB epub = new EPUB();
-		File epub_3 = new File("testdata/epub/basic_3.epub");
-		assertEquals(true, epub.isEPUB(epub_3));
-		epub.unpack(epub_3);
-		assertEquals(0, epub.getOPSPublications().size());
-	}
-
-	/**
 	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=378800">bug 378800</a>: [epub] Remove
 	 * "ocf" prefix from elements in container.xml
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUBPublication.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUBPublication.java
new file mode 100644
index 0000000..d8585e2
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestEPUBPublication.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Torkild U. Resheim.
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Torkild U. Resheim - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.epub.tests.api;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.mylyn.docs.epub.core.EPUBPublication;
+import org.junit.Test;
+
+/**
+ * @author Torkild U. Resheim
+ */
+@SuppressWarnings("nls")
+public class TestEPUBPublication extends AbstractTest {
+
+	private class EPUB_OPF_Test extends EPUBPublication {
+		public void testReadOPF(File rootFile) throws IOException {
+			readOPF(rootFile);
+		}
+	}
+
+	/**
+	 * Test whether or not a basic EPUB 3 OPF can be read.
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void testReadOPF() throws Exception {
+		File rootFile = new File("testdata/OPF-Tests/EPUB3/content.opf");
+		EPUB_OPF_Test epub = new EPUB_OPF_Test();
+		epub.testReadOPF(rootFile);
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380729">bug 380729</a>: Allow reference
+	 * elements to have "other." types
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void test_addMeta() throws Exception {
+		File rootFile = new File("testdata/OPF-Tests/EPUB3/basic.opf");
+		EPUB_OPF_Test oebps = new EPUB_OPF_Test();
+		oebps.testReadOPF(rootFile);
+
+		// Validate that data already read from the OPF file is OK.
+		List<Diagnostic> problems = oebps.validateMetadata();
+		assertEquals(0, problems.size());
+
+		// Add a EPUB 3 Meta item
+		oebps.addMeta("id", "property", "refines", "scheme");
+		assertEquals("id", oebps.getPackage().getMetadata().getMetas().get(0).getId());
+		assertEquals("property", oebps.getPackage().getMetadata().getMetas().get(0).getProperty());
+		assertEquals("refines", oebps.getPackage().getMetadata().getMetas().get(0).getRefines());
+		assertEquals("scheme", oebps.getPackage().getMetadata().getMetas().get(0).getScheme());
+		try {
+			oebps.addMeta("id", null, "refines", "scheme");
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+
+		problems = oebps.validateMetadata();
+		assertEquals(0, problems.size());
+	}
+}
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPS2Publication.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPS2Publication.java
deleted file mode 100644
index 08bd220..0000000
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPS2Publication.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2014 Torkild U. Resheim.
- * 
- * All rights reserved. This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License v1.0 which
- * accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Torkild U. Resheim - initial API and implementation
- *******************************************************************************/
-package org.eclipse.mylyn.docs.epub.tests.api;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMapUtil.FeatureEList;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-import org.eclipse.mylyn.docs.epub.core.EPUB;
-import org.eclipse.mylyn.docs.epub.core.OPSPublication;
-import org.eclipse.mylyn.docs.epub.core.Publication;
-import org.eclipse.mylyn.docs.epub.core.ValidationMessage;
-import org.eclipse.mylyn.docs.epub.core.ValidationMessage.Severity;
-import org.eclipse.mylyn.docs.epub.ncx.Meta;
-import org.eclipse.mylyn.docs.epub.ncx.NavPoint;
-import org.eclipse.mylyn.docs.epub.ncx.Ncx;
-import org.eclipse.mylyn.docs.epub.opf.Item;
-import org.junit.Test;
-
-/**
- * Tests features and regressions specific to the OPS 2.0.1 supporting implementation {@link OPSPublication}.
- * 
- * @author Torkild U. Resheim
- */
-@SuppressWarnings("nls")
-public class TestOPS2Publication extends AbstractTest {
-
-	private static final EStructuralFeature TEXT = XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot_Text();
-
-	private final static String TOCFILE_ID = "3063f615-672e-4083-911a-65c5ff245e75";
-
-	@SuppressWarnings("rawtypes")
-	public String getText(Object element) {
-		if (element instanceof NavPoint) {
-			FeatureMap fm = ((NavPoint) element).getNavLabels().get(0).getText().getMixed();
-			Object o = fm.get(TEXT, false);
-			if (o instanceof FeatureEList) {
-				if (((FeatureEList) o).size() > 0) {
-					return ((FeatureEList) o).get(0).toString();
-				}
-			}
-		}
-		if (element instanceof Meta) {
-			Object o = ((Meta) element).getContent();
-			return o.toString();
-		}
-		return "null";
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#generateTableOfContents()} .
-	 * <ul>
-	 * <li>Table of contents shall be generated from content per default.</li>
-	 * </ul>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testGenerateTableOfContents() throws Exception {
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		epub.pack(epubFile);
-		assertTrue(oebps.getTableOfContents() != null);
-		assertTrue(oebps.getTableOfContents() instanceof Ncx);
-		Ncx ncx = (Ncx) oebps.getTableOfContents();
-		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
-		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
-		assertEquals("First item", getText(h1_1));
-		assertEquals("Second item", getText(h1_2));
-		epubFile.delete();
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#generateTableOfContents()} .
-	 * <ul>
-	 * <li>Table of contents shall exist but be empty if not otherwise specified.</li>
-	 * </ul>
-	 * 
-	 * @throws Exception
-	 */
-	public final void testGenerateEmptyTableOfContents() throws Exception {
-		setErrorExpected();
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		oebps.setGenerateToc(false);
-		epub.pack(epubFile);
-		assertTrue(oebps.getTableOfContents() != null);
-		assertTrue(oebps.getTableOfContents() instanceof Ncx);
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#getTableOfContents()} .
-	 * <ul>
-	 * <li>There shall be a table of contents, even if empty.</li>
-	 * </ul>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testGetTableOfContents() throws Exception {
-		epub.add(oebps);
-		assertTrue(oebps.getTableOfContents() != null);
-		assertTrue(oebps.getTableOfContents() instanceof Ncx);
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#readTableOfContents(java.io.File)} .
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testReadTableOfContents() throws Exception {
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		epub.pack(epubFile);
-
-		EPUB epub_in = new EPUB();
-		epub_in.unpack(epubFile, epubFolder);
-		Publication oebps_in = epub_in.getOPSPublications().get(0);
-		assertTrue(oebps_in.getTableOfContents() != null);
-		assertTrue(oebps_in.getTableOfContents() instanceof Ncx);
-		Ncx ncx = (Ncx) oebps_in.getTableOfContents();
-		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
-		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
-		assertEquals("First item", getText(h1_1));
-		assertEquals("Second item", getText(h1_2));
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#setTableOfContents(java.io.File)} .
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testSetTableOfContents() throws Exception {
-		oebps.setTableOfContents(new File("testdata/toc.ncx"));
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		epub.pack(epubFile);
-		EPUB epub_in = new EPUB();
-		epub_in.unpack(epubFile, epubFolder);
-		Publication oebps_in = epub_in.getOPSPublications().get(0);
-		assertTrue(oebps_in.getTableOfContents() != null);
-		assertTrue(oebps_in.getTableOfContents() instanceof Ncx);
-		Ncx ncx = (Ncx) oebps_in.getTableOfContents();
-		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
-		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
-		assertEquals("First item", getText(h1_1));
-		assertEquals("Second item", getText(h1_2));
-		Meta meta = ncx.getHead().getMetas().get(0);
-		String id = getText(meta);
-		// The UUID for the NCX file should be different if it comes from
-		// another NCX than the one specified.
-		assertTrue(TOCFILE_ID.equals(id));
-
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#validateContents()} .
-	 * <ul>
-	 * <li>There shall be a warning message</li>
-	 * </ul>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testValidateContents() throws Exception {
-		setErrorExpected();
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/plain-page_warnings.xhtml"));
-		epub.pack(epubFile);
-		assertEquals(1, oebps.getValidationMessages().size());
-		ValidationMessage msg = oebps.getValidationMessages().get(0);
-		assertEquals(Severity.WARNING, msg.getSeverity());
-		assertTrue(msg.getMessage().startsWith("Element \"bad\""));
-	}
-
-	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=379052">bug 379052</a>: OPS validator
-	 * should handle all XHTML in the manifest
-	 * <p>
-	 * The test will add one XHTML file that links to another XHTML file that should be validated and one that should
-	 * not
-	 * </p>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug379052() throws Exception {
-		oebps.setIncludeReferencedResources(true);
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/OPF-Tests/Bug_379052/chapter-1.xhtml"));
-		epub.pack(epubFile);
-		// Two XHTML files, one with a warning. One CSS file and the NCX.
-		assertEquals(4, oebps.getPackage().getManifest().getItems().size());
-		// Should be exactly two warning.
-		assertEquals(1, oebps.getValidationMessages().size());
-		epubFile.delete();
-	}
-
-	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
-	 * fallback items
-	 * <p>
-	 * This method tests for the exception that shall be raised when an illegal item has been added.
-	 * </p>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug358671_Illegal_Item() throws Exception {
-		setErrorExpected();
-		epub.add(oebps);
-		oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
-		epub.pack(epubFile);
-		ValidationMessage msg = oebps.getValidationMessages().get(0);
-		assertEquals(Severity.WARNING, msg.getSeverity());
-		assertEquals(
-				true,
-				msg.getMessage().equals(
-						"Item \"illegal-type.html\" is not a core media type and does not specify a fallback item."));
-	}
-
-	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
-	 * fallback items
-	 * <p>
-	 * This method tests for the exception that shall be raised when an illegal item has been added with an illegal
-	 * fallback item. Which fallback items that are allowed is specified by the OPS version.
-	 * </p>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug358671_Illegal_Fallback() throws Exception {
-		setErrorExpected();
-		epub.add(oebps);
-		Item item = oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
-		item.setFallback("fallback");
-		oebps.addItem("fallback", null, new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"), null, null, true,
-				true, false);
-		epub.pack(epubFile);
-		ValidationMessage msg = oebps.getValidationMessages().get(0);
-		assertEquals(Severity.WARNING, msg.getSeverity());
-		assertEquals(
-				true,
-				msg.getMessage()
-						.equals("Item \"illegal-type.html\" is not a core media type and specifies a non-core media fallback item."));
-	}
-
-	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
-	 * fallback items
-	 * <p>
-	 * This method tests for the warning that shall be issued when an illegal item has been added with a legal fallback
-	 * item.
-	 * </p>
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug358671_Legal_Fallback() throws Exception {
-		epub.add(oebps);
-		Item item = oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
-		item.setFallback("fallback");
-		oebps.addItem("fallback", null, new File("testdata/plain-page.xhtml"), null, null, true, true, false);
-		epub.pack(epubFile);
-		assertEquals(3, oebps.getPackage().getManifest().getItems().size());
-		assertEquals(1, oebps.getValidationMessages().size());
-		ValidationMessage msg = oebps.getValidationMessages().get(0);
-		assertEquals(Severity.WARNING, msg.getSeverity());
-		assertEquals(
-				true,
-				msg.getMessage()
-						.equals("Item \"illegal-type.html\" is not a core media type but a legal fallback item has been specified."));
-	}
-
-	private class EPUB_NCX_Test extends OPSPublication {
-		public void testReadOCF(File tocFile) throws IOException {
-			readTableOfContents(tocFile);
-		}
-	}
-
-	/**
-	 * See if the NCX file generated by this tooling can be read.
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public final void testReadNCX_Dogfood() throws Exception {
-		File workingFolder = new File("testdata/NCX-Tests/Dogfood/toc.ncx");
-		EPUB_NCX_Test epub = new EPUB_NCX_Test();
-		epub.testReadOCF(workingFolder);
-	}
-
-	/**
-	 * This case was discovered when testing an EPUB file generated by DocBook Reading the NCX fails with a
-	 * java.net.SocketException: Unexpected end of file from server. On closer inspection we can see that the file is
-	 * declared as XHTML (which it of course is not). This is probably due to an issue in DocBook XSL 1.76.1
-	 * 
-	 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537&group_id=21935&atid=373747.
-	 * @throws Exception
-	 */
-	@Test
-	public final void testReadNCX_SocketException() throws Exception {
-		File workingFolder = new File("testdata/NCX-Tests/SocketException/toc.ncx");
-		EPUB_NCX_Test epub = new EPUB_NCX_Test();
-		epub.testReadOCF(workingFolder);
-	}
-
-}
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPSPublication.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPSPublication.java
index a85d233..f72021a 100644
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPSPublication.java
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestOPSPublication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2014 Torkild U. Resheim.
+ * Copyright (c) 2011, 2014 Torkild U. Resheim.
  *
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
@@ -12,237 +12,88 @@
 package org.eclipse.mylyn.docs.epub.tests.api;
 
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
-import java.util.List;
-import java.util.Locale;
 
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil.FeatureEList;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 import org.eclipse.mylyn.docs.epub.core.EPUB;
 import org.eclipse.mylyn.docs.epub.core.OPSPublication;
 import org.eclipse.mylyn.docs.epub.core.Publication;
-import org.eclipse.mylyn.docs.epub.core.ValidationException;
-import org.eclipse.mylyn.docs.epub.dc.Contributor;
-import org.eclipse.mylyn.docs.epub.dc.Coverage;
-import org.eclipse.mylyn.docs.epub.dc.Date;
-import org.eclipse.mylyn.docs.epub.dc.Description;
-import org.eclipse.mylyn.docs.epub.dc.Identifier;
-import org.eclipse.mylyn.docs.epub.dc.Publisher;
-import org.eclipse.mylyn.docs.epub.dc.Relation;
-import org.eclipse.mylyn.docs.epub.dc.Rights;
-import org.eclipse.mylyn.docs.epub.dc.Source;
-import org.eclipse.mylyn.docs.epub.dc.Subject;
-import org.eclipse.mylyn.docs.epub.dc.Title;
+import org.eclipse.mylyn.docs.epub.core.ValidationMessage;
+import org.eclipse.mylyn.docs.epub.core.ValidationMessage.Severity;
+import org.eclipse.mylyn.docs.epub.ncx.Meta;
+import org.eclipse.mylyn.docs.epub.ncx.NavPoint;
+import org.eclipse.mylyn.docs.epub.ncx.Ncx;
 import org.eclipse.mylyn.docs.epub.opf.Item;
-import org.eclipse.mylyn.docs.epub.opf.Role;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
- * Tests features and regressions for all versions of the OPS supporting implementation {@link Publication}.
+ * Tests features and regressions specific to the OPS 2.0.1 supporting implementation {@link OPSPublication}.
  *
  * @author Torkild U. Resheim
  */
 @SuppressWarnings("nls")
 public class TestOPSPublication extends AbstractTest {
 
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addContributor(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddContributor() {
-		Contributor contributor = oebps.addContributor("Nomen Nescio");
-		contributor.setRole(Role.AUTHOR);
+	private static final EStructuralFeature TEXT = XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot_Text();
 
-		oebps.addContributor(null, null, "Nomen Nescio", Role.AUTHOR, null);
+	private final static String TOCFILE_ID = "3063f615-672e-4083-911a-65c5ff245e75";
+
+	private OPSPublication oebps;
+
+	@Override
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		oebps = new OPSPublication(logger);
 	}
 
 	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addCoverage(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setCover(java.io.File, java.lang.String)} .
+	 * <ul>
+	 * <li>Cover page SVG shall exist in the unpacked folder</li>
+	 * <li>Cover page HTML shall exist in the unpacked folder</li>
+	 * </ul>
+	 *
+	 * @throws Exception
 	 */
 	@Test
-	public final void testAddCoverage() {
-		oebps.addCoverage("Coverage", Locale.CANADA_FRENCH, "My Coverage");
-		oebps.addCoverage(null, Locale.CANADA_FRENCH, "My Coverage");
-		oebps.addCoverage(null, null, "My Coverage");
-		EList<Coverage> Coverages = oebps.getPackage().getMetadata().getCoverages();
-		Assert.assertEquals("Coverage", Coverages.get(0).getId());
-		Assert.assertEquals("fr_CA", Coverages.get(0).getLang());
-		Assert.assertEquals("My Coverage", getText(Coverages.get(0)));
-		Assert.assertEquals(null, Coverages.get(1).getId());
-		Assert.assertEquals("fr_CA", Coverages.get(1).getLang());
-		Assert.assertEquals("My Coverage", getText(Coverages.get(1)));
-		Assert.assertEquals(null, Coverages.get(2).getId());
-		Assert.assertEquals(null, Coverages.get(2).getLang());
-		Assert.assertEquals("My Coverage", getText(Coverages.get(2)));
-		try {
-			oebps.addCoverage(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
+	public final void testSetCover() throws Exception {
+		oebps.setCover(new File("testdata/drawing.svg"), "Title");
+		oebps.addItem(new File("testdata/plain-page.xhtml"));
+		epub.add(oebps);
+		epub.pack(epubFile);
+
+		EPUB epub2 = new EPUB();
+		epub2.unpack(epubFile, epubFolder);
+		Publication oebps = epub2.getOPSPublications().get(0);
+		File root = oebps.getRootFolder();
+		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
+		Assert.assertTrue(svg.exists());
+		File html = new File(root.getAbsolutePath() + File.separator + "cover-page.xhtml");
+		Assert.assertTrue(html.exists());
+	}
+
+	@SuppressWarnings("rawtypes")
+	public String getText(Object element) {
+		if (element instanceof NavPoint) {
+			FeatureMap fm = ((NavPoint) element).getNavLabels().get(0).getText().getMixed();
+			Object o = fm.get(TEXT, false);
+			if (o instanceof FeatureEList) {
+				if (((FeatureEList) o).size() > 0) {
+					return ((FeatureEList) o).get(0).toString();
+				}
+			}
 		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addCreator(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddCreator() {
-		// TODO
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.util.Date, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddDateStringDateString() {
-		// TODO
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.lang.String, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddDateStringStringString() {
-		oebps.addDate(null, "1969", null);
-		oebps.addDate(null, "1969-03", null);
-		oebps.addDate(null, "1969-03-14", null);
-		oebps.addDate(null, "1969-03-14", "event");
-		EList<Date> dates = oebps.getPackage().getMetadata().getDates();
-		assertEquals("1969", getText(dates.get(0)));
-		assertEquals("1969-03", getText(dates.get(1)));
-		assertEquals("1969-03-14", getText(dates.get(2)));
-		assertEquals("event", dates.get(3).getEvent());
-		try {
-			oebps.addDate(null, (String) null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
+		if (element instanceof Meta) {
+			Object o = ((Meta) element).getContent();
+			return o.toString();
 		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDescription(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddDescription() {
-		oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
-		oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
-		oebps.addDescription(null, null, "My Description");
-		EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
-		Assert.assertEquals("Description", Descriptions.get(0).getId());
-		Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(0)));
-		Assert.assertEquals(null, Descriptions.get(1).getId());
-		Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(1)));
-		Assert.assertEquals(null, Descriptions.get(2).getId());
-		Assert.assertEquals(null, Descriptions.get(2).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(2)));
-		try {
-			oebps.addDescription(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addFormat(java.lang.String, java.lang.String)} .
-	 */
-	@Test
-	public final void testAddFormat() {
-		oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
-		oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
-		oebps.addDescription(null, null, "My Description");
-		EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
-		Assert.assertEquals("Description", Descriptions.get(0).getId());
-		Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(0)));
-		Assert.assertEquals(null, Descriptions.get(1).getId());
-		Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(1)));
-		Assert.assertEquals(null, Descriptions.get(2).getId());
-		Assert.assertEquals(null, Descriptions.get(2).getLang());
-		Assert.assertEquals("My Description", getText(Descriptions.get(2)));
-		try {
-			oebps.addDescription(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addIdentifier(java.lang.String, java.lang.String, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddIdentifier() {
-		oebps.addIdentifier("Identifier", "ID", "My Identifier");
-		oebps.addIdentifier(null, "ID", "My Identifier");
-		oebps.addIdentifier(null, null, "My Identifier");
-		EList<Identifier> Identifiers = oebps.getPackage().getMetadata().getIdentifiers();
-		Assert.assertEquals("Identifier", Identifiers.get(0).getId());
-		Assert.assertEquals("ID", Identifiers.get(0).getScheme());
-		Assert.assertEquals("My Identifier", getText(Identifiers.get(0)));
-		Assert.assertEquals(null, Identifiers.get(1).getId());
-		Assert.assertEquals("ID", Identifiers.get(1).getScheme());
-		Assert.assertEquals("My Identifier", getText(Identifiers.get(1)));
-		Assert.assertEquals(null, Identifiers.get(2).getId());
-		Assert.assertEquals(null, Identifiers.get(2).getScheme());
-		Assert.assertEquals("My Identifier", getText(Identifiers.get(2)));
-		try {
-			oebps.addIdentifier(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.io.File)} .
-	 */
-	@Test
-	public final void testAddItemFile() {
-		// TODO
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.lang.String, java.util.Locale, java.io.File, java.lang.String, java.lang.String, boolean, boolean, boolean)}
-	 * .
-	 */
-	@Test
-	public final void testAddItemStringLocaleFileStringStringBooleanBooleanBoolean() {
-		// TODO
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addLanguage(java.lang.String, java.lang.String)} .
-	 */
-	@Test
-	public final void testAddLanguage() {
-		oebps.addLanguage(null, "no");
-		oebps.addLanguage("id", "no");
-		Assert.assertEquals("no", getText(oebps.getPackage().getMetadata().getLanguages().get(0)));
-		Assert.assertEquals("id", oebps.getPackage().getMetadata().getLanguages().get(1).getId());
-		try {
-			oebps.addLanguage(null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
+		return "null";
 	}
 
 	/**
@@ -267,617 +118,254 @@
 	}
 
 	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addPublisher(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddPublisher() {
-		oebps.addPublisher("Publisher", Locale.CANADA_FRENCH, "My Publisher");
-		oebps.addPublisher(null, Locale.CANADA_FRENCH, "My Publisher");
-		oebps.addPublisher(null, null, "My Publisher");
-		EList<Publisher> Publishers = oebps.getPackage().getMetadata().getPublishers();
-		Assert.assertEquals("Publisher", Publishers.get(0).getId());
-		Assert.assertEquals("fr_CA", Publishers.get(0).getLang());
-		Assert.assertEquals("My Publisher", getText(Publishers.get(0)));
-		Assert.assertEquals(null, Publishers.get(1).getId());
-		Assert.assertEquals("fr_CA", Publishers.get(1).getLang());
-		Assert.assertEquals("My Publisher", getText(Publishers.get(1)));
-		Assert.assertEquals(null, Publishers.get(2).getId());
-		Assert.assertEquals(null, Publishers.get(2).getLang());
-		Assert.assertEquals("My Publisher", getText(Publishers.get(2)));
-		try {
-			oebps.addPublisher(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addReference(java.lang.String, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Type)}
-	 * .
-	 */
-	@Test
-	public final void testAddReference() {
-		// TODO
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addRelation(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddRelation() {
-		oebps.addRelation("Relation", Locale.CANADA_FRENCH, "My Relation");
-		oebps.addRelation(null, Locale.CANADA_FRENCH, "My Relation");
-		oebps.addRelation(null, null, "My Relation");
-		EList<Relation> Relations = oebps.getPackage().getMetadata().getRelations();
-		Assert.assertEquals("Relation", Relations.get(0).getId());
-		Assert.assertEquals("fr_CA", Relations.get(0).getLang());
-		Assert.assertEquals("My Relation", getText(Relations.get(0)));
-		Assert.assertEquals(null, Relations.get(1).getId());
-		Assert.assertEquals("fr_CA", Relations.get(1).getLang());
-		Assert.assertEquals("My Relation", getText(Relations.get(1)));
-		Assert.assertEquals(null, Relations.get(2).getId());
-		Assert.assertEquals(null, Relations.get(2).getLang());
-		Assert.assertEquals("My Relation", getText(Relations.get(2)));
-		try {
-			oebps.addRelation(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addRights(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddRights() {
-		oebps.addRights("Rights", Locale.CANADA_FRENCH, "My Rights");
-		oebps.addRights(null, Locale.CANADA_FRENCH, "My Rights");
-		oebps.addRights(null, null, "My Rights");
-		EList<Rights> Rightss = oebps.getPackage().getMetadata().getRights();
-		Assert.assertEquals("Rights", Rightss.get(0).getId());
-		Assert.assertEquals("fr_CA", Rightss.get(0).getLang());
-		Assert.assertEquals("My Rights", getText(Rightss.get(0)));
-		Assert.assertEquals(null, Rightss.get(1).getId());
-		Assert.assertEquals("fr_CA", Rightss.get(1).getLang());
-		Assert.assertEquals("My Rights", getText(Rightss.get(1)));
-		Assert.assertEquals(null, Rightss.get(2).getId());
-		Assert.assertEquals(null, Rightss.get(2).getLang());
-		Assert.assertEquals("My Rights", getText(Rightss.get(2)));
-		try {
-			oebps.addRights(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addSource(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddSource() {
-		oebps.addSource("Source", Locale.CANADA_FRENCH, "My Source");
-		oebps.addSource(null, Locale.CANADA_FRENCH, "My Source");
-		oebps.addSource(null, null, "My Source");
-		EList<Source> Sources = oebps.getPackage().getMetadata().getSources();
-		Assert.assertEquals("Source", Sources.get(0).getId());
-		Assert.assertEquals("fr_CA", Sources.get(0).getLang());
-		Assert.assertEquals("My Source", getText(Sources.get(0)));
-		Assert.assertEquals(null, Sources.get(1).getId());
-		Assert.assertEquals("fr_CA", Sources.get(1).getLang());
-		Assert.assertEquals("My Source", getText(Sources.get(1)));
-		Assert.assertEquals(null, Sources.get(2).getId());
-		Assert.assertEquals(null, Sources.get(2).getLang());
-		Assert.assertEquals("My Source", getText(Sources.get(2)));
-		// An IllegalArgumentException is expected
-		try {
-			oebps.addSource(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addSubject(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddSubject() {
-		oebps.addSubject("Subject", Locale.CANADA_FRENCH, "My Subject");
-		oebps.addSubject(null, Locale.CANADA_FRENCH, "My Subject");
-		oebps.addSubject(null, null, "My Subject");
-		EList<Subject> subjects = oebps.getPackage().getMetadata().getSubjects();
-		Assert.assertEquals("Subject", subjects.get(0).getId());
-		Assert.assertEquals("fr_CA", subjects.get(0).getLang());
-		Assert.assertEquals("My Subject", getText(subjects.get(0)));
-		Assert.assertEquals(null, subjects.get(1).getId());
-		Assert.assertEquals("fr_CA", subjects.get(1).getLang());
-		Assert.assertEquals("My Subject", getText(subjects.get(1)));
-		Assert.assertEquals(null, subjects.get(2).getId());
-		Assert.assertEquals(null, subjects.get(2).getLang());
-		Assert.assertEquals("My Subject", getText(subjects.get(2)));
-		try {
-			oebps.addSubject(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addTitle(java.lang.String, java.util.Locale, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddTitle() {
-		oebps.addTitle("Title", Locale.CANADA_FRENCH, "My Title");
-		oebps.addTitle(null, Locale.CANADA_FRENCH, "My Title");
-		oebps.addTitle(null, null, "My Title");
-		EList<Title> titles = oebps.getPackage().getMetadata().getTitles();
-		Assert.assertEquals("Title", titles.get(0).getId());
-		Assert.assertEquals("fr_CA", titles.get(0).getLang());
-		Assert.assertEquals("My Title", getText(titles.get(0)));
-		Assert.assertEquals(null, titles.get(1).getId());
-		Assert.assertEquals("fr_CA", titles.get(1).getLang());
-		Assert.assertEquals("My Title", getText(titles.get(1)));
-		Assert.assertEquals(null, titles.get(2).getId());
-		Assert.assertEquals(null, titles.get(2).getLang());
-		Assert.assertEquals("My Title", getText(titles.get(2)));
-		try {
-			oebps.addTitle(null, null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#addType(java.lang.String, java.lang.String)}
-	 * .
-	 */
-	@Test
-	public final void testAddType() {
-		oebps.addType("Type", "My Type");
-		oebps.addType(null, "My Type");
-		EList<org.eclipse.mylyn.docs.epub.dc.Type> Types = oebps.getPackage().getMetadata().getTypes();
-		Assert.assertEquals("Type", Types.get(0).getId());
-		Assert.assertEquals("My Type", getText(Types.get(0)));
-		Assert.assertEquals(null, Types.get(1).getId());
-		Assert.assertEquals("My Type", getText(Types.get(1)));
-		try {
-			oebps.addType(null, null);
-			fail();
-		} catch (IllegalArgumentException e) {
-		}
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#generateTableOfContents()} .
-	 */
-	@Test
-	public final void testGenerateTableOfContents() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getIdentifier()}.
-	 */
-	@Test
-	public final void testGetIdentifier() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemById(java.lang.String)} .
-	 */
-	@Test
-	public final void testGetItemById() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemsByMIMEType(java.lang.String)} .
-	 */
-	@Test
-	public final void testGetItemsByMIMEType() {
-		Item i_in_1 = oebps.addItem(new File("testdata/images/subfolder-drawing.svg"));
-		Item i_in_2 = oebps.addItem(new File("testdata/plain-page.xhtml"));
-		List<Item> i_out_1 = oebps.getItemsByMIMEType("image/svg+xml");
-		assertEquals(1, i_out_1.size());
-		assertEquals(i_in_1, i_out_1.get(0));
-		List<Item> i_out_2 = oebps.getItemsByMIMEType("application/xhtml+xml");
-		assertEquals(1, i_out_2.size());
-		assertEquals(i_in_2, i_out_2.get(0));
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getPackage()}.
-	 */
-	@Test
-	public final void testGetOpfPackage() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getRootFolder()}.
-	 */
-	@Test
-	public final void testGetRootFolder() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getSpine()}.
-	 */
-	@Test
-	public final void testGetSpine() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getTableOfContents()} .
-	 */
-	@Test
-	public final void testGetTableOfContents() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getValidationMessages()} .
-	 */
-	@Test
-	public final void testGetValidationMessages() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB where only a
-	 * single page has been added shall be packed without issues
-	 *
-	 * @throws Exception
-	 */
-
-	/* Bug 454932 - fix or remove failing EPUB test
-	@Test
-	public final void testPack_EPUB2() throws Exception {
-		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		epub.add(oebps);
-		epub.pack(epubFile);
-		oebps.validateMetadata();
-		Report report = new DefaultReportImpl(epubFile.toString());
-		EpubCheck checker = new EpubCheck(epubFile, report);
-		System.out.println("Validating plain EPUB 2.0.1 file");
-		System.out.println("Using version " + EpubCheck.version() + " of EpubCheck.");
-		Assert.assertTrue(checker.validate());
-	}
-	 */
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB with no content
-	 * shall fail when packed.
-	 *
-	 * @throws Exception
-	 */
-	@Test
-	public final void testPack_Empty() throws Exception {
-		epub.add(new OPSPublication());
-		try {
-			epubFile.delete();
-			epub.pack(epubFile);
-			fail();
-		} catch (ValidationException e) {
-		}
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#readTableOfContents(java.io.File)} .
-	 */
-	@Test
-	public final void testReadTableOfContents() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setCover(java.io.File, java.lang.String)} .
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#generateTableOfContents()} .
 	 * <ul>
-	 * <li>Cover page SVG shall exist in the unpacked folder</li>
-	 * <li>Cover page HTML shall exist in the unpacked folder</li>
+	 * <li>Table of contents shall be generated from content per default.</li>
 	 * </ul>
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void testSetCover() throws Exception {
-		oebps.setCover(new File("testdata/drawing.svg"), "Title");
+	public final void testGenerateTableOfContents() throws Exception {
+		epub.add(oebps);
 		oebps.addItem(new File("testdata/plain-page.xhtml"));
-		epub.add(oebps);
 		epub.pack(epubFile);
-
-		EPUB epub2 = new EPUB();
-		epub2.unpack(epubFile, epubFolder);
-		oebps = epub2.getOPSPublications().get(0);
-		File root = oebps.getRootFolder();
-		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
-		Assert.assertTrue(svg.exists());
-		File html = new File(root.getAbsolutePath() + File.separator + "cover-page.xhtml");
-		Assert.assertTrue(html.exists());
+		assertTrue(oebps.getTableOfContents() != null);
+		assertTrue(oebps.getTableOfContents() instanceof Ncx);
+		Ncx ncx = (Ncx) oebps.getTableOfContents();
+		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
+		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
+		assertEquals("First item", getText(h1_1));
+		assertEquals("Second item", getText(h1_2));
+		epubFile.delete();
 	}
 
 	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setGenerateToc(boolean)} .
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#generateTableOfContents()} .
+	 * <ul>
+	 * <li>Table of contents shall exist but be empty if not otherwise specified.</li>
+	 * </ul>
+	 *
+	 * @throws Exception
 	 */
-	@Test
-	public final void testSetGenerateToc() {
-		// TODO
+	public final void testGenerateEmptyTableOfContents() throws Exception {
+		epub.add(oebps);
+		oebps.addItem(new File("testdata/plain-page.xhtml"));
+		oebps.setGenerateToc(false);
+		epub.pack(epubFile);
+		assertTrue(oebps.getTableOfContents() != null);
+		assertTrue(oebps.getTableOfContents() instanceof Ncx);
 	}
 
 	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIdentifierId(java.lang.String)} .
-	 */
-	@Test
-	public final void testSetIdentifierId() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIncludeReferencedResources(boolean)}. This
-	 * is determining whether or not the referenced resources has been picked up and included in the resulting EPUB.
-	 * Also handles <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=375795">bug 375795</a>: [epub][patch]
-	 * Automatic inclusion of referenced resources fail on anchor references
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#getTableOfContents()} .
+	 * <ul>
+	 * <li>There shall be a table of contents, even if empty.</li>
+	 * </ul>
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void testSetIncludeReferencedResources() throws Exception {
-		oebps.setIncludeReferencedResources(true);
-		oebps.addItem(new File("testdata/plain-page_link.xhtml"));
+	public final void testGetTableOfContents() throws Exception {
 		epub.add(oebps);
-		// Included resources will only be added when we pack
-		epub.pack(epubFile);
-
-		EPUB epub2 = new EPUB();
-		epub2.unpack(epubFile, epubFolder);
-		oebps = epub2.getOPSPublications().get(0);
-		File root = oebps.getRootFolder();
-		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
-		Assert.assertTrue(svg.exists());
-		File svg2 = new File(root.getAbsolutePath() + File.separator + "images" + File.separator
-				+ "subfolder-drawing.svg");
-		Assert.assertTrue(svg2.exists());
-		File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.xhtml");
-		Assert.assertTrue(html.exists());
-		File html2 = new File(root.getAbsolutePath() + File.separator + "plain-page.xhtml");
-		Assert.assertTrue(html2.exists());
-		// The manifest shall only contain the items we have linked to in addition to the toc.ncx and the file that we
-		// started from -- a total of six files.
-		Assert.assertEquals(6, oebps.getPackage().getManifest().getItems().size());
-
+		assertTrue(oebps.getTableOfContents() != null);
+		assertTrue(oebps.getTableOfContents() instanceof Ncx);
 	}
 
 	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380016">bug 380016</a>: Reference scanner
-	 * should also include referenced CSS style sheets
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#readTableOfContents(java.io.File)} .
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void test_Bug380016() throws Exception {
-		setErrorExpected();
-		oebps.setIncludeReferencedResources(true);
-		oebps.addItem(new File("testdata/OPF-Tests/Bug_380016/chapter.xhtml"));
+	public final void testReadTableOfContents() throws Exception {
 		epub.add(oebps);
+		oebps.addItem(new File("testdata/plain-page.xhtml"));
 		epub.pack(epubFile);
-		EPUB epub2 = new EPUB();
-		epub2.unpack(epubFile, epubFolder);
-		oebps = epub2.getOPSPublications().get(0);
-		File root = oebps.getRootFolder();
-		File svg = new File(root.getAbsolutePath() + File.separator + "style.css");
-		Assert.assertTrue(svg.exists());
+
+		EPUB epub_in = new EPUB();
+		epub_in.unpack(epubFile, epubFolder);
+		Publication oebps_in = epub_in.getOPSPublications().get(0);
+		assertTrue(oebps_in.getTableOfContents() != null);
+		assertTrue(oebps_in.getTableOfContents() instanceof Ncx);
+		Ncx ncx = (Ncx) oebps_in.getTableOfContents();
+		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
+		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
+		assertEquals("First item", getText(h1_1));
+		assertEquals("Second item", getText(h1_2));
 	}
 
 	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360701">bug 360701</a>: [epub] Automatic
-	 * inclusion of referenced resources don't work for WikiText generated HTML.
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#setTableOfContents(java.io.File)} .
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void test_Bug360701() throws Exception {
-		setErrorExpected();
-		oebps.setIncludeReferencedResources(true);
-		// This page is similar to what WikiText would generate
-		oebps.addItem(new File("testdata/plain-page_link.html"));
+	public final void testSetTableOfContents() throws Exception {
+		oebps.setTableOfContents(new File("testdata/toc.ncx"));
 		epub.add(oebps);
-		// Included resources will only be added when we pack
+		oebps.addItem(new File("testdata/plain-page.xhtml"));
 		epub.pack(epubFile);
-
-		EPUB epub2 = new EPUB();
-		epub2.unpack(epubFile, epubFolder);
-		oebps = epub2.getOPSPublications().get(0);
-		File root = oebps.getRootFolder();
-		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
-		Assert.assertTrue(svg.exists());
-		File svg2 = new File(root.getAbsolutePath() + File.separator + "images" + File.separator
-				+ "subfolder-drawing.svg");
-		Assert.assertTrue(svg2.exists());
-		File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.html");
-		Assert.assertTrue(html.exists());
+		EPUB epub_in = new EPUB();
+		epub_in.unpack(epubFile, epubFolder);
+		Publication oebps_in = epub_in.getOPSPublications().get(0);
+		assertTrue(oebps_in.getTableOfContents() != null);
+		assertTrue(oebps_in.getTableOfContents() instanceof Ncx);
+		Ncx ncx = (Ncx) oebps_in.getTableOfContents();
+		NavPoint h1_1 = ncx.getNavMap().getNavPoints().get(0);
+		NavPoint h1_2 = ncx.getNavMap().getNavPoints().get(1);
+		assertEquals("First item", getText(h1_1));
+		assertEquals("Second item", getText(h1_2));
+		Meta meta = ncx.getHead().getMetas().get(0);
+		String id = getText(meta);
+		// The UUID for the NCX file should be different if it comes from
+		// another NCX than the one specified.
+		assertTrue(TOCFILE_ID.equals(id));
 
 	}
 
 	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373052">bug 373052</a>: [epub] Reference
-	 * scanner does not handle absolute paths
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.OPSPublication#validateContents()} .
+	 * <ul>
+	 * <li>There shall be a warning message</li>
+	 * </ul>
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void test_Bug373052() throws Exception {
-		setErrorExpected();
-		// We need to link to a absolute file so we create a temporary HTML file
-		// in which we have the link.m
-		File htmlFile = File.createTempFile("temp", ".xhtml");
-		File svgFile = new File("testdata/drawing.svg");
-
-		FileWriter fw = new FileWriter(htmlFile);
-		// A proper declaration must be added or the file type cannot be
-		// correctly detected.
-		fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-		fw.write("<!DOCTYPE html\n"
-				+ "  PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");
-		fw.write("<html xmlns=\"http://www.w3.org/1999/xhtml\"><body>");
-		fw.write("<img src=\"" + svgFile.getAbsolutePath() + "\"/>");
-		fw.write("</body></html>");
-		fw.close();
-
-		oebps.setIncludeReferencedResources(true);
-		oebps.addItem(htmlFile);
+	public final void testValidateContents() throws Exception {
 		epub.add(oebps);
+		oebps.addItem(new File("testdata/plain-page_warnings.xhtml"));
 		epub.pack(epubFile);
-
-		htmlFile.delete();
-
-		EPUB epub2 = new EPUB();
-		epub2.unpack(epubFile, epubFolder);
-		oebps = epub2.getOPSPublications().get(0);
-		File root = oebps.getRootFolder();
-		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
-		Assert.assertTrue(svg.exists());
-
+		assertEquals(1, oebps.getValidationMessages().size());
+		ValidationMessage msg = oebps.getValidationMessages().get(0);
+		assertEquals(Severity.WARNING, msg.getSeverity());
+		assertTrue(msg.getMessage().startsWith("Element \"bad\""));
 	}
 
 	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=376312">bug 376312</a>: [epub] Automatic
-	 * inclusion of detected resources may add the same resource twice or more
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=379052">bug 379052</a>: OPS validator
+	 * should handle all XHTML in the manifest
 	 * <p>
-	 * File A references file C as do file B. File C references file A. Before the fix there would be two instances of
-	 * file C.
+	 * The test will add one XHTML file that links to another XHTML file that should be validated and one that should
+	 * not
 	 * </p>
 	 *
 	 * @throws Exception
 	 */
-	public final void test_Bug376312() throws Exception {
-		setErrorExpected();
+	@Test
+	public final void test_Bug379052() throws Exception {
 		oebps.setIncludeReferencedResources(true);
-		oebps.addItem(new File("testdata/circular/file-a.xhtml"));
-		oebps.addItem(new File("testdata/circular/file-b.xhtml"));
 		epub.add(oebps);
+		oebps.addItem(new File("testdata/OPF-Tests/Bug_379052/chapter-1.xhtml"));
 		epub.pack(epubFile);
-		EList<Item> items = oebps.getPackage().getManifest().getItems();
-		// File A, B, C and the NCX
-		assertEquals(4, items.size());
+		// Two XHTML files, one with a warning. One CSS file and the NCX.
+		assertEquals(4, oebps.getPackage().getManifest().getItems().size());
+		// Should be exactly two warning.
+		assertEquals(1, oebps.getValidationMessages().size());
+		epubFile.delete();
 	}
 
 	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setTableOfContents(java.io.File)} .
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
+	 * fallback items
+	 * <p>
+	 * This method tests for the exception that shall be raised when an illegal item has been added.
+	 * </p>
 	 *
-	 * @see TestOPS2Publication#testSetTableOfContents()
+	 * @throws Exception
 	 */
 	@Test
-	public final void testSetTableOfContents() {
-		// Handled by subclass test.
+	public final void test_Bug358671_Illegal_Item() throws Exception {
+		epub.add(oebps);
+		oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
+		epub.pack(epubFile);
+		ValidationMessage msg = oebps.getValidationMessages().get(0);
+		assertEquals(Severity.WARNING, msg.getSeverity());
+		assertEquals(true, msg.getMessage()
+				.equals("Item \"illegal-type.html\" is not a core media type and does not specify a fallback item."));
 	}
 
 	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#unpack(java.io.File)} .
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
+	 * fallback items
+	 * <p>
+	 * This method tests for the exception that shall be raised when an illegal item has been added with an illegal
+	 * fallback item. Which fallback items that are allowed is specified by the OPS version.
+	 * </p>
+	 *
+	 * @throws Exception
 	 */
 	@Test
-	public final void testUnpack() {
-		// TODO
+	public final void test_Bug358671_Illegal_Fallback() throws Exception {
+		epub.add(oebps);
+		Item item = oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
+		item.setFallback("fallback");
+		oebps.addItem("fallback", null, new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"), null, null, true,
+				true, false);
+		epub.pack(epubFile);
+		ValidationMessage msg = oebps.getValidationMessages().get(0);
+		assertEquals(Severity.WARNING, msg.getSeverity());
+		assertEquals(true, msg.getMessage().equals(
+				"Item \"illegal-type.html\" is not a core media type and specifies a non-core media fallback item."));
 	}
 
 	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateContents()} .
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358671">bug 358671</a>: Add support for
+	 * fallback items
+	 * <p>
+	 * This method tests for the warning that shall be issued when an illegal item has been added with a legal fallback
+	 * item.
+	 * </p>
+	 *
+	 * @throws Exception
 	 */
 	@Test
-	public final void testValidateContents() {
-		// TODO
+	public final void test_Bug358671_Legal_Fallback() throws Exception {
+		epub.add(oebps);
+		Item item = oebps.addItem(new File("testdata/OPF-Tests/Bug_358671/illegal-type.html"));
+		item.setFallback("fallback");
+		oebps.addItem("fallback", null, new File("testdata/plain-page.xhtml"), null, null, true, true, false);
+		epub.pack(epubFile);
+		assertEquals(3, oebps.getPackage().getManifest().getItems().size());
+		assertEquals(1, oebps.getValidationMessages().size());
+		ValidationMessage msg = oebps.getValidationMessages().get(0);
+		assertEquals(Severity.WARNING, msg.getSeverity());
+		assertEquals(true, msg.getMessage().equals(
+				"Item \"illegal-type.html\" is not a core media type but a legal fallback item has been specified."));
 	}
 
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateMetadata()} .
-	 */
-	@Test
-	public final void testValidateMetadata() {
-		// TODO
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#writeTableOfContents(java.io.File)} .
-	 */
-	@Test
-	public final void testWriteTableOfContents() {
-		// TODO
-	}
-
-	private class EPUB_OPF_Test extends OPSPublication {
-		public void testReadOPF(File rootFile) throws IOException {
-			readOPF(rootFile);
+	private class EPUB_NCX_Test extends OPSPublication {
+		public void testReadOCF(File tocFile) throws IOException {
+			readTableOfContents(tocFile);
 		}
 	}
 
 	/**
-	 * See if the OPF file generated by this tooling can be read.
+	 * See if the NCX file generated by this tooling can be read.
 	 *
 	 * @throws Exception
 	 */
 	@Test
-	public final void testReadOCF_Dogfood() throws Exception {
-		File rootFile = new File("testdata/OPF-Tests/Dogfood/content.opf");
-		EPUB_OPF_Test epub = new EPUB_OPF_Test();
-		epub.testReadOPF(rootFile);
+	public final void testReadNCX_Dogfood() throws Exception {
+		File workingFolder = new File("testdata/NCX-Tests/Dogfood/toc.ncx");
+		EPUB_NCX_Test epub = new EPUB_NCX_Test();
+		epub.testReadOCF(workingFolder);
 	}
 
 	/**
-	 * This case was discovered when testing an EPUB file generated by DocBook Reading the OPF fails with a
+	 * This case was discovered when testing an EPUB file generated by DocBook Reading the NCX fails with a
 	 * java.net.SocketException: Unexpected end of file from server. On closer inspection we can see that the file is
 	 * declared as XHTML (which it of course is not). This is probably due to an issue in DocBook XSL 1.76.1
 	 *
-	 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537 &group_id=21935&atid=373747.
+	 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537&group_id=21935&atid=373747.
 	 * @throws Exception
 	 */
 	@Test
-	public final void testReadOCF_SocketException() throws Exception {
-		File rootFile = new File("testdata/OPF-Tests/SocketException/content.opf");
-		EPUB_OPF_Test oebps = new EPUB_OPF_Test();
-		oebps.testReadOPF(rootFile);
+	public final void testReadNCX_SocketException() throws Exception {
+		File workingFolder = new File("testdata/NCX-Tests/SocketException/toc.ncx");
+		EPUB_NCX_Test epub = new EPUB_NCX_Test();
+		epub.testReadOCF(workingFolder);
 	}
 
-	/**
-	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380729">bug 380729</a>: Allow reference
-	 * elements to have "other." types
-	 *
-	 * @throws Exception
-	 */
-	@Test
-	public final void test_Bug380729() throws Exception {
-		// Validation is normally not performed when loading content. However
-		// the previous implementation of the reference type was an
-		// enumeration so it would fail when attempting to set it and there
-		// was no matching item. Hence this code should now pass as the OPF
-		// contains previously invalid values.
-		File rootFile = new File("testdata/OPF-Tests/Bug_380729/content.opf");
-		EPUB_OPF_Test oebps = new EPUB_OPF_Test();
-		oebps.testReadOPF(rootFile);
-
-		// This is required for validation
-		oebps.addSubject(null, null, "Required subject");
-
-		// Validate that "cover" and "other.ms-coverpage" already read from
-		// the OPF file is OK.
-		List<Diagnostic> problems = oebps.validateMetadata();
-		assertEquals(problems.size(), 0);
-
-		// Add illegal reference type and see that we get an error
-		oebps.addReference("cover-page.xhtml", "cover", "invalid");
-		problems = oebps.validateMetadata();
-		assertEquals(problems.size(), 1);
-	}
 }
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestPublication.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestPublication.java
new file mode 100644
index 0000000..aa8f047
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/api/TestPublication.java
@@ -0,0 +1,842 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2014 Torkild U. Resheim.
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Torkild U. Resheim - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.epub.tests.api;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.mylyn.docs.epub.core.EPUB;
+import org.eclipse.mylyn.docs.epub.core.OPSPublication;
+import org.eclipse.mylyn.docs.epub.core.Publication;
+import org.eclipse.mylyn.docs.epub.core.ValidationException;
+import org.eclipse.mylyn.docs.epub.dc.Contributor;
+import org.eclipse.mylyn.docs.epub.dc.Coverage;
+import org.eclipse.mylyn.docs.epub.dc.Date;
+import org.eclipse.mylyn.docs.epub.dc.Description;
+import org.eclipse.mylyn.docs.epub.dc.Identifier;
+import org.eclipse.mylyn.docs.epub.dc.Publisher;
+import org.eclipse.mylyn.docs.epub.dc.Relation;
+import org.eclipse.mylyn.docs.epub.dc.Rights;
+import org.eclipse.mylyn.docs.epub.dc.Source;
+import org.eclipse.mylyn.docs.epub.dc.Subject;
+import org.eclipse.mylyn.docs.epub.dc.Title;
+import org.eclipse.mylyn.docs.epub.opf.Item;
+import org.eclipse.mylyn.docs.epub.opf.Role;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests features and regressions for all versions of the OPS supporting implementation {@link Publication}.
+ *
+ * @author Torkild U. Resheim
+ */
+@SuppressWarnings("nls")
+public class TestPublication extends AbstractTest {
+
+	private Publication oebps;
+
+	@Override
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		oebps = new OPSPublication(logger);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addContributor(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddContributor() {
+		Contributor contributor = oebps.addContributor("Nomen Nescio");
+		contributor.setRole(Role.AUTHOR);
+
+		oebps.addContributor(null, null, "Nomen Nescio", Role.AUTHOR, null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addCoverage(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddCoverage() {
+		oebps.addCoverage("Coverage", Locale.CANADA_FRENCH, "My Coverage");
+		oebps.addCoverage(null, Locale.CANADA_FRENCH, "My Coverage");
+		oebps.addCoverage(null, null, "My Coverage");
+		EList<Coverage> Coverages = oebps.getPackage().getMetadata().getCoverages();
+		Assert.assertEquals("Coverage", Coverages.get(0).getId());
+		Assert.assertEquals("fr_CA", Coverages.get(0).getLang());
+		Assert.assertEquals("My Coverage", getText(Coverages.get(0)));
+		Assert.assertEquals(null, Coverages.get(1).getId());
+		Assert.assertEquals("fr_CA", Coverages.get(1).getLang());
+		Assert.assertEquals("My Coverage", getText(Coverages.get(1)));
+		Assert.assertEquals(null, Coverages.get(2).getId());
+		Assert.assertEquals(null, Coverages.get(2).getLang());
+		Assert.assertEquals("My Coverage", getText(Coverages.get(2)));
+		try {
+			oebps.addCoverage(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addCreator(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddCreator() {
+		// TODO
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.util.Date, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddDateStringDateString() {
+		// TODO
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.lang.String, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddDateStringStringString() {
+		oebps.addDate(null, "1969", null);
+		oebps.addDate(null, "1969-03", null);
+		oebps.addDate(null, "1969-03-14", null);
+		oebps.addDate(null, "1969-03-14", "event");
+		EList<Date> dates = oebps.getPackage().getMetadata().getDates();
+		assertEquals("1969", getText(dates.get(0)));
+		assertEquals("1969-03", getText(dates.get(1)));
+		assertEquals("1969-03-14", getText(dates.get(2)));
+		assertEquals("event", dates.get(3).getEvent());
+		try {
+			oebps.addDate(null, (String) null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addDescription(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddDescription() {
+		oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
+		oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
+		oebps.addDescription(null, null, "My Description");
+		EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
+		Assert.assertEquals("Description", Descriptions.get(0).getId());
+		Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(0)));
+		Assert.assertEquals(null, Descriptions.get(1).getId());
+		Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(1)));
+		Assert.assertEquals(null, Descriptions.get(2).getId());
+		Assert.assertEquals(null, Descriptions.get(2).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(2)));
+		try {
+			oebps.addDescription(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addFormat(java.lang.String, java.lang.String)} .
+	 */
+	@Test
+	public final void testAddFormat() {
+		oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
+		oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
+		oebps.addDescription(null, null, "My Description");
+		EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
+		Assert.assertEquals("Description", Descriptions.get(0).getId());
+		Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(0)));
+		Assert.assertEquals(null, Descriptions.get(1).getId());
+		Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(1)));
+		Assert.assertEquals(null, Descriptions.get(2).getId());
+		Assert.assertEquals(null, Descriptions.get(2).getLang());
+		Assert.assertEquals("My Description", getText(Descriptions.get(2)));
+		try {
+			oebps.addDescription(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addIdentifier(java.lang.String, java.lang.String, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddIdentifier() {
+		oebps.addIdentifier("Identifier", "ID", "My Identifier");
+		oebps.addIdentifier(null, "ID", "My Identifier");
+		oebps.addIdentifier(null, null, "My Identifier");
+		EList<Identifier> Identifiers = oebps.getPackage().getMetadata().getIdentifiers();
+		Assert.assertEquals("Identifier", Identifiers.get(0).getId());
+		Assert.assertEquals("ID", Identifiers.get(0).getScheme());
+		Assert.assertEquals("My Identifier", getText(Identifiers.get(0)));
+		Assert.assertEquals(null, Identifiers.get(1).getId());
+		Assert.assertEquals("ID", Identifiers.get(1).getScheme());
+		Assert.assertEquals("My Identifier", getText(Identifiers.get(1)));
+		Assert.assertEquals(null, Identifiers.get(2).getId());
+		Assert.assertEquals(null, Identifiers.get(2).getScheme());
+		Assert.assertEquals("My Identifier", getText(Identifiers.get(2)));
+		try {
+			oebps.addIdentifier(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.io.File)} .
+	 */
+	@Test
+	public final void testAddItemFile() {
+		// TODO
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.lang.String, java.util.Locale, java.io.File, java.lang.String, java.lang.String, boolean, boolean, boolean)}
+	 * .
+	 */
+	@Test
+	public final void testAddItemStringLocaleFileStringStringBooleanBooleanBoolean() {
+		// TODO
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addLanguage(java.lang.String, java.lang.String)} .
+	 */
+	@Test
+	public final void testAddLanguage() {
+		oebps.addLanguage(null, "no");
+		oebps.addLanguage("id", "no");
+		Assert.assertEquals("no", getText(oebps.getPackage().getMetadata().getLanguages().get(0)));
+		Assert.assertEquals("id", oebps.getPackage().getMetadata().getLanguages().get(1).getId());
+		try {
+			oebps.addLanguage(null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addPublisher(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddPublisher() {
+		oebps.addPublisher("Publisher", Locale.CANADA_FRENCH, "My Publisher");
+		oebps.addPublisher(null, Locale.CANADA_FRENCH, "My Publisher");
+		oebps.addPublisher(null, null, "My Publisher");
+		EList<Publisher> Publishers = oebps.getPackage().getMetadata().getPublishers();
+		Assert.assertEquals("Publisher", Publishers.get(0).getId());
+		Assert.assertEquals("fr_CA", Publishers.get(0).getLang());
+		Assert.assertEquals("My Publisher", getText(Publishers.get(0)));
+		Assert.assertEquals(null, Publishers.get(1).getId());
+		Assert.assertEquals("fr_CA", Publishers.get(1).getLang());
+		Assert.assertEquals("My Publisher", getText(Publishers.get(1)));
+		Assert.assertEquals(null, Publishers.get(2).getId());
+		Assert.assertEquals(null, Publishers.get(2).getLang());
+		Assert.assertEquals("My Publisher", getText(Publishers.get(2)));
+		try {
+			oebps.addPublisher(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addReference(java.lang.String, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Type)}
+	 * .
+	 */
+	@Test
+	public final void testAddReference() {
+		// TODO
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addRelation(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddRelation() {
+		oebps.addRelation("Relation", Locale.CANADA_FRENCH, "My Relation");
+		oebps.addRelation(null, Locale.CANADA_FRENCH, "My Relation");
+		oebps.addRelation(null, null, "My Relation");
+		EList<Relation> Relations = oebps.getPackage().getMetadata().getRelations();
+		Assert.assertEquals("Relation", Relations.get(0).getId());
+		Assert.assertEquals("fr_CA", Relations.get(0).getLang());
+		Assert.assertEquals("My Relation", getText(Relations.get(0)));
+		Assert.assertEquals(null, Relations.get(1).getId());
+		Assert.assertEquals("fr_CA", Relations.get(1).getLang());
+		Assert.assertEquals("My Relation", getText(Relations.get(1)));
+		Assert.assertEquals(null, Relations.get(2).getId());
+		Assert.assertEquals(null, Relations.get(2).getLang());
+		Assert.assertEquals("My Relation", getText(Relations.get(2)));
+		try {
+			oebps.addRelation(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addRights(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddRights() {
+		oebps.addRights("Rights", Locale.CANADA_FRENCH, "My Rights");
+		oebps.addRights(null, Locale.CANADA_FRENCH, "My Rights");
+		oebps.addRights(null, null, "My Rights");
+		EList<Rights> Rightss = oebps.getPackage().getMetadata().getRights();
+		Assert.assertEquals("Rights", Rightss.get(0).getId());
+		Assert.assertEquals("fr_CA", Rightss.get(0).getLang());
+		Assert.assertEquals("My Rights", getText(Rightss.get(0)));
+		Assert.assertEquals(null, Rightss.get(1).getId());
+		Assert.assertEquals("fr_CA", Rightss.get(1).getLang());
+		Assert.assertEquals("My Rights", getText(Rightss.get(1)));
+		Assert.assertEquals(null, Rightss.get(2).getId());
+		Assert.assertEquals(null, Rightss.get(2).getLang());
+		Assert.assertEquals("My Rights", getText(Rightss.get(2)));
+		try {
+			oebps.addRights(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addSource(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddSource() {
+		oebps.addSource("Source", Locale.CANADA_FRENCH, "My Source");
+		oebps.addSource(null, Locale.CANADA_FRENCH, "My Source");
+		oebps.addSource(null, null, "My Source");
+		EList<Source> Sources = oebps.getPackage().getMetadata().getSources();
+		Assert.assertEquals("Source", Sources.get(0).getId());
+		Assert.assertEquals("fr_CA", Sources.get(0).getLang());
+		Assert.assertEquals("My Source", getText(Sources.get(0)));
+		Assert.assertEquals(null, Sources.get(1).getId());
+		Assert.assertEquals("fr_CA", Sources.get(1).getLang());
+		Assert.assertEquals("My Source", getText(Sources.get(1)));
+		Assert.assertEquals(null, Sources.get(2).getId());
+		Assert.assertEquals(null, Sources.get(2).getLang());
+		Assert.assertEquals("My Source", getText(Sources.get(2)));
+		// An IllegalArgumentException is expected
+		try {
+			oebps.addSource(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addSubject(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddSubject() {
+		oebps.addSubject("Subject", Locale.CANADA_FRENCH, "My Subject");
+		oebps.addSubject(null, Locale.CANADA_FRENCH, "My Subject");
+		oebps.addSubject(null, null, "My Subject");
+		EList<Subject> subjects = oebps.getPackage().getMetadata().getSubjects();
+		Assert.assertEquals("Subject", subjects.get(0).getId());
+		Assert.assertEquals("fr_CA", subjects.get(0).getLang());
+		Assert.assertEquals("My Subject", getText(subjects.get(0)));
+		Assert.assertEquals(null, subjects.get(1).getId());
+		Assert.assertEquals("fr_CA", subjects.get(1).getLang());
+		Assert.assertEquals("My Subject", getText(subjects.get(1)));
+		Assert.assertEquals(null, subjects.get(2).getId());
+		Assert.assertEquals(null, subjects.get(2).getLang());
+		Assert.assertEquals("My Subject", getText(subjects.get(2)));
+		try {
+			oebps.addSubject(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.mylyn.docs.epub.core.Publication#addTitle(java.lang.String, java.util.Locale, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddTitle() {
+		oebps.addTitle("Title", Locale.CANADA_FRENCH, "My Title");
+		oebps.addTitle(null, Locale.CANADA_FRENCH, "My Title");
+		oebps.addTitle(null, null, "My Title");
+		EList<Title> titles = oebps.getPackage().getMetadata().getTitles();
+		Assert.assertEquals("Title", titles.get(0).getId());
+		Assert.assertEquals("fr_CA", titles.get(0).getLang());
+		Assert.assertEquals("My Title", getText(titles.get(0)));
+		Assert.assertEquals(null, titles.get(1).getId());
+		Assert.assertEquals("fr_CA", titles.get(1).getLang());
+		Assert.assertEquals("My Title", getText(titles.get(1)));
+		Assert.assertEquals(null, titles.get(2).getId());
+		Assert.assertEquals(null, titles.get(2).getLang());
+		Assert.assertEquals("My Title", getText(titles.get(2)));
+		try {
+			oebps.addTitle(null, null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#addType(java.lang.String, java.lang.String)}
+	 * .
+	 */
+	@Test
+	public final void testAddType() {
+		oebps.addType("Type", "My Type");
+		oebps.addType(null, "My Type");
+		EList<org.eclipse.mylyn.docs.epub.dc.Type> Types = oebps.getPackage().getMetadata().getTypes();
+		Assert.assertEquals("Type", Types.get(0).getId());
+		Assert.assertEquals("My Type", getText(Types.get(0)));
+		Assert.assertEquals(null, Types.get(1).getId());
+		Assert.assertEquals("My Type", getText(Types.get(1)));
+		try {
+			oebps.addType(null, null);
+			fail();
+		} catch (IllegalArgumentException e) {
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#generateTableOfContents()} .
+	 */
+	@Test
+	public final void testGenerateTableOfContents() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getIdentifier()}.
+	 */
+	@Test
+	public final void testGetIdentifier() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemById(java.lang.String)} .
+	 */
+	@Test
+	public final void testGetItemById() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemsByMIMEType(java.lang.String)} .
+	 */
+	@Test
+	public final void testGetItemsByMIMEType() {
+		Item i_in_1 = oebps.addItem(new File("testdata/images/subfolder-drawing.svg"));
+		Item i_in_2 = oebps.addItem(new File("testdata/plain-page.xhtml"));
+		List<Item> i_out_1 = oebps.getItemsByMIMEType("image/svg+xml");
+		assertEquals(1, i_out_1.size());
+		assertEquals(i_in_1, i_out_1.get(0));
+		List<Item> i_out_2 = oebps.getItemsByMIMEType("application/xhtml+xml");
+		assertEquals(1, i_out_2.size());
+		assertEquals(i_in_2, i_out_2.get(0));
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getPackage()}.
+	 */
+	@Test
+	public final void testGetOpfPackage() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getRootFolder()}.
+	 */
+	@Test
+	public final void testGetRootFolder() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getSpine()}.
+	 */
+	@Test
+	public final void testGetSpine() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getTableOfContents()} .
+	 */
+	@Test
+	public final void testGetTableOfContents() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getValidationMessages()} .
+	 */
+	@Test
+	public final void testGetValidationMessages() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB where only a
+	 * single page has been added shall be packed without issues
+	 *
+	 * @throws Exception
+	 */
+
+	/* Bug 454932 - fix or remove failing EPUB test
+	@Test
+	public final void testPack_EPUB2() throws Exception {
+		oebps.addItem(new File("testdata/plain-page.xhtml"));
+		epub.add(oebps);
+		epub.pack(epubFile);
+		oebps.validateMetadata();
+		Report report = new DefaultReportImpl(epubFile.toString());
+		EpubCheck checker = new EpubCheck(epubFile, report);
+		System.out.println("Validating plain EPUB 2.0.1 file");
+		System.out.println("Using version " + EpubCheck.version() + " of EpubCheck.");
+		Assert.assertTrue(checker.validate());
+	}
+	 */
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB with no content
+	 * shall fail when packed.
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void testPack_Empty() throws Exception {
+		epub.add(new OPSPublication());
+		try {
+			epubFile.delete();
+			epub.pack(epubFile);
+			fail();
+		} catch (ValidationException e) {
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#readTableOfContents(java.io.File)} .
+	 */
+	@Test
+	public final void testReadTableOfContents() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setGenerateToc(boolean)} .
+	 */
+	@Test
+	public final void testSetGenerateToc() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIdentifierId(java.lang.String)} .
+	 */
+	@Test
+	public final void testSetIdentifierId() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIncludeReferencedResources(boolean)}. This
+	 * is determining whether or not the referenced resources has been picked up and included in the resulting EPUB.
+	 * Also handles <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=375795">bug 375795</a>: [epub][patch]
+	 * Automatic inclusion of referenced resources fail on anchor references
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void testSetIncludeReferencedResources() throws Exception {
+		oebps.setIncludeReferencedResources(true);
+		oebps.addItem(new File("testdata/plain-page_link.xhtml"));
+		epub.add(oebps);
+		// Included resources will only be added when we pack
+		epub.pack(epubFile);
+
+		EPUB epub2 = new EPUB();
+		epub2.unpack(epubFile, epubFolder);
+		Publication oebps = epub2.getOPSPublications().get(0);
+		File root = oebps.getRootFolder();
+		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
+		Assert.assertTrue(svg.exists());
+		File svg2 = new File(
+				root.getAbsolutePath() + File.separator + "images" + File.separator + "subfolder-drawing.svg");
+		Assert.assertTrue(svg2.exists());
+		File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.xhtml");
+		Assert.assertTrue(html.exists());
+		File html2 = new File(root.getAbsolutePath() + File.separator + "plain-page.xhtml");
+		Assert.assertTrue(html2.exists());
+		// The manifest shall only contain the items we have linked to in addition to the toc.ncx and the file that we
+		// started from -- a total of six files.
+		Assert.assertEquals(6, oebps.getPackage().getManifest().getItems().size());
+
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380016">bug 380016</a>: Reference scanner
+	 * should also include referenced CSS style sheets
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void test_Bug380016() throws Exception {
+		oebps.setIncludeReferencedResources(true);
+		oebps.addItem(new File("testdata/OPF-Tests/Bug_380016/chapter.xhtml"));
+		epub.add(oebps);
+		epub.pack(epubFile);
+		EPUB epub2 = new EPUB();
+		epub2.unpack(epubFile, epubFolder);
+		Publication oebps = epub2.getOPSPublications().get(0);
+		File root = oebps.getRootFolder();
+		File svg = new File(root.getAbsolutePath() + File.separator + "style.css");
+		Assert.assertTrue(svg.exists());
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360701">bug 360701</a>: [epub] Automatic
+	 * inclusion of referenced resources don't work for WikiText generated HTML.
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void test_Bug360701() throws Exception {
+		oebps.setIncludeReferencedResources(true);
+		// This page is similar to what WikiText would generate
+		oebps.addItem(new File("testdata/plain-page_link.html"));
+		epub.add(oebps);
+		// Included resources will only be added when we pack
+		epub.pack(epubFile);
+
+		EPUB epub2 = new EPUB();
+		epub2.unpack(epubFile, epubFolder);
+		Publication oebps = epub2.getOPSPublications().get(0);
+		File root = oebps.getRootFolder();
+		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
+		Assert.assertTrue(svg.exists());
+		File svg2 = new File(
+				root.getAbsolutePath() + File.separator + "images" + File.separator + "subfolder-drawing.svg");
+		Assert.assertTrue(svg2.exists());
+		File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.html");
+		Assert.assertTrue(html.exists());
+
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373052">bug 373052</a>: [epub] Reference
+	 * scanner does not handle absolute paths
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void test_Bug373052() throws Exception {
+		// We need to link to a absolute file so we create a temporary HTML file
+		// in which we have the link.m
+		File htmlFile = File.createTempFile("temp", ".xhtml");
+		File svgFile = new File("testdata/drawing.svg");
+
+		FileWriter fw = new FileWriter(htmlFile);
+		// A proper declaration must be added or the file type cannot be
+		// correctly detected.
+		fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+		fw.write("<!DOCTYPE html\n"
+				+ "  PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");
+		fw.write("<html xmlns=\"http://www.w3.org/1999/xhtml\"><body>");
+		fw.write("<img src=\"" + svgFile.getAbsolutePath() + "\"/>");
+		fw.write("</body></html>");
+		fw.close();
+
+		oebps.setIncludeReferencedResources(true);
+		oebps.addItem(htmlFile);
+		epub.add(oebps);
+		epub.pack(epubFile);
+
+		htmlFile.delete();
+
+		EPUB epub2 = new EPUB();
+		epub2.unpack(epubFile, epubFolder);
+		Publication oebps = epub2.getOPSPublications().get(0);
+		File root = oebps.getRootFolder();
+		File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
+		Assert.assertTrue(svg.exists());
+
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=376312">bug 376312</a>: [epub] Automatic
+	 * inclusion of detected resources may add the same resource twice or more
+	 * <p>
+	 * File A references file C as do file B. File C references file A. Before the fix there would be two instances of
+	 * file C.
+	 * </p>
+	 *
+	 * @throws Exception
+	 */
+	public final void test_Bug376312() throws Exception {
+		oebps.setIncludeReferencedResources(true);
+		oebps.addItem(new File("testdata/circular/file-a.xhtml"));
+		oebps.addItem(new File("testdata/circular/file-b.xhtml"));
+		epub.add(oebps);
+		epub.pack(epubFile);
+		EList<Item> items = oebps.getPackage().getManifest().getItems();
+		// File A, B, C and the NCX
+		assertEquals(4, items.size());
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setTableOfContents(java.io.File)} .
+	 *
+	 * @see TestOPSPublication#testSetTableOfContents()
+	 */
+	@Test
+	public final void testSetTableOfContents() {
+		// Handled by subclass test.
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#unpack(java.io.File)} .
+	 */
+	@Test
+	public final void testUnpack() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateContents()} .
+	 */
+	@Test
+	public final void testValidateContents() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateMetadata()} .
+	 */
+	@Test
+	public final void testValidateMetadata() {
+		// TODO
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#writeTableOfContents(java.io.File)} .
+	 */
+	@Test
+	public final void testWriteTableOfContents() {
+		// TODO
+	}
+
+	private class EPUB_OPF_Test extends OPSPublication {
+		public void testReadOPF(File rootFile) throws IOException {
+			readOPF(rootFile);
+		}
+	}
+
+	/**
+	 * See if the OPF file generated by this tooling can be read.
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void testReadOCF_Dogfood() throws Exception {
+		File rootFile = new File("testdata/OPF-Tests/Dogfood/content.opf");
+		EPUB_OPF_Test epub = new EPUB_OPF_Test();
+		epub.testReadOPF(rootFile);
+	}
+
+	/**
+	 * This case was discovered when testing an EPUB file generated by DocBook Reading the OPF fails with a
+	 * java.net.SocketException: Unexpected end of file from server. On closer inspection we can see that the file is
+	 * declared as XHTML (which it of course is not). This is probably due to an issue in DocBook XSL 1.76.1
+	 *
+	 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537 &group_id=21935&atid=373747.
+	 * @throws Exception
+	 */
+	@Test
+	public final void testReadOCF_SocketException() throws Exception {
+		File rootFile = new File("testdata/OPF-Tests/SocketException/content.opf");
+		EPUB_OPF_Test oebps = new EPUB_OPF_Test();
+		oebps.testReadOPF(rootFile);
+	}
+
+	/**
+	 * Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380729">bug 380729</a>: Allow reference
+	 * elements to have "other." types
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public final void test_Bug380729() throws Exception {
+		// Validation is normally not performed when loading content. However
+		// the previous implementation of the reference type was an
+		// enumeration so it would fail when attempting to set it and there
+		// was no matching item. Hence this code should now pass as the OPF
+		// contains previously invalid values.
+		File rootFile = new File("testdata/OPF-Tests/Bug_380729/content.opf");
+		EPUB_OPF_Test oebps = new EPUB_OPF_Test();
+		oebps.testReadOPF(rootFile);
+
+		// This is required for validation
+		oebps.addSubject(null, null, "Required subject");
+
+		// Validate that "cover" and "other.ms-coverpage" already read from
+		// the OPF file is OK.
+		List<Diagnostic> problems = oebps.validateMetadata();
+		assertEquals(0, problems.size());
+
+		// Add illegal reference type and see that we get an error
+		oebps.addReference("cover-page.xhtml", "cover", "invalid");
+		problems = oebps.validateMetadata();
+		assertEquals(1, problems.size());
+	}
+}
diff --git a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/core/TestEclipseTocImporter.java b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/core/TestEclipseTocImporter.java
index 354bcad..e5592cf 100644
--- a/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/core/TestEclipseTocImporter.java
+++ b/org.eclipse.mylyn.docs.epub.tests/src/org/eclipse/mylyn/docs/epub/tests/core/TestEclipseTocImporter.java
@@ -17,8 +17,10 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.mylyn.docs.epub.core.OPSPublication;
 import org.eclipse.mylyn.docs.epub.tests.api.AbstractTest;
 import org.eclipse.mylyn.internal.docs.epub.core.EclipseTocImporter;
+import org.junit.Before;
 import org.junit.Test;
 import org.w3c.dom.DOMException;
 import org.xml.sax.SAXException;
@@ -29,9 +31,18 @@
 @SuppressWarnings("restriction")
 public class TestEclipseTocImporter extends AbstractTest {
 
+	private OPSPublication oebps;
+
+	@Override
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		oebps = new OPSPublication(logger);
+	}
+
 	@Test
-	public void testEclipseTocImporter() throws DOMException, ParserConfigurationException, SAXException, IOException,
-	URISyntaxException {
+	public void testEclipseTocImporter()
+			throws DOMException, ParserConfigurationException, SAXException, IOException, URISyntaxException {
 		File rootFile = new File("testdata/import/eclipse-toc/root.xml"); //$NON-NLS-1$
 		EclipseTocImporter.importFile(oebps, rootFile);
 		// a.html, b.html and c.html
diff --git a/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/basic.opf b/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/basic.opf
new file mode 100644
index 0000000..bcf97f5
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/basic.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<opf:package xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uuid">
+  <opf:metadata>
+    <dc:title>Bare minimum EPUB 3 OPF</dc:title>
+    <dc:subject>Testing</dc:subject>
+    <dc:format>application/epub+zip</dc:format>
+    <dc:identifier id="uuid" opf:scheme="UUID">70ce7c20-8f9e-11e0-91e4-0800200c9a66</dc:identifier>
+    <dc:language>en</dc:language>
+  </opf:metadata>
+  <opf:manifest>
+    <opf:item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+    <opf:item id="cover" href="cover-page.xhtml" media-type="application/xhtml+xml"/>
+  </opf:manifest>
+  <opf:spine toc="ncx">
+    <opf:itemref idref="cover" linear="no"/>
+  </opf:spine>
+</opf:package>
diff --git a/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/content.opf b/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/content.opf
new file mode 100644
index 0000000..11b9d04
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.tests/testdata/OPF-Tests/EPUB3/content.opf
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" prefix="ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/" version="3.0" xml:lang="en" unique-identifier="pub-identifier">
+  <metadata>
+    <dc:identifier id="pub-identifier">urn:isbn:123456789</dc:identifier>
+    <meta id="meta-identifier" property="dcterms:identifier">urn:isbn:123456789</meta>
+    <dc:title id="pub-title">Actual example EPUB 3 OPF</dc:title>
+    <meta property="dcterms:title" id="meta-title">Testing</meta>
+    <dc:language id="pub-language">en</dc:language>
+    <meta property="dcterms:language" id="meta-language">en</meta>
+    <meta property="dcterms:modified">2001-07-22T14:45:39Z</meta>
+    <meta property="dcterms:contributor">Nomen Gamma</meta>
+    <dc:contributor>Nomen Gamma</dc:contributor>
+    <meta property="dcterms:rights">Copyright © 2015 Nomen Beta</meta>
+    <dc:rights>Copyright © 2015 Nomen Beta</dc:rights>
+    <meta property="dcterms:rightsHolder">Nomen Beta</meta>
+    <meta property="dcterms:publisher">Eclipse Mylyn</meta>
+    <dc:publisher>Eclipse Mylyn</dc:publisher>
+    <meta property="dcterms:subject">Test</meta>
+    <dc:subject>Test</dc:subject>
+    <meta property="dcterms:date">2015-09-14</meta>
+    <dc:date>2015-03-14</dc:date>
+    <meta property="dcterms:description">description</meta>
+    <dc:description>description</dc:description>
+    <meta property="dcterms:contributor">Nomen Alfa</meta>
+    <dc:contributor>Nomen Alfa</dc:contributor>
+    <meta id="meta-creator20" property="dcterms:creator">Nomen Beta</meta>
+    <dc:creator id="pub-creator20">Nomen Beta</dc:creator>
+    <meta name="cover" content="cover-image"/>
+    <meta property="ibooks:specified-fonts">true</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+    <item id="epub.embedded.font" href="DejaVuSerif.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="htmltoc" properties="nav" media-type="application/xhtml+xml" href="toc.html"/>
+    <item media-type="text/css" id="html-css" href="core.css"/>
+    <item id="cover" href="cover.html" media-type="application/xhtml+xml"/>
+    <item id="cover-image" properties="cover-image" href="orm_front_cover.jpg" media-type="image/jpeg"/>
+    <item id="index" href="index.html" media-type="application/xhtml+xml"/>
+    <item id="chapter" href="chapter.html" media-type="application/xhtml+xml"/>
+    <item id="dedication" href="dedication.html" media-type="application/xhtml+xml"/>
+    <item id="image" href="image.png" media-type="image/png"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="cover" linear="yes"/>
+    <itemref idref="dedication"/>
+    <itemref idref="chapter"/>
+    <itemref idref="index"/>
+  </spine>
+  <guide>
+    <reference href="cover.html" type="cover" title="Cover"/>
+    <reference href="toc.html" type="toc" title="Table of Contents"/>
+    <reference href="index.html" type="text"/>
+  </guide>
+</package>
\ No newline at end of file