This closes #106
diff --git a/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.directive.js b/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.directive.js
index bdfaa67..be05fff 100644
--- a/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.directive.js
+++ b/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.directive.js
@@ -42,20 +42,20 @@
 ];
 
 angular.module(MODULE_NAME, [angularAnimate, uibModal, brUtils])
-    .directive('catalogSaver', ['$rootScope', '$uibModal', '$injector', 'composerOverrides', saveToCatalogModalDirective])
+    .directive('catalogSaver', ['$rootScope', '$uibModal', '$injector', 'composerOverrides', 'blueprintService', saveToCatalogModalDirective])
     .directive('catalogVersion', ['$parse', catalogVersionDirective])
     .run(['$templateCache', templateCache]);
 
 export default MODULE_NAME;
 
-export function saveToCatalogModalDirective($rootScope, $uibModal, $injector, composerOverrides) {
+export function saveToCatalogModalDirective($rootScope, $uibModal, $injector, composerOverrides, blueprintService) {
     return {
         restrict: 'E',
         templateUrl: function (tElement, tAttrs) {
             return tAttrs.templateUrl || TEMPLATE_URL;
         },
         scope: {
-            config: '='
+            config: '=',
         },
         link: link
     };
@@ -64,8 +64,38 @@
         $scope.buttonText = $scope.config.label || ($scope.config.itemType ? `Update ${$scope.config.name || $scope.config.symbolicName}` : 'Add to catalog');
 
         $scope.activateModal = () => {
-            // Override callback to update catalog configuration data in other applications
-            $scope.config = (composerOverrides.updateCatalogConfig || (($scope, $element) => $scope.config))($scope, $element);
+            let entity = blueprintService.get();
+            let metadata = blueprintService.entityHasMetadata(entity) ? blueprintService.getEntityMetadata(entity) : new Map();
+
+            // Reset the config values if this is not an update
+            $scope.isUpdate = Object.keys($scope.config).length > ($scope.config.label ? 1 : 0);
+            if (!$scope.isUpdate) {
+                $scope.config.itemType = 'template';
+            }
+
+            // Set various properties from the blueprint entity data
+            if (!$scope.config.version && (entity.hasVersion() || metadata.has('version'))) {
+                $scope.config.version = entity.version || metadata.get('version');
+            }
+            if (!$scope.config.iconUrl && (entity.hasIcon() || metadata.has('iconUrl'))) {
+                $scope.config.iconUrl = entity.icon || metadata.get('iconUrl');
+            }
+            if (!$scope.config.name && entity.hasName()) {
+                $scope.config.name = entity.name;
+            }
+            if (!$scope.config.symbolicName && (entity.hasId() || metadata.has('id'))) {
+                $scope.config.symbolicName = entity.id || metadata.get('id');
+            }
+            if (!$scope.config.bundle) {
+                let bundle = $scope.config.symbolicName || $scope.config.name || 'untitled';
+                $scope.config.bundle = bundle.split(/[^-a-zA-Z0-9._]+/).join('-').toLowerCase();
+                if (!$scope.config.symbolicName) {
+                    $scope.config.symbolicName = $scope.config.bundle;
+                }
+            }
+
+            // Override this callback to update configuration data elsewhere
+            $scope.config = (composerOverrides.updateCatalogConfig || ((config, $element) => config))($scope.config, $element);
 
             let modalInstance = $uibModal.open({
                 templateUrl: TEMPLATE_MODAL_URL,
@@ -98,15 +128,14 @@
         view: VIEWS.form,
         saving: false,
         force: false,
-        isUpdate: Object.keys($scope.config).length > 0
     };
 
     $scope.getTitle = () => {
         switch ($scope.state.view) {
             case VIEWS.form:
-                return $scope.state.isUpdate ? `Update ${$scope.config.name || $scope.config.symbolicName}` : 'Add to catalog';
+                return $scope.isUpdate ? `Update ${$scope.config.name || $scope.config.symbolicName}` : 'Add to catalog';
             case VIEWS.saved:
-                return `${$scope.config.name || $scope.config.symbolicName} ${$scope.state.isUpdate ? 'updated' : 'saved'}`;
+                return `${$scope.config.name || $scope.config.symbolicName} ${$scope.isUpdate ? 'updated' : 'saved'}`;
         }
     };
 
diff --git a/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.modal.template.html b/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.modal.template.html
index 39b203a..97a43ce 100644
--- a/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.modal.template.html
+++ b/ui-modules/blueprint-composer/app/components/catalog-saver/catalog-saver.modal.template.html
@@ -23,17 +23,17 @@
 
 <div class="modal-body add-to-catalog-modal">
     <form ng-show="state.view === VIEWS.form" name="form" novalidate>
-        <div class="form-group" ng-class="{'has-error': form.bundle.$invalid}">
-            <label class="control-label">Bundle ID</label>
-            <div class="input-group">
-                <span class="input-group-addon">catalog-bom-</span>
-                <input ng-model="config.bundle" ng-disabled="state.saving" class="form-control" placeholder="E.g my-bundle" name="bundle" required ng-pattern="state.pattern" autofocus />
-            </div>
-            <p class="help-block" ng-show="form.bundle.$invalid">
-                <span ng-if="form.bundle.$error.required">You must specify a bundle ID</span>
-                <span ng-if="form.bundle.$error.pattern">The bundle ID can contains only letters, numbers as well a the following characters: <code>.</code>, <code>-</code> and <code>_</code></span>
-            </p>
+
+        <div class="form-group">
+            <label class="control-label">Blueprint display name</label>
+            <input ng-model="config.name" ng-disabled="state.saving" class="form-control" name="name" type="text" />
         </div>
+
+        <div class="form-group">
+            <label class="control-label">Blueprint description</label>
+            <textarea ng-model="config.description" ng-disabled="state.saving" class="form-control" name="description" rows="3"></textarea>
+        </div>
+
         <div class="form-group" ng-class="{'has-error': form.version.$invalid}">
             <label class="control-label">Version</label>
             <div class="input-group">
@@ -51,35 +51,42 @@
                 <span ng-if="form.version.$error.exist">This version has already been used</span>
             </p>
         </div>
-        <div class="form-group" ng-class="{'has-error': form.symbolicName.$invalid}">
-            <label class="control-label">Blueprint symbolic name</label>
-            <input ng-model="config.symbolicName" ng-disabled="state.saving" class="form-control" placeholder="E.g my-catalog-id" name="symbolicName" required ng-pattern="state.pattern" autofocus />
-            <p class="help-block" ng-show="form.symbolicName.$invalid">
-                <span ng-if="form.symbolicName.$error.required">You must specify a blueprint symbolic name</span>
-                <span ng-if="form.symbolicName.$error.pattern">The blueprint symbolic name can contains only letters, numbers as well a the following characters: <code>.</code>, <code>-</code> and <code>_</code></span>
-            </p>
-        </div>
 
-        <div class="form-group" ng-class="{'has-error': form.itemType.$invalid}">
-            <label class="control-label">Blueprint type</label>
-            <select class="form-control" name="itemType" ng-options="type.id as type.label for type in TYPES" ng-model="config.itemType" ng-disabled="state.saving" required >
-            </select>
-            <p class="help-block" ng-show="form.itemType.$invalid">
-                <span ng-if="form.itemType.$error.required">You must specify a blueprint type</span>
-            </p>
-        </div>
-        <div class="form-group">
-            <label class="control-label">Blueprint display name</label>
-            <input ng-model="config.name" ng-disabled="state.saving" class="form-control" name="name" type="text" />
-        </div>
-        <div class="form-group">
-            <label class="control-label">Blueprint description</label>
-            <textarea ng-model="config.description" ng-disabled="state.saving" class="form-control" name="description" rows="3"></textarea>
-        </div>
-        <div class="form-group">
-            <label class="control-label">Blueprint icon url</label>
-            <input ng-model="config.iconUrl" ng-disabled="state.saving" class="form-control" name="iconUrl" type="text" />
-        </div>
+        <br-collapsible heading="Advanced">
+            <div class="form-group" ng-class="{'has-error': form.bundle.$invalid}">
+                <label class="control-label">Bundle ID</label>
+                <div class="input-group">
+                    <span class="input-group-addon">catalog-bom-</span>
+                    <input ng-model="config.bundle" ng-disabled="state.saving" class="form-control" placeholder="E.g my-bundle" name="bundle" required ng-pattern="state.pattern" autofocus />
+                </div>
+                <p class="help-block" ng-show="form.bundle.$invalid">
+                    <span ng-if="form.bundle.$error.required">You must specify a bundle ID</span>
+                    <span ng-if="form.bundle.$error.pattern">The bundle ID can contains only letters, numbers as well a the following characters: <code>.</code>, <code>-</code> and <code>_</code></span>
+                </p>
+            </div>
+
+            <div class="form-group" ng-class="{'has-error': form.symbolicName.$invalid}">
+                <label class="control-label">Blueprint symbolic name</label>
+                <input ng-model="config.symbolicName" ng-disabled="state.saving" class="form-control" placeholder="E.g my-catalog-id" name="symbolicName" required ng-pattern="state.pattern" autofocus />
+                <p class="help-block" ng-show="form.symbolicName.$invalid">
+                    <span ng-if="form.symbolicName.$error.required">You must specify a blueprint symbolic name</span>
+                    <span ng-if="form.symbolicName.$error.pattern">The blueprint symbolic name can contains only letters, numbers as well a the following characters: <code>.</code>, <code>-</code> and <code>_</code></span>
+                </p>
+            </div>
+
+            <div class="form-group" ng-class="{'has-error': form.itemType.$invalid}">
+                <label class="control-label">Blueprint type</label>
+                <select class="form-control" name="itemType" ng-options="type.id as type.label for type in TYPES" ng-model="config.itemType" ng-disabled="state.saving" required >
+                </select>
+                <p class="help-block" ng-show="form.itemType.$invalid">
+                    <span ng-if="form.itemType.$error.required">You must specify a blueprint type</span>
+                </p>
+            </div>
+            <div class="form-group">
+                <label class="control-label">Blueprint icon url</label>
+                <input ng-model="config.iconUrl" ng-disabled="state.saving" class="form-control" name="iconUrl" type="text" />
+            </div>
+        </br-collapsible>
     </form>
 
     <div class="text-center" ng-show="state.view === VIEWS.saved">