First version of the EMC YAML Driver
diff --git a/features/org.eclipse.epsilon.core.dt.feature/feature.xml b/features/org.eclipse.epsilon.core.dt.feature/feature.xml
index cf2e93b..6ca70e2 100644
--- a/features/org.eclipse.epsilon.core.dt.feature/feature.xml
+++ b/features/org.eclipse.epsilon.core.dt.feature/feature.xml
@@ -99,6 +99,13 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.epsilon.emc.yaml.dt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
 
    <plugin
          id="org.eclipse.epsilon.flock.dt"
diff --git a/features/org.eclipse.epsilon.core.feature/feature.xml b/features/org.eclipse.epsilon.core.feature/feature.xml
index 326d5c1..2afd28e 100644
--- a/features/org.eclipse.epsilon.core.feature/feature.xml
+++ b/features/org.eclipse.epsilon.core.feature/feature.xml
@@ -155,6 +155,13 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.epsilon.emc.yaml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
 
    <plugin
          id="org.eclipse.epsilon.emc.bibtex"
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/.project b/features/org.eclipse.epsilon.emc.yaml.dt.feature/.project
new file mode 100644
index 0000000..bf30a77
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.emc.yaml.dt.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/EPL-2.0.html b/features/org.eclipse.epsilon.emc.yaml.dt.feature/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/about.html b/features/org.eclipse.epsilon.emc.yaml.dt.feature/about.html
new file mode 100644
index 0000000..1601de9
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>April 27, 2020</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/build.properties b/features/org.eclipse.epsilon.emc.yaml.dt.feature/build.properties
new file mode 100644
index 0000000..ec5f564
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+            EPL-2.0.html,\
+            about.html
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/feature.xml b/features/org.eclipse.epsilon.emc.yaml.dt.feature/feature.xml
new file mode 100644
index 0000000..2155485
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/feature.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.epsilon.emc.yaml.dt.feature"
+      label="Epsilon YAML Driver Development Tools"
+      version="2.4.0.qualifier"
+      provider-name="Eclipse Modeling Project"
+      license-feature="org.eclipse.license"
+      license-feature-version="0.0.0">
+
+   <description url="http://www.eclipse.org/epsilon">
+      This feature provides the YAML Driver's Developer Tools.
+   </description>
+
+   <copyright>
+        Copyright (c) 2018 The University of York.
+        This program and the accompanying materials are made
+        available under the terms of the Eclipse Public License 2.0
+        which is available at https://www.eclipse.org/legal/epl-2.0
+   </copyright>
+   
+   <includes id="org.eclipse.epsilon.core.dt.feature" version="2.4.0.qualifier"/>
+   <includes id="org.eclipse.epsilon.emc.yaml.feature" version="2.4.0.qualifier"/>
+
+   <plugin
+         id="org.eclipse.epsilon.emc.yaml.dt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.epsilon.emc.yaml.dt.feature/pom.xml b/features/org.eclipse.epsilon.emc.yaml.dt.feature/pom.xml
new file mode 100644
index 0000000..8814581
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.dt.feature/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>features</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.eclipse.epsilon.emc.yaml.dt.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/.project b/features/org.eclipse.epsilon.emc.yaml.feature/.project
new file mode 100644
index 0000000..6d63001
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.emc.yaml.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/EPL-2.0.html b/features/org.eclipse.epsilon.emc.yaml.feature/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/about.html b/features/org.eclipse.epsilon.emc.yaml.feature/about.html
new file mode 100644
index 0000000..1601de9
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>April 27, 2020</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/build.properties b/features/org.eclipse.epsilon.emc.yaml.feature/build.properties
new file mode 100644
index 0000000..ec5f564
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+            EPL-2.0.html,\
+            about.html
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/feature.xml b/features/org.eclipse.epsilon.emc.yaml.feature/feature.xml
new file mode 100644
index 0000000..5c7c01e
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.epsilon.emc.yaml.feature"
+      label="Epsilon YAML Driver"
+      version="2.4.0.qualifier"
+      provider-name="Eclipse Modeling Project"
+      license-feature="org.eclipse.license"
+      license-feature-version="0.0.0">
+
+   <description url="http://www.eclipse.org/epsilon">
+      This feature provides the YAML Driver.
+   </description>
+
+   <copyright>
+        Copyright (c) 2018 The University of York.
+        This program and the accompanying materials are made
+        available under the terms of the Eclipse Public License 2.0
+        which is available at https://www.eclipse.org/legal/epl-2.0
+   </copyright>
+   
+   <includes id="org.eclipse.epsilon.core.feature" version="2.4.0.qualifier"/>
+   
+   <plugin
+         id="org.eclipse.epsilon.emc.yaml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+	
+</feature>
diff --git a/features/org.eclipse.epsilon.emc.yaml.feature/pom.xml b/features/org.eclipse.epsilon.emc.yaml.feature/pom.xml
new file mode 100644
index 0000000..b5c8003
--- /dev/null
+++ b/features/org.eclipse.epsilon.emc.yaml.feature/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>features</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.eclipse.epsilon.emc.yaml.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/features/pom.xml b/features/pom.xml
index 27d3e88..d8b1bea 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -16,6 +16,8 @@
     <module>org.eclipse.epsilon.core.feature</module>
     <module>org.eclipse.epsilon.emc.csv.feature</module>
     <module>org.eclipse.epsilon.emc.csv.dt.feature</module>
+	<module>org.eclipse.epsilon.emc.yaml.feature</module>
+    <module>org.eclipse.epsilon.emc.yaml.dt.feature</module>
     <module>org.eclipse.epsilon.emc.graphml.feature</module>
     <module>org.eclipse.epsilon.emc.html.feature</module>
     <module>org.eclipse.epsilon.emc.html.dt.feature</module>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/.classpath b/plugins/org.eclipse.epsilon.emc.yaml.dt/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/.project b/plugins/org.eclipse.epsilon.emc.yaml.dt/.project
new file mode 100644
index 0000000..f63c331
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.emc.yaml.dt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/EPL-2.0.html b/plugins/org.eclipse.epsilon.emc.yaml.dt/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.emc.yaml.dt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..35d9161
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMC YAML development tools
+Bundle-SymbolicName: org.eclipse.epsilon.emc.yaml.dt;singleton=true
+Bundle-Version: 2.4.0.qualifier
+Bundle-Activator: org.eclipse.epsilon.emc.yaml.dt.Activator
+Require-Bundle: org.eclipse.epsilon.emc.yaml,
+ org.eclipse.epsilon.common.dt
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.epsilon.emc.yaml.dt
+Bundle-Vendor: Eclipse Modeling Project
+Automatic-Module-Name: org.eclipse.epsilon.emc.yaml.dt
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/about.html b/plugins/org.eclipse.epsilon.emc.yaml.dt/about.html
new file mode 100644
index 0000000..b491992
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>April 27, 2020</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/build.properties b/plugins/org.eclipse.epsilon.emc.yaml.dt/build.properties
new file mode 100644
index 0000000..8beeae1
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+EPL-2.0.html,\
+about.html,\
+               .,\
+               plugin.xml,\
+               images/,\
+               src/
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/images/yaml.png b/plugins/org.eclipse.epsilon.emc.yaml.dt/images/yaml.png
new file mode 100644
index 0000000..6be217d
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/images/yaml.png
Binary files differ
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/plugin.xml b/plugins/org.eclipse.epsilon.emc.yaml.dt/plugin.xml
new file mode 100644
index 0000000..21b2fb3
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/plugin.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.epsilon.common.dt.modelType">
+      <modelType
+            class="org.eclipse.epsilon.emc.yaml.YamlModel"
+            dialog="org.eclipse.epsilon.emc.yaml.dt.YamlModelConfigurationDialog"
+            icon="images/yaml.png"
+            label="YAML Document"
+            stable="true"
+            type="YAML">
+      </modelType>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/pom.xml b/plugins/org.eclipse.epsilon.emc.yaml.dt/pom.xml
new file mode 100644
index 0000000..f95a7d3
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>plugins</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.eclipse.epsilon.emc.yaml.dt</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/Activator.java b/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/Activator.java
new file mode 100644
index 0000000..1e6e6e8
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/Activator.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml.dt;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.epsilon.emc.yaml.dt";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/YamlModelConfigurationDialog.java b/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/YamlModelConfigurationDialog.java
new file mode 100644
index 0000000..d0abe1f
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml.dt/src/org/eclipse/epsilon/emc/yaml/dt/YamlModelConfigurationDialog.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml.dt;
+
+import org.eclipse.epsilon.common.dt.launching.dialogs.AbstractCachedModelConfigurationDialog;
+import org.eclipse.epsilon.common.dt.util.DialogUtil;
+import org.eclipse.epsilon.emc.yaml.YamlProperty;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+public class YamlModelConfigurationDialog extends AbstractCachedModelConfigurationDialog {
+
+	protected Label fileTextLabel;
+	protected Text fileText;
+	protected Label uriTextLabel;
+	protected Text uriText;
+	protected Button browseModelFile;
+	protected Button filebasedButton;
+
+	protected String getModelName() {
+		return "YAML Document";
+	}
+
+	protected String getModelType() {
+		return "YAML";
+	}
+
+	protected void createGroups(Composite control) {
+		super.createGroups(control);
+		createFilesGroup(control);
+		createLoadStoreOptionsGroup(control);
+		toggleEnabledFields();
+	}
+
+	protected void toggleEnabledFields() {
+		if (filebasedButton.getSelection()) {
+			fileTextLabel.setEnabled(true);
+			fileText.setEnabled(true);
+			uriTextLabel.setEnabled(false);
+			uriText.setEnabled(false);
+			uriText.setText("");
+		}
+		else {
+			fileTextLabel.setEnabled(false);
+			fileText.setEnabled(false);
+			uriTextLabel.setEnabled(true);
+			uriText.setEnabled(true);
+			fileText.setText("");
+			storeOnDisposalCheckbox.setSelection(false);
+		}
+	}
+	
+	protected Composite createFilesGroup(Composite parent) {
+		final Composite groupContent = DialogUtil.createGroupContainer(parent, "Files/URIs", 3);
+		
+		filebasedButton = new Button(groupContent, SWT.CHECK);
+		GridData filebasedButtonGridData = new GridData(GridData.FILL_HORIZONTAL);
+		filebasedButtonGridData.horizontalSpan = 3;
+		filebasedButton.setSelection(true);
+		filebasedButton.setText("Workspace file");
+		filebasedButton.setLayoutData(filebasedButtonGridData);
+		filebasedButton.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				toggleEnabledFields();
+			}
+		});
+		
+		fileTextLabel = new Label(groupContent, SWT.NONE);
+		fileTextLabel.setText("File: ");
+		
+		fileText = new Text(groupContent, SWT.BORDER);
+		fileText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		browseModelFile = new Button(groupContent, SWT.NONE);
+		browseModelFile.setText("Browse Workspace...");
+		browseModelFile.addListener(SWT.Selection, new BrowseWorkspaceForModelsListener(fileText, "YAML Documents in the workspace", "Select an YAML document"));
+
+		uriTextLabel = new Label(groupContent, SWT.NONE);
+		uriTextLabel.setText("URI: ");
+		
+		uriText = new Text(groupContent, SWT.BORDER);
+		GridData uriTextGridData = new GridData(GridData.FILL_HORIZONTAL);
+		uriTextGridData.horizontalSpan = 2;
+		uriText.setLayoutData(uriTextGridData);
+		
+		groupContent.layout();
+		groupContent.pack();
+		return groupContent;
+	}
+	
+	protected void loadProperties(){
+		super.loadProperties();
+		if (properties == null) return;
+		fileText.setText(properties.getProperty(YamlProperty.PROPERTY_FILE));
+		filebasedButton.setSelection(properties.getBooleanProperty("fileBased", true));
+		toggleEnabledFields();
+	}
+	
+	protected void storeProperties(){
+		super.storeProperties();
+		properties.put(YamlProperty.PROPERTY_FILE, fileText.getText());
+		properties.put("fileBased", filebasedButton.getSelection() + "");
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/.classpath b/plugins/org.eclipse.epsilon.emc.yaml/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/.project b/plugins/org.eclipse.epsilon.emc.yaml/.project
new file mode 100644
index 0000000..757a382
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.emc.yaml</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/EPL-2.0.html b/plugins/org.eclipse.epsilon.emc.yaml/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.emc.yaml/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f5f07b7
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: YAML Driver for EMC
+Bundle-SymbolicName: org.eclipse.epsilon.emc.yaml
+Bundle-Version: 2.4.0.qualifier
+Require-Bundle: org.eclipse.epsilon.eol.engine,
+ org.yaml.snakeyaml;bundle-version="1.27.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.epsilon.emc.yaml
+Bundle-Vendor: Eclipse Modeling Project
+Automatic-Module-Name: org.eclipse.epsilon.emc.yaml
+
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/about.html b/plugins/org.eclipse.epsilon.emc.yaml/about.html
new file mode 100644
index 0000000..b491992
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>April 27, 2020</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/build.properties b/plugins/org.eclipse.epsilon.emc.yaml/build.properties
new file mode 100644
index 0000000..fda05a1
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+EPL-2.0.html,\
+about.html,\
+               .,\
+               src/
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/pom-plain.xml b/plugins/org.eclipse.epsilon.emc.yaml/pom-plain.xml
new file mode 100644
index 0000000..5bcbc3a
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/pom-plain.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+	       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.eclipse.epsilon</groupId>
+  <artifactId>org.eclipse.epsilon.emc.yaml</artifactId>
+  <name>Eclipse Epsilon EMC for YAML Files</name>
+
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>epsilon-plain-parent</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+    <relativePath>../../pom-plain.xml</relativePath>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.eclipse.epsilon.eol.engine</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+	<dependency>
+	    <groupId>org.yaml</groupId>
+	    <artifactId>snakeyaml</artifactId>
+	    <version>1.21</version>            
+	</dependency>
+  </dependencies>
+
+</project>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/pom.xml b/plugins/org.eclipse.epsilon.emc.yaml/pom.xml
new file mode 100644
index 0000000..4a9c764
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>plugins</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.eclipse.epsilon.emc.yaml</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlDataType.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlDataType.java
new file mode 100644
index 0000000..71c6d1d
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlDataType.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+public enum YamlDataType {
+	
+	STRING,
+	BOOLEAN,
+	INTEGER,
+	FLOAT,
+	DOUBLE
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModel.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModel.java
new file mode 100644
index 0000000..4ea0d32
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModel.java
@@ -0,0 +1,235 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import org.eclipse.epsilon.common.util.StringProperties;
+import org.eclipse.epsilon.common.util.StringUtil;
+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.eol.exceptions.models.EolEnumerationValueNotFoundException;
+import org.eclipse.epsilon.eol.exceptions.models.EolModelElementTypeNotFoundException;
+import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
+import org.eclipse.epsilon.eol.execute.operations.contributors.IOperationContributorProvider;
+import org.eclipse.epsilon.eol.execute.operations.contributors.OperationContributor;
+import org.eclipse.epsilon.eol.models.CachedModel;
+import org.eclipse.epsilon.eol.models.IRelativePathResolver;
+
+public class YamlModel extends CachedModel<Entry> implements IOperationContributorProvider {
+
+	protected File file;
+	protected Object yamlContent;
+	protected YamlModelOperationContributor yamlModelOperationContributor;
+	protected List<Entry> createdNodes = new ArrayList<>();
+	
+	public YamlModel() {
+		propertyGetter = new YamlPropertyGetter(this);
+		propertySetter = new YamlPropertySetter(this);
+	}
+	
+	public synchronized void clear() {
+		this.yamlContent = null;
+		this.createdNodes.clear();
+	}
+	
+	public synchronized Object getYamlContent() {
+		return this.yamlContent;
+	}
+	
+	public synchronized void setYamlContent(Object yamlContent) {
+		this.yamlContent = yamlContent;
+	}
+	
+	public synchronized void setYamlContent(String yamlContent) {
+		this.yamlContent = YamlNodeUtility.getYamlContent(yamlContent);
+	}
+	
+	public synchronized Object getRoot() {
+		return YamlNodeUtility.getRootNode(this.yamlContent);
+	}
+	
+	public synchronized void setRootAsList() {
+		this.yamlContent = new ArrayList<>();
+	}
+	
+	public synchronized void setRootAsMap() {
+		this.yamlContent = new LinkedHashMap<String, Object>();
+	}
+	
+	public File getFile() {
+		return file;
+	}
+
+	public void setFile(File file) {
+		this.file = file;
+	}
+	
+	@Override
+	public boolean isLoaded() {
+		return (this.yamlContent != null);
+	}
+	
+	@Override
+	public Object getEnumerationValue(String enumeration, String label) throws EolEnumerationValueNotFoundException {
+		return null;
+	}
+
+	@Override
+	public String getTypeNameOf(Object instance) {
+		return (instance instanceof Entry) ? YamlNodeUtility.getTypeNameOf((Entry)instance) : instance.getClass().getName();
+	}
+	
+	@Override
+	public Object getTypeOf(Object instance) {
+		return instance.getClass();
+	}
+	
+	@Override
+	public Object getElementById(String id) {
+		return null;
+	}
+
+	@Override
+	public String getElementId(Object instance) {
+		return null;
+	}
+
+	@Override
+	public void setElementId(Object instance, String newId) {}
+
+	@Override
+	public boolean owns(Object instance) {
+		return YamlNodeUtility.ownsYamlObject(this.yamlContent, createdNodes, instance);
+	}
+
+	@Override
+	public boolean isInstantiable(String type) {
+		return hasType(type);
+	}
+
+	@Override
+	public boolean hasType(String type) {
+		return (YamlProperty.parse(type, 1) != null);
+	}
+	
+	@Override
+	public boolean isModelElement(Object instance) {
+		return (instance instanceof Entry);
+	}
+
+	@Override
+	public synchronized boolean store(String location) {
+		try {
+			YamlNodeUtility.storeYamlContent(this.file, this.yamlContent);
+		    return true;
+		}
+		catch (Exception ex) {
+			ex.printStackTrace();
+			return false;
+		}
+	}
+
+	@Override
+	public boolean store() {
+		if (file != null) {
+			return store(file.getAbsolutePath());
+		}
+		return false;
+	}
+
+	@Override
+	protected synchronized Collection<Entry> allContentsFromModel() {
+		YamlProperty yamlProperty = YamlProperty.parse(YamlNodeType.Node.toString(), 0);
+		return YamlNodeUtility.getNodes(this.yamlContent, yamlProperty, true);
+	}
+
+	@Override
+	protected synchronized Collection<Entry> getAllOfTypeFromModel(String type) throws EolModelElementTypeNotFoundException {
+		YamlProperty yamlProperty = YamlProperty.parse(type, 1);		
+		return YamlNodeUtility.getNodes(this.yamlContent, yamlProperty, true);
+	}	
+
+	@Override
+	protected Collection<Entry> getAllOfKindFromModel(String kind) throws EolModelElementTypeNotFoundException {
+		return getAllOfTypeFromModel(kind);
+	}
+
+	@Override
+	protected Entry createInstanceInModel(String type) throws EolModelElementTypeNotFoundException {		
+		return createInstance(type, Collections.emptyList());
+	}	
+
+	@Override
+	public synchronized Entry createInstance(String type, Collection<Object> parameters) throws EolModelElementTypeNotFoundException {
+		Entry newNode = YamlNodeUtility.getNode(type, 1, parameters);
+		createdNodes.add(newNode);
+		return newNode;		
+	}
+	
+	@Override
+	protected void disposeModel() {
+		clear();
+	}
+
+	@Override
+	protected synchronized boolean deleteElementInModel(Object instance) throws EolRuntimeException {
+		if (!(instance instanceof Entry)) {
+			return false;
+		}
+		Entry node = (Entry) instance;
+		return YamlNodeUtility.deleteNode(this.yamlContent, this.createdNodes, node);
+	}
+
+	@Override
+	protected Object getCacheKeyForType(String type) throws EolModelElementTypeNotFoundException {
+		return type;
+	}
+
+	@Override
+	protected Collection<String> getAllTypeNamesOf(Object instance) {
+		return Collections.singleton(getTypeNameOf(instance));
+	}
+	
+	@Override
+	protected synchronized void loadModel() throws EolModelLoadingException {
+		try {
+			if (readOnLoad) {
+				if (this.file != null) {
+					this.yamlContent = YamlNodeUtility.getYamlContent(this.file);
+				}
+			}
+	    	this.yamlModelOperationContributor = new YamlModelOperationContributor(this);
+	    	this.createdNodes = new ArrayList<>();
+		}
+		catch (Exception ex) {
+			throw new EolModelLoadingException(ex, this);
+		}
+	}
+	
+	@Override
+	public void load(StringProperties properties, IRelativePathResolver resolver) throws EolModelLoadingException {
+		super.load(properties, resolver);
+		String filePath = properties.getProperty(YamlProperty.PROPERTY_FILE);
+		if (!StringUtil.isEmpty(filePath)) {
+			file = new File(resolver != null ? resolver.resolve(filePath) : filePath);
+		}
+		load();
+	}
+
+	@Override
+	public OperationContributor getOperationContributor() {
+		return yamlModelOperationContributor;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModelOperationContributor.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModelOperationContributor.java
new file mode 100644
index 0000000..d86ced9
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlModelOperationContributor.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.eol.execute.operations.contributors.OperationContributor;
+
+public class YamlModelOperationContributor extends OperationContributor {
+
+	protected YamlModel yamlModel;
+	
+	public YamlModelOperationContributor(YamlModel yamlModel) {
+		this.yamlModel = yamlModel;
+	}
+	
+	@Override
+	public boolean contributesTo(Object target) {
+		return (target instanceof Entry) || (target instanceof Map) || (target instanceof List);
+	}
+
+	public void appendNode(Object item) throws EolRuntimeException {
+		Object target = getTarget();
+		if(target instanceof Map) {
+			Entry entry = (Entry) item;
+			((Map) target).put(entry.getKey(), entry.getValue());
+		}
+		else {
+			throw new EolRuntimeException("The object to which you append a node must be a MappingNode. A MappingNode is represented as a map.");
+		}		
+	}
+	
+	public void addRow() throws EolRuntimeException {
+		Object target = getTarget();
+		if((target instanceof List) && (YamlNodeUtility.isListNode((List)target))) {	
+			((List) target).add(new LinkedHashMap());
+		}
+		else {
+			throw new EolRuntimeException("The object to which you add a row must be a ListNode. A ListNode is represented as a list of maps.");
+		}
+	}
+	
+	public void addRows(int size) throws EolRuntimeException {
+		Object target = getTarget();
+		if((target instanceof List) && (YamlNodeUtility.isListNode((List)target))) {
+			for (int i=0; i < size; i++) {
+				((List) target).add(new LinkedHashMap());
+			}
+		}
+		else {
+			throw new EolRuntimeException("The object to which you add a row must be a ListNode. A ListNode is represented as a list of maps.");
+		}
+	}
+	
+	public void set(int index, Object object) throws EolRuntimeException {
+		Object target = getTarget();
+		if(target instanceof List) {
+			((List) target).set(index, object);
+		}
+		else {
+			throw new EolRuntimeException("The object to which you set a value must be a List.");
+		}		
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeType.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeType.java
new file mode 100644
index 0000000..4daa308
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeType.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+public enum YamlNodeType {
+	
+	Node,
+	MappingNode,
+	ListNode,
+	ScalarNode
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeUtility.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeUtility.java
new file mode 100644
index 0000000..674799c
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlNodeUtility.java
@@ -0,0 +1,381 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.List;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Yaml;
+
+public class YamlNodeUtility {
+	
+	public static Collection<Entry> getNodes(Object yamlContent, YamlProperty yamlProperty, boolean areAllNodes) {
+		Collection<Entry> nodes = new ArrayList<>();
+		setNodes(yamlContent, nodes, yamlProperty, areAllNodes);
+		return nodes;
+	}
+	
+	private static void setNodes(Object yamlContent, Collection<Entry> nodes, YamlProperty yamlProperty, boolean areAllNodes) {
+		if (yamlContent instanceof List) {
+			setNodes((List)yamlContent, nodes, yamlProperty, areAllNodes);
+		}
+		else if (yamlContent instanceof Map) {
+			setNodes((Map)yamlContent, nodes, yamlProperty, areAllNodes);
+		}
+	}
+	
+	private static void setNodes(List listNode, Collection<Entry> nodes, YamlProperty yamlProperty, boolean areAllNodes) {
+		for (Object node: listNode) {
+			if (node instanceof Map) {
+				setNodes((Map) node, nodes, yamlProperty, areAllNodes);
+			}
+		}
+	}
+	
+	private static void setNodes(Map mappingNode, Collection<Entry> nodes, YamlProperty yamlProperty, boolean areAllNodes) {	
+		Set<Entry> entries = (Set<Entry>) mappingNode.entrySet();	
+		for (Entry entry: entries) {
+			setNodes(entry, nodes, yamlProperty, areAllNodes);	
+		}			
+	}
+	
+	private static void setNodes(Entry entry, Collection<Entry> nodes, YamlProperty yamlProperty, boolean areAllNodes) {
+		Object entryValue = entry.getValue();
+		if (entryValue instanceof List) {
+			if (yamlProperty.isListNode()) {
+				addNodeIfNecessary(entry, yamlProperty, nodes);
+			}
+			if (areAllNodes) {
+				setNodes((List) entryValue, nodes, yamlProperty, areAllNodes);
+			}	
+		}
+		else if (entryValue instanceof Map) {
+			if (yamlProperty.isMappingNode()) {
+				addNodeIfNecessary(entry, yamlProperty, nodes);
+			}
+			if (areAllNodes) {
+				setNodes((Map) entryValue, nodes, yamlProperty, areAllNodes);
+			}
+		}
+		else {
+			if (yamlProperty.isScalarNode()) {
+				addNodeIfNecessary(entry, yamlProperty, nodes);
+			}
+		}
+	}
+	
+	private static void addNodeIfNecessary(Entry entry, YamlProperty yamlProperty, Collection<Entry> nodes) {
+		String property = yamlProperty.getProperty();
+		if (property == null) {
+			nodes.add(entry);
+		}
+		else {
+			if (entry.getKey().equals(property)) {
+				nodes.add(entry);
+			}
+		}
+	}
+	
+	public static Object getQueryResult(Collection<Entry> queryResult, YamlProperty yamlProperty) {	
+		if (queryResult == null || queryResult.isEmpty()) {
+			return null;
+		}
+		else {
+			return yamlProperty.isMany() ? queryResult : queryResult.iterator().next();
+		}
+	}
+	
+	public static boolean isListNode(List list) {
+		for (Object object : list) {
+			if (!(object instanceof LinkedHashMap))
+				return false;
+		}
+		return true;
+	}
+	
+	public static YamlNodeType getNodeType(String type) {
+		YamlNodeType nodeType;
+		try {
+			nodeType = YamlNodeType.valueOf(type);
+		}
+		catch(Exception ex) {
+			nodeType = null;
+		}
+		return nodeType;
+	}
+	
+	public static YamlNodeType getNodeType(Entry node) {
+		Object nodeValue = node.getValue();
+		YamlNodeType nodeType = null;
+		if (nodeValue instanceof Map) {
+			nodeType = YamlNodeType.MappingNode;
+		}
+		else if (nodeValue instanceof List) {
+			nodeType = YamlNodeType.ListNode;
+		}
+		else {
+			nodeType = YamlNodeType.ScalarNode;
+		}
+		return nodeType;
+	}
+	
+	private static Entry getNode(YamlProperty yamlProperty, Collection<Object> parameters) {
+		Map<String, Object> map = new LinkedHashMap<String, Object>();
+		switch(yamlProperty.getType()) {
+			case ScalarNode:
+				return getScalarNode(yamlProperty, new ArrayList(parameters));
+				
+			case MappingNode:
+				return getMappingNode(yamlProperty, new ArrayList(parameters));
+				
+			case ListNode:
+				return getListNode(yamlProperty, new ArrayList(parameters));
+		}
+		return map.entrySet().iterator().next();	
+	}
+	
+	public static Entry getNode(String type, int indexOfSeparator, Collection<Object> parameters) {
+		YamlProperty yamlProperty = YamlProperty.parse(type, indexOfSeparator);
+		return YamlNodeUtility.getNode(yamlProperty, parameters);		
+	}
+	
+	private static Entry getScalarNode(YamlProperty yamlProperty, List parameters) {
+		Map<String, Object> map = new LinkedHashMap<String, Object>();
+		String nodeName = getNameParameter(yamlProperty, parameters, YamlNodeType.ScalarNode);
+		Object nodeValue = getValueParameter(yamlProperty, parameters);
+		map.put(nodeName, nodeValue);
+		return map.entrySet().iterator().next();
+	}
+	
+	private static Entry getListNode(YamlProperty yamlProperty, List parameters) {
+		Map<String, Object> map = new LinkedHashMap<String, Object>();
+		String nodeName = getNameParameter(yamlProperty, parameters, YamlNodeType.ListNode);
+		Object valueParameter = getValueParameter(yamlProperty, parameters);
+		int listSize = (int) YamlTypeConverter.cast(valueParameter.toString(), YamlDataType.INTEGER);
+		List list = new ArrayList<>();
+		for(int i=0; i < listSize; i++) {
+			list.add(new LinkedHashMap());
+		}	
+		map.put(nodeName, list);
+		return map.entrySet().iterator().next();
+	}
+	
+	private static Entry getMappingNode(YamlProperty yamlProperty, List parameters) {
+		Map<String, Object> map = new LinkedHashMap<String, Object>();
+		String nodeName = getNameParameter(yamlProperty, parameters, YamlNodeType.MappingNode);
+		map.put(nodeName, new LinkedHashMap<String, Object>());
+		return map.entrySet().iterator().next();
+	}
+	
+	private static String getNameParameter(YamlProperty yamlProperty, List parameters, YamlNodeType yamlNodeType) {
+		String nodeName;
+		if(yamlProperty.getProperty() != null) {
+			nodeName = yamlProperty.getProperty();
+		}
+		else if(parameters.size() > 0) {
+			nodeName = parameters.get(0).toString();
+		}
+		else {
+			nodeName = yamlNodeType.toString();
+		}
+		return nodeName;
+	}
+	
+	private static Object getValueParameter(YamlProperty yamlProperty, List parameters) {
+		int indexOfValueParameter = (yamlProperty.getProperty() != null) ? 0 : 1;
+		Object nodeValue = (parameters.size() > indexOfValueParameter) ? parameters.get(indexOfValueParameter) : "";
+		return nodeValue;
+	}
+	
+	public static boolean deleteNode(Object yamlContent, List<Entry> createdNodes, Entry instance) {
+		boolean isCreatedNode = createdNodes.contains(instance);
+		if (isCreatedNode) {
+			createdNodes.remove(instance);
+			return true;
+		}
+		else {
+			YamlObject yamlObject = new YamlObject(instance);
+			findYamlObject(yamlContent, yamlObject);
+			if(yamlObject.isFound()) {
+				yamlObject.getParentNode().remove(instance.getKey());
+				return true;
+			}
+			else {
+				return false;
+			}
+		}
+	}
+	
+	public static boolean ownsYamlObject(Object yamlContent, List<Entry> createdNodes, Object instance) {
+		boolean isOwnYamlObject = ownsYamlObject(yamlContent, instance);
+		boolean isCreated = (!isOwnYamlObject) ? isCreatedYamlObject(createdNodes, new YamlObject(instance)) : false;
+		return isOwnYamlObject || isCreated;
+	}
+	
+	private static boolean ownsYamlObject(Object yamlContent, Object instance) {
+		if (instance instanceof List) {
+			 return ownsYamlObjects(yamlContent, (List)instance);
+		}
+		else {
+			YamlObject yamlObject = null;
+			if (instance instanceof YamlModel) {
+				yamlObject = new YamlObject(((YamlModel)instance).getYamlContent());
+			}
+			else if (instance instanceof Entry) {
+				Entry entry = (Entry) instance;
+				yamlObject = (YamlProperty.PROPERTY_ROOT.equals(entry.getKey())) ? new YamlObject(entry.getValue()) : new YamlObject(instance);
+			}
+			else {
+				yamlObject = new YamlObject(instance);
+			}
+			return ownsYamlObject(yamlContent, yamlObject);
+		}
+	}
+	
+	private static boolean ownsYamlObjects(Object yamlContent, List yamlObjects) {
+		for (Object yamlObject : yamlObjects) {
+			boolean isOwnYamlObject = (yamlObject instanceof List) ? ownsYamlObjects(yamlContent, (List)yamlObject) : ownsYamlObject(yamlContent, new YamlObject(yamlObject));
+			if (!isOwnYamlObject) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private static boolean ownsYamlObject(Object yamlContent, YamlObject yamlObject) {
+		findYamlObject(yamlContent, yamlObject);
+		return yamlObject.isFound();
+	}
+	
+	private static void findYamlObject(Object yamlContent, YamlObject yamlObject) {
+		if (Objects.equals(yamlContent, yamlObject.getValue())) {
+			yamlObject.setIsFound(true);
+		}
+		else {
+			if (yamlContent instanceof List) {
+				findYamlObject((List)yamlContent, yamlObject);
+			}
+			else if (yamlContent instanceof Map) {
+				findYamlObject((Map)yamlContent, yamlObject);
+			}
+		}
+	}
+	
+	private static void findYamlObject(List listNode, YamlObject yamlObject) {
+		for (Object node: listNode) {
+			if (!yamlObject.isFound()) {
+				findYamlObject(node, yamlObject);	
+			}
+			else {
+				break;
+			}
+		}
+	}
+	
+	private static void findYamlObject(Map mappingNode, YamlObject yamlObject) {
+		Set<Entry> entries = (Set<Entry>) mappingNode.entrySet();	
+		for (Entry entry: entries) {
+			if (!yamlObject.isFound()) {
+				if (entry.equals(yamlObject.getValue())) {
+					yamlObject.setParentNode(mappingNode);
+				}
+				else {
+					findYamlObject(entry.getValue(), yamlObject);
+				}
+			}
+			else {
+				break;
+			}
+		}
+	}
+	
+	private static boolean isCreatedYamlObject(List<Entry> createdNodes, YamlObject yamlObject) {
+		for (Entry createdNode : createdNodes) {
+			if (createdNode.equals(yamlObject.getValue())) {
+				return true;
+			}
+			else {
+				boolean isCreatedYamlObject = ownsYamlObject(createdNode.getValue(), yamlObject);	
+				if (isCreatedYamlObject) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	public static String getPrefixOfType(YamlNodeType yamlNodeType) {
+		String prefix;
+		switch(yamlNodeType) {
+			case ScalarNode:
+				prefix = String.valueOf(YamlProperty.PROPERTY_SCALAR);
+				break;
+				
+			case MappingNode:
+				prefix = String.valueOf(YamlProperty.PROPERTY_MAPPING);
+				break;
+				
+			case ListNode:
+				prefix = String.valueOf(YamlProperty.PROPERTY_LIST);
+				break;
+				
+			default:
+				prefix = null;
+		}
+		return prefix + YamlProperty.PROPERTY_SEPARATOR;
+	}
+	
+	public static String getTypeNameOf(Entry node) {
+		YamlNodeType yamlNodeType = getNodeType(node);
+		return getPrefixOfType(yamlNodeType);
+	}
+	
+	public static Object getYamlContent(File file) throws FileNotFoundException, IOException {
+		Object yamlContent = null;
+		Yaml yaml = new Yaml();		    	
+    	try(InputStream inputStream = new FileInputStream(file)) {
+        	yamlContent = yaml.load(inputStream);
+    	}
+    	return yamlContent;
+	}
+	
+	public static Object getYamlContent(String yamlContent) {	
+		Yaml yaml = new Yaml();
+    	return yaml.load(yamlContent);
+	}
+	
+	public static void storeYamlContent(File file, Object yamlContent) throws IOException {
+		try(FileWriter writer = new FileWriter(file)) {			
+			DumperOptions dumperOptions = new DumperOptions();
+			dumperOptions.setPrettyFlow(true);
+			dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
+			Yaml yaml = new Yaml(dumperOptions);
+			yaml.dump(yamlContent, writer);			 
+		}
+	}
+	
+	public static Entry getRootNode(Object yamlContent) {
+		Map<String, Object> map = new LinkedHashMap<String, Object>();
+		map.put(YamlProperty.PROPERTY_ROOT, yamlContent);
+		return map.entrySet().iterator().next();	
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlObject.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlObject.java
new file mode 100644
index 0000000..a098ee9
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlObject.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.util.Map;
+
+public class YamlObject {
+
+	protected Object value;
+	protected Map parentNode;
+	protected boolean isFound;
+	
+	public YamlObject(Object value) {
+		this.value = value;
+	}
+	
+	public Object getValue() {
+		return this.value;
+	}
+	
+	public Map getParentNode() {
+		return parentNode;
+	}
+
+	public void setParentNode(Map parentNode) {
+		this.parentNode = parentNode;
+	}
+	
+	public void setIsFound(boolean isFound) {
+		this.isFound = isFound;
+	}
+	
+	public boolean isFound() {
+		return (this.isFound || (this.parentNode != null));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlProperty.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlProperty.java
new file mode 100644
index 0000000..22149d6
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlProperty.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+public class YamlProperty {
+
+	protected String property;
+	protected YamlNodeType type;
+	protected boolean many;
+	protected boolean isScalarNode;
+	protected boolean isMappingNode;
+	protected boolean isListNode;
+	
+	public static final char PROPERTY_MAPPING = 'm';
+	public static final char PROPERTY_LIST = 'l';
+	public static final char PROPERTY_SCALAR = 's';
+	public static final char PROPERTY_COLLECTION = 'c';
+	public static final char PROPERTY_ONE_ELEMENT = 'e';
+	public static final char PROPERTY_SEPARATOR = '_';
+	public static final String PROPERTY_ROOT = "YamlRoot";
+	public static final String PROPERTY_FILE = "file";
+	
+	public static YamlProperty parse(String property, int indexOfSeparator) {
+		YamlProperty yamlProperty = new YamlProperty();
+		yamlProperty.type = YamlNodeUtility.getNodeType(property);
+		if (yamlProperty.type == null) {
+			yamlProperty.many = (indexOfSeparator == 2) ? isManyFor(property) : true;
+			yamlProperty.property = property.substring(indexOfSeparator + 1);			
+			if (propertyHasPrefix(property, indexOfSeparator, PROPERTY_SCALAR)) {
+				yamlProperty.type = YamlNodeType.ScalarNode;
+			}
+			else if (propertyHasPrefix(property, indexOfSeparator, PROPERTY_MAPPING)) {
+				yamlProperty.type = YamlNodeType.MappingNode;
+			} else if (propertyHasPrefix(property, indexOfSeparator, PROPERTY_LIST)) {
+				yamlProperty.type = YamlNodeType.ListNode;
+			} else {
+				yamlProperty = null;
+			}		
+		}
+		setNodeType(yamlProperty, property);	
+		return yamlProperty;
+	}
+	
+	private static void setNodeType(YamlProperty yamlProperty, String property) {
+		if ((yamlProperty != null) && (yamlProperty.type != null)) {
+			yamlProperty.isScalarNode = (yamlProperty.type.equals(YamlNodeType.Node)) ? true : (yamlProperty.type.equals(YamlNodeType.ScalarNode));
+			yamlProperty.isMappingNode = (yamlProperty.type.equals(YamlNodeType.Node)) ? true : (yamlProperty.type.equals(YamlNodeType.MappingNode));
+			yamlProperty.isListNode = (yamlProperty.type.equals(YamlNodeType.Node)) ? true : (yamlProperty.type.equals(YamlNodeType.ListNode));
+		}
+	}
+	
+	private static boolean propertyHasPrefix(String property, int indexOfSeparator, char prefix) {
+		return (property.charAt(0) == prefix) && (property.charAt(indexOfSeparator) == PROPERTY_SEPARATOR);
+	}
+	
+	private static boolean isManyFor(String property) {
+		return (property.charAt(1) == PROPERTY_ONE_ELEMENT) ? false : true;
+	}
+	
+	public String getProperty() {
+		return property;
+	}
+
+	public YamlNodeType getType() {
+		return type;
+	}
+
+	public boolean isMany() {
+		return many;
+	}
+
+	public boolean isScalarNode() {
+		return isScalarNode;
+	}
+
+	public boolean isMappingNode() {
+		return isMappingNode;
+	}
+
+	public boolean isListNode() {
+		return isListNode;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertyGetter.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertyGetter.java
new file mode 100644
index 0000000..0410c64
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertyGetter.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.eol.execute.context.IEolContext;
+import org.eclipse.epsilon.eol.execute.introspection.java.JavaPropertyGetter;
+
+public class YamlPropertyGetter extends JavaPropertyGetter {
+
+	protected YamlModel model;
+	
+	public YamlPropertyGetter(YamlModel model) {
+		this.model = model;
+	}
+	
+	@Override
+	public Object invoke(Object object, String property, IEolContext context) throws EolRuntimeException {
+		synchronized (this.model) {
+			if ((object instanceof Entry) || (object instanceof Map) || (object instanceof List)) {
+				Object yamlContent = object;
+				if (object instanceof Entry) {
+					yamlContent = ((Entry)object).getValue();		
+					if(property.endsWith("value")) {
+						return YamlTypeConverter.getValue(yamlContent, property);
+					} 
+					else if(property.equals("name")) {
+						return ((Entry)object).getKey();
+					}
+					else if(property.equals("type")) {
+						return YamlNodeUtility.getNodeType((Entry)object);
+					}
+				}
+				YamlProperty yamlProperty = YamlProperty.parse(property, 2);	
+				Collection<Entry> queryResult = YamlNodeUtility.getNodes(yamlContent, yamlProperty, false);			
+				return YamlNodeUtility.getQueryResult(queryResult, yamlProperty);		
+			}
+			else {
+				return super.invoke(object, property, context);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertySetter.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertySetter.java
new file mode 100644
index 0000000..88a015d
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlPropertySetter.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+import java.util.List;
+import java.util.Map.Entry;
+import org.eclipse.epsilon.eol.exceptions.EolIllegalPropertyException;
+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.eol.execute.context.IEolContext;
+import org.eclipse.epsilon.eol.execute.introspection.AbstractPropertySetter;
+
+public class YamlPropertySetter extends AbstractPropertySetter {
+
+	protected YamlModel model;
+	
+	public YamlPropertySetter(YamlModel model) {
+		this.model = model;
+	}
+	
+	@Override
+	public void invoke(Object object, String property, Object value, IEolContext context) throws EolRuntimeException {	
+		synchronized (this.model) {
+			if("value".equals(property)) {
+				if (object instanceof Entry) {
+					setValue((Entry)object, value);
+				}
+				else if(object instanceof List) {	
+					setValue((List)object, value);
+				}	
+				else {
+					throw new EolIllegalPropertyException(object, property, context);
+				}
+			}
+			else {
+				super.invoke(object, property, context);
+			}
+		}
+	}
+	
+	private void setValue(Entry node, Object value) {
+		Object newValue = (value instanceof Entry) ? ((Entry)value).getValue() : value;
+		if(YamlProperty.PROPERTY_ROOT.equals(node.getKey())) {
+			this.model.setYamlContent(newValue);
+		}
+		node.setValue(newValue);
+	}
+	
+	private void setValue(List listNode, Object value) {
+		for(Entry node: (List<Entry>) listNode) {
+			setValue(node, value);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlTypeConverter.java b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlTypeConverter.java
new file mode 100644
index 0000000..080a2dd
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.yaml/src/org/eclipse/epsilon/emc/yaml/YamlTypeConverter.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2022 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Ionut Predoaia - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epsilon.emc.yaml;
+
+public class YamlTypeConverter {
+
+	protected static YamlDataType dataType;
+	
+	public static final char PROPERTY_STRING = 's';
+	public static final char PROPERTY_BOOLEAN = 'b';
+	public static final char PROPERTY_INTEGER = 'i';
+	public static final char PROPERTY_FLOAT = 'f';
+	public static final char PROPERTY_DOUBLE = 'd';
+
+	public static Object getValue(Object object, String property) {
+		YamlDataType yamlPropertyDataType = null;
+		if(property.charAt(1) == YamlProperty.PROPERTY_SEPARATOR) {
+			yamlPropertyDataType = dataTypeFor(property.charAt(0));
+		}
+		return (yamlPropertyDataType == null) ? object : cast(object.toString(), yamlPropertyDataType);
+	}
+	
+	public static Object cast(String value, YamlDataType dataType) {
+		value = value.trim();
+		switch(dataType)
+        {  
+	        case BOOLEAN:
+	        	return Boolean.parseBoolean(value);
+	        	
+	        case INTEGER: 
+	        	return parseInteger(value);
+				
+        	case FLOAT:
+        		return parseFloat(value);
+        		
+        	case DOUBLE:
+        		return parseDouble(value);
+				
+        	default:
+        		return value;
+         }
+	}
+	
+	private static int parseInteger(String value) {
+		try {
+			return Integer.parseInt(value);
+		}
+		catch (NumberFormatException ex) {
+			return 0;
+		}
+	}
+	
+	private static float parseFloat(String value) {
+		try {
+			return Float.parseFloat(value);
+		}
+		catch (NumberFormatException ex) {
+			return 0.0f;
+		}
+	}
+	
+	private static double parseDouble(String value) {
+		try {
+			return Double.parseDouble(value);
+		}
+		catch (NumberFormatException ex) {
+			return 0.0d;
+		}
+	}
+	
+	private static YamlDataType dataTypeFor(char prefix) {
+		YamlDataType dataType = null;
+		switch(prefix)
+        {  
+	        case PROPERTY_STRING:
+	    		dataType = YamlDataType.STRING;
+				break;
+				
+	        case PROPERTY_BOOLEAN: 
+        		dataType = YamlDataType.BOOLEAN;
+				break; 
+				
+        	case PROPERTY_INTEGER:
+        		dataType = YamlDataType.INTEGER;
+				break;
+				
+        	case PROPERTY_FLOAT:
+        		dataType = YamlDataType.FLOAT;
+				break;
+				
+        	case PROPERTY_DOUBLE:
+        		dataType = YamlDataType.DOUBLE;
+				break;
+         }
+		return dataType;
+	}
+}
\ No newline at end of file
diff --git a/plugins/pom.xml b/plugins/pom.xml
index 4c9478d..7fef37f 100644
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -48,6 +48,8 @@
     <module>org.eclipse.epsilon.emc.muddle</module>

     <module>org.eclipse.epsilon.emc.plainxml</module>

     <module>org.eclipse.epsilon.emc.plainxml.dt</module>

+    <module>org.eclipse.epsilon.emc.yaml</module>

+    <module>org.eclipse.epsilon.emc.yaml.dt</module>

     <module>org.eclipse.epsilon.emc.spreadsheets</module>

     <module>org.eclipse.epsilon.emc.spreadsheets.excel</module>

     <module>org.eclipse.epsilon.emc.spreadsheets.excel.dt</module>

diff --git a/pom-plain.xml b/pom-plain.xml
index 4ba347e..a462e34 100644
--- a/pom-plain.xml
+++ b/pom-plain.xml
@@ -66,6 +66,11 @@
       <roles><role>Committer</role></roles>
     </developer>
     <developer>
+      <id>ionutpredoaia</id>
+      <name>Ionut Predoaia</name>
+      <roles><role>Committer</role></roles>
+    </developer>
+    <developer>
       <id>jonco</id>
       <name>Jonathan Co</name>
       <roles><role>Committer</role></roles>
@@ -133,6 +138,7 @@
     <module>plugins/org.eclipse.epsilon.emc.composite/pom-plain.xml</module>
     <module>plugins/org.eclipse.epsilon.emc.csv/pom-plain.xml</module>
     <module>plugins/org.eclipse.epsilon.emc.plainxml/pom-plain.xml</module>
+    <module>plugins/org.eclipse.epsilon.emc.yaml/pom-plain.xml</module>
     <module>plugins/org.eclipse.epsilon.eml.engine/pom-plain.xml</module>
     <module>plugins/org.eclipse.epsilon.emg.engine/pom-plain.xml</module>
     <module>plugins/org.eclipse.epsilon.eol.engine/pom-plain.xml</module>
diff --git a/releng/org.eclipse.epsilon.updatesite/category.xml b/releng/org.eclipse.epsilon.updatesite/category.xml
index bc1bbe1..a9693b4 100644
--- a/releng/org.eclipse.epsilon.updatesite/category.xml
+++ b/releng/org.eclipse.epsilon.updatesite/category.xml
@@ -81,6 +81,12 @@
    <feature id="org.eclipse.epsilon.emc.csv.feature">
       <category name="Epsilon Spreadsheet Integration"/>
    </feature>
+   <feature id="org.eclipse.epsilon.emc.yaml.dt.feature">
+      <category name="Epsilon YAML Integration"/>
+   </feature>
+   <feature id="org.eclipse.epsilon.emc.yaml.feature">
+      <category name="Epsilon YAML Integration"/>
+   </feature>
    <feature id="org.eclipse.epsilon.emc.html.dt.feature">
       <category name="Epsilon HTML Integration"/>
    </feature>
@@ -106,6 +112,11 @@
          Support for managing EMF-based models with languages of the Epsilon platform.
       </description>
    </category-def>
+   <category-def name="Epsilon YAML Integration" label="Epsilon YAML Integration">
+      <description>
+         Support for managing YAML-based models with languages of the Epsilon platform.
+      </description>
+   </category-def>
    <category-def name="Picto" label="Picto">
       <description>
          Model visualisation via model-to-text transformation.
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/.classpath b/tests/org.eclipse.epsilon.emc.yaml.test/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/.project b/tests/org.eclipse.epsilon.emc.yaml.test/.project
new file mode 100644
index 0000000..a804f84
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.emc.yaml.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/EPL-2.0.html b/tests/org.eclipse.epsilon.emc.yaml.test/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/META-INF/MANIFEST.MF b/tests/org.eclipse.epsilon.emc.yaml.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..69b475d
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test
+Bundle-SymbolicName: org.eclipse.epsilon.emc.yaml.test
+Bundle-Version: 2.4.0.qualifier
+Bundle-Activator: org.eclipse.epsilon.emc.yaml.test.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.epsilon.emc.yaml,
+ org.eclipse.epsilon.test.dependencies
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.epsilon.emc.yaml.test
+Automatic-Module-Name: org.eclipse.epsilon.emc.yaml.test
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/about.html b/tests/org.eclipse.epsilon.emc.yaml.test/about.html
new file mode 100644
index 0000000..b491992
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>April 27, 2020</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/build.properties b/tests/org.eclipse.epsilon.emc.yaml.test/build.properties
new file mode 100644
index 0000000..9d5fb68
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+EPL-2.0.html,\
+about.html,\
+               .
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/pom.xml b/tests/org.eclipse.epsilon.emc.yaml.test/pom.xml
new file mode 100644
index 0000000..1e5df06
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.epsilon</groupId>
+    <artifactId>tests</artifactId>
+    <version>2.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.eclipse.epsilon.emc.yaml.test</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/Activator.java b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/Activator.java
new file mode 100644
index 0000000..aea6778
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/Activator.java
@@ -0,0 +1,59 @@
+/*********************************************************************
+* Copyright (c) 2022 The University of York.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+**********************************************************************/
+package org.eclipse.epsilon.emc.yaml.test;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.epsilon.emc.yaml.test";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlModelTests.java b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlModelTests.java
new file mode 100644
index 0000000..61fdcfc
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlModelTests.java
@@ -0,0 +1,187 @@
+/*********************************************************************
+* Copyright (c) 2022 The University of York.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+**********************************************************************/
+package org.eclipse.epsilon.emc.yaml.test;
+
+import org.eclipse.epsilon.emc.yaml.YamlModel;
+import org.eclipse.epsilon.eol.EolEvaluator;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class YamlModelTests {
+	
+	protected YamlModel model;
+	protected EolEvaluator evaluator;
+	
+	@Before
+	public void setup() throws Exception {
+		model = new YamlModel();
+		model.setName("M");
+		model.setReadOnLoad(true);
+		model.setYamlContent(
+				  "- firstName:" + newline()
+				+ "    age: 45" + newline()
+				+ "  data:" + newline()
+				+ "    isEncrypted: true" + newline()
+				+ "  firewall:" + newline()
+				+ "  - type: \"true\"" + newline()
+				+ "  - type: warning" + newline()
+				+ "    number: 4567868" + newline()
+				+ "- coordinate:" + newline()
+				+ "    x_axis: 33" + newline()
+				+ "    y_axis: 10" + newline()
+				+ "  lastName: Melzer" + newline()
+				+ "  dataTypes:" + newline()
+				+ "  - numerics" + newline()
+				+ "  - strings" + newline()
+				+ "  - booleans"
+		);
+		model.load();
+		evaluator = new EolEvaluator(model);
+	}
+	
+	public String newline() {
+		return System.getProperty("line.separator");
+	}
+	
+	@Test
+	public void testIsPropertyCollection() {
+		assertEquals(evaluator.evaluate("l_firewall.all.sc_type").toString(), "EolSequence [[type=true, type=warning]]");
+	}
+	
+	@Test
+	public void testIsPropertyOneElement() {
+		assertEquals(evaluator.evaluate("l_firewall.all.se_type").toString(), "EolSequence [type=true]");
+	}
+	
+	@Test
+	public void testGetName() {
+		assertEquals(evaluator.evaluate("s_number.all.first().name"), "number");
+	}
+	
+	@Test
+	public void testGetType() {
+		assertEquals(evaluator.evaluate("s_number.all.first().type").toString(), "ScalarNode");
+	}
+	
+	@Test
+	public void testGetValue() {
+		assertEquals(evaluator.evaluate("s_number.all.first().value"), 4567868);
+	}
+	
+	@Test
+	public void testGetValueString() {
+		assertEquals(evaluator.evaluate("s_number.all.first().s_value"), "4567868");
+	}
+	
+	@Test
+	public void testGetValueBoolean() {
+		assertEquals(evaluator.evaluate("l_firewall.all.se_type.first().b_value"), true);
+	}
+	
+	@Test
+	public void testGetValueInteger() {
+		assertEquals(evaluator.evaluate("s_number.all.first().i_value"), 4567868);
+	}
+	
+	@Test
+	public void testGetValueDouble() {
+		assertEquals(evaluator.evaluate("s_number.all.first().d_value"), 4567868.0d);
+	}
+	
+	@Test
+	public void testGetValueFloat() {
+		assertEquals(evaluator.evaluate("s_number.all.first().f_value"), 4567868.0f);
+	}
+	
+	@Test
+	public void testGetScalarNode() {
+		assertEquals(evaluator.evaluate("s_lastName.all.first()").toString(), "lastName=Melzer");
+	}
+	
+	@Test
+	public void testGetMappingNode() {
+		assertEquals(evaluator.evaluate("m_data.all.first()").toString(), "data={isEncrypted=true}");
+	}
+	
+	@Test
+	public void testGetListNode() {
+		assertEquals(evaluator.evaluate("l_firewall.all.first()").toString(), "firewall=[{type=true}, {type=warning, number=4567868}]");
+	}
+	
+	@Test
+	public void testGetScalarNodes() {
+		assertEquals(evaluator.evaluate("ScalarNode.all").toString(), "[age=45, isEncrypted=true, type=true, type=warning, number=4567868, x_axis=33, y_axis=10, lastName=Melzer]");
+	}
+	
+	@Test
+	public void testGetMappingNodes() {
+		assertEquals(evaluator.evaluate("MappingNode.all").toString(), "[firstName={age=45}, data={isEncrypted=true}, coordinate={x_axis=33, y_axis=10}]");
+	}
+
+	@Test
+	public void testGetListNodes() {
+		assertEquals(evaluator.evaluate("ListNode.all").toString(), "[firewall=[{type=true}, {type=warning, number=4567868}], dataTypes=[numerics, strings, booleans]]");
+	}
+	
+	@Test
+	public void testSetNode() {
+		evaluator.execute("m_data.all.at(0).value = 100;");
+		assertEquals(evaluator.evaluate("s_data.all.at(0).value"), 100);
+	}
+	
+	@Test
+	public void testDeleteNode() {
+		evaluator.execute("delete m_firstName.all.at(0);");
+		assertEquals(evaluator.evaluate("m_firstName.all").toString(), "[]");
+	}
+	
+	@Test
+	public void testCreateNodes() {
+		String previousYamlContent = evaluator.evaluate("M.root").toString();
+		evaluator.execute(
+				  "M.setRootAsList();" + newline()
+				+ "var root = M.root;" + newline()
+				+ "root.value.addRows(2);" + newline()
+				+ "var firstRow = root.value.at(0);" + newline()
+				+ "var secondRow = root.value.at(1);" + newline()
+				+ "var firstNameNode = new m_firstName;" + newline()
+				+ "var ageNode = new s_age(45);" + newline()
+				+ "firstNameNode.value.appendNode(ageNode);" + newline()
+				+ "var dataNode = new m_data;" + newline()
+				+ "var isEncryptedNode = new s_isEncrypted(true);" + newline()
+				+ "dataNode.value.appendNode(isEncryptedNode);" + newline()
+				+ "var firewallNode = new l_firewall(2);" + newline()
+				+ "var typeNode1 = new s_type(\"true\");" + newline()
+				+ "var typeNode2 = new s_type(\"warning\");" + newline()
+				+ "var numberNode = new s_number(4567868);" + newline()
+				+ "firewallNode.value.at(0).appendNode(typeNode1);" + newline()
+				+ "firewallNode.value.at(1).appendNode(typeNode2);" + newline()
+				+ "firewallNode.value.at(1).appendNode(numberNode);" + newline()
+				+ "var coordinate = new m_coordinate;" + newline()
+				+ "var x_axisNode = new s_x_axis(33);" + newline()
+				+ "var y_axisNode = new s_y_axis(10);" + newline()
+				+ "coordinate.value.appendNode(x_axisNode);" + newline()
+				+ "coordinate.value.appendNode(y_axisNode);"
+				+ "var lastNameNode = new s_lastName(\"Melzer\");" + newline()
+				+ "var dataTypesNode = new l_dataTypes(3);" + newline()
+				+ "dataTypesNode.value.set(0, \"numerics\");" + newline()
+				+ "dataTypesNode.value.set(1, \"strings\");" + newline()
+				+ "dataTypesNode.value.set(2, \"booleans\");" + newline()
+				+ "firstRow.appendNode(firstNameNode);" + newline()
+				+ "firstRow.appendNode(dataNode);" + newline()
+				+ "firstRow.appendNode(firewallNode);" + newline()
+				+ "secondRow.appendNode(coordinate);" + newline()
+				+ "secondRow.appendNode(lastNameNode);" + newline()
+				+ "secondRow.appendNode(dataTypesNode);");
+		assertEquals(previousYamlContent, evaluator.evaluate("M.root").toString());
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlTestSuite.java b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlTestSuite.java
new file mode 100644
index 0000000..45e2ac5
--- /dev/null
+++ b/tests/org.eclipse.epsilon.emc.yaml.test/src/org/eclipse/epsilon/emc/yaml/test/YamlTestSuite.java
@@ -0,0 +1,27 @@
+/*********************************************************************
+* Copyright (c) 2022 The University of York.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+**********************************************************************/
+package org.eclipse.epsilon.emc.yaml.test;
+
+import junit.framework.JUnit4TestAdapter;
+import junit.framework.Test;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses(YamlModelTests.class)
+public class YamlTestSuite {
+
+	public static Test suite() {
+		return new JUnit4TestAdapter(YamlTestSuite.class);
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF b/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
index 99ec1a8..f48add4 100644
--- a/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
@@ -14,7 +14,8 @@
  org.eclipse.epsilon.eunit.engine;visibility:=reexport,
  org.eclipse.epsilon.emc.emf;visibility:=reexport,
  org.eclipse.epsilon.hutn.engine;visibility:=reexport,
- org.eclipse.epsilon.emc.plainxml;visibility:=reexport
+ org.eclipse.epsilon.emc.plainxml;visibility:=reexport,
+ org.eclipse.epsilon.emc.yaml;visibility:=reexport
 Bundle-Vendor: Eclipse.org
 Export-Package: org,
  org.antlr,
diff --git a/tests/org.eclipse.epsilon.test/META-INF/MANIFEST.MF b/tests/org.eclipse.epsilon.test/META-INF/MANIFEST.MF
index cf05d58..b9a22b0 100644
--- a/tests/org.eclipse.epsilon.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.epsilon.test/META-INF/MANIFEST.MF
@@ -20,6 +20,7 @@
  org.eclipse.epsilon.etl.engine.test.acceptance,
  org.eclipse.epsilon.emc.hutn.test,
  org.eclipse.epsilon.emc.plainxml.test,
+ org.eclipse.epsilon.emc.yaml.test,
  org.eclipse.epsilon.common.test,
  org.eclipse.epsilon.workflow.test,
  org.eclipse.epsilon.evl.engine.test.acceptance,
diff --git a/tests/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonJenkinsTestSuite.java b/tests/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonJenkinsTestSuite.java
index 6cbaedc..228a457 100644
--- a/tests/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonJenkinsTestSuite.java
+++ b/tests/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonJenkinsTestSuite.java
@@ -28,6 +28,7 @@
 import org.eclipse.epsilon.emc.graphml.tests.*;
 import org.eclipse.epsilon.emc.hutn.test.*;
 import org.eclipse.epsilon.emc.plainxml.test.*;
+import org.eclipse.epsilon.emc.yaml.test.*;
 import org.eclipse.epsilon.emc.spreadsheets.test.*;
 import org.eclipse.epsilon.eml.engine.test.acceptance.*;
 import org.eclipse.epsilon.eol.engine.test.acceptance.*;
@@ -83,6 +84,7 @@
 	EwlAcceptanceTestSuite.class,
 	EplAcceptanceTestSuite.class,
 	PlainXmlTestSuite.class,
+	YamlTestSuite.class,
 	BibtexModelTestSuite.class,
 	GraphmlTestSuite.class,
 	EmfTestSuite.class,
diff --git a/tests/pom.xml b/tests/pom.xml
index 754bb1e..21f4fe5 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -32,6 +32,7 @@
     <module>org.eclipse.epsilon.emc.graphml.tests</module>
     <module>org.eclipse.epsilon.emc.hutn.test</module>
     <module>org.eclipse.epsilon.emc.plainxml.test</module>
+    <module>org.eclipse.epsilon.emc.yaml.test</module>
     <module>org.eclipse.epsilon.emc.simulink.common.test</module>
     <module>org.eclipse.epsilon.emc.simulink.test</module>
     <module>org.eclipse.epsilon.emc.simulink.dictionary.test</module>