OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
   OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
   OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+  # Override the NeutronCorePlugin to use Nuage
+  OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginOpencontrail
 
 parameter_defaults:
   NeutronCorePlugin: neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2
 
   # Neutron Core Plugin Vendors (these typically override NeutronCorePlugin)
   OS::TripleO::Services::NeutronCorePluginPlumgrid: ../puppet/services/pacemaker/neutron-plugin-plumgrid.yaml
   OS::TripleO::Services::NeutronCorePluginNuage: ../puppet/services/pacemaker/neutron-plugin-nuage.yaml
+  OS::TripleO::Services::NeutronCorePluginOpencontrail: ../puppet/services/pacemaker/neutron-plugin-opencontrail.yaml
   OS::TripleO::Services::NeutronOvsAgent: ../puppet/services/pacemaker/neutron-ovs-agent.yaml
   OS::TripleO::Services::RabbitMQ: ../puppet/services/pacemaker/rabbitmq.yaml
   OS::TripleO::Services::HAproxy: ../puppet/services/pacemaker/haproxy.yaml
 
   # Neutron Core Plugin Vendors (these typically override NeutronCorePlugin)
   OS::TripleO::Services::NeutronCorePluginPlumgrid: puppet/services/neutron-plugin-plumgrid.yaml
   OS::TripleO::Services::NeutronCorePluginNuage: puppet/services/neutron-plugin-nuage.yaml
+  OS::TripleO::Services::NeutronCorePluginOpencontrail: puppet/services/neutron-plugin-opencontrail.yaml
   OS::TripleO::Services::NeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
   OS::TripleO::Services::RabbitMQ: puppet/services/rabbitmq.yaml
   OS::TripleO::Services::HAproxy: puppet/services/haproxy.yaml
 
 
   }
 
-  # If the value of core plugin is set to 'opencontrail'
-  # include opencontrail core plugins
-  # else use the default value of 'ml2'
-  if hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
-    include ::neutron::plugins::opencontrail
-  } else {
-
-    # If the value of core plugin is set to 'midonet',
-    # skip all the ML2 configuration
-    if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
+  # If the value of core plugin is set to 'midonet',
+  # skip all the ML2 configuration
+  if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
 
-      class {'::neutron::plugins::midonet':
-        midonet_api_ip    => hiera('public_virtual_ip'),
-        keystone_tenant   => hiera('neutron::server::auth_tenant'),
-        keystone_password => hiera('neutron::server::password')
-      }
+    class {'::neutron::plugins::midonet':
+      midonet_api_ip    => hiera('public_virtual_ip'),
+      keystone_tenant   => hiera('neutron::server::auth_tenant'),
+      keystone_password => hiera('neutron::server::password')
     }
-
-    Service['neutron-server'] -> Service['neutron-metadata']
-
   }
 
   if $enable_ceph {
 
 
   }
 
-  if  hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
-    include ::neutron::plugins::opencontrail
-  }
   if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
     class {'::neutron::plugins::midonet':
       midonet_api_ip    => hiera('public_virtual_ip'),
 
--- /dev/null
+heat_template_version: 2016-04-08
+
+description: >
+  OpenStack Neutron Opencontrail plugin
+
+parameters:
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+
+resources:
+
+  NeutronBase:
+    type: ./neutron-base.yaml
+
+outputs:
+  role_data:
+    description: Role data for the Neutron Opencontrail plugin
+    value:
+      config_settings:
+        map_merge:
+          - get_attr: [NeutronBase, role_data, config_settings]
+      step_config: |
+        include tripleo::profile::base::neutron::plugins::opencontrail
 
--- /dev/null
+heat_template_version: 2016-04-08
+
+description: >
+  OpenStack Neutron OpenContrail Plugin with Pacemaker configured with Puppet
+
+parameters:
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+
+resources:
+
+  NeutronPluginOpenContrail:
+    type: ../neutron-plugin-nuage.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+
+outputs:
+  role_data:
+    description: Role data for the Neutron OpenContrail plugin.
+    value:
+      config_settings:
+        map_merge:
+          - get_attr: [NeutronPluginOpenContrail, role_data, config_settings]
+      step_config: |
+        include ::tripleo::profile::pacemaker::neutron::plugins::opencontrail