diff --git a/xos/configurations/common/mydeployment.yaml b/xos/configurations/common/mydeployment.yaml
index c81fd93..6d64da6 100644
--- a/xos/configurations/common/mydeployment.yaml
+++ b/xos/configurations/common/mydeployment.yaml
@@ -23,7 +23,7 @@
       type: tosca.nodes.Deployment
       requirements:
           - m1.xlarge:
-             node: m1.large
+             node: m1.xlarge
              relationship: tosca.relationships.SupportsFlavor
           - m1.large:
              node: m1.large
diff --git a/xos/services/mcord/models.py b/xos/services/mcord/models.py
index ed13ac3..1b2bd65 100644
--- a/xos/services/mcord/models.py
+++ b/xos/services/mcord/models.py
@@ -15,7 +15,6 @@
 from xos.config import Config
 
 MCORD_KIND = "RAN" # This should be changed later I did it fo demo
-VNFM_KIND = "vEPC" # This should be changed later I did it fo demo
 MCORD_USE_VTN = getattr(Config(), "networking_use_vtn", False)
 VBBU_KIND = "RAN"
 VSGW_KIND = "vSGW"
@@ -24,77 +23,6 @@
 # The class to represent the service. Most of the service logic is given for us
 # in the Service class but, we have some configuration that is specific for
 # this example.
-class ProxyService(Service):
-    KIND = VNFM_KIND
-
-    class Meta:
-        # When the proxy field is set to True the model is represented as
-        # it's superclass in the database, but we can still change the python
-        # behavior. In this case HelloWorldServiceComplete is a Service in the
-        # database.
-        proxy = True
-        # The name used to find this service, all directories are named this
-        app_label = "mcord"
-        verbose_name = "MCORD VNFM Service"
-
-class VSGWTenant(Tenant):
-    class Meta:
-        proxy = True
-
-    KIND = VSGW_KIND
-
-    default_attributes = {"status": None, "action": None, "control": None, "extra": None}
-    def __init__(self, *args, **kwargs):
-        proxy_services = VNFMService.get_service_objects().all()
-        if volt_services:
-            self._meta.get_field("provider_service").default = proxy_services[0].id
-        super(VSGWTenant, self).__init__(*args, **kwargs)
-
-    @property
-    def status(self):
-        return self.get_attribute("status", self.default_attributes["status"])
-
-    @status.setter
-    def status(self, value):
-        self.set_attribute("status", value)
-
-    @property
-    def action(self):
-        return self.get_attribute("action", self.default_attributes["action"])
-
-    @action.setter
-    def action(self, value):
-        self.set_attribute("action", value)
-
-    @property
-    def control(self):
-        return self.get_attribute("control", self.default_attributes["control"])
-
-    @control.setter
-    def control(self, value):
-        self.set_attribute("control", value)
-
-    @property
-    def extra(self):
-        return self.get_attribute("extra", self.default_attributes["extra"])
-
-    @extra.setter
-    def extra(self, value):
-        self.set_attribute("extra", value)
-
-
-    def save(self, *args, **kwargs):
-
-        super(VSGWTenant, self).save(*args, **kwargs)
-        model_policy_mcord_service_component(self.pk)
-
-    def delete(self, *args, **kwargs):
-        super(VSGWTenant, self).delete(*args, **kwargs)
-
-
-# This is the class to represent the tenant. Most of the logic is given to use
-# in TenantWithContainer, however there is some configuration and logic that
-# we need to define for this example.
 class MCORDService(Service):
     KIND = MCORD_KIND
 
diff --git a/xos/services/mcord/models.py.old3 b/xos/services/mcord/models.py.old3
deleted file mode 100644
index 1b2bd65..0000000
--- a/xos/services/mcord/models.py.old3
+++ /dev/null
@@ -1,283 +0,0 @@
-from django.db import models
-from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber, NetworkParameter, NetworkParameterType, AddressPool, Port
-from core.models.plcorebase import StrippedCharField
-import os
-from django.db import models, transaction
-from django.forms.models import model_to_dict
-from django.db.models import Q
-from operator import itemgetter, attrgetter, methodcaller
-from core.models import Tag
-from core.models.service import LeastLoadedNodeScheduler
-import traceback
-from xos.exceptions import *
-from core.models import SlicePrivilege, SitePrivilege
-from sets import Set
-from xos.config import Config
-
-MCORD_KIND = "RAN" # This should be changed later I did it fo demo
-MCORD_USE_VTN = getattr(Config(), "networking_use_vtn", False)
-VBBU_KIND = "RAN"
-VSGW_KIND = "vSGW"
-VPGW_KIND = "vPGW"
-net_types = ("s1u", "s1mme", "rru")
-# The class to represent the service. Most of the service logic is given for us
-# in the Service class but, we have some configuration that is specific for
-# this example.
-class MCORDService(Service):
-    KIND = MCORD_KIND
-
-    class Meta:
-        # When the proxy field is set to True the model is represented as
-        # it's superclass in the database, but we can still change the python
-        # behavior. In this case HelloWorldServiceComplete is a Service in the
-        # database.
-        proxy = True
-        # The name used to find this service, all directories are named this
-        app_label = "mcord"
-        verbose_name = "MCORD Service"
-
-# This is the class to represent the tenant. Most of the logic is given to use
-# in TenantWithContainer, however there is some configuration and logic that
-# we need to define for this example.
-class VBBUComponent(TenantWithContainer):
-
-    class Meta:
-        # Same as a above, HelloWorldTenantComplete is represented as a
-        # TenantWithContainer, but we change the python behavior.
-        proxy = True
-        verbose_name = "VBBU MCORD Service Component"
-
-    # The kind of the service is used on forms to differentiate this service
-    # from the other services.
-    KIND = VBBU_KIND
-
-    # Ansible requires that the sync_attributes field contain nat_ip and nat_mac
-    # these will be used to determine where to SSH to for ansible.
-    # Getters must be defined for every attribute specified here.
-    sync_attributes = ("s1u_ip", "s1u_mac",
-                       "s1mme_ip", "s1mme_mac",
-                       "rru_ip", "rru_mac")
-    # default_attributes is used cleanly indicate what the default values for
-    # the fields are.
-    default_attributes = {"display_message": "New vBBU Component", "s1u_tag": "901", "s1mme_tag": "900", "rru_tag": "999"}
-    def __init__(self, *args, **kwargs):
-        mcord_services = MCORDService.get_service_objects().all()
-        # When the tenant is created the default service in the form is set
-        # to be the first created HelloWorldServiceComplete
-        if mcord_services:
-            self._meta.get_field(
-                "provider_service").default = mcord_services[0].id
-        super(VBBUComponent, self).__init__(*args, **kwargs)
-
-    def can_update(self, user):
-        #Allow creation of this model instances for non-admin users also
-        return True
-
-    def save(self, *args, **kwargs):
-        if not self.creator:
-            if not getattr(self, "caller", None):
-                # caller must be set when creating a monitoring channel since it creates a slice
-                raise XOSProgrammingError("ServiceComponents's self.caller was not set")
-            self.creator = self.caller
-            if not self.creator:
-                raise XOSProgrammingError("ServiceComponents's self.creator was not set")
-
-        super(VBBUComponent, self).save(*args, **kwargs)
-        # This call needs to happen so that an instance is created for this
-        # tenant is created in the slice. One instance is created per tenant.
-        model_policy_mcord_servicecomponent(self.pk)
-
-    def save_instance(self, instance):
-        with transaction.atomic():
-            super(VBBUComponent, self).save_instance(instance)
-            if instance.isolation in ["vm"]:
-                for ntype in net_types:
-                    lan_network = self.get_lan_network(instance, ntype)
-                    port = self.find_or_make_port(instance,lan_network)
-                    if (ntype == "s1u"):
-                        port.set_parameter("s_tag", self.s1u_tag)
-                        port.set_parameter("neutron_port_name", "stag-%s" % self.s1u_tag)
-                        port.save()
-                    elif (ntype == "s1mme"):
-                        port.set_parameter("s_tag", self.s1mme_tag)
-                        port.set_parameter("neutron_port_name", "stag-%s" % self.s1mme_tag)
-                        port.save()
-                    elif (ntype == "rru"):
-                        port.set_parameter("s_tag", self.rru_tag)
-                        port.set_parameter("neutron_port_name", "stag-%s" % self.rru_tag)
-                        port.save()
-    
-    def delete(self, *args, **kwargs):
-        # Delete the instance that was created for this tenant
-        self.cleanup_container()
-        super(VBBUComponent, self).delete(*args, **kwargs)
-
-    def find_or_make_port(self, instance, network, **kwargs):
-        port = Port.objects.filter(instance=instance, network=network)
-        if port:
-            port = port[0]
-            print "port already exist", port[0]
-        else:
-            port = Port(instance=instance, network=network, **kwargs)
-            print "NETWORK", network, "MAKE_PORT", port 
-            port.save()
-        return port
-
-    def get_lan_network(self, instance, ntype):
-        slice = self.provider_service.slices.all()[0]
-        lan_networks = [x for x in slice.networks.all() if ntype in x.name]
-        if not lan_networks:
-            raise XOSProgrammingError("No lan_network")
-        return lan_networks[0]
-
-    def manage_container(self):
-        from core.models import Instance, Flavor
-
-        if self.deleted:
-            return
-
-        # For container or container_vm isolation, use what TenantWithCotnainer
-        # provides us
-        slice = self.get_slice()
-        if slice.default_isolation in ["container_vm", "container"]:
-            super(VBBUComponent,self).manage_container()
-            return
-
-        if not self.s1u_tag:
-            raise XOSConfigurationError("S1U_TAG is missed")
-
-        if not self.s1mme_tag:
-            raise XOSConfigurationError("S1U_TAG is missed")
-
-        if not self.rru_tag:
-            raise XOSConfigurationError("S1U_TAG is missed")
-
-        if self.instance:
-            # We're good.
-            return
-
-        instance = self.make_instance()
-        self.instance = instance
-        super(TenantWithContainer, self).save()
-
-    def get_slice(self):
-        if not self.provider_service.slices.count():
-            raise XOSConfigurationError("The service has no slices")
-        slice = self.provider_service.slices.all()[0]
-        return slice
-
-    def make_instance(self):
-        slice = self.provider_service.slices.all()[0]            
-        flavors = Flavor.objects.filter(name=slice.default_flavor)
-#        flavors = Flavor.objects.filter(name="m1.xlarge")
-        if not flavors:
-            raise XOSConfigurationError("No default flavor")
-        default_flavor = slice.default_flavor
-        slice = self.provider_service.slices.all()[0]
-        if slice.default_isolation == "container_vm":
-            (node, parent) = ContainerVmScheduler(slice).pick()
-        else:
-            (node, parent) = LeastLoadedNodeScheduler(slice).pick()
-        instance = Instance(slice = slice,
-                        node = node,
-                        image = self.image,
-                        creator = self.creator,
-                        deployment = node.site_deployment.deployment,
-                        flavor = flavors[0],
-                        isolation = slice.default_isolation,
-                        parent = parent)
-        self.save_instance(instance)
-        return instance
-
-    def ip_to_mac(self, ip):
-        (a, b, c, d) = ip.split('.')
-        return "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-
-    # Getter for the message that will appear on the webpage
-    # By default it is "Hello World!"
-    @property
-    def display_message(self):
-        return self.get_attribute(
-            "display_message",
-            self.default_attributes['display_message'])
-
-    @display_message.setter
-    def display_message(self, value):
-        self.set_attribute("display_message", value)
-
-    @property
-    def s1u_tag(self):
-        return self.get_attribute(
-            "s1u_tag",
-            self.default_attributes['s1u_tag'])
-
-    @s1u_tag.setter
-    def s1u_tag(self, value):
-        self.set_attribute("s1u_tag", value)
-
-    @property
-    def s1mme_tag(self):
-        return self.get_attribute(
-            "s1mme_tag",
-            self.default_attributes['s1mme_tag'])
-
-    @s1mme_tag.setter
-    def s1mme_tag(self, value):
-        self.set_attribute("s1mme_tag", value)
-
-    @property
-    def rru_tag(self):
-        return self.get_attribute(
-            "rru_tag",
-            self.default_attributes['rru_tag'])
-
-    @rru_tag.setter
-    def rru_tag(self, value):
-        self.set_attribute("rru_tag", value)
-
-
-    @property
-    def addresses(self):
-        if (not self.id) or (not self.instance):
-            return {}
-
-        addresses = {}
-        for ns in self.instance.ports.all():
-            if "s1u" in ns.network.name.lower():
-                addresses["s1u"] = (ns.ip, ns.mac)
-            elif "s1mme" in ns.network.name.lower():
-                addresses["s1mme"] = (ns.ip, ns.mac)
-            elif "rru" in ns.network.name.lower():
-                addresses["rru"] = (ns.ip, ns.mac)
-        return addresses
-
-
-    @property
-    def s1u_ip(self):
-        return self.addresses.get("s1u", (None, None))[0]
-    @property
-    def s1u_mac(self):
-        return self.addresses.get("s1u", (None, None))[1]
-    @property
-    def s1mme_ip(self):
-        return self.addresses.get("s1mme", (None, None))[0]
-    @property
-    def s1mme_mac(self):
-        return self.addresses.get("s1mme", (None, None))[1]
-    @property
-    def rru_ip(self):
-        return self.addresses.get("rru", (None, None))[0]
-    @property
-    def rru_mac(self):
-        return self.addresses.get("rru", (None, None))[1]
-
-def model_policy_mcord_servicecomponent(pk):
-    # This section of code is atomic to prevent race conditions
-    with transaction.atomic():
-        # We find all of the tenants that are waiting to update
-        component = VBBUComponent.objects.select_for_update().filter(pk=pk)
-        if not component:
-            return
-        # Since this code is atomic it is safe to always use the first tenant
-        component = component[0]
-        component.manage_container()
diff --git a/xos/synchronizers/vnfm/model-deps b/xos/synchronizers/vnfm/model-deps
deleted file mode 100644
index 0967ef4..0000000
--- a/xos/synchronizers/vnfm/model-deps
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/xos/synchronizers/vnfm/run.sh b/xos/synchronizers/vnfm/run.sh
deleted file mode 100755
index 81cd4d4..0000000
--- a/xos/synchronizers/vnfm/run.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export XOS_DIR=/opt/xos
-python vnfm-synchronizer.py  -C $XOS_DIR/synchronizers/vnfm/vnfm_synchronizer_config
diff --git a/xos/synchronizers/vnfm/start.sh b/xos/synchronizers/vnfm/start.sh
deleted file mode 100755
index 5a61e1a..0000000
--- a/xos/synchronizers/vnfm/start.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export XOS_DIR=/opt/xos
-nohup python vnfm-synchronizer.py  -C $XOS_DIR/synchronizers/vnfm/vnfm_synchronizer_config > /dev/null 2>&1 &
diff --git a/xos/synchronizers/vnfm/steps/sync_tasks.py b/xos/synchronizers/vnfm/steps/sync_tasks.py
deleted file mode 100644
index fb8988e..0000000
--- a/xos/synchronizers/vnfm/steps/sync_tasks.py
+++ /dev/null
@@ -1,134 +0,0 @@
-import os
-import requests
-import socket
-import sys
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.syncstep import SyncStep
-from core.models import Service, Port, Controller, Tag
-from core.models.service import COARSE_KIND
-from services.cord.models import VSGWTenant
-from services.cord.models import Tenant
-from xos.logger import Logger, logging
-from requests.auth import HTTPBasicAuth
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-# XXX should save and load this
-glo_saved_vtn_maps = []
-
-class SyncTasks(SyncStep):
-    requested_interval = 0 # 3600
-    provides=[Task]
-    observes=Task
-
-    def __init__(self, **args):
-        SyncStep.__init__(self, **args)
-
-    def call(self, **args):
-        global glo_saved_vtn_maps
-
-        logger.info("sync'ing vsg tenant to port addresses")
-
-        # build up a dictionary of port-->[wan_addrs] mappings
-        tasks_todo = {}
-        for vsg in VSGTenant.get_tenant_objects().all():
-            if not vsg.instance:
-                logger.info("skipping vsg %s because it has no instance" % vsg)
-
-            wan_ip = vsg.wan_container_ip
-            if not wan_ip:
-                logger.info("skipping vsg %s because it has no wan_container_ip" % vsg)
-
-            wan_mac = vsg.wan_container_mac
-            if not wan_mac:
-                logger.info("skipping vsg %s because it has no wan_container_mac" % vsg)
-
-            lan_network = vsg.get_lan_network(vsg.instance)
-            if not lan_network:
-                logger.info("skipping vsg %s because it has no lan_network" % vsg)
-
-            lan_port = Port.objects.filter(instance = vsg.instance, network=lan_network)
-            if not lan_port:
-                logger.info("skipping vsg %s because it has no lan_port" % vsg)
-            lan_port = lan_port[0]
-
-            if not lan_port.port_id:
-                logger.info("skipping vsg %s because its lan_port has no port_id" % vsg)
-
-            if not (lan_port.pk in port_addrs):
-                port_addrs[lan_port.pk] = []
-            entry = {"mac_address": wan_mac, "ip_address": wan_ip}
-            addr_pairs = port_addrs[lan_port.pk]
-            if not entry in addr_pairs:
-                 addr_pairs.append(entry)
-
-            # now do the VM_WAN_IP from the instance
-            if vsg.instance:
-                wan_vm_ip = vsg.wan_vm_ip
-                wan_vm_mac = vsg.wan_vm_mac
-                entry = {"mac_address": wan_vm_mac, "ip_address": wan_vm_ip}
-                if not entry in addr_pairs:
-                    addr_pairs.append(entry)
-
-        # Get all ports in all controllers
-        ports_by_id = {}
-        for controller in Controller.objects.all():
-            if not controller.admin_tenant:
-                logger.info("controller %s has no admin_tenant" % controller)
-                continue
-            try:
-                driver = self.driver.admin_driver(controller = controller)
-                ports = driver.shell.quantum.list_ports()["ports"]
-            except:
-                logger.log_exc("failed to get ports from controller %s" % controller)
-                continue
-
-            for port in ports:
-                ports_by_id[port["id"]] = port
-
-        for port_pk in port_addrs.keys():
-            port = Port.objects.get(pk=port_pk)
-            addr_pairs = port_addrs[port_pk]
-            neutron_port = ports_by_id.get(port.port_id,None)
-            if not neutron_port:
-                logger.info("failed to get neutron port for port %s" % port)
-                continue
-
-            ips = [x["ip_address"] for x in addr_pairs]
-
-            changed = False
-
-            # delete addresses in neutron that don't exist in XOS
-            aaps = neutron_port.get("allowed_address_pairs", [])
-            for aap in aaps[:]:
-                if not aap["ip_address"] in ips:
-                    logger.info("removing address %s from port %s" % (aap["ip_address"], port))
-                    aaps.remove(aap)
-                    changed = True
-
-            aaps_ips = [x["ip_address"] for x in aaps]
-
-            # add addresses in XOS that don't exist in neutron
-            for addr in addr_pairs:
-                if not addr["ip_address"] in aaps_ips:
-                    logger.info("adding address %s to port %s" % (addr, port))
-                    aaps.append( addr )
-                    aaps_ips.append(addr["ip_address"])
-                    changed = True
-
-            if changed:
-                logger.info("updating port %s" % port)
-                driver.shell.quantum.update_port(port.port_id, {"port": {"allowed_address_pairs": aaps}})
-
-
-
-
-
-
-
diff --git a/xos/synchronizers/vnfm/steps/sync_tenant.py b/xos/synchronizers/vnfm/steps/sync_tenant.py
deleted file mode 100644
index 4dfa177..0000000
--- a/xos/synchronizers/vnfm/steps/sync_tenant.py
+++ /dev/null
@@ -1,95 +0,0 @@
-import os
-import requests
-import socket
-import sys
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.syncstep import SyncStep
-from core.models import Service
-from core.models.service import COARSE_KIND
-from services.cord.models import Tenant
-from xos.logger import Logger, logging
-from requests.auth import HTTPBasicAuth
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-# XXX should save and load this
-glo_saved_vtn_maps = []
-
-class SyncVSGWTenant(SyncStep):
-    provides=[Tenant]
-    observes=Tenant
-    requested_interval=0
-
-    def __init__(self, **args):
-        SyncStep.__init__(self, **args)
-
-    def get_vnfm_service(self):
-#        vtn_tenant = Tenant.objects.filter(name="VTN_ONOS_app")   # XXX fixme - hardcoded
-#        if not vtn_tenant:
-#            raise "No VTN Onos App found"
-#        vtn_tenant = vtn_tenant[0]
-#
-#        vtn_service = vtn_tenant.provider_service
-        vnfm_service = Service.objects.filter(name="service_vnfm")  # XXX fixme - harcoded
-        if not vtn_service:
-            raise "No VNFM Service"
-
-        return vnfm_service[0]
-
-    def get_vnfm_params(self):
-        vnfm_service = self.get_vnfm_vsgw_service()
-
-        if not vnfm_service.slices.exists():
-            raise "VNFM Service has no slices"
-
-        vnfm_slice = vnfm_service.slices.all()[0]
-
-        if not vnfm_slice.instances.exists():
-            raise "VNFM Slice has no instances"
-
-        vnfm_instance = vnfm_slice.instances.all()[0]
-
-        return vnfm_instance.node.name
-
-    def call(self, **args):
-        global glo_saved_vtn_maps
-
-        logger.info("sync'ing vtn services")
-
-        vtn_maps = []
-        for service in Service.objects.all():
-           for id in service.get_vtn_src_ids():
-               dependencies = service.get_vtn_dependencies_ids()
-               if dependencies:
-                   for dependency in dependencies:
-                       vtn_maps.append( (id, dependency) )
-
-        for vtn_map in vtn_maps:
-            if not (vtn_map in glo_saved_vtn_maps):
-                # call vtn rest api to add map
-                url = "http://" + self.get_vtn_addr() + ":8181/vnfm/rest-api-url/service-dependency/%s/%s" % (vtn_map[0], vtn_map[1])
-
-                print "POST %s" % url
-                r = requests.post(url, auth=HTTPBasicAuth('karaf', 'karaf') )    # XXX fixme - hardcoded auth
-                if (r.status_code != 200):
-                    raise Exception("Received error from vtn service (%d)" % r.status_code)
-
-        for vtn_map in glo_saved_vtn_maps:
-            if not vtn_map in vtn_maps:
-                # call vtn rest api to delete map
-                url = "http://" + self.get_vtn_addr() + ":8181/vnfm/rest-api-url/service-dependency/%s/%s" % (vtn_map[0],vtn_map[1])
-
-                print "DELETE %s" % url
-                r = requests.delete(url, auth=HTTPBasicAuth('karaf', 'karaf') )    # XXX fixme - hardcoded auth
-                if (r.status_code != 200):
-                    raise Exception("Received error from vtn service (%d)" % r.status_code)
-
-        glo_saved_vtn_maps = vtn_maps
-        # TODO: save this
-
diff --git a/xos/synchronizers/vnfm/stop.sh b/xos/synchronizers/vnfm/stop.sh
deleted file mode 100755
index 64ccd03..0000000
--- a/xos/synchronizers/vnfm/stop.sh
+++ /dev/null
@@ -1 +0,0 @@
-pkill -9 -f vnfm-synchronizer.py
diff --git a/xos/synchronizers/vnfm/supervisor/vtn-observer.conf b/xos/synchronizers/vnfm/supervisor/vtn-observer.conf
deleted file mode 100644
index 714afa7..0000000
--- a/xos/synchronizers/vnfm/supervisor/vtn-observer.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[program:vtn-observer]
-command=python /opt/xos/observers/vbng/vtn-observer.py -C /opt/xos/observers/vbng/vtn_observer_config
diff --git a/xos/synchronizers/vnfm/vnfm-synchronizer.py b/xos/synchronizers/vnfm/vnfm-synchronizer.py
deleted file mode 100755
index 84bec4f..0000000
--- a/xos/synchronizers/vnfm/vnfm-synchronizer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-synchronizer")
-mod.main()
diff --git a/xos/synchronizers/vnfm/vnfm_synchronizer_config b/xos/synchronizers/vnfm/vnfm_synchronizer_config
deleted file mode 100644
index 55594e2..0000000
--- a/xos/synchronizers/vnfm/vnfm_synchronizer_config
+++ /dev/null
@@ -1,44 +0,0 @@
-
-[plc]
-name=plc
-deployment=VICCI
-
-[db]
-name=xos
-user=postgres
-password=password
-host=localhost
-port=5432
-
-[api]
-host=128.112.171.237
-port=8000
-ssl_key=None
-ssl_cert=None
-ca_ssl_cert=None
-ratelimit_enabled=0
-omf_enabled=0
-mail_support_address=support@localhost
-nova_enabled=True
-
-[observer]
-name=vnfm
-dependency_graph=/opt/xos/synchronizers/vnfm/model-deps
-steps_dir=/opt/xos/synchronizers/vnfm/steps
-sys_dir=/opt/xos/synchronizers/vnfm/sys
-deleters_dir=/opt/xos/synchronizers/vnfm/deleters
-log_file=console
-#/var/log/hpc.log
-driver=openstack
-pretend=False
-backoff_disabled=True
-
-[nova]
-ca_ssl_cert=/etc/ssl/certs/ca-certificates.crt
-
-[feefie]
-client_id='vicci_dev_central'
-user_id='pl'
-
-[networking]
-use_vtn=True
