diff --git a/xos/core/xoslib/static/js/xosTenant.js b/xos/core/xoslib/static/js/xosTenant.js
index f933c89..24af63f 100644
--- a/xos/core/xoslib/static/js/xosTenant.js
+++ b/xos/core/xoslib/static/js/xosTenant.js
@@ -289,6 +289,9 @@
       'Create Slice': function() {
         var addDialog = this;
 
+        // TODO
+        // we should validate the slice with the custom xosValidate function defined in define_modle (xos-backbone.js:755)
+
         detailView.synchronous = true;
         detailView.afterSave = function() {
           $(addDialog).dialog('close');
diff --git a/xos/core/xoslib/static/js/xoslib/xos-backbone.js b/xos/core/xoslib/static/js/xoslib/xos-backbone.js
index 6fb6cc1..38c23b8 100644
--- a/xos/core/xoslib/static/js/xoslib/xos-backbone.js
+++ b/xos/core/xoslib/static/js/xoslib/xos-backbone.js
@@ -134,6 +134,16 @@
         xosValidate: function(attrs, options) {
             errors = {};
             foundErrors = false;
+            var self = this;
+
+            console.log(self);
+
+            // if(self.validators && self.validators.custom && typeof self.validators.custom === 'function'){
+            //     var error = self.validators.custom(attrs, options);
+            //     debugger;
+            //     console.log(error);
+            // }
+
             _.each(this.validators, function(validatorList, fieldName) {
                 _.each(validatorList, function(validator) {
                     if (fieldName in attrs) {
@@ -424,18 +434,25 @@
             modelAttrs.defaults = get_defaults(modelName);
         }
 
-//        if ((typeof xosdefaults !== "undefined") && xosdefaults[modelName]) {
-//            modelAttrs["defaults"] = xosdefaults[modelName];
-//        }
-
+        // NOTE
+        // if(modelName === 'slicePlus'){
+        //     debugger;
+        // }
         if ((typeof xosvalidators !== "undefined") && xosvalidators[modelName]) {
             modelAttrs["validators"] = $.extend({}, xosvalidators[modelName], attrs["validators"] || {});
-        } else if (attrs["validators"]) {
+        }
+        else if (attrs["validators"]) {
             modelAttrs["validators"] = attrs["validators"];
             console.log(attrs);
             console.log(modelAttrs);
         }
 
+        // NOTE this has been added by matteo to pass in custom validators
+        // will be evaluated by xosValidate on line 137
+        // if(typeof attrs.xosValidate === 'function' && attrs['validators']){
+        //     modelAttrs['validators'].custom = attrs.xosValidate;
+        // }
+
         lib[modelName] = XOSModel.extend(modelAttrs);
 
         collectionAttrs["model"] = lib[modelName];
@@ -735,8 +752,11 @@
                             defaults: extend_defaults("slice", {"network_ports": "", "site_allocation": []}),
                             validators: {"network_ports": ["portspec"]},
                             xosValidate: function(attrs, options) {
+                                // TODO this is not triggered
+                                // was it ment to override xosValidate in the XOS Model definition?
                                 errors = XOSModel.prototype.xosValidate.call(this, attrs, options);
                                 // validate that slice.name starts with site.login_base
+                                console.log('SlicePlus XOSValidate', attrs.site, this.site);
                                 site = attrs.site || this.site;
                                 if ((site!=undefined) && (attrs.name!=undefined)) {
                                     site = xos.sites.get(site);
diff --git a/xos/core/xoslib/static/js/xoslib/xosHelper.js b/xos/core/xoslib/static/js/xoslib/xosHelper.js
index cad242f..50be612 100644
--- a/xos/core/xoslib/static/js/xoslib/xosHelper.js
+++ b/xos/core/xoslib/static/js/xoslib/xosHelper.js
@@ -573,7 +573,11 @@
                    model.save, we call it ourselves, so we can throw up our
                    validation error before creating the infoMsg in the log
                 */
+               
+                // NOTE
+                // this does NOT trigger the xosValidate function define in the model (eg: xos-backbone-js:755)
                 errors =  this.model.xosValidate(data);
+                console.log(this.model.xosValidate);
                 if (errors) {
                     this.onFormDataInvalid(errors);
                     return;
