diff --git a/skyquake/plugins/composer/api/composer.js b/skyquake/plugins/composer/api/composer.js
index e9e4be1..93cc553 100644
--- a/skyquake/plugins/composer/api/composer.js
+++ b/skyquake/plugins/composer/api/composer.js
@@ -125,8 +125,7 @@
                 response[0].descriptors = JSON.parse(result[0].body).collection['nsd:nsd'];
                 if (result[2].body) {
                     var data = JSON.parse(result[2].body);
-                    if (data && data["nsr:ns-instance-opdata"] && data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"]) {
-                        var nsdRefCountCollection = data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"];
+                    if (data && data["nsr:ns-instance-opdata"]) {
                         response[0].descriptors.map(function(nsd) {
                             if (!nsd["meta"]) {
                                 nsd["meta"] = {};
@@ -134,9 +133,6 @@
                             if (typeof nsd['meta'] == 'string') {
                                 nsd['meta'] = JSON.parse(nsd['meta']);
                             }
-                            nsd["meta"]["instance-ref-count"] = _.findWhere(nsdRefCountCollection, {
-                                "nsd-id-ref": nsd.id
-                            })["instance-ref-count"];
                         });
                     }
                 }
@@ -487,7 +483,7 @@
 }
 
 /**
- * This methods retrieves the status of package operations. It takes an optional 
+ * This methods retrieves the status of package operations. It takes an optional
  * transaction id (id) this if present will return only that status otherwise
  * an array of status' will be response.
  */
diff --git a/skyquake/plugins/composer/src/src/components/CatalogItems.js b/skyquake/plugins/composer/src/src/components/CatalogItems.js
index 78a18e0..9b96bb5 100644
--- a/skyquake/plugins/composer/src/src/components/CatalogItems.js
+++ b/skyquake/plugins/composer/src/src/components/CatalogItems.js
@@ -88,8 +88,6 @@
 			const isOpenForEdit = d.uiState.isOpenForEdit;
 			const spanClassNames = ClassNames({'-is-selected': isSelected, '-is-open-for-edit': isOpenForEdit});
 			const sectionClassNames = ClassNames('catalog-item', {'-is-modified': isModified, '-is-deleted': isDeleted});
-			const instanceCount = d.uiState['instance-ref-count'];
-			const instanceCountLabel = isNSD && instanceCount ? <span>({instanceCount})</span> : null;
 			let type;
 			if(isNSD) {
 				type = 'nsd';
@@ -104,7 +102,7 @@
 							{isModified ? <div className="-is-modified-indicator" title="This descriptor has changes."></div> : null}
 							<div className="type-header">{type}</div>
 							<dl>
-								<dt className="name">{d.name} {instanceCountLabel}</dt>
+								<dt className="name">{d.name}</dt>
 								<dd className="logo">
 								<img className="logo" src={cleanDataURI(d['logo'], type, d.id)} draggable="false"  onError={self.handleImageError} />
 								</dd>
diff --git a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
index ad2bf3d..651c40d 100644
--- a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
+++ b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
@@ -324,7 +324,7 @@
 			// We stick in a string when the user actually sets it to simplify things
 			// but the correct thing happens when we serialize to user data
 			let isEmptyLeafPresent = (value === EMPTY_LEAF_PRESENT || value === null); 
-			let present = isEmptyLeafPresent ? EMPTY_LEAF_PRESENT : "";
+			let present = isEmptyLeafPresent ? EMPTY_LEAF_PRESENT : [null];
 			const options = [
 				<option key={'true'} value={EMPTY_LEAF_PRESENT}>Enabled</option>,
 				<option key={'false'} value="">Not Enabled</option>
diff --git a/skyquake/plugins/composer/src/src/stores/CatalogDataStore.js b/skyquake/plugins/composer/src/src/stores/CatalogDataStore.js
index 06d1342..9179f21 100644
--- a/skyquake/plugins/composer/src/src/stores/CatalogDataStore.js
+++ b/skyquake/plugins/composer/src/src/stores/CatalogDataStore.js
@@ -57,7 +57,6 @@
 		UID.assignUniqueId(newItem.uiState);
 		newItem.uiState.isNew = true;
 		newItem.uiState.modified = true;
-		newItem.uiState['instance-ref-count'] = 0;
 	}
 	return newItem;
 }
@@ -189,7 +188,6 @@
 		});
 		updatedCatalogs.filter(d => d.type === 'nsd').forEach(catalog =>  {
 			catalog.descriptors = catalog.descriptors.map(descriptor => {
-				const instanceRefCount = parseInt(descriptor.uiState['instance-ref-count'], 10);
 				if (descriptor['constituent-vnfd']) {
 					descriptor.vnfd = descriptor['constituent-vnfd'].map(d => {
 						const vnfdId = d['vnfd-id-ref'];
@@ -197,10 +195,6 @@
 						if (!vnfd) {
 							throw new ReferenceError('no VNFD found in the VNFD Catalog for the constituent-vnfd: ' + d);
 						}
-						if (!isNaN(instanceRefCount) && instanceRefCount > 0) {
-							// this will notify user that this item cannot be updated when/if they make a change to it
-							vnfd.uiState['instance-ref-count'] = instanceRefCount;
-						}
 						// create an instance of this vnfd to carry transient ui state properties
 						const instance = _cloneDeep(vnfd);
 						instance.uiState['member-vnf-index'] = d['member-vnf-index'];
@@ -319,17 +313,9 @@
 						// compare just the catalog uiState data (id, name, short-name, description, etc.)
 						const modified = !areCatalogItemsMetaDataEqual(d, item);
 						if (modified) {
-							if (d.uiState['instance-ref-count'] > 0) {
-								console.log('cannot edit NSD/VNFD with references to instantiated Network Services');
-								ComposerAppActions.showError.defer({
-									errorMessage: 'Cannot edit NSD/VNFD with references to instantiated Network Services'
-								});
-								return _cloneDeep(d);
-							} else {
-								item.uiState.modified = modified;
-								requiresSave = true;
-								this.addSnapshot(item);
-							}
+							item.uiState.modified = modified;
+							requiresSave = true;
+							this.addSnapshot(item);
 						}
 						return item;
 					}
@@ -353,17 +339,9 @@
 				// replace the old descriptor with the updated one
 				catalog.descriptors = catalog.descriptors.map(d => {
 					if (d.id === descriptorId) {
-						if (d.uiState['instance-ref-count'] > 0) {
-							console.log('cannot edit NSD/VNFD with references to instantiated Network Services');
-							ComposerAppActions.showError.defer({
-								errorMessage: 'Cannot edit NSD/VNFD with references to instantiated Network Services'
-							});
-							return _cloneDeep(d);
-						} else {
-							itemDescriptor.model.uiState.modified = true;
-							this.addSnapshot(itemDescriptor.model);
-							return itemDescriptor.model;
-						}
+						itemDescriptor.model.uiState.modified = true;
+						this.addSnapshot(itemDescriptor.model);
+						return itemDescriptor.model;
 					}
 					return d;
 				});
@@ -415,27 +393,19 @@
 			if (item.uiState.isNew) {
 				CatalogDataStore.confirmDelete(remove, confirmDeleteCancel);
 			} else {
-				if (item.uiState['instance-ref-count'] > 0) {
-					console.log('cannot delete NSD/VNFD with references to instantiated Network Services');
-					ComposerAppActions.showError.defer({
-						errorMessage: 'Cannot delete NSD/VNFD with references to instantiated Network Services'
-					});
-					undo();
-				} else {
-					const confirmDeleteOK = event => {
-						event.preventDefault();
-						item.uiState.deleted = true;
-						this.setState({catalogs: this.getCatalogs()});
-						ModalOverlayActions.showModalOverlay.defer();
-						this.getInstance().deleteCatalogItem(item.uiState.type, item.id)
-							.then(remove, undo)
-							.then(ModalOverlayActions.hideModalOverlay, ModalOverlayActions.hideModalOverlay)
-							.catch(function() {
-								console.log('overcoming ES6 unhandled rejection red herring');
-							});
-					};
-					CatalogDataStore.confirmDelete(confirmDeleteOK, confirmDeleteCancel);
-				}
+				const confirmDeleteOK = event => {
+					event.preventDefault();
+					item.uiState.deleted = true;
+					this.setState({catalogs: this.getCatalogs()});
+					ModalOverlayActions.showModalOverlay.defer();
+					this.getInstance().deleteCatalogItem(item.uiState.type, item.id)
+						.then(remove, undo)
+						.then(ModalOverlayActions.hideModalOverlay, ModalOverlayActions.hideModalOverlay)
+						.catch(function() {
+							console.log('overcoming ES6 unhandled rejection red herring');
+						});
+				};
+				CatalogDataStore.confirmDelete(confirmDeleteOK, confirmDeleteCancel);
 			}
 		}
 	}
@@ -528,13 +498,6 @@
 
 	saveItem(item) {
 		if (item) {
-			if (item.uiState['instance-ref-count'] > 0) {
-				console.log('cannot save NSD/VNFD with references to instantiated Network Services');
-				ComposerAppActions.showError.defer({
-					errorMessage: 'Cannot save NSD/VNFD with references to instantiated Network Services'
-				});
-				return;
-			}
 			const success = () => {
 				delete item.uiState.modified;
 				if (item.uiState.isNew) {
diff --git a/skyquake/plugins/launchpad/api/launchpad.js b/skyquake/plugins/launchpad/api/launchpad.js
index d74bb3e..4e288c3 100644
--- a/skyquake/plugins/launchpad/api/launchpad.js
+++ b/skyquake/plugins/launchpad/api/launchpad.js
@@ -266,8 +266,7 @@
                 response[0].descriptors = JSON.parse(result[0].body).collection['nsd:nsd'];
                 if (result[2].body) {
                     var data = JSON.parse(result[2].body);
-                    if (data && data["nsr:ns-instance-opdata"] && data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"]) {
-                        var nsdRefCountCollection = data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"];
+                    if (data && data["nsr:ns-instance-opdata"]) {
                         response[0].descriptors.map(function(nsd) {
                             if (!nsd["meta"]) {
                                 nsd["meta"] = {};
@@ -275,9 +274,6 @@
                             if (typeof nsd['meta'] == 'string') {
                                 nsd['meta'] = JSON.parse(nsd['meta']);
                             }
-                            nsd["meta"]["instance-ref-count"] = _.findWhere(nsdRefCountCollection, {
-                                "nsd-id-ref": nsd.id
-                            })["instance-ref-count"];
                             nsd["constituent-vnfd"] && nsd["constituent-vnfd"].map(function(v) {
                                 v.name = vnfdDict[v["vnfd-id-ref"]];
                             })
