- Renamed the artifact-id of the parent to match the directory (Must have missed that)
- Updated all existing presentations to use the new content-parent-pom
- Added reactor poms to make it simple to build all presentations in one go
diff --git a/content/ApacheCon/Gemfile b/content/ApacheCon/Gemfile
index b846263..50bcb6b 100644
--- a/content/ApacheCon/Gemfile
+++ b/content/ApacheCon/Gemfile
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
 source 'https://rubygems.org'
 
 gem 'asciidoctor-revealjs' # latest released version
diff --git a/content/ApacheCon/convert-slides.js b/content/ApacheCon/convert-slides.js
index d3a6e03..1abdfb5 100644
--- a/content/ApacheCon/convert-slides.js
+++ b/content/ApacheCon/convert-slides.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 // Load Asciidoctor.js and the reveal.js converter
 var asciidoctor = require('@asciidoctor/core')()
 var asciidoctorRevealjs = require('@asciidoctor/reveal.js')
diff --git a/content/ApacheCon/libs/docinfo-hack/document.html.slim b/content/ApacheCon/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index ec9e3cf..0000000
--- a/content/ApacheCon/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/ApacheCon/libs/third-party/erd b/content/ApacheCon/libs/third-party/erd
deleted file mode 160000
index e416dd6..0000000
--- a/content/ApacheCon/libs/third-party/erd
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e416dd6721b7e9ced0869eaf8197bdac1e10700f
diff --git a/content/ApacheCon/pom.xml b/content/ApacheCon/pom.xml
index 8a68a54..16f40f9 100644
--- a/content/ApacheCon/pom.xml
+++ b/content/ApacheCon/pom.xml
@@ -18,26 +18,28 @@
 
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-   <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
 
-   <parent>
-       <groupId>org.apache.training</groupId>
-       <artifactId>content-master-pom</artifactId>
-       <version>1.0.0-SNAPSHOT</version>
-   </parent>
-   
+  <parent>
     <groupId>org.apache.training</groupId>
-    <artifactId>Apache-Con-Slides</artifactId>
+    <artifactId>content-parent-pom</artifactId>
     <version>1.0.0-SNAPSHOT</version>
-    <packaging>war</packaging>
+    <relativePath/>
+  </parent>
 
-    <name>ApacheCon slides</name>
-    <description>Slides for ApacheCon</description>
+  <groupId>org.apache.training</groupId>
+  <artifactId>Apache-Con-Slides</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
 
-    <properties>
-        <project.main.contentfile>index_en</project.main.contentfile>
-        <project.main.theme>apachecon</project.main.theme>
-    </properties>
+  <name>ApacheCon slides</name>
+  <description>Slides for ApacheCon</description>
+
+  <properties>
+    <project.main.contentfile>index_en</project.main.contentfile>
+    <project.main.theme>apachecon</project.main.theme>
+  </properties>
 
 </project>
\ No newline at end of file
diff --git a/content/ApacheFlink/pom.xml b/content/ApacheFlink/pom.xml
index be132c5..65a78cb 100644
--- a/content/ApacheFlink/pom.xml
+++ b/content/ApacheFlink/pom.xml
@@ -19,218 +19,21 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
-    </parent>
-
+  <parent>
     <groupId>org.apache.training</groupId>
-    <artifactId>apache-flink</artifactId>
+    <artifactId>content-parent-pom</artifactId>
     <version>1.0.0-SNAPSHOT</version>
-    <packaging>war</packaging>
+    <relativePath/>
+  </parent>
 
-    <name>Apache Flink Slides</name>
-    <description></description>
+  <groupId>org.apache.training</groupId>
+  <artifactId>apache-flink</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
 
-    <properties>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-    </properties>
+  <name>Apache Flink Slides</name>
+  <description></description>
 
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                    <!-- Configure the target director to where will the output be generated -->
-                    <outputDirectory>${project.slides.directory}</outputDirectory>
-                    <attributes>
-                        <icons>font</icons>
-                    </attributes>
-                    <!-- output file-->
-                    <outputFile>index.html</outputFile>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                    </attributes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/ApacheHive/pom.xml b/content/ApacheHive/pom.xml
index 156f12c..10e901c 100644
--- a/content/ApacheHive/pom.xml
+++ b/content/ApacheHive/pom.xml
@@ -19,218 +19,21 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
-    </parent>
-
+  <parent>
     <groupId>org.apache.training</groupId>
-    <artifactId>apache-hive</artifactId>
+    <artifactId>content-parent-pom</artifactId>
     <version>1.0.0-SNAPSHOT</version>
-    <packaging>war</packaging>
+    <relativePath/>
+  </parent>
 
-    <name>Apache Hive Slides</name>
-    <description></description>
+  <groupId>org.apache.training</groupId>
+  <artifactId>apache-hive</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
 
-    <properties>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-    </properties>
+  <name>Apache Hive Slides</name>
+  <description></description>
 
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                    <!-- Configure the target director to where will the output be generated -->
-                    <outputDirectory>${project.slides.directory}</outputDirectory>
-                    <attributes>
-                        <icons>font</icons>
-                    </attributes>
-                    <!-- output file-->
-                    <outputFile>index.html</outputFile>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                    </attributes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/ApacheWay/IncubatorReleases/pom.xml b/content/ApacheWay/IncubatorReleases/pom.xml
index 18f9b30..74f0aa2 100644
--- a/content/ApacheWay/IncubatorReleases/pom.xml
+++ b/content/ApacheWay/IncubatorReleases/pom.xml
@@ -19,288 +19,21 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
-    </parent>
-
+  <parent>
     <groupId>org.apache.training</groupId>
-    <artifactId>incubator-releases</artifactId>
+    <artifactId>content-parent-pom</artifactId>
     <version>1.0.0-SNAPSHOT</version>
-    <packaging>war</packaging>
+    <relativePath/>
+  </parent>
 
-    <name>How To Slide Your Release Past The Incubator</name>
-    <description>How to make making releases while your are an ASF incubating project.</description>
+  <groupId>org.apache.training</groupId>
+  <artifactId>incubator-releases</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
 
-    <properties>
-        <project.main.contentfile>index</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-    </properties>
+  <name>How To Slide Your Release Past The Incubator</name>
+  <description>How to make making releases while your are an ASF incubating project.</description>
 
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                            <backend>revealjs</backend>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                            <!-- Enable optional modules for generating diagrams and charts -->
-                            <requires>
-                                <require>asciidoctor-diagram</require>
-                                <!--require>chart-block-macro</require-->
-                            </requires>
-                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                            <attributes>
-                                <!--imagesdir></imagesdir-->
-                                <!--
-                                    Tell the system the relative path to the reveal.js files
-                                    inside the generated-slides directory.
-                                -->
-                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                                <!--
-                                    Use our custom theme, which is defined by src/main/theme/apache.css
-                                    and copied inside the reveal.js installation by the resources plugin a few lines
-                                    up inside this pom.
-                                -->
-                                <revealjs_theme>apache</revealjs_theme>
-                                <!-- Some basic settings -->
-                                <revealjs_transition>linear</revealjs_transition>
-                                <project-version>${project.version}</project-version>
-                                <source-highlighter>highlightjs</source-highlighter>
-                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                    <!--dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-extensions-lab</artifactId>
-                        <version>${asciidoctorj.extensions-lab.version}</version>
-                        <!- Referenced locally till it's officially released ->
-                        <scope>system</scope>
-                        <systemPath>${basedir}/libs/asciidoctorj-extensions-lab-${asciidoctorj.extensions-lab.version}.jar</systemPath>
-                    </dependency-->
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                            <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/ApacheWay/NavigatingASFIncubation/libs/docinfo-hack/document.html.slim b/content/ApacheWay/NavigatingASFIncubation/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index ec9e3cf..0000000
--- a/content/ApacheWay/NavigatingASFIncubation/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/ApacheWay/NavigatingASFIncubation/pom.xml b/content/ApacheWay/NavigatingASFIncubation/pom.xml
index 903c4ff..5773e6b 100644
--- a/content/ApacheWay/NavigatingASFIncubation/pom.xml
+++ b/content/ApacheWay/NavigatingASFIncubation/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,290 +36,4 @@
     <name>Navigating the ASF Incubator Process</name>
     <description>All about taking a project through incubation from start to finish.</description>
 
-    <properties>
-        <project.main.contentfile>index</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                            <backend>revealjs</backend>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                            <!-- Enable optional modules for generating diagrams and charts -->
-                            <requires>
-                                <require>asciidoctor-diagram</require>
-                                <!--require>chart-block-macro</require-->
-                            </requires>
-                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                            <attributes>
-                                <!--imagesdir></imagesdir-->
-                                <!--
-                                    Tell the system the relative path to the reveal.js files
-                                    inside the generated-slides directory.
-                                -->
-                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                                <!--
-                                    Use our custom theme, which is defined by src/main/theme/apache.css
-                                    and copied inside the reveal.js installation by the resources plugin a few lines
-                                    up inside this pom.
-                                -->
-                                <revealjs_theme>apache</revealjs_theme>
-                                <!-- Some basic settings -->
-                                <revealjs_transition>linear</revealjs_transition>
-                                <project-version>${project.version}</project-version>
-                                <source-highlighter>highlightjs</source-highlighter>
-                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                    <!--dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-extensions-lab</artifactId>
-                        <version>${asciidoctorj.extensions-lab.version}</version>
-                        <!- Referenced locally till it's officially released ->
-                        <scope>system</scope>
-                        <systemPath>${basedir}/libs/asciidoctorj-extensions-lab-${asciidoctorj.extensions-lab.version}.jar</systemPath>
-                    </dependency-->
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                            <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                            <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/ApacheWay/pom.xml b/content/ApacheWay/pom.xml
new file mode 100644
index 0000000..b08f70b
--- /dev/null
+++ b/content/ApacheWay/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-apache-way</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: Apache Way</name>
+
+  <modules>
+    <module>IncubatorReleases</module>
+    <module>NavigatingASFIncubation</module>
+  </modules>
+
+</project>
diff --git a/content/ComDev/ComDevIntro/pom.xml b/content/ComDev/ComDevIntro/pom.xml
index 01d4d1b..c50e772 100644
--- a/content/ComDev/ComDevIntro/pom.xml
+++ b/content/ComDev/ComDevIntro/pom.xml
@@ -21,10 +21,9 @@
 
     <parent>
         <groupId>org.apache.training</groupId>
-        <artifactId>content-master-pom</artifactId>
+        <artifactId>content-parent-pom</artifactId>
         <version>1.0.0-SNAPSHOT</version>
-
-        <!-- Required in our case as per http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent -->
+        <relativePath/>
     </parent>
 
     <artifactId>ComDevIntro</artifactId>
diff --git a/content/ComDev/pom.xml b/content/ComDev/pom.xml
new file mode 100644
index 0000000..43d85ec
--- /dev/null
+++ b/content/ComDev/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-comdev</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: ComDev</name>
+
+  <modules>
+    <module>ComDevIntro</module>
+  </modules>
+
+</project>
diff --git a/content/Hadoop/pom.xml b/content/Hadoop/pom.xml
index c7012da..086f231 100644
--- a/content/Hadoop/pom.xml
+++ b/content/Hadoop/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,202 +36,4 @@
     <name>Apache Hadoop Slides</name>
     <description></description>
 
-    <properties>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                    <!-- Configure the target director to where will the output be generated -->
-                    <outputDirectory>${project.slides.directory}</outputDirectory>
-                    <attributes>
-                        <icons>font</icons>
-                    </attributes>
-                    <!-- output file-->
-                    <outputFile>index.html</outputFile>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                    </attributes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/Ignite/pom.xml b/content/Ignite/pom.xml
index d5c842d..7edc7a3 100644
--- a/content/Ignite/pom.xml
+++ b/content/Ignite/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,205 +36,6 @@
     <name>Apache Ignite Slides</name>
     <description></description>
 
-    <properties>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                    <!-- Configure the target director to where will the output be generated -->
-                    <outputDirectory>${project.slides.directory}</outputDirectory>
-                    <attributes>
-                        <icons>font</icons>
-                    </attributes>
-                    <!-- output file-->
-                    <outputFile>index.html</outputFile>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                    </attributes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.ignite</groupId>
@@ -246,4 +48,5 @@
             <version>2.7.5</version>
         </dependency>
     </dependencies>
+
 </project>
diff --git a/content/Incubator/ReleaseChecklist/pom.xml b/content/Incubator/ReleaseChecklist/pom.xml
index c160d5e..f3e1da0 100644
--- a/content/Incubator/ReleaseChecklist/pom.xml
+++ b/content/Incubator/ReleaseChecklist/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,76 +36,4 @@
     <name>Incubator Release Chacklist</name>
     <description>A release checklist to see if a release complies with incubator and ASF.</description>
 
-    <properties>
-        <project.docs.directory>${project.build.directory}/generated-docs</project.docs.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <configuration>
-                    <backend>html5</backend>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-docs</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.docs.directory}</outputDirectory>
-                            <attributes>
-                                <icons>font</icons>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-docs</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/Incubator/ReleaseChecklist/src/main/asciidoc/index-docinfo-footer.html b/content/Incubator/ReleaseChecklist/src/main/asciidoc/index-docinfo-footer.html
index 5bc78fd..19625e0 100644
--- a/content/Incubator/ReleaseChecklist/src/main/asciidoc/index-docinfo-footer.html
+++ b/content/Incubator/ReleaseChecklist/src/main/asciidoc/index-docinfo-footer.html
@@ -1 +1,19 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
 <div align="center">Copyright &copy; 2019 Justin Mclean, Licensed under the Apache License.</div>
\ No newline at end of file
diff --git a/content/Incubator/pom.xml b/content/Incubator/pom.xml
new file mode 100644
index 0000000..fd0e291
--- /dev/null
+++ b/content/Incubator/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-incubator</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: Incubator</name>
+
+  <modules>
+    <module>ReleaseChecklist</module>
+  </modules>
+
+</project>
diff --git a/content/IoT/IoTDeveloper/libs/docinfo-hack/document.html.slim b/content/IoT/IoTDeveloper/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index 0957c64..0000000
--- a/content/IoT/IoTDeveloper/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right Licensed under the Apache License, Version 2.0.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/IoT/IoTDeveloper/pom.xml b/content/IoT/IoTDeveloper/pom.xml
index b5583f8..af81edc 100644
--- a/content/IoT/IoTDeveloper/pom.xml
+++ b/content/IoT/IoTDeveloper/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,272 +36,4 @@
     <name>IoT Developer Talk</name>
     <description>How to be an IoT develper (and have fun!)</description>
 
-    <properties>
-        <project.main.contentfile>index_en</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.8.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-                        <!-- exclude the third-party files -->
-                        <exclude>**/third-party/**</exclude>
-                        <!-- exclude the README.md file -->
-                        <exclude>README.md</exclude>
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                            <backend>revealjs</backend>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                            <!-- Enable optional modules for generating diagrams and charts -->
-                            <requires>
-                                <require>asciidoctor-diagram</require>
-                                <!--require>chart-block-macro</require-->
-                            </requires>
-                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                            <attributes>
-                                <!--imagesdir></imagesdir-->
-                                <!--
-                                    Tell the system the relative path to the reveal.js files
-                                    inside the generated-slides directory.
-                                -->
-                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                                <!--
-                                    Use our custom theme, which is defined by src/main/theme/apache.css
-                                    and copied inside the reveal.js installation by the resources plugin a few lines
-                                    up inside this pom.
-                                -->
-                                <revealjs_theme>apache</revealjs_theme>
-                                <!-- Some basic settings -->
-                                <revealjs_transition>linear</revealjs_transition>
-                                <project-version>${project.version}</project-version>
-                                <source-highlighter>highlightjs</source-highlighter>
-                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                                <plugin_pdf>enabled</plugin_pdf>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <fileSets>
-                                <fileset>
-                                    <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                                    <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                                </fileset>
-                            </fileSets>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/IoT/pom.xml b/content/IoT/pom.xml
new file mode 100644
index 0000000..08852f7
--- /dev/null
+++ b/content/IoT/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-iot</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: IoT</name>
+
+  <modules>
+    <module>IoTDeveloper</module>
+  </modules>
+
+</project>
diff --git a/content/MyNewt/libs/docinfo-hack/document.html.slim b/content/MyNewt/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index 0957c64..0000000
--- a/content/MyNewt/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right Licensed under the Apache License, Version 2.0.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/MyNewt/pom.xml b/content/MyNewt/pom.xml
index ac019c3..b023f03 100644
--- a/content/MyNewt/pom.xml
+++ b/content/MyNewt/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -37,270 +38,6 @@
 
     <properties>
         <project.main.contentfile>index_en</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.8.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
     </properties>
 
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-                        <!-- exclude the third-party files -->
-                        <exclude>**/third-party/**</exclude>
-                        <!-- exclude the README.md file -->
-                        <exclude>README.md</exclude>
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                            <backend>revealjs</backend>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                            <!-- Enable optional modules for generating diagrams and charts -->
-                            <requires>
-                                <require>asciidoctor-diagram</require>
-                                <!--require>chart-block-macro</require-->
-                            </requires>
-                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                            <attributes>
-                                <!--imagesdir></imagesdir-->
-                                <!--
-                                    Tell the system the relative path to the reveal.js files
-                                    inside the generated-slides directory.
-                                -->
-                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                                <!--
-                                    Use our custom theme, which is defined by src/main/theme/apache.css
-                                    and copied inside the reveal.js installation by the resources plugin a few lines
-                                    up inside this pom.
-                                -->
-                                <revealjs_theme>apache</revealjs_theme>
-                                <!-- Some basic settings -->
-                                <revealjs_transition>linear</revealjs_transition>
-                                <project-version>${project.version}</project-version>
-                                <source-highlighter>highlightjs</source-highlighter>
-                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                                <plugin_pdf>enabled</plugin_pdf>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <fileSets>
-                                <fileset>
-                                    <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                                    <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                                </fileset>
-                            </fileSets>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/Spark/1-Basics/libs/docinfo-hack/document.html.slim b/content/Spark/1-Basics/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index 9d1e41e..0000000
--- a/content/Spark/1-Basics/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,258 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - if RUBY_ENGINE == 'opal' && JAVASCRIPT_PLATFORM == 'node'
-      - revealjsdir = (attr :revealjsdir, 'node_modules/reveal.js')
-    - else
-      - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    / Start adding c3, d3
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / End adding c3, d3
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    include asciidoctor_revealjs.css.slim
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case document.attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      Array.prototype.slice.call(document.querySelectorAll('.slides section')).forEach(function(slide) {
-        if (slide.getAttribute('data-background-color')) return;
-        // user needs to explicitly say he wants CSS color to override otherwise we might break custom css or theme (#226)
-        if (!(slide.classList.contains('canvas') || slide.classList.contains('background'))) return;
-        var bgColor = getComputedStyle(slide).backgroundColor;
-        if (bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') {
-          slide.setAttribute('data-background-color', bgColor);
-          slide.style.backgroundColor = 'transparent';
-        }
-      })
-
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display presentation control arrows
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Help the user learn the controls by providing hints, for example by
-        // bouncing the down arrow when they first encounter a vertical slide
-        controlsTutorial: #{to_boolean(attr 'revealjs_controlsTutorial', true)},
-        // Determines where controls appear, "edges" or "bottom-right"
-        controlsLayout: '#{attr 'revealjs_controlsLayout', 'bottom-right'}',
-        // Visibility rule for backwards navigation arrows; "faded", "hidden"
-        // or "visible"
-        controlsBackArrows: '#{attr 'revealjs_controlsBackArrows', 'faded'}',
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Display the page number of the current slide
-        slideNumber: #{to_valid_slidenumber(attr 'revealjs_slidenumber', false)},
-        // Control which views the slide number displays on
-        showSlideNumber: '#{attr 'revealjs_showslidenumber', 'all'}',
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags whether to include the current fragment in the URL,
-        // so that reloading brings you to the same fragment position
-        fragmentInURL: #{to_boolean(attr 'revealjs_fragmentInURL', false)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoSlide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoSlideStoppable', true)},
-        // Use this method for navigation when auto-sliding
-        autoSlideMethod: #{attr 'revealjs_autoSlideMethod', 'Reveal.navigateNext'},
-        // Specify the average time in seconds that you think you will spend
-        // presenting each slide. This is used to show a pacing timer in the
-        // speaker view
-        defaultTiming: #{attr 'revealjs_defaultTiming', 120},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mouseWheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideAddressBar', true)},
-        // Opens links in an iframe preview overlay
-        // Add `data-preview-link` and `data-preview-link="false"` to customise each link
-        // individually
-        previewLinks: #{to_boolean(attr 'revealjs_previewLinks', false)},
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionSpeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundTransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewDistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxBackgroundImage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxBackgroundSize', ''}',
-        // Number of pixels to move the parallax background per slide
-        // - Calculated automatically unless specified
-        // - Set to 0 to disable movement along an axis
-        parallaxBackgroundHorizontal: #{attr 'revealjs_parallaxBackgroundHorizontal', 'null'},
-        parallaxBackgroundVertical: #{attr 'revealjs_parallaxBackgroundVertical', 'null'},
-        // The display mode that will be used to show slides
-        display: '#{attr 'revealjs_display', 'block'}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            #{(document.attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            #{(attr? 'revealjs_plugin_zoom', 'disabled') ? "" :  "{ src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true }," }
-            #{(attr? 'revealjs_plugin_notes', 'disabled') ? "" :  "{ src: '#{revealjsdir}/plugin/notes/notes.js', async: true }," }
-            #{(attr? 'revealjs_plugin_marked', 'enabled') ? "{ src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }," : "" }
-            #{(attr? 'revealjs_plugin_markdown', 'enabled') ? "{ src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }," : "" }
-            #{(attr? 'revealjs_plugin_pdf', 'enabled') ? "{ src: '#{revealjsdir}/plugin/print-pdf/print-pdf.js', async: true }," :  "" }
-            #{(attr? 'revealjs_plugins') ? File.read(attr('revealjs_plugins', '')) : ""}
-        ],
-
-        #{(attr? 'revealjs_plugins_configuration') ? File.read(attr('revealjs_plugins_configuration', '')) : ""}
-
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/Spark/1-Basics/pom.xml b/content/Spark/1-Basics/pom.xml
index d23acb4..e5e01ba 100644
--- a/content/Spark/1-Basics/pom.xml
+++ b/content/Spark/1-Basics/pom.xml
@@ -22,12 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
-
-        <!-- Required in our case as per http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent -->
-        <relativePath></relativePath>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -38,273 +36,4 @@
     <name>Apache Spark Basics</name>
     <description>An example project that demonstrates how to integrate convert Asciidoc to a reveal.js presentation with the Asciidoctor Maven plugin.</description>
 
-    <properties>
-        <project.main.contentfile>index</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.1.0</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.18</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.8.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-
-        <copy-rename-maven-plugin.version>1.0</copy-rename-maven-plugin.version>
-        <download-maven-plugin.version>1.4.1</download-maven-plugin.version>
-        <jetty-maven-plugin.version>9.4.14.v20181114</jetty-maven-plugin.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-        <maven-war-plugin.version>3.2.2</maven-war-plugin.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-                        <!-- Exclude everything downloaded by the install-deps scripts -->
-                        <exclude>libs/third-party/**</exclude>
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>${download-maven-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                            <backend>revealjs</backend>
-                            <!-- Configure where are all the asciidoc source files located -->
-                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                            <!-- Configure the target director to where will the output be generated -->
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                            <!-- Enable optional modules for generating diagrams and charts -->
-                            <requires>
-                                <require>asciidoctor-diagram</require>
-                                <!--require>chart-block-macro</require-->
-                            </requires>
-                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                            <attributes>
-                                <!--imagesdir></imagesdir-->
-                                <!--
-                                    Tell the system the relative path to the reveal.js files
-                                    inside the generated-slides directory.
-                                -->
-                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                                <!--
-                                    Use our custom theme, which is defined by src/main/theme/apache.css
-                                    and copied inside the reveal.js installation by the resources plugin a few lines
-                                    up inside this pom.
-                                -->
-                                <revealjs_theme>apache</revealjs_theme>
-                                <!-- Some basic settings -->
-                                <revealjs_transition>linear</revealjs_transition>
-                                <project-version>${project.version}</project-version>
-                                <source-highlighter>highlightjs</source-highlighter>
-                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                                <svgbob>${basedir}/libs/third-party/svgbob/bin/svgbob</svgbob>
-                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                            </attributes>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>${maven-war-plugin.version}</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>${jetty-maven-plugin.version}</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>${copy-rename-maven-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <sourceFile>${project.slides.directory}/${project.main.contentfile}.revealjs</sourceFile>
-                            <destinationFile>${project.slides.directory}/${project.main.contentfile}.html</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/Spark/pom.xml b/content/Spark/pom.xml
new file mode 100644
index 0000000..ee94571
--- /dev/null
+++ b/content/Spark/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-spark</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: Spark</name>
+
+  <modules>
+    <module>1-Basics</module>
+  </modules>
+
+</project>
diff --git a/content/Training/Presentations/libs/docinfo-hack/document.html.slim b/content/Training/Presentations/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index 0957c64..0000000
--- a/content/Training/Presentations/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right Licensed under the Apache License, Version 2.0.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/Training/Presentations/pom.xml b/content/Training/Presentations/pom.xml
index 7879bfe..3fed030 100644
--- a/content/Training/Presentations/pom.xml
+++ b/content/Training/Presentations/pom.xml
@@ -22,9 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -35,285 +36,4 @@
     <name>Apache Training talk</name>
     <description>An Apache Training talk</description>
 
-    <properties>
-        <project.slides.common-directory>${project.build.directory}/generated-slides/common</project.slides.common-directory>
-        <project.slides.language-directory>${project.build.directory}/generated-slides/language</project.slides.language-directory>
-        <project.main.contentfile>index</project.main.contentfile>
-        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.8.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-                        <!-- exclude the third-party files -->
-                        <exclude>**/third-party/**</exclude>
-                        <!-- exclude the README.md file -->
-                        <exclude>README.md</exclude>
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>1.4.1</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides-en</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <sourceDocumentName>index_en.adoc</sourceDocumentName>
-                        </configuration>
-                    </execution>
-                </executions>
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                     <!-- Configure the target director to where will the output be generated -->
-                    <outputDirectory>${project.slides.directory}</outputDirectory>
-                    <!-- Enable optional modules for generating diagrams and charts -->
-                    <requires>
-                        <require>asciidoctor-diagram</require>
-                        <!--require>chart-block-macro</require-->
-                    </requires>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--imagesdir></imagesdir-->
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                        <!-- Some basic settings -->
-                        <revealjs_transition>linear</revealjs_transition>
-                        <project-version>${project.version}</project-version>
-                        <source-highlighter>highlightjs</source-highlighter>
-                        <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
-                        <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                        <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
-                        <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
-                        <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                        <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                        <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                        <plugin_pdf>enabled</plugin_pdf>
-                    </attributes>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                    <!--dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-extensions-lab</artifactId>
-                        <version>${asciidoctorj.extensions-lab.version}</version>
-                        <!- Referenced locally till it's officially released ->
-                        <scope>system</scope>
-                        <systemPath>${basedir}/libs/asciidoctorj-extensions-lab-${asciidoctorj.extensions-lab.version}.jar</systemPath>
-                    </dependency-->
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>9.4.14.v20181114</version>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0</version>
-                <executions>
-                    <execution>
-                        <id>rename-slide-file</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <fileSets>
-                                <fileset>
-                                    <sourceFile>${project.slides.directory}/${project.main.contentfile}_en.revealjs</sourceFile>
-                                    <destinationFile>${project.slides.directory}/${project.main.contentfile}_en.html</destinationFile>
-                                </fileset>
-                            </fileSets>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/Training/pom.xml b/content/Training/pom.xml
new file mode 100644
index 0000000..3106332
--- /dev/null
+++ b/content/Training/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content-training</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content: Training</name>
+
+  <modules>
+    <module>Presentations</module>
+  </modules>
+
+</project>
diff --git a/content/ZooKeeper/libs/docinfo-hack/document.html.slim b/content/ZooKeeper/libs/docinfo-hack/document.html.slim
deleted file mode 100644
index ec9e3cf..0000000
--- a/content/ZooKeeper/libs/docinfo-hack/document.html.slim
+++ /dev/null
@@ -1,214 +0,0 @@
-doctype 5
-html lang=(attr :lang, 'en' unless attr? :nolang)
-  head
-    meta charset="utf-8"
-    - revealjsdir = (attr :revealjsdir, 'reveal.js')
-    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
-      - asset_uri_scheme = %(#{asset_uri_scheme}:)
-    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
-    - [:description, :keywords, :author, :copyright].each do |key|
-      - if attr? key
-        meta name=key content=(attr key)
-    title=(doctitle sanitize: true, use_fallback: true)
-    meta content="yes" name="apple-mobile-web-app-capable"
-    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
-    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
-    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
-    link href="css/c3.min.css" rel="stylesheet"
-    script src="js/d3.min.js" charset="utf-8"
-    script src="js/c3.min.js"
-    / Default theme required even when using custom theme
-    - if attr? :revealjs_customtheme
-      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
-    - else
-      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
-    - if attr? :icons, 'font'
-      - if attr? 'iconfont-remote'
-        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
-      - else
-        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
-    - if attr? :stem
-      - eqnums_val = (attr 'eqnums', 'none')
-      - eqnums_val = 'AMS' if eqnums_val == ''
-      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
-      script type='text/x-mathjax-config'
-        | MathJax.Hub.Config({
-          tex2jax: {
-            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
-            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
-            ignoreClass: "nostem|nolatexmath"
-          },
-          asciimath2jax: {
-            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
-            ignoreClass: "nostem|noasciimath"
-          },
-          TeX: {#{eqnums_opt}}
-          });
-      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
-    - case attr 'source-highlighter'
-    - when 'coderay'
-      - if (attr 'coderay-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
-    - when 'pygments'
-      - if (attr 'pygments-css', 'class') == 'class'
-        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
-          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
-        - else
-          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
-    / For syntax highlighting
-    - if attr? 'highlightjs-theme'
-      link href=(attr 'highlightjs-theme') rel="stylesheet"
-    - else
-      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
-    / If the query includes 'print-pdf', use the PDF print sheet
-    javascript:
-      var link = document.createElement( 'link' );
-      link.rel = 'stylesheet';
-      link.type = 'text/css';
-      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
-      document.getElementsByTagName( 'head' )[0].appendChild( link );
-    /[if lt IE 9]
-      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
-    - unless (docinfo_content = docinfo :header, '.html').empty?
-      =docinfo_content
-    - if attr? :customcss
-      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
-  body
-    .header
-      .left
-      .right
-    .reveal
-      / Any section element inside of this container is displayed as a slide
-      .slides
-        - unless notitle || !has_header?
-          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
-          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
-          section.title(class = role
-            data-state='title'
-            data-transition=(attr 'title-slide-transition')
-            data-transition-speed=(attr 'title-slide-transition-speed')
-            data-background=(attr 'title-slide-background')
-            data-background-size=(attr 'title-slide-background-size')
-            data-background-image=bg_image
-            data-background-video=bg_video
-            data-background-video-loop=(attr 'title-slide-background-video-loop')
-            data-background-video-muted=(attr 'title-slide-background-video-muted')
-            data-background-iframe=(attr 'title-slide-background-iframe')
-            data-background-color=(attr 'title-slide-background-color')
-            data-background-repeat=(attr 'title-slide-background-repeat')
-            data-background-position=(attr 'title-slide-background-position')
-            data-background-transition=(attr 'title-slide-background-transition'))
-            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
-              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
-              h2=slice_text _title_obj.subtitle, _slice
-            - else
-              h1=@header.title
-            - preamble = @document.find_by context: :preamble
-            - unless preamble.nil? or preamble.length == 0
-              div.preamble=preamble.pop.content
-            - unless author.nil?
-              p.author: small=author
-        =content
-    .footer
-      .left
-      .right
-    script src="#{revealjsdir}/lib/js/head.min.js"
-    script src="#{revealjsdir}/js/reveal.js"
-    javascript:
-      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
-      Reveal.initialize({
-        // Display controls in the bottom right corner
-        controls: #{to_boolean(attr 'revealjs_controls', true)},
-        // Display a presentation progress bar
-        progress: #{to_boolean(attr 'revealjs_progress', true)},
-        // Set a per-slide timing for speaker notes, null means none
-        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
-        // Display the page number of the current slide
-        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
-        // Push each slide change to the browser history
-        history: #{to_boolean(attr 'revealjs_history', false)},
-        // Enable keyboard shortcuts for navigation
-        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
-        // Enable the slide overview mode
-        overview: #{to_boolean(attr 'revealjs_overview', true)},
-        // Vertical centering of slides
-        center: #{to_boolean(attr 'revealjs_center', true)},
-        // Enables touch navigation on devices with touch input
-        touch: #{to_boolean(attr 'revealjs_touch', true)},
-        // Loop the presentation
-        loop: #{to_boolean(attr 'revealjs_loop', false)},
-        // Change the presentation direction to be RTL
-        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
-        // Randomizes the order of slides each time the presentation loads
-        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
-        // Turns fragments on and off globally
-        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
-        // Flags if the presentation is running in an embedded mode,
-        // i.e. contained within a limited portion of the screen
-        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
-        // Flags if we should show a help overlay when the questionmark
-        // key is pressed
-        help: #{to_boolean(attr 'revealjs_help', true)},
-        // Flags if speaker notes should be visible to all viewers
-        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
-        // Global override for autolaying embedded media (video/audio/iframe)
-        // - null: Media will only autoplay if data-autoplay is present
-        // - true: All media will autoplay, regardless of individual setting
-        // - false: No media will autoplay, regardless of individual setting
-        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
-        // Number of milliseconds between automatically proceeding to the
-        // next slide, disabled when set to 0, this value can be overwritten
-        // by using a data-autoslide attribute on your slides
-        autoSlide: #{attr 'revealjs_autoslide', 0},
-        // Stop auto-sliding after user input
-        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
-        // Enable slide navigation via mouse wheel
-        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
-        // Hides the address bar on mobile devices
-        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
-        // Opens links in an iframe preview overlay
-        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
-        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
-        // NOTE setting the theme in the config no longer works in reveal.js 3.x
-        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
-        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
-        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
-        // Transition speed (e.g., default, fast, slow)
-        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
-        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
-        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
-        // Number of slides away from the current that are visible
-        viewDistance: #{attr 'revealjs_viewdistance', 3},
-        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
-        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
-        // Parallax background size in CSS syntax (e.g., "2100px 900px")
-        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
-
-        // The "normal" size of the presentation, aspect ratio will be preserved
-        // when the presentation is scaled to fit different resolutions. Can be
-        // specified using percentage units.
-        width: #{attr 'revealjs_width', 960},
-        height: #{attr 'revealjs_height', 700},
-
-        // Factor of the display size that should remain empty around the content
-        margin: #{attr 'revealjs_margin', 0.1},
-
-        // Bounds for smallest/largest possible scale to apply to content
-        minScale: #{attr 'revealjs_minscale', 0.2},
-        maxScale: #{attr 'revealjs_maxscale', 1.5},
-
-        // Optional libraries used to extend on reveal.js
-        dependencies: [
-            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
-            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
-            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
-            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
-            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
-        ]
-      });
-    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
-      =docinfo_content
diff --git a/content/ZooKeeper/pom.xml b/content/ZooKeeper/pom.xml
index 79b9da3..1d8deac 100644
--- a/content/ZooKeeper/pom.xml
+++ b/content/ZooKeeper/pom.xml
@@ -22,12 +22,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>21</version>
-
-        <!-- Required in our case as per http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent -->
-        <relativePath></relativePath>
+        <groupId>org.apache.training</groupId>
+        <artifactId>content-parent-pom</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.training</groupId>
@@ -37,304 +35,4 @@
 
     <name>Training: Apache ZooKeeper</name>
 
-    <properties>
-        <project.slides.common-directory>${project.build.directory}/generated-slides/common</project.slides.common-directory>
-        <project.slides.language-directory>${project.build.directory}/generated-slides/language</project.slides.language-directory>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
-        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
-        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
-        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
-        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
-        <revealjs.version>3.7.0</revealjs.version>
-        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
-
-        <download-maven-plugin.version>1.4.1</download-maven-plugin.version>
-        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
-        <maven-war-plugin.version>3.2.2</maven-war-plugin.version>
-        <jetty-maven-plugin.version>9.4.14.v20181114</jetty-maven-plugin.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <!-- Check if all source files have the required apache license headers -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <consoleOutput>true</consoleOutput>
-                    <excludes>
-                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
-                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
-                        <!-- Exclude everything downloaded by the install-deps scripts -->
-                        <exclude>libs/third-party/**</exclude>
-                        <!-- Maven related files -->
-                        <exclude>**/target/**</exclude>
-
-                        <!-- Eclipse related files -->
-                        <exclude>**/.project</exclude>
-                        <exclude>**/.settings/**</exclude>
-                        <exclude>**/.classpath</exclude>
-
-                        <!-- IntelliJ related files -->
-                        <exclude>**/.idea/**</exclude>
-                        <exclude>**/*.iml</exclude>
-
-                        <!-- Asciidoctor generated files -->
-                        <exclude>**/.asciidoctor/**</exclude>
-
-                        <!-- JSON doesn't like comments -->
-                        <exclude>**/*.json</exclude>
-                        <!-- Mermaid does't like comments -->
-                        <exclude>**/*.mmd</exclude>
-
-                        <!-- Output of the profiler maven extension -->
-                        <exclude>**/.profiler/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>com.googlecode.maven-download-plugin</groupId>
-                <artifactId>download-maven-plugin</artifactId>
-                <version>${download-maven-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>install-asciidoctor-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>install-revealjs</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
-                            <unpack>true</unpack>
-                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
-                            <outputDirectory>${project.slides.common-directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-css</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
-                            <outputDirectory>${project.slides.common-directory}/css</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-c3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
-                            <outputDirectory>${project.slides.common-directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>download-d3-js</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>wget</goal>
-                        </goals>
-                        <configuration>
-                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
-                            <outputDirectory>${project.slides.common-directory}/js</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven-resources-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                            <resources>
-                                <!-- Copy the normal resources into the root of the slides directory -->
-                                <resource>
-                                    <directory>src/main/resources</directory>
-                                    <targetPath>${project.slides.common-directory}</targetPath>
-                                </resource>
-                                <!-- Copy our css-theme to the reveal.js theme directory -->
-                                <resource>
-                                    <directory>src/main/theme</directory>
-                                    <filtering>true</filtering>
-                                    <targetPath>${project.slides.common-directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
-                                </resource>
-                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
-                                <resource>
-                                    <directory>libs/docinfo-hack</directory>
-                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-slides-en</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <sourceDocumentName>index_en.adoc</sourceDocumentName>
-                            <outputDirectory>${project.slides.language-directory}/en</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>generate-slides-de</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>process-asciidoc</goal>
-                        </goals>
-                        <configuration>
-                            <sourceDocumentName>index_de.adoc</sourceDocumentName>
-                            <outputDirectory>${project.slides.language-directory}/de</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-                <!-- Common configuration -->
-                <configuration>
-                    <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
-                    <backend>revealjs</backend>
-                    <!-- Configure where are all the asciidoc source files located -->
-                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
-                    <!-- output file-->
-                    <outputFile>index.html</outputFile>
-                    <!-- Enable optional modules for generating diagrams and charts -->
-                    <requires>
-                        <require>asciidoctor-diagram</require>
-                        <!--require>chart-block-macro</require-->
-                    </requires>
-                    <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
-                    <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
-                    <attributes>
-                        <!--imagesdir></imagesdir-->
-                        <!--
-                            Tell the system the relative path to the reveal.js files
-                            inside the generated-slides directory.
-                        -->
-                        <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
-                        <!--
-                            Use our custom theme, which is defined by src/main/theme/apache.css
-                            and copied inside the reveal.js installation by the resources plugin a few lines
-                            up inside this pom.
-                        -->
-                        <revealjs_theme>apache</revealjs_theme>
-                        <!-- Some basic settings -->
-                        <revealjs_transition>linear</revealjs_transition>
-                        <project-version>${project.version}</project-version>
-                        <source-highlighter>highlightjs</source-highlighter>
-                        <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
-                        <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
-                        <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
-                        <svgbob>${basedir}/libs/third-party/svgbob/bin/svgbob</svgbob>
-                        <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
-                    </attributes>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj</artifactId>
-                        <version>${asciidoctorj.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.asciidoctor</groupId>
-                        <artifactId>asciidoctorj-diagram</artifactId>
-                        <version>${asciidoctorj.diagram.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>${maven-war-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>default-war</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>war</goal>
-                        </goals>
-                        <configuration>
-                            <webResources>
-                                <resource>
-                                    <directory>${project.slides.language-directory}/en</directory>
-                                </resource>
-                            </webResources>
-                            <webappDirectory>${project.build.directory}/${project.artifactId}-${project.version}-en</webappDirectory>
-                            <classifier>en</classifier>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>default-war-de</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>war</goal>
-                        </goals>
-                        <configuration>
-                            <webResources>
-                                <resource>
-                                    <directory>${project.slides.language-directory}/de</directory>
-                                </resource>
-                            </webResources>
-                            <webappDirectory>${project.build.directory}/${project.artifactId}-${project.version}-de</webappDirectory>
-                            <classifier>de</classifier>
-                        </configuration>
-                    </execution>
-                </executions>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceDirectory>${project.build.directory}/generated-slides/common</warSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>${jetty-maven-plugin.version}</version>
-                <configuration>
-                    <war>${project.build.directory}/${project.artifactId}-${project.version}-en.war</war>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/content/pom.xml b/content/pom.xml
new file mode 100644
index 0000000..deafd93
--- /dev/null
+++ b/content/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>training</artifactId>
+    <version>0.4.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>training-content</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training: Content</name>
+
+  <modules>
+    <module>ApacheCon</module>
+    <module>ApacheFlink</module>
+    <module>ApacheHive</module>
+    <module>ApacheWay</module>
+    <module>ComDev</module>
+    <module>Hadoop</module>
+    <module>Ignite</module>
+    <module>Incubator</module>
+    <module>IoT</module>
+    <module>MyNewt</module>
+    <module>Spark</module>
+    <module>Training</module>
+    <module>ZooKeeper</module>
+  </modules>
+
+</project>
diff --git a/pom.xml b/pom.xml
index 883b603..10691a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,7 @@
   <modules>
     <module>site</module>
     <module>tools</module>
+    <module>content</module>
   </modules>
 
 </project>
diff --git a/tools/content-archetype/src/main/resources/archetype-resources/pom.xml b/tools/content-archetype/src/main/resources/archetype-resources/pom.xml
index 236e553..6e27087 100644
--- a/tools/content-archetype/src/main/resources/archetype-resources/pom.xml
+++ b/tools/content-archetype/src/main/resources/archetype-resources/pom.xml
@@ -21,10 +21,11 @@
 
     <parent>
         <groupId>org.apache.training</groupId>
-        <artifactId>content-master-pom</artifactId>
+        <artifactId>content-parent-pom</artifactId>
         <version>1.0.0-SNAPSHOT</version>
 
         <!-- Required in our case as per http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent -->
+        <relativePath></relativePath>
     </parent>
 
     <artifactId>${artifactId}</artifactId>
diff --git a/tools/content-parent-pom/pom.xml b/tools/content-parent-pom/pom.xml
index ea4fb30..33bf4ad 100644
--- a/tools/content-parent-pom/pom.xml
+++ b/tools/content-parent-pom/pom.xml
@@ -31,7 +31,7 @@
   </parent>
 
   <groupId>org.apache.training</groupId>
-  <artifactId>content-master-pom</artifactId>
+  <artifactId>content-parent-pom</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
@@ -46,6 +46,8 @@
     <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
+    <java.version>1.8</java.version>
+
     <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
     <asciidoctorj.version>2.2.0</asciidoctorj.version>
     <asciidoctorj.diagram.version>2.0.0</asciidoctorj.diagram.version>
@@ -114,6 +116,9 @@
 
             <!-- Output of the profiler maven extension -->
             <exclude>**/.profiler/**</exclude>
+
+            <exclude>licenses/**</exclude>
+            <exclude>README.md</exclude>
           </excludes>
         </configuration>
       </plugin>
@@ -415,6 +420,21 @@
         </configuration>
       </plugin>
     </plugins>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+            <source>${java.version}</source>
+            <target>${java.version}</target>
+            <testSource>${java.version}</testSource>
+            <testTarget>${java.version}</testTarget>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
   </build>
 
 </project>