diff --git a/cli/sdncon/controller/admin.py b/cli/sdncon/controller/admin.py
index 7f8aebf..86c11c9 100755
--- a/cli/sdncon/controller/admin.py
+++ b/cli/sdncon/controller/admin.py
@@ -15,7 +15,7 @@
 #
 
 from django.contrib import admin
-from .models import Switch, StaticFlowTableEntry, HostConfig
+#from .models import Switch, StaticFlowTableEntry, HostConfig
 
 #admin.site.register(Switch)
 #admin.site.register(StaticFlowTableEntry)
diff --git a/cli/sdncon/controller/config.py b/cli/sdncon/controller/config.py
index 36dcd16..708fdb5 100755
--- a/cli/sdncon/controller/config.py
+++ b/cli/sdncon/controller/config.py
@@ -15,10 +15,12 @@
 #
 
 from sdncon.rest.config import add_config_handler
+"""
 from sdncon.controller.models import Feature, GlobalConfig, Controller, \
     ControllerInterface, ControllerDomainNameServer, \
     FirewallRule, ControllerAlias, SnmpServerConfig, ImageDropUser
 from sdncon.controller.models import TacacsPlusConfig, TacacsPlusHost
+"""
 from oswrapper import exec_os_wrapper
 import os
 import re
@@ -46,7 +48,7 @@
             f.close()
     return local_controller_id
 
-
+"""
 # Add the config handlers here. Check the comments for add_config_handler in rest/config.py
 # for a description of the calling conventions for config handlers.
 
@@ -233,7 +235,7 @@
         print "Calling oswrapper with:", [server_enable, community, location, contact, enable_changed]
         exec_os_wrapper('SetSnmpServerConfig', 'set',
                         [server_enable, community, location, contact, enable_changed])
-
+"""
 def test_config_handler(op, old_instance, new_instance, modified_fields=None):
     pass
 
@@ -247,6 +249,7 @@
     # Associate the config handlers with specific callout for each of the fields
     #  Keep in mind that these are the django names, NOT the rest api names,
     #
+    """
     disabled_by_shell_variable = os.environ.get('SDNCON_CONFIG_HANDLERS_DISABLED', False)
     disabled_by_file = os.path.exists("%s/sdncon_config_handlers_disabled" % sdncon.SDN_ROOT)
     if not disabled_by_shell_variable and not disabled_by_file:
@@ -282,3 +285,4 @@
                 Feature: None,
                 GlobalConfig: ['ha-enabled', 'cluster-number'],
             }, test_config_handler)
+    """
diff --git a/cli/sdncon/controller/models.py b/cli/sdncon/controller/models.py
index c6dcc9f..8529a3e 100755
--- a/cli/sdncon/controller/models.py
+++ b/cli/sdncon/controller/models.py
@@ -64,7 +64,6 @@
     """
     return int(time.time()*1000000)
 
-
 #
 # ------------------------------------------------------------
 
@@ -114,6 +113,7 @@
             {'name': 'static_flow_pusher_feature', 'rest_name': 'static-flow-pusher-feature'},
             {'name': 'performance_monitor_feature','rest_name': 'performance-monitor-feature'},
             )
+"""
 
 #
 # ------------------------------------------------------------
@@ -237,7 +237,7 @@
             {'name': 'core_priority',      'rest_name': 'core-priority'},
         )
 
-
+"""
 #
 # ------------------------------------------------------------
 
@@ -384,7 +384,7 @@
             {'name': 'logging_level',           'rest_name': 'logging-level'},
             )
 
-
+"""
 #
 # ------------------------------------------------------------
 
@@ -611,7 +611,7 @@
         NAME = 'controller-domain-name-server'
         FIELD_INFO = (
             )
-
+"""
 
 #
 # ------------------------------------------------------------
@@ -1027,6 +1027,7 @@
         FIELD_INFO = (
             {'name': 'switch_interface', 'rest_name': 'switch-interface'},
         )
+"""
 #
 # ------------------------------------------------------------
 
@@ -1206,7 +1207,7 @@
             {'name': 'tp_dst',          'rest_name': 'dst-port'},
             {'name': 'actions',         'rest_name': 'actions'},
             )
-
+"""
 
 #
 # ------------------------------------------------------------
@@ -1288,6 +1289,7 @@
             {'name': 'link_type',       'rest_name': 'link-type'}
             )
             
+"""
 #
 # ------------------------------------------------------------
 # An address-space separation
@@ -1495,7 +1497,7 @@
             {'name': 'vlans',           'rest_name': 'vlans'},
             {'name': 'tag',             'rest_name': 'tag'},
             )
-
+"""
 #
 # ------------------------------------------------------------
 
@@ -1504,9 +1506,9 @@
     #
     # fields ----------------------------------------
 
-    address_space = models.ForeignKey(
-        AddressSpace,
-        verbose_name = "Address space name")
+    #address_space = models.ForeignKey(
+    #    AddressSpace,
+    #    verbose_name = "Address space name")
 
     mac = models.CharField(
         verbose_name="MAC Address",
@@ -1526,22 +1528,24 @@
 
     def __unicode__(self):
         self.mac = self.mac.lower()
-        return "%s::%s" % (self.addressSpace, self.mac)
+        #return "%s::%s" % (self.addressSpace, self.mac)
+        return "%s" % (self.addressSpace)
 
     class CassandraSettings:
-        COMPOUND_KEY_FIELDS = ('address_space', 'vlan', 'mac')
+        #COMPOUND_KEY_FIELDS = ('address_space', 'vlan', 'mac')
+        COMPOUND_KEY_FIELDS = ('vlan', 'mac')
 
     def validate_unique(self, exclude = None):
         # Invoke the default validator; error out if the vns already exists
         super(HostConfig, self).validate_unique(exclude)
-        if self.vlan and str(self.address_space) != 'default': 
-            raise ValidationError('host: vlan configured for '
-                                  'address-space other than "default" %s' % self.address_space)
+        #if self.vlan and str(self.address_space) != 'default': 
+        #    raise ValidationError('host: vlan configured for '
+        #                          'address-space other than "default" %s' % self.address_space)
 
     class Rest:
         NAME = 'host-config'
         FIELD_INFO = (
-            {'name': 'address_space', 'rest_name': 'address-space'},
+            #{'name': 'address_space', 'rest_name': 'address-space'},
             )
 
 #
@@ -1642,7 +1646,7 @@
     class Rest:
         NAME = 'host-alias'
 
-
+"""
 class VlanConfig(models.Model):
     #
     # fields ----------------------------------------    
@@ -2849,7 +2853,7 @@
                       {'name': 'dst_vns',                  'rest_name': 'dst-vns'},
                       {'name': 'gateway_pool',             'rest_name': 'gateway-pool'},
             )
-
+"""
 #
 # ------------------------------------------------------------
 
@@ -2963,7 +2967,7 @@
 
 #
 # ------------------------------------------------------------
-
+"""
 class TechSupportConf(models.Model):
 
     #
@@ -3223,3 +3227,4 @@
 #
 #    class Rest:
 #        NAME = 'user'
+"""
\ No newline at end of file
