diff --git a/ambari-web/app/assets/data/apps/runs.json b/ambari-web/app/assets/data/apps/runs.json
index 6763e2b..e665a4e 100644
--- a/ambari-web/app/assets/data/apps/runs.json
+++ b/ambari-web/app/assets/data/apps/runs.json
@@ -53,7 +53,9 @@
       }
     },
     "workflowId": "hive_7c779523-6bca-416e-89b3-b01b73a60174",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 473423,
+    "outputBytes": 82434
   },
   {
     "elapsedTime": 910360,
@@ -84,7 +86,9 @@
       }
     },
     "workflowId": "pig_5750f4cf-f0d2-4e3d-a7ce-90912b309c12",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 923423,
+    "outputBytes": 32434
   },
   {
     "elapsedTime": 920579,
@@ -115,7 +119,9 @@
       }
     },
     "workflowId": "mr_25547729-88f9-4287-a45a-64901a82f22b",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 623423,
+    "outputBytes": 42434
   },
   {
     "elapsedTime": 687631,
@@ -138,7 +144,9 @@
       }
     },
     "workflowId": "hive_a5b9c06f-96d2-4ea8-80e0-3c063ae831d4",
-    "workflowName": "script2-hadoop.pig"
+    "workflowName": "script2-hadoop.pig",
+    "inputBytes": 483423,
+    "outputBytes": 82434
   },
   {
     "elapsedTime": 905375,
@@ -169,7 +177,9 @@
       }
     },
     "workflowId": "pig_90ac94ff-20c4-4637-8b1c-51379cfe10df",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 428423,
+    "outputBytes": 32434
   },
   {
     "elapsedTime": 683055,
@@ -192,7 +202,9 @@
       }
     },
     "workflowId": "hive_c832f923-9bd4-421f-9a51-8f45991d91de",
-    "workflowName": "script2-hadoop.pig"
+    "workflowName": "script2-hadoop.pig",
+    "inputBytes": 723423,
+    "outputBytes": 62434
   },
   {
     "elapsedTime": 35150977,
@@ -223,7 +235,9 @@
       }
     },
     "workflowId": "mr_a0aade31-47f8-475b-b887-60a79bcea5c4",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 463423,
+    "outputBytes": 57434
   },
   {
     "elapsedTime": 888790,
@@ -254,7 +268,9 @@
       }
     },
     "workflowId": "pig_b4365f79-18da-4db6-bbfd-e8a850d6c6e8",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 723423,
+    "outputBytes": 82434
   },
   {
     "elapsedTime": 902653,
@@ -285,7 +301,9 @@
       }
     },
     "workflowId": "hive_b6bf29a4-324f-4435-8ed3-bee10622ea48",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 923423,
+    "outputBytes": 52434
   },
   {
     "elapsedTime": 884834,
@@ -316,7 +334,9 @@
       }
     },
     "workflowId": "pig_a6a6fb32-b3fd-4427-ab54-449d0895fbb2",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 403423,
+    "outputBytes": 82434
   },
   {
     "elapsedTime": 674392,
@@ -339,7 +359,9 @@
       }
     },
     "workflowId": "pig_f69499b1-a504-433e-8904-0760deb5a183",
-    "workflowName": "script2-hadoop.pig"
+    "workflowName": "script2-hadoop.pig",
+    "inputBytes": 423123,
+    "outputBytes": 52434
   },
   {
     "elapsedTime": 926853,
@@ -370,7 +392,9 @@
       }
     },
     "workflowId": "mr_73e04732-ea7f-43b8-9a2f-0f5a30e665da",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 523423,
+    "outputBytes": 92434
   },
   {
     "elapsedTime": 0,
@@ -401,7 +425,9 @@
       }
     },
     "workflowId": "pig_31b2111b-cc2e-4024-a8db-d181855a463f",
-    "workflowName": "script1-hadoop.pig"
+    "workflowName": "script1-hadoop.pig",
+    "inputBytes": 443423,
+    "outputBytes": 32434
   },
   {
     "elapsedTime": 670929,
@@ -424,6 +450,8 @@
       }
     },
     "workflowId": "hive_097d0698-3620-4232-9c79-4deccbf6c98a",
-    "workflowName": "script2-hadoop.pig"
+    "workflowName": "script2-hadoop.pig",
+    "inputBytes": 428423,
+    "outputBytes": 18434
   }
 ]}
\ No newline at end of file
diff --git a/ambari-web/app/assets/data/wizard/bootstrap/single_host_information.json b/ambari-web/app/assets/data/wizard/bootstrap/single_host_information.json
index eefe832..e3db291 100644
--- a/ambari-web/app/assets/data/wizard/bootstrap/single_host_information.json
+++ b/ambari-web/app/assets/data/wizard/bootstrap/single_host_information.json
@@ -1,12 +1,70 @@
 {
-  "href" : "http://localhost:8080/api/v1/hosts?fields=Hosts/total_mem,Hosts/cpu_count",
-  "items" : [
+  "href": "http://localhost:8080/api/v1/hosts?fields=Hosts/total_mem,Hosts/cpu_count",
+  "items": [
     {
-      "href" : "http://localhost:8080/api/v1/hosts/localhost.localdomain",
-      "Hosts" : {
-        "cpu_count" : 1,
-        "total_mem" : 4057989,
-        "host_name" : "localhost.localdomain"
+      "href": "http://localhost:8080/api/v1/hosts/localhost.localdomain",
+      "Hosts": {
+        "cpu_count": 1,
+        "total_mem": 4057989,
+        "host_name": "localhost.localdomain",
+        "disk_info": [
+          {
+            "available": "47574176",
+            "used": "3507828",
+            "percent": "7%",
+            "size": "51606140",
+            "type": "ext4",
+            "mountpoint": "/"
+          },
+          {
+            "available": "47574176",
+            "used": "3507828",
+            "percent": "7%",
+            "size": "51606140",
+            "type": "ext4",
+            "mountpoint": "/grid/0"
+          },
+          {
+            "available": "1027204",
+            "used": "260",
+            "percent": "1%",
+            "size": "1027464",
+            "type": "tmpfs",
+            "mountpoint": "/dev/shm"
+          },
+          {
+            "available": "432210",
+            "used": "38034",
+            "percent": "9%",
+            "size": "495844",
+            "type": "ext4",
+            "mountpoint": "/boot"
+          },
+          {
+            "available": "44459872",
+            "used": "184220",
+            "percent": "1%",
+            "size": "47033288",
+            "type": "ext4",
+            "mountpoint": "/home"
+          },
+          {
+            "available": "450200708",
+            "used": "281534268",
+            "percent": "39%",
+            "size": "731734976",
+            "type": "vboxsf",
+            "mountpoint": "/media/sf_ambari"
+          },
+          {
+            "available": "450200708",
+            "used": "281534268",
+            "percent": "39%",
+            "size": "731734976",
+            "type": "vboxsf",
+            "mountpoint": "/host"
+          }
+        ]
       }
     }
   ]
diff --git a/ambari-web/app/assets/img/spinner.gif b/ambari-web/app/assets/img/spinner.gif
new file mode 100644
index 0000000..39fcb67
--- /dev/null
+++ b/ambari-web/app/assets/img/spinner.gif
Binary files differ
diff --git a/ambari-web/app/controllers/application.js b/ambari-web/app/controllers/application.js
index 08bde9a..50dc017 100644
--- a/ambari-web/app/controllers/application.js
+++ b/ambari-web/app/controllers/application.js
@@ -23,12 +23,12 @@
 
   name: 'applicationController',
   clusterName: function () {
-    var name = App.db.getClusterName();
+    var name = App.router.get('clusterController.clusterName');
     if (name) {
       return name.capitalize();
     }
-    return '';
-  }.property(),
+    return Em.I18n.t('installer.header');
+  }.property('App.router.clusterController.clusterName'),
   isClusterDataLoaded: function() {
     return App.router.get('clusterController.isLoaded');
   }.property('App.router.clusterController.isLoaded'),
diff --git a/ambari-web/app/controllers/global/background_operations_controller.js b/ambari-web/app/controllers/global/background_operations_controller.js
index 28acac9..374e96d 100644
--- a/ambari-web/app/controllers/global/background_operations_controller.js
+++ b/ambari-web/app/controllers/global/background_operations_controller.js
@@ -28,6 +28,11 @@
 
   allOperations: [],
   allOperationsCount : 0,
+  executeTasks: [],
+
+  getTasksByRole: function (role) {
+    return this.get('allOperations').filterProperty('role', role);
+  },
 
   getOperationsForRequestId: function(requestId){
     return this.get('allOperations').filterProperty('request_id', requestId);
@@ -129,45 +134,69 @@
   }.observes('isWorking'),
 
   /**
-   * Add new operations to <code>this.allOperations</code> variable
+   * Update info about background operations
+   * Put all tasks with command 'EXECUTE' into <code>executeTasks</code>, other tasks with it they are still running put into <code>runningTasks</code>
+   * Put all task that should be shown in popup modal window into <code>this.allOperations</code>
    * @param data json loaded from server
    */
-  updateBackgroundOperations : function(data){
+  updateBackgroundOperations: function (data) {
     var runningTasks = [];
+    var executeTasks = this.get('executeTasks');
     data.items.forEach(function (item) {
       item.tasks.forEach(function (task) {
-        if (task.Tasks.status == 'QUEUED' || task.Tasks.status == 'PENDING') {
-          runningTasks.push(task.Tasks);
+        if (task.Tasks.command == 'EXECUTE') {
+          if (!executeTasks.someProperty('id', task.Tasks.id)) {
+            executeTasks.push(task.Tasks);
+          }
+        } else {
+          if (task.Tasks.status == 'QUEUED' || task.Tasks.status == 'PENDING' || task.Tasks.status == 'IN_PROGRESS') {
+            runningTasks.push(task.Tasks);
+          }
         }
       });
     });
 
-    runningTasks = runningTasks.sort(function(a,b){
+    for (var i = 0; i < executeTasks.length; i++) {
+      if (executeTasks[i].status == 'QUEUED' || executeTasks[i].status == 'PENDING' || executeTasks[i].status == 'IN_PROGRESS') {
+        var url = App.testMode ? '/data/background_operations/list_on_start.json' :
+            App.apiPrefix + '/clusters/' + App.router.getClusterName() + '/requests/' + executeTasks[i].request_id + '/tasks/' + executeTasks[i].id;
+        var j = i;
+        $.ajax({
+          type: "GET",
+          url: url,
+          dataType: 'json',
+          timeout: App.timeout,
+          success: function (data) {
+            if (data) {
+              executeTasks[j] = data.Tasks;
+            }
+          },
+          error: function () {
+            console.log('ERROR: error during executeTask update');
+          },
+
+          statusCode: require('data/statusCodes')
+        });
+      }
+    }
+    ;
+    var currentTasks;
+    currentTasks = runningTasks.concat(executeTasks);
+    currentTasks = currentTasks.sort(function (a, b) {
       return a.id - b.id;
     });
 
-    var currentTasks = this.get('allOperations');
-
-    runningTasks.forEach(function(item){
-      var task = currentTasks.findProperty('id', item.id);
-      if(task){
-        currentTasks[currentTasks.indexOf(task)] = item;
-      } else {
-        currentTasks.pushObject(item);
+    this.get('allOperations').filterProperty('isOpen').mapProperty('id').forEach(function(id){
+      if (currentTasks.someProperty('id', id)) {
+        currentTasks.findProperty('id', id).isOpen = true;
       }
     });
 
-    for(var i = currentTasks.length-1; i>=0; i--){
-      var isTaskFinished = !runningTasks.someProperty('id', currentTasks[i].id);
-      if(isTaskFinished){
-        currentTasks.removeAt(i);
-      }
-    }
-
-    this.set('allOperationsCount', currentTasks.length);
+    this.set('allOperations', currentTasks);
+    this.set('allOperationsCount', runningTasks.length + executeTasks.filterProperty('status', 'PENDING').length + executeTasks.filterProperty('status', 'QUEUED').length + executeTasks.filterProperty('status', 'IN_PROGRESS').length);
 
     var eventsArray = this.get('eventsArray');
-    if(eventsArray.length){
+    if (eventsArray.length) {
 
       var itemsToRemove = [];
       eventsArray.forEach(function(item){
@@ -190,6 +219,7 @@
    * Onclick handler for background operations number located right to logo
    */
   showPopup: function(){
+    this.set('executeTasks', []);
     this.loadOperations();
     App.ModalPopup.show({
       headerClass: Ember.View.extend({
diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js
index f1e627a..9498b50 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -38,38 +38,8 @@
     controllerName: 'installerController'
   }),
 
-  /**
-   * Load clusterInfo(step1) to model
-   */
-  loadClusterInfo: function () {
-    var cStatus = App.db.getClusterStatus() || {status: "", isCompleted: false};
-    var cluster = {
-      name: App.db.getClusterName() || "",
-      status: cStatus.status,
-      isCompleted: cStatus.isCompleted,
-      requestId: cStatus.requestId,
-      installStartTime: cStatus.installStartTime,
-      installTime: cStatus.installTime
-    };
-    this.set('content.cluster', cluster);
-
-    console.log("InstallerController:loadClusterInfo: loaded data ", cluster);
-  },
-
-  /**
-   * Save all info about cluster to model
-   * @param stepController Step1WizardController
-   */
-  saveClusterInfo: function (stepController) {
-    var cluster = stepController.get('content.cluster');
-    var clusterStatus = {
-      status: cluster.status,
-      isCompleted: cluster.isCompleted
-    };
-    App.db.setClusterName(cluster.name);
-    App.db.setClusterStatus(clusterStatus);
-
-    console.log("InstallerController:saveClusterInfo: saved data ", cluster);
+  getCluster: function(){
+    return jQuery.extend(this.get('clusterStatusTemplate'), {});
   },
 
   /**
@@ -95,7 +65,7 @@
     //TODO : rewire it as model. or not :)
     var hostsInfo = Em.Object.create();
 
-    hostsInfo.hostNames = App.db.getAllHostNames() || ''; //empty string if undefined
+    hostsInfo.hostNames = App.db.getAllHostNamesPattern() || ''; //empty string if undefined
 
     //TODO : should we check installType for add host wizard????
     var installType = App.db.getInstallType();
@@ -128,7 +98,8 @@
     //TODO: put data to content.hosts and only then save it)
 
     //App.db.setBootStatus(false);
-    App.db.setAllHostNames(stepController.get('hostNames'));
+    App.db.setAllHostNames(stepController.get('hostNameArr').join("\n"));
+    App.db.setAllHostNamesPattern(stepController.get('hostNames'));
     App.db.setBootRequestId(stepController.get('bootRequestId'));
     App.db.setHosts(stepController.getHostInfo());
     if (stepController.get('manualInstall') === false) {
@@ -164,6 +135,7 @@
         name: _host.name,
         cpu: _host.cpu,
         memory: _host.memory,
+        disk_info: _host.disk_info,
         bootStatus: _host.bootStatus,
         isInstalled: false
       };
@@ -361,7 +333,7 @@
       _content.get('configs').forEach(function (_configProperties) {
         var displayType = _configProperties.get('displayType');
         if (displayType === 'directories' || displayType === 'directory') {
-          var value = _configProperties.get('value').split(/\s+/g).join(',');
+          var value = _configProperties.get('value').trim().split(/\s+/g).join(',');
           _configProperties.set('value', value);
         }
         var configProperty = {
@@ -370,6 +342,7 @@
           value: _configProperties.get('value'),
           defaultValue: _configProperties.get('defaultValue'),
           service: _configProperties.get('serviceName'),
+          domain:  _configProperties.get('domain'),
           filename: _configProperties.get('filename')
         };
         serviceConfigProperties.push(configProperty);
@@ -386,12 +359,17 @@
         var slaveCategory = _content.get('configCategories').findProperty('isForSlaveComponent', true);
         slaveCategory.get('slaveConfigs.groups').forEach(function (_group) {
           _group.get('properties').forEach(function (_property) {
+            var displayType = _property.get('displayType');
+            if (displayType === 'directories' || displayType === 'directory') {
+              var value = _property.get('value').trim().split(/\s+/g).join(',');
+              _property.set('value', value);
+            }
             _property.set('storeValue', _property.get('value'));
           }, this);
         }, this);
         slaveConfigProperties.pushObject(slaveCategory.get('slaveConfigs'));
       }
-    }, this)
+    }, this);
     App.db.setSlaveProperties(slaveConfigProperties);
     this.set('content.slaveGroupProperties', slaveConfigProperties);
   },
@@ -492,7 +470,7 @@
       case '2':
         this.loadInstallOptions();
       case '1':
-        this.loadClusterInfo();
+        this.load('cluster');
     }
   },
 
@@ -609,49 +587,20 @@
     return serviceComponents;
   },
 
-
-  /*
-   Bootstrap selected hosts.
-   */
-  launchBootstrap: function (bootStrapData) {
-    var self = this;
-    var requestId = null;
-    var method = App.testMode ? 'GET' : 'POST';
-    var url = App.testMode ? '/data/wizard/bootstrap/bootstrap.json' : App.apiPrefix + '/bootstrap';
-    $.ajax({
-      type: method,
-      url: url,
-      async: false,
-      data: bootStrapData,
-      timeout: App.timeout,
-      contentType: 'application/json',
-      success: function (data) {
-        console.log("TRACE: POST bootstrap succeeded");
-        requestId = data.requestId;
-      },
-      error: function () {
-        console.log("ERROR: POST bootstrap failed");
-        alert('Bootstrap call failed.  Please try again.');
-      },
-      statusCode: require('data/statusCodes')
-    });
-    return requestId;
-  },
-
-
   /**
    * Clear all temporary data
    */
   finish: function () {
-    this.setCurrentStep('1', false);
+    this.setCurrentStep('1');
     App.db.setService(undefined); //not to use this data at AddService page
     App.db.setHosts(undefined);
     App.db.setMasterComponentHosts(undefined);
     App.db.setSlaveComponentHosts(undefined);
-    App.db.setClusterStatus(undefined);
+    App.db.setCluster(undefined);
     App.db.setAllHostNames(undefined);
+    App.db.setSlaveProperties(undefined);
+    App.db.setSshKey(undefined);
   }
 
-})
-;
+});
 
diff --git a/ambari-web/app/controllers/main.js b/ambari-web/app/controllers/main.js
index 5891d3b..2f407b7 100644
--- a/ambari-web/app/controllers/main.js
+++ b/ambari-web/app/controllers/main.js
@@ -22,13 +22,25 @@
 App.MainController = Em.Controller.extend({
   name: 'mainController',
   clusterName: function () {
-    var name = App.db.getClusterName();
+    var name = App.router.get('clusterController.clusterName');
     if (name) {
       var displayName = name.length > 13 ? name.substr(0, 10) + "..." : name;
       return displayName.capitalize();
     }
-    return '';
-  }.property(),
+    return 'My Cluster';
+  }.property('App.router.clusterController.clusterName'),
+
+  updateTitle: function(){
+    var name = App.router.get('clusterController.clusterName');
+    if (name) {
+      name = name.length > 13 ? name.substr(0, 10) + "..." : name;
+      name = name.capitalize();
+    } else{
+      name = 'Loading';
+    }
+    $('title').text('Ambari - ' + name);
+  }.observes('App.router.clusterController.clusterName'),
+
   isClusterDataLoaded: function(){
       return App.router.get('clusterController.isLoaded');
   }.property('App.router.clusterController.isLoaded'),
@@ -40,7 +52,6 @@
     App.router.get('clusterController').loadClusterData();
     App.router.get('updateController').updateServiceMetric();
     setInterval( this.updateAll , App.contentUpdateInterval);
-    $('title').text('Ambari - ' + this.get('clusterName'));
   },
   updateAll: function(){
     App.router.get('updateController').updateAll();
diff --git a/ambari-web/app/controllers/main/host/add_controller.js b/ambari-web/app/controllers/main/host/add_controller.js
index 23a8ad9..1981368 100644
--- a/ambari-web/app/controllers/main/host/add_controller.js
+++ b/ambari-web/app/controllers/main/host/add_controller.js
@@ -54,24 +54,10 @@
     isWizard: true
   }),
 
-  /**
-   * Load clusterInfo(step1) to model
-   */
-  loadClusterInfo: function () {
-    var cluster = App.db.getClusterStatus();
-    if (!cluster) {
-      cluster = {
-        name: App.router.getClusterName(),
-        status: undefined,
-        isCompleted: false,
-        requestId: undefined,
-        installStartTime: undefined,
-        installTime: undefined
-      };
-      App.db.setClusterStatus(cluster);
-    }
-    this.set('content.cluster', cluster);
-    console.log("AddHostController:loadClusterInfo: loaded data ", cluster);
+  getCluster: function(){
+    return jQuery.extend(this.get('clusterStatusTemplate'), {
+      name: App.router.getClusterName()
+    });
   },
 
   showMoreHosts: function () {
@@ -149,7 +135,7 @@
       hostsInfo.showMoreHostsText = "...and %@ more".fmt(moreHostNames.length);
     }
 
-    hostsInfo.hostNames = App.db.getAllHostNames() || ''; //empty string if undefined
+    hostsInfo.hostNames = App.db.getAllHostNamesPattern() || ''; //empty string if undefined
 
     var installType = App.db.getInstallType();
     //false if installType not equals 'manual'
@@ -164,6 +150,7 @@
       hostsInfo.localRepoPath = '';
     }
 
+    hostsInfo.bootRequestId = App.db.getBootRequestId() || null;
     hostsInfo.sshKey = '';
     hostsInfo.passphrase = '';
     hostsInfo.confirmPassphrase = '';
@@ -180,7 +167,9 @@
     //TODO: put data to content.hosts and only then save it)
 
     //App.db.setBootStatus(false);
-    App.db.setAllHostNames(stepController.get('hostNames'));
+    App.db.setAllHostNames(stepController.get('hostNameArr').join("\n"));
+    App.db.setAllHostNamesPattern(stepController.get('hostNames'));
+    App.db.setBootRequestId(stepController.get('bootRequestId'));
     App.db.setHosts(stepController.getHostInfo());
     if (stepController.get('manualInstall') === false) {
       App.db.setInstallType({installType: 'ambari' });
@@ -559,7 +548,7 @@
       case '1':
         this.loadInstallOptions();
       case '0':
-        this.loadClusterInfo();
+        this.load('cluster');
     }
   },
 
@@ -625,12 +614,12 @@
    * Clear all temporary data
    */
   finish: function () {
-    this.setCurrentStep('1', false);
+    this.setCurrentStep('1');
     App.db.setService(undefined); //not to use this data at AddService page
     App.db.setHosts(undefined);
     App.db.setMasterComponentHosts(undefined);
     App.db.setSlaveComponentHosts(undefined);
-    App.db.setClusterStatus(undefined);
+    App.db.setCluster(undefined);
     App.router.get('updateController').updateAll();
   }
 
diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js
index 56c18e0..cab9711 100644
--- a/ambari-web/app/controllers/main/service/add_controller.js
+++ b/ambari-web/app/controllers/main/service/add_controller.js
@@ -54,21 +54,10 @@
     isWizard: true
   }),
 
-  /**
-   * Load clusterInfo(step1) to model
-   */
-  loadClusterInfo: function(){
-    var cluster = App.db.getClusterStatus();
-    if(!cluster){
-      cluster = {
-        name: App.router.getClusterName(),
-        status: "",
-        isCompleted: false
-      };
-      App.db.setClusterStatus(cluster);
-    }
-    this.set('content.cluster', cluster);
-    console.log("AddServiceController:loadClusterInfo: loaded data ", cluster);
+  getCluster: function(){
+    return jQuery.extend(this.get('clusterStatusTemplate'), {
+      name: App.router.getClusterName()
+    });
   },
 
   /**
@@ -462,7 +451,7 @@
       case '7':
       case '6':
       case '5':
-        this.loadClusterInfo();
+        this.load('cluster');
       case '4':
         this.loadServiceConfigProperties();
       case '3':
@@ -539,12 +528,12 @@
    * Clear all temporary data
    */
   finish: function(){
-    this.setCurrentStep('1', false);
+    this.setCurrentStep('1');
     App.db.setService(undefined); //not to use this data at AddService page
     App.db.setHosts(undefined);
     App.db.setMasterComponentHosts(undefined);
     App.db.setSlaveComponentHosts(undefined);
-    App.db.setClusterStatus(undefined);
+    App.db.setCluster(undefined);
     App.db.setAllHostNames(undefined);
   }
 
diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js
index 0221e9a..8a8923f 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -220,15 +220,29 @@
     App.db.setAllHostNames(null);
   },
 
+  toObject: function(object){
+    var result = {};
+    for(var i in object){
+      if(object.hasOwnProperty(i)){
+        result[i] = object[i];
+      }
+    }
+    return result;
+  },
+
   /**
    * save status of the cluster. This is called from step8 and step9 to persist install and start requestId
    * @param clusterStatus object with status, isCompleted, requestId, isInstallError and isStartError field.
    */
   saveClusterStatus: function (clusterStatus) {
-    clusterStatus.name = this.get('content.cluster.name');
+    var oldStatus = this.toObject(this.get('content.cluster'));
+    clusterStatus = jQuery.extend(oldStatus, clusterStatus);
+    if(clusterStatus.requestId &&
+      clusterStatus.oldRequestsId.indexOf(clusterStatus.requestId) === -1){
+      clusterStatus.oldRequestsId.push(clusterStatus.requestId);
+    }
     this.set('content.cluster', clusterStatus);
-    console.log(this.get('name') + '.saveClusterStatus: ' + JSON.stringify(clusterStatus));
-    App.db.setClusterStatus(clusterStatus);
+    this.save('cluster');
   },
 
   /**
@@ -242,7 +256,7 @@
 
     var self = this;
     var clusterName = this.get('content.cluster.name');
-    var url = (App.testMode) ? '/data/wizard/deploy/poll_1.json' : App.apiPrefix + '/clusters/' + clusterName + '/services?ServiceInfo/state=INIT';
+    var url = (App.testMode) ? '/data/wizard/deploy/2_hosts/poll_1.json' : App.apiPrefix + '/clusters/' + clusterName + '/services?ServiceInfo/state=INIT';
     var method = (App.testMode) ? 'GET' : 'PUT';
     var data = '{"ServiceInfo": {"state": "INSTALLED"}}';
     $.ajax({
@@ -258,7 +272,7 @@
         console.log("TRACE: In success function for the installService call");
         console.log("TRACE: value of the url is: " + url);
         if (jsonData) {
-          var requestId = jsonData.href.match(/.*\/(.*)$/)[1];
+          var requestId = jsonData.Requests.id;
           console.log('requestId is: ' + requestId);
           var clusterStatus = {
             status: 'PENDING',
@@ -292,13 +306,70 @@
 
   },
 
+  /*
+   Bootstrap selected hosts.
+   */
+  launchBootstrap: function (bootStrapData) {
+    var self = this;
+    var requestId = null;
+    var method = App.testMode ? 'GET' : 'POST';
+    var url = App.testMode ? '/data/wizard/bootstrap/bootstrap.json' : App.apiPrefix + '/bootstrap';
+    $.ajax({
+      type: method,
+      url: url,
+      async: false,
+      data: bootStrapData,
+      timeout: App.timeout,
+      contentType: 'application/json',
+      success: function (data) {
+        console.log("TRACE: POST bootstrap succeeded");
+        requestId = data.requestId;
+      },
+      error: function () {
+        console.log("ERROR: POST bootstrap failed");
+        alert('Bootstrap call failed.  Please try again.');
+      },
+      statusCode: require('data/statusCodes')
+    });
+    return requestId;
+  },
+
+  /**
+   * Load <code>content.<name></code> variable from localStorage, if wasn't loaded before.
+   * If you specify <code>reload</code> to true - it will reload it.
+   * @param name
+   * @param reload
+   * @return {Boolean}
+   */
   load: function (name, reload) {
     if (this.get('content.' + name) && !reload) {
       return false;
     }
-    var result = App.db['get' + name.capitalize()];
-    if (!result) result = this['get' + name.capitalize()];
+    var result = App.db['get' + name.capitalize()]();
+    if (!result){
+      result = this['get' + name.capitalize()]();
+      App.db['set' + name.capitalize()](result);
+      console.log(this.get('name') + ": created " + name, result);
+    }
     this.set('content.' + name, result);
-    console.log("Installer controller: loaded" + name, result);
+    console.log(this.get('name') + ": loaded " + name, result);
+  },
+
+  save: function(name){
+    var value = this.toObject(this.get('content.' + name));
+    App.db['set' + name.capitalize()](value);
+    console.log(this.get('name') + ": saved " + name, value);
+  },
+
+  clusterStatusTemplate : {
+    name: "",
+    status: "PENDING",
+    isCompleted: false,
+    requestId: null,
+    installStartTime: null,
+    installTime: null,
+    isInstallError: false,
+    isStartError: false,
+    oldRequestsId: []
   }
 })
diff --git a/ambari-web/app/controllers/wizard/slave_component_groups_controller.js b/ambari-web/app/controllers/wizard/slave_component_groups_controller.js
index 4d1fbca..7668d80 100644
--- a/ambari-web/app/controllers/wizard/slave_component_groups_controller.js
+++ b/ambari-web/app/controllers/wizard/slave_component_groups_controller.js
@@ -47,10 +47,14 @@
       var categoryConfig = _serviceConfig.get('configCategories');
       if (categoryConfig.someProperty('isForSlaveComponent', true)) {
         var slaveCategory = categoryConfig.findProperty('isForSlaveComponent', true);
+        // this.get('content') -> Output of Step 6: Mapping of each slave component and set of hosts it runs on
         if (this.get('content')) {
           if (this.get('content').someProperty('componentName', slaveCategory.get('primaryName'))) {
+            // component --> each column in Step 6 is a component ( slave component )
             var component = this.get('content').findProperty('componentName', slaveCategory.get('primaryName'));
+            // slaveConfigs --> originally set as null in the class App.SlaveCategory in model/service_config.js
             var slaveConfigs = slaveCategory.get('slaveConfigs');
+            
             slaveCategory.set('slaveConfigs', App.SlaveConfigs.create(component));
             var slaveGroups = [];
             if (component.groups) {
@@ -77,6 +81,7 @@
     }, this);
   },
 
+  // returns key-value pairs i.e. all fields for slave component for this specific service.
   componentProperties: function (serviceName) {
 
     var serviceConfigs = require('data/service_configs').findProperty('serviceName', serviceName);
@@ -96,6 +101,15 @@
     var slaveConfigs = serviceConfigs.configs.filterProperty('category', componentName);
     slaveConfigs.forEach(function (_serviceConfigProperty) {
       var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty);
+
+      switch(serviceConfigProperty.name){
+        case 'dfs_data_dir' :
+          serviceConfigProperty.initialValue();
+          break;
+        case 'mapred_local_dir' :
+          serviceConfigProperty.initialValue();
+          break;
+      }
       configs.pushObject(serviceConfigProperty);
       serviceConfigProperty.validate();
     }, this);
diff --git a/ambari-web/app/controllers/wizard/step10_controller.js b/ambari-web/app/controllers/wizard/step10_controller.js
index a1c0997..f05a5e0 100644
--- a/ambari-web/app/controllers/wizard/step10_controller.js
+++ b/ambari-web/app/controllers/wizard/step10_controller.js
@@ -115,11 +115,11 @@
 
         var timedOutTasks = _host.tasks.filterProperty('Tasks.status', 'TIMEDOUT');
         timedOutTasks.forEach(function (_task) {
-          var abortStatement = clusterState + App.format.role(_task.Tasks.role) + ' timed out on ' + _host.name;
+          var timedOutStatement = clusterState + App.format.role(_task.Tasks.role) + ' timed out on ' + _host.name;
           this.get('clusterInfo').findProperty('id', 1).get('status').findProperty('id', 2).get('statements').pushObject(Ember.Object.create({
             status: 'timedout',
             color: 'text-info',
-            displayStatement: timedOutTasks
+            displayStatement: timedOutStatement
           }));
         }, this);
       }, this);
diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js
index 6cfac60..bfb3209 100644
--- a/ambari-web/app/controllers/wizard/step1_controller.js
+++ b/ambari-web/app/controllers/wizard/step1_controller.js
@@ -21,31 +21,15 @@
 App.WizardStep1Controller = Em.Controller.extend({
   name: 'wizardStep1Controller',
 
-  clusterName: function(){
-    return this.get('content.cluster.name');
-  }.property('content.cluster.name'),
-
-
   hasSubmitted : false,
 
-  clearStep: function() {
-     this.set('content.cluster.name','');
-  },
-
   loadStep: function () {
-    var clusterName;
     this.set('hasSubmitted',false);
-    console.log('The value of the cluster name is: ' + App.db.getClusterName());
-    if (App.db.getClusterName() !== undefined) {
-      this.set('clusterName', App.db.getClusterName());
-    } else {
-      this.set('clusterNameError','');
-      this.set('invalidClusterName',true);
-    }
   },
 
   invalidClusterName : function(){
     if(!this.get('hasSubmitted')){
+      this.set('clusterNameError', '');
       return false;
     }
 
@@ -76,8 +60,8 @@
   submit: function () {
     this.set('hasSubmitted', true);
     if (!this.get('invalidClusterName')) {
-      this.set('content.cluster',{name: this.get('clusterName'), status: 'PENDING', isCompleted: false});
-     // App.router.get('installerController').saveClusterStatus({status: 'PENDING', isCompleted: false});
+      this.set('content.cluster.status', 'PENDING');
+      this.set('content.cluster.isCompleted', false);
       App.router.send('next');
     }
   }
diff --git a/ambari-web/app/controllers/wizard/step2_controller.js b/ambari-web/app/controllers/wizard/step2_controller.js
index 5dca855..8533717 100644
--- a/ambari-web/app/controllers/wizard/step2_controller.js
+++ b/ambari-web/app/controllers/wizard/step2_controller.js
@@ -21,32 +21,33 @@
 App.WizardStep2Controller = Em.Controller.extend({
   name: 'wizardStep2Controller',
   hostNameArr: [],
+  isPattern: false,
   bootRequestId:  null,
   hasSubmitted: false,
 
   hostNames: function () {
-    return this.get('content.hostNames');
-  }.property('content.hostNames'),
+    return this.get('content.hosts.hostNames');
+  }.property('content.hosts.hostNames'),
 
   manualInstall: function () {
-    return this.get('content.manualInstall');
-  }.property('content.manualInstall'),
+    return this.get('content.hosts.manualInstall');
+  }.property('content.hosts.manualInstall'),
 
   localRepo: function () {
-    return this.get('content.localRepo');
-  }.property('content.localRepo'),
+    return this.get('content.hosts.localRepo');
+  }.property('content.hosts.localRepo'),
 
   sshKey: function () {
-    return this.get('content.sshKey');
-  }.property('content.sshKey'),
+    return this.get('content.hosts.sshKey');
+  }.property('content.hosts.sshKey'),
 
   passphrase: function () {
-    return this.get('content.passphrase');
-  }.property('content.passphrase'),
+    return this.get('content.hosts.passphrase');
+  }.property('content.hosts.passphrase'),
 
   confirmPassphrase: function () {
-    return this.get('content.confirmPassphrase');
-  }.property('content.confirmPassphrase'),
+    return this.get('content.hosts.confirmPassphrase');
+  }.property('content.hosts.confirmPassphrase'),
 
   installType: function () {
     if (this.get('manualInstall') === true) {
@@ -98,7 +99,7 @@
       hostInfo[hostNameArr[i]] = {
         name: hostNameArr[i],
         installType: this.get('installType'),
-        bootStatus: 'pending'
+        bootStatus: 'PENDING'
       };
     }
 
@@ -117,6 +118,45 @@
       return false;
     }
 
+    if(this.isPattern)
+    {
+      this.hostNamePatternPopup(this.hostNameArr);
+      return false;
+    }
+
+    this.proceedNext();
+
+  },
+
+  patternExpression: function(){
+    var self = this;
+    var hostNames = [];
+    $.each(this.hostNameArr, function(e,a){
+      var start, end, extra = "";
+      if(/\[\d*\-\d*\]/.test(a)){
+        start=a.match(/\[\d*/);
+        end=a.match(/\-\d*/);
+        start=start[0].substr(1);
+        end=end[0].substr(1);
+
+        if(parseInt(start) <= parseInt(end) && parseInt(start) >= 0){
+          self.isPattern = true;
+          if(start[0] == "0" && start.length > 1)
+          {
+            extra = start[0];
+          }
+          for (var i = parseInt(start); i < parseInt(end) + 1; i++) {
+            hostNames.push(a.replace(/\[\d*\-\d*\]/, extra+i ))
+          }
+        }
+      }else{
+        hostNames.push(a);
+      }
+    });
+    this.hostNameArr =  hostNames;
+  },
+
+  proceedNext: function(){
     if (this.get('manualInstall') === true) {
       this.manualInstallPopup();
       return false;
@@ -129,13 +169,28 @@
       return true;
     }
 
-    var requestId = App.get('router.installerController').launchBootstrap(bootStrapData);
+    var requestId = App.router.get(this.get('content.controllerName')).launchBootstrap(bootStrapData);
     if(requestId) {
-    this.set('bootRequestId',requestId);
-    App.router.send('next');
+      this.set('bootRequestId',requestId);
+      App.router.send('next');
     }
   },
 
+  hostNamePatternPopup: function (hostNames) {
+    var self = this;
+    App.ModalPopup.show({
+      header: Em.I18n.t('installer.step2.hostName.pattern.header'),
+      onPrimary: function () {
+        self.proceedNext();
+        this.hide();
+      },
+      bodyClass: Ember.View.extend({
+        template: Ember.Handlebars.compile(['{{#each host in view.hostNames}}<p>{{host}}</p>{{/each}}'].join('\n')),
+        hostNames: hostNames
+      })
+    });
+  },
+
   manualInstallPopup: function (event) {
     App.ModalPopup.show({
       header: Em.I18n.t('installer.step2.manualInstall.popup.header'),
diff --git a/ambari-web/app/controllers/wizard/step3_controller.js b/ambari-web/app/controllers/wizard/step3_controller.js
index fe1d6da..da8fcbf 100644
--- a/ambari-web/app/controllers/wizard/step3_controller.js
+++ b/ambari-web/app/controllers/wizard/step3_controller.js
@@ -23,10 +23,47 @@
   hosts: [],
   content: [],
   bootHosts: [],
-  maxRegistrationAttempts: 20,
-  registrationAttempts: null,
+  registrationStartedAt: null,
+  registrationTimeoutSecs: 120,
   isSubmitDisabled: true,
-  categories: ['All Hosts', 'Success', 'Installing', 'Registering', 'Failed'],
+  hostStatusString: Em.I18n.t('installer.step3.hosts.summary'),
+  hostStatusSummary: function () {
+    var self = this;
+    return this.get('hostStatusString').fmt(self.getCategory('value', 'Installing').get('hostsCount'),
+      self.getCategory('value', 'Registering').get('hostsCount'),
+      self.getCategory('value', 'Success').get('hostsCount'),
+      self.getCategory('value', 'Failed').get('hostsCount'));
+
+  }.property('categories.@each.hostsCount'),
+  categoryObject: Em.Object.extend({
+    hostsCount: function () {
+      var category = this;
+      var hosts = this.get('controller.hosts').filterProperty('bootStatus', category.get('hostsBootStatus'));
+      return hosts.get('length');
+    }.property('controller.hosts.@each.bootStatus'), // 'hosts.@each.bootStatus'
+    label: function () {
+      return "%@ (%@)".fmt(this.get('value'), this.get('hostsCount'));
+    }.property('value', 'hostsCount')
+  }),
+  getCategory: function(field, value){
+    return this.get('categories').find(function(item){
+      return item.get(field) == value;
+    });
+  },
+  categories: function () {
+    var self = this;
+    self.categoryObject.reopen({
+      controller: self
+    });
+
+    return [
+      self.categoryObject.create({value: 'All Hosts', hostsCount: function () { return this.get('controller.hosts.length'); }.property('controller.hosts.length') }),
+      self.categoryObject.create({value: 'Success', hostsBootStatus: 'REGISTERED' }),
+      self.categoryObject.create({value: 'Installing', hostsBootStatus: 'RUNNING'}),
+      self.categoryObject.create({value: 'Registering', hostsBootStatus: 'REGISTERING'}),
+      self.categoryObject.create({value: 'Failed', hostsBootStatus: 'FAILED' })
+    ]
+  }.property(),
   category: 'All Hosts',
   allChecked: false,
 
@@ -41,7 +78,7 @@
 
   isRetryDisabled: function () {
     return !(this.get('bootHosts').someProperty('bootStatus', 'FAILED') && !this.get('isSubmitDisabled'));
-  }.property('bootHosts.@each.bootStatus','isSubmitDisabled'),
+  }.property('bootHosts.@each.bootStatus', 'isSubmitDisabled'),
 
   mockData: require('data/mock/step3_hosts'),
   mockRetryData: require('data/mock/step3_pollData'),
@@ -54,13 +91,15 @@
       }
     } else {
       this.set('bootHosts', this.get('hosts'));
-      if (App.testMode && App.skipBootstrap) {
+      if (App.testMode) {
         this.get('bootHosts').setEach('bootStatus', 'REGISTERED');
         this.get('bootHosts').setEach('cpu', '2');
         this.get('bootHosts').setEach('memory', '2000000');
         this.getHostInfo();
       } else {
-        this.isHostsRegistered();
+        this.set('registrationStartedAt', null);
+        this.get('bootHosts').setEach('bootStatus', 'DONE');
+        this.startRegistration();
       }
     }
   },
@@ -69,17 +108,18 @@
     this.hosts.clear();
     this.bootHosts.clear();
     this.set('isSubmitDisabled', true);
-    this.set('registrationAttempts', 1);
   },
 
   loadStep: function () {
     console.log("TRACE: Loading step3: Confirm Hosts");
-    if (!this.get('hosts').length) {
-      this.clearStep();
-      var hosts = this.loadHosts();
-      // hosts.setEach('bootStatus', 'RUNNING');
-      this.renderHosts(hosts);
-    } else {
+    this.set('registrationStartedAt', null);
+
+    this.clearStep();
+    var hosts = this.loadHosts();
+    // hosts.setEach('bootStatus', 'RUNNING');
+    this.renderHosts(hosts);
+
+    if(this.get('hosts').length) {
       this.set('isSubmitDisabled', false);
     }
   },
@@ -119,7 +159,10 @@
   parseHostInfo: function (hostsStatusFromServer) {
     hostsStatusFromServer.forEach(function (_hostStatus) {
       var host = this.get('bootHosts').findProperty('name', _hostStatus.hostName);
-      if (host !== null && host !== undefined) { // check if hostname extracted from REST API data matches any hostname in content
+      // check if hostname extracted from REST API data matches any hostname in content
+      // also, make sure that bootStatus modified by isHostsRegistered call does not get overwritten
+      // since these calls are being made in parallel
+      if (host && !['REGISTERED', 'REGISTERING'].contains(host.get('bootStatus'))) {
         host.set('bootStatus', _hostStatus.status);
         host.set('bootLog', _hostStatus.log);
       }
@@ -130,16 +173,9 @@
 
   /* Returns the current set of visible hosts on view (All, Succeeded, Failed) */
   visibleHosts: function () {
-    if (this.get('category') === 'Success') {
-      return (this.hosts.filterProperty('bootStatus', 'REGISTERED'));
-    } else if (this.get('category') === 'Installing') {
-      return (this.hosts.filterProperty('bootStatus', 'RUNNING'));
-    } else if (this.get('category') === 'Registering') {
-      return (this.hosts.filter(function(host) {
-        return host.bootStatus == 'DONE' || host.bootStatus == 'REGISTERING';
-      }));
-    } else if (this.get('category') === 'Failed') {
-      return (this.hosts.filterProperty('bootStatus', 'FAILED'));
+    var self = this;
+    if (this.get('category.hostsBootStatus')) {
+      return this.hosts.filterProperty('bootStatus', self.get('category.hostsBootStatus'));
     } else { // if (this.get('category') === 'All Hosts')
       return this.hosts;
     }
@@ -185,13 +221,15 @@
   retryHosts: function (hosts) {
     var bootStrapData = JSON.stringify({'verbose': true, 'sshKey': this.get('content.hosts.sshKey'), hosts: hosts.mapProperty('name')});
     this.numPolls = 0;
-    this.set('registrationAttempts', null);
     if (this.get('content.hosts.manualInstall') !== true) {
       var requestId = App.router.get('installerController').launchBootstrap(bootStrapData);
       this.set('content.hosts.bootRequestId', requestId);
+      this.set('registrationStartedAt', null);
       this.doBootstrap();
     } else {
-      this.isHostsRegistered();
+      this.set('registrationStartedAt', null);
+      this.get('bootHosts').setEach('bootStatus', 'DONE');
+      this.startRegistration();
     }
   },
 
@@ -211,7 +249,9 @@
   startBootstrap: function () {
     //this.set('isSubmitDisabled', true);    //TODO: uncomment after actual hookup
     this.numPolls = 0;
+    this.set('registrationStartedAt', null);
     this.set('bootHosts', this.get('hosts'));
+    this.get('bootHosts').setEach('bootStatus', 'PENDING');
     this.doBootstrap();
   },
 
@@ -225,26 +265,28 @@
       timeout: App.timeout,
       success: function (data) {
         if (data.hostsStatus !== null) {
-          // in case of bootstrapping just one host, the server returns an object rather than an array...
+          // in case of bootstrapping just one host, the server returns an object rather than an array, so
+          // force into an array
           if (!(data.hostsStatus instanceof Array)) {
             data.hostsStatus = [ data.hostsStatus ];
           }
           console.log("TRACE: In success function for the GET bootstrap call");
-          var result = self.parseHostInfo(data.hostsStatus);
-          if (result) {
+          var keepPolling = self.parseHostInfo(data.hostsStatus);
+          if (data.hostsStatus.someProperty('status', 'DONE') || data.hostsStatus.someProperty('status', 'FAILED')) {
+            // kicking off registration polls after at least one host has succeeded
+            self.startRegistration();
+          }
+          if (keepPolling) {
             window.setTimeout(function () {
               self.doBootstrap()
             }, 3000);
             return;
           }
         }
-        console.log('Bootstrap failed');
-        self.stopBootstrap();
       },
 
       error: function () {
         console.log('Bootstrap failed');
-        self.stopBootstrap();
       },
 
       statusCode: require('data/statusCodes')
@@ -252,72 +294,93 @@
 
   },
 
-  stopBootstrap: function () {
-    //TODO: uncomment following line after the hook up with the API call
-    console.log('stopBootstrap() called');
-    // this.set('isSubmitDisabled',false);
-    Ember.run.later(this, function () {
-      this.startRegistration();
-    }, 1000);
-  },
+  /*
+   stopBootstrap: function () {
+   console.log('stopBootstrap() called');
+   Ember.run.later(this, function () {
+   this.startRegistration();
+   }, 1000);
+   },
+   */
 
   startRegistration: function () {
-    this.isHostsRegistered();
+    if (this.get('registrationStartedAt') == null) {
+      this.set('registrationStartedAt', new Date().getTime());
+      console.log('registration started at ' + this.get('registrationStartedAt'));
+      this.isHostsRegistered();
+    }
   },
 
   isHostsRegistered: function () {
     var self = this;
     var hosts = this.get('bootHosts');
     var url = App.testMode ? '/data/wizard/bootstrap/single_host_registration.json' : App.apiPrefix + '/hosts';
-    var method = 'GET';
+
     $.ajax({
       type: 'GET',
       url: url,
       timeout: App.timeout,
       success: function (data) {
-        console.log('registration attempt #' + self.get('registrationAttempts'));
+        console.log('registration attempt...');
         var jsonData = App.testMode ? data : jQuery.parseJSON(data);
         if (!jsonData) {
           console.log("Error: jsonData is null");
           return;
         }
 
-        // keep polling until all hosts are registered
-        var allRegistered = true;
+        // keep polling until all hosts have registered/failed, or registrationTimeout seconds after the last host finished bootstrapping
+        var stopPolling = true;
         hosts.forEach(function (_host, index) {
           // Change name of first host for test mode.
-          if (App.testMode === true) {
+          if (App.testMode) {
             if (index == 0) {
               _host.set('name', 'localhost.localdomain');
             }
           }
-          if (jsonData.items.someProperty('Hosts.host_name', _host.name)) {
-            if (_host.get('bootStatus') != 'REGISTERED') {
-              _host.set('bootStatus', 'REGISTERED');
-              _host.set('bootLog', (_host.get('bootLog') != null ? _host.get('bootLog') : '') + '\nRegistration with the server succeeded.');
-            }
-          } else if (_host.get('bootStatus') == 'FAILED') {
-            // ignore FAILED hosts
-          } else {
-            // there are some hosts that are not REGISTERED or FAILED
-            // we need to keep polling
-            allRegistered = false;
-            if (_host.get('bootStatus') != 'REGISTERING') {
+          // actions to take depending on the host's current bootStatus
+          // RUNNING - bootstrap is running; leave it alone
+          // DONE - bootstrap is done; transition to REGISTERING
+          // REGISTERING - bootstrap is done but has not registered; transition to REGISTERED if host found in polling API result
+          // REGISTERED - bootstrap and registration is done; leave it alone
+          // FAILED - either bootstrap or registration failed; leave it alone
+          console.log(_host.name + ' bootStatus=' + _host.get('bootStatus'));
+          switch (_host.get('bootStatus')) {
+            case 'DONE':
               _host.set('bootStatus', 'REGISTERING');
-              currentBootLog = _host.get('bootLog') != null ? _host.get('bootLog') : '';
               _host.set('bootLog', (_host.get('bootLog') != null ? _host.get('bootLog') : '') + '\nRegistering with the server...');
-            }
+              // update registration timestamp so that the timeout is computed from the last host that finished bootstrapping
+              self.get('registrationStartedAt', new Date().getTime());
+              stopPolling = false;
+              break;
+            case 'REGISTERING':
+              if (jsonData.items.someProperty('Hosts.host_name', _host.name)) {
+                console.log(_host.name + ' has been registered');
+                _host.set('bootStatus', 'REGISTERED');
+                _host.set('bootLog', (_host.get('bootLog') != null ? _host.get('bootLog') : '') + '\nRegistration with the server succeeded.');
+              } else {
+                console.log(_host.name + ' is registering...');
+                stopPolling = false;
+              }
+              break;
+            case 'RUNNING':
+              stopPolling = false;
+              break;
+            case 'REGISTERED':
+            case 'FAILED':
+            default:
+              break;
           }
         }, this);
-        if (allRegistered) {
+
+        if (stopPolling) {
           self.getHostInfo();
-        } else if (self.get('maxRegistrationAttempts') - self.get('registrationAttempts') >= 0) {
-          self.set('registrationAttempts', self.get('registrationAttempts') + 1);
+        } else if (new Date().getTime() - self.get('registrationStartedAt') < self.get('registrationTimeoutSecs') * 1000) {
           window.setTimeout(function () {
             self.isHostsRegistered();
           }, 3000);
         } else {
-          // maxed out on registration attempts.  mark all REGISTERING hosts to FAILED
+          // registration timed out.  mark all REGISTERING hosts to FAILED
+          console.log('registration timed out');
           hosts.filterProperty('bootStatus', 'REGISTERING').forEach(function (_host) {
             _host.set('bootStatus', 'FAILED');
             _host.set('bootLog', (_host.get('bootLog') != null ? _host.get('bootLog') : '') + '\nRegistration with the server failed.');
@@ -353,7 +416,7 @@
     var self = this;
     var kbPerGb = 1024;
     var hosts = this.get('bootHosts');
-    var url = App.testMode ? '/data/wizard/bootstrap/single_host_information.json' : App.apiPrefix + '/hosts?fields=Hosts/total_mem,Hosts/cpu_count';
+    var url = App.testMode ? '/data/wizard/bootstrap/single_host_information.json' : App.apiPrefix + '/hosts?fields=Hosts/total_mem,Hosts/cpu_count,Hosts/disk_info';
     var method = 'GET';
     $.ajax({
       type: 'GET',
@@ -361,12 +424,18 @@
       contentType: 'application/json',
       timeout: App.timeout,
       success: function (data) {
-        var jsonData = App.testMode ? data : jQuery.parseJSON(data);
+        var jsonData = (App.testMode) ? data : jQuery.parseJSON(data);
         hosts.forEach(function (_host) {
-          var host = jsonData.items.findProperty('Hosts.host_name', _host.name);
-          if (host) {
+          var host = (App.testMode) ? jsonData.items[0] : jsonData.items.findProperty('Hosts.host_name', _host.name);
+          if (App.skipBootstrap) {
+            _host.cpu = 2;
+            _host.memory = ((parseInt(2000000))).toFixed(2);
+            _host.disk_info = [{"mountpoint": "/", "type":"ext4"},{"mountpoint": "/grid/0", "type":"ext4"}, {"mountpoint": "/grid/1", "type":"ext4"}, {"mountpoint": "/grid/2", "type":"ext4"}];
+          } else if (host) {
             _host.cpu = host.Hosts.cpu_count;
             _host.memory = ((parseInt(host.Hosts.total_mem))).toFixed(2);
+            _host.disk_info = host.Hosts.disk_info;
+
             console.log("The value of memory is: " + _host.memory);
           }
         });
diff --git a/ambari-web/app/controllers/wizard/step5_controller.js b/ambari-web/app/controllers/wizard/step5_controller.js
index 6e93cf2..0e872ad 100644
--- a/ambari-web/app/controllers/wizard/step5_controller.js
+++ b/ambari-web/app/controllers/wizard/step5_controller.js
@@ -64,6 +64,7 @@
 
           cpu:_host.cpu,
           memory:_host.memory,
+          disk_info:_host.disk_info,
           host_info:"%@ (%@, %@ cores)".fmt(_host.name, (_host.memory * 1024).bytesToSize(1, 'parseFloat'), _host.cpu)
 
 //          Uncomment to test sorting with random cpu, memory, host_info
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index 86d3712..04a141f 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -52,7 +52,7 @@
 
   slaveComponentHosts: function () {
     return this.get('content.slaveGroupProperties');
-  }.property('content.slaveGroupProperties','content.slaveComponentHosts'),
+  }.property('content.slaveGroupProperties', 'content.slaveComponentHosts'),
 
   serviceConfigs: require('data/service_configs'),
   configMapping: require('data/config_mapping'),
@@ -71,29 +71,8 @@
     this.clearStep();
     var serviceConfigs = this.get('serviceConfigs');
     var advancedConfig = this.get('content.advancedServiceConfig') || [];
-    advancedConfig.forEach(function (_config) {
-      if (_config) {
-        var service = serviceConfigs.findProperty('serviceName', _config.serviceName);
-        if (service) {
-          if (this.get('configMapping').someProperty('name', _config.name)) {
-          } else if (!(service.configs.someProperty('name', _config.name))) {
-            _config.id = "site property";
-            _config.category = 'Advanced';
-            _config.displayName = _config.name;
-            _config.defaultValue = _config.value;
-            if (/\${.*}/.test(_config.value) || (service.serviceName !== 'OOZIE' && service.serviceName !== 'HBASE')) {
-              _config.isRequired = false;
-              _config.value = '';
-            } else if (/^\s+$/.test(_config.value)) {
-              _config.isRequired = false;
-            }
-            _config.isVisible = true;
-            _config.displayType = 'advanced';
-            service.configs.pushObject(_config);
-          }
-        }
-      }
-    }, this);
+    this.loadAdvancedConfig(serviceConfigs,advancedConfig);
+    this.loadHostConfigs();
     this.loadCustomConfig();
     this.renderServiceConfigs(serviceConfigs);
     var storedServices = this.get('content.serviceConfigProperties');
@@ -118,6 +97,47 @@
     }
   },
 
+  /*
+  Loads the advanced configs fetched from the server metadata libarary
+   */
+
+  loadAdvancedConfig: function (serviceConfigs,advancedConfig) {
+    advancedConfig.forEach(function (_config) {
+      if (_config) {
+        var service = serviceConfigs.findProperty('serviceName', _config.serviceName);
+        if (service) {
+          if (this.get('configMapping').someProperty('name', _config.name)) {
+          } else if (!(service.configs.someProperty('name', _config.name))) {
+            _config.id = "site property";
+            _config.category = 'Advanced';
+            _config.displayName = _config.name;
+            _config.defaultValue = _config.value;
+            // make all advanced configs optional and populated by default
+            /*
+            if (/\${.*}/.test(_config.value) || (service.serviceName !== 'OOZIE' && service.serviceName !== 'HBASE')) {
+              _config.isRequired = false;
+              _config.value = '';
+            } else if (/^\s+$/.test(_config.value)) {
+              _config.isRequired = false;
+            }
+            */
+            _config.isRequired = false;
+            _config.isVisible = true;
+            _config.displayType = 'advanced';
+            service.configs.pushObject(_config);
+          }
+        }
+      }
+    }, this);
+  },
+
+  /*
+  loads host related configs obtained from server.
+   */
+  loadHostConfigs: function() {
+
+  },
+
 
   /**
    * Render a custom conf-site box for entering properties that will be written in *-site.xml files of the services
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 56a6d65..caba53b 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -48,66 +48,15 @@
     this.loadGlobals();
     this.loadConfigs();
     this.setCustomConfigs();
-    this.loadClusterInfo();
     this.loadSlaveConfiguration();
+    this.loadClusterInfo();
     this.loadServices();
   },
 
-  loadSlaveConfiguration: function () {
-    var slaveComponentConfig = this.convertSlaveConfig(this.get('content.slaveGroupProperties'));
-    this.set("slaveComponentConfig", slaveComponentConfig);
-  },
-
-  convertSlaveConfig: function (slaveContent) {
-    var dest = {
-      "version": "1.0",
-      "components": [
-      ]
-    };
-
-    slaveContent.forEach(function (_slaveContent) {
-      var newComponent = {};
-      newComponent.componentName = _slaveContent.componentName;
-      newComponent.serviceName = this.getServiceName(newComponent.componentName);
-      newComponent.groups = [];
-      _slaveContent.groups.forEach(function (_group) {
-        var newGroup = {};
-        newGroup.groupName = _group.name;
-        newGroup.configVersion = "1.0"; // TODO : every time a new version should be generated
-        newGroup.hostNames = _slaveContent.hosts.filterProperty("group", newGroup.groupName);
-        newGroup.properties = _group.properties;
-        if (!Ember.empty(newGroup.hostNames)) {
-          newComponent.groups.push(newGroup);
-        }
-      }, this);
-      dest.components.push(newComponent);
-    }, this);
-    return dest;
-
-  },
-
-  getServiceName: function (componentName) {
-    var serviceName = null
-    switch (componentName) {
-      case 'DATANODE':
-        serviceName = 'HDFS';
-        break;
-      case 'TASKTRACKER':
-        serviceName = 'MAPREDUCE';
-        break;
-      case 'HBASE_REGIONSERVER':
-        serviceName = 'HBASE';
-        break;
-      default:
-        serviceName = null;
-    }
-    return serviceName;
-  },
-
   loadGlobals: function () {
     var globals = this.get('content.serviceConfigProperties').filterProperty('id', 'puppet var');
     if (globals.someProperty('name', 'hive_database')) {
-      //TODO: Hive host depends on the type of db selected. Change puppet variable name if postgress is not the default db
+      //TODO: Hive host depends on the type of db selected. Change puppet variable name if postgres is not the default db
       var hiveDb = globals.findProperty('name', 'hive_database');
       if (hiveDb.value === 'New PostgreSQL Database') {
         globals.findProperty('name', 'hive_ambari_host').name = 'hive_mysql_host';
@@ -284,6 +233,100 @@
     }
   },
 
+  loadSlaveConfiguration: function () {
+
+    var slaveComponentConfig = this.convertSlaveConfig(this.get('content.slaveGroupProperties'));
+    this.set("slaveComponentConfig", slaveComponentConfig);
+  },
+
+  convertSlaveConfig: function (slaveContent) {
+    var dest = {
+      "version": "1.0",
+      "components": [
+      ],
+      "slaveHostComponents": []
+    };
+
+    slaveContent.forEach(function (_slaveContent) {
+      var newComponent = {};
+      newComponent.componentName = _slaveContent.componentName;
+      newComponent.serviceName = this.getServiceInfo(newComponent.componentName).name;
+      newComponent.groups = [];
+      var index = 2;
+      _slaveContent.groups.forEach(function (_group) {
+        var newGroup = {};
+        newGroup.groupName = _group.name;
+        newGroup.configVersion = {config: {'global': 'version1', 'core-site': 'version1'}}; // TODO : every time a new version should be generated
+        if (this.getServiceInfo(_slaveContent.componentName)) {
+          newGroup.configVersion.config[this.getServiceInfo(_slaveContent.componentName).domain] = 'version' + index;
+          newGroup.configVersion.config[this.getServiceInfo(_slaveContent.componentName).siteName] = 'version' + index;
+        }
+        newGroup.siteVersion = 'version' + index;
+        newGroup.hostNames = _slaveContent.hosts.filterProperty("group", newGroup.groupName).mapProperty('hostName');
+        newGroup.properties = _group.properties;
+        if (!Ember.empty(newGroup.hostNames)) {
+          newComponent.groups.push(newGroup);
+        }
+        index++;
+      }, this);
+      dest.components.push(newComponent);
+    }, this);
+    var hostsInfo = this.get('content.hostsInfo');
+
+    for (var index in hostsInfo) {
+      var hostIndex = 2;
+      var slaveHost = {name: null, configVersion: null, slaveComponents: []};
+      dest.components.forEach(function (_component) {
+        _component.groups.forEach(function (_group) {
+          if (_group.hostNames.contains(hostsInfo[index].name)) {
+            var slaveComponent = {};
+            slaveHost.name = hostsInfo[index].name;
+            slaveComponent.componentName = _component.componentName;
+            slaveComponent.groupName = _group.groupName;
+            slaveComponent.properties = _group.properties;
+            slaveHost.slaveComponents.pushObject(slaveComponent);
+          }
+        }, this);
+      }, this);
+      hostIndex++;
+      if (!Ember.none(slaveHost.name)) {
+        dest.slaveHostComponents.pushObject(slaveHost);
+      }
+
+    }
+    return dest;
+  },
+
+  getServiceInfo: function (componentName) {
+    var serviceConfig;
+    switch (componentName) {
+      case 'DATANODE':
+        serviceConfig = {
+          name: 'HDFS',
+          siteName: 'hdfs-site',
+          domain: 'datanode-global'
+        };
+        break;
+      case 'TASKTRACKER':
+        serviceConfig = {
+          name: 'MAPREDUCE',
+          siteName: 'mapred-site',
+          domain: 'tasktracker-global'
+        };
+        break;
+      case 'HBASE_REGIONSERVER':
+        serviceConfig = {
+          name: 'HBASE',
+          siteName: 'hbase-site',
+          domain: 'regionserver-global'
+        };
+        break;
+      default:
+        serviceConfig = null;
+    }
+    return serviceConfig;
+  },
+
   /**
    * Load all info about cluster to <code>clusterInfo</code> variable
    */
@@ -406,7 +449,7 @@
   loadDnValue: function (dnComponent) {
     var dnHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'DataNode');
     var totalDnHosts = dnHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','DATANODE').groups.length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'DATANODE').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -444,7 +487,7 @@
   loadTtValue: function (ttComponent) {
     var ttHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'TaskTracker');
     var totalTtHosts = ttHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','TASKTRACKER').groups.length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'TASKTRACKER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -522,7 +565,7 @@
   loadRegionServerValue: function (rsComponent) {
     var rsHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'RegionServer');
     var totalRsHosts = rsHosts.hosts.length;
-    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','HBASE_REGIONSERVER').groups.length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName', 'HBASE_REGIONSERVER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -667,33 +710,35 @@
       this.createComponents();
       this.registerHostsToCluster();
       this.createAllHostComponents();
+      this.applyCreatedConfToSlaveGroups();
+      this.ajaxQueueFinished = function(){
+        console.log('everything is loaded')
+        App.router.send('next');
+      };
+      this.doNextAjaxCall();
+    } else {
+      App.router.send('next');
     }
-
-    App.router.send('next');
   },
 
   setAmbariUIDb: function () {
+    var dbContent =  this.get('content.slaveGroupProperties');
     var slaveComponentConfig = this.get("slaveComponentConfig");
-    this.persistKeyValues(slaveComponentConfig.version, slaveComponentConfig);
+    this.persistKeyValues(slaveComponentConfig.version, dbContent);
+    this.persistKeyValues('current_version',slaveComponentConfig.version);
   },
 
   persistKeyValues: function (key, value) {
 
     var str = "{ '" + key + "' : '" + JSON.stringify(value) + "'}";
     var obj = eval("(" + str + ")");
-    $.ajax({
+
+    this.ajax({
       type: "POST",
       url: App.apiPrefix + '/persist',
       data: JSON.stringify(obj),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        console.debug('success...ajax call returned');
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: Error message is: ' + request.responseText);
+      beforeSend: function () {
+        console.log('BeforeSend: persistKeyValues', obj);
       }
     });
   },
@@ -712,61 +757,35 @@
       return false;
     }
 
-    var url = App.apiPrefix + '/clusters/' + this.get('clusterName');
+    var clusterName = this.get('clusterName');
+    var url = App.apiPrefix + '/clusters/' + clusterName;
 
     var stackVersion = (App.db.getSoftRepo().repoType == 'local') ? App.defaultLocalStackVersion : App.defaultStackVersion;
 
-    $.ajax({
+    this.ajax({
       type: 'POST',
       url: url,
-      async: false,
-      //accepts: 'text',
-      dataType: 'text',
       data: JSON.stringify({ "Clusters": {"version": stackVersion }}),
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for createCluster call");
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log("BeforeSend: createCluster for " + clusterName);
+      }
     });
-    console.log("Exiting createCluster");
 
   },
 
-  createSelectedServices: function (service, httpMethod) {
+  createSelectedServices: function () {
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/services';
     var data = this.createServiceData();
     var httpMethod = 'POST';
-    $.ajax({
+
+    this.ajax({
       type: httpMethod,
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for the createSelectedServices call");
-        console.log("TRACE: Step8 -> value of the url is: " + url);
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log('BeforeSend: createSelectedServices ', data);
+      }
     });
   },
 
@@ -795,26 +814,14 @@
       var data = {
         "components": componentsData
       }
-      $.ajax({
+
+      this.ajax({
         type: 'POST',
         url: url,
-        async: false,
-        dataType: 'text',
         data: JSON.stringify(data),
-        timeout: App.timeout,
-        success: function (data) {
-          var jsonData = jQuery.parseJSON(data);
-          console.log("TRACE: Step8 -> In success function for createComponents");
-          console.log("TRACE: Step8 -> value of the url is: " + url);
-          console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-        },
-
-        error: function (request, ajaxOptions, error) {
-          console.log('Step8: In Error ');
-          console.log('Step8: Error message is: ' + request.responseText);
-        },
-
-        statusCode: require('data/statusCodes')
+        beforeSend: function () {
+          console.log('BeforeSend: createComponents for ' + _service, componentsData);
+        }
       });
     }, this);
 
@@ -829,27 +836,13 @@
       return;
     }
 
-    $.ajax({
+    this.ajax({
       type: 'POST',
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: Step8 -> In success function for registerHostsToCluster");
-        console.log("TRACE: Step8 -> value of the url is: " + url);
-        console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log('BeforeSend: registerHostsToCluster', data);
+      }
     });
   },
 
@@ -933,7 +926,7 @@
     //   return 'Hosts/host_name=' + hostName;
     // }).join('|');
 
-    var queryStrArr = []
+    var queryStrArr = [];
     var queryStr = '';
     hostNames.forEach(function (hostName) {
       queryStr += 'Hosts/host_name=' + hostName + '|';
@@ -960,26 +953,13 @@
         ]
       };
 
-      $.ajax({
+      this.ajax({
         type: 'POST',
         url: url,
-        async: false,
-        dataType: 'text',
-        timeout: App.timeout,
         data: JSON.stringify(data),
-        success: function (data) {
-          var jsonData = jQuery.parseJSON(data);
-          console.log("TRACE: Step8 -> In success function for the registerHostsToComponent");
-          console.log("TRACE: Step8 -> value of the url is: " + url);
-          console.log("TRACE: Step8 -> value of the received data is: " + jsonData);
-        },
-
-        error: function (request, ajaxOptions, error) {
-          console.log('Step8: In Error ');
-          console.log('Step8: Error message is: ' + request.responseText);
-        },
-
-        statusCode: require('data/statusCodes')
+        beforeSend: function () {
+          console.log('BeforeSend: registerHostsToComponent for ' + queryStr + ' and component ' + componentName);
+        }
       });
     }, this);
   },
@@ -987,64 +967,56 @@
   createConfigurations: function () {
     var selectedServices = this.get('selectedServices');
     if (!this.get('content.isWizard')) {
-      this.createConfigSite(this.createGlobalSiteObj());
-      this.createConfigSite(this.createCoreSiteObj());
-      this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+      this.createConfigSiteForService(this.createGlobalSiteObj());
+      this.createGlobalSitePerSlaveGroup();
+      this.createConfigSiteForService(this.createCoreSiteObj());
+      this.createConfigSiteForService(this.createHdfsSiteObj());
+      this.createHdfsSitePerSlaveGroup('HDFS');
     }
     if (selectedServices.someProperty('serviceName', 'MAPREDUCE')) {
-      this.createConfigSite(this.createMrSiteObj('MAPREDUCE'));
+      this.createConfigSiteForService(this.createMrSiteObj());
+      this.createMrSitePerSlaveGroup('MAPREDUCE');
     }
     if (selectedServices.someProperty('serviceName', 'HBASE')) {
-      this.createConfigSite(this.createHbaseSiteObj('HBASE'));
+      this.createConfigSiteForService(this.createHbaseSiteObj());
+      this.createHbaseSitePerSlaveGroup('HBASE');
     }
     if (selectedServices.someProperty('serviceName', 'OOZIE')) {
-      this.createConfigSite(this.createOozieSiteObj('OOZIE'));
+      this.createConfigSiteForService(this.createOozieSiteObj('OOZIE'));
     }
     if (selectedServices.someProperty('serviceName', 'HIVE')) {
-      // TODO
-      // this.createConfigSite(this.createHiveSiteObj('HIVE'));
+      this.createConfigSiteForService(this.createHiveSiteObj('HIVE'));
     }
   },
 
-  createConfigSite: function (data) {
-    console.log("Inside createConfigSite");
+  createConfigSiteForService: function (data) {
+    console.log("Inside createConfigSiteForService");
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/configurations';
-    $.ajax({
+
+    this.ajax({
       type: 'POST',
       url: url,
       data: JSON.stringify(data),
-      async: false,
-      dataType: 'text',
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: STep8 -> In success function for the createConfigSite");
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log("BeforeSend: createConfigSiteForService for " + data.type);
+      }
     });
-    console.log("Exiting createConfigSite");
   },
 
   createGlobalSiteObj: function () {
     var globalSiteProperties = {};
-    this.get('globals').forEach(function (_globalSiteObj) {
+    this.get('globals').filterProperty('domain', 'global').forEach(function (_globalSiteObj) {
       // do not pass any globals whose name ends with _host or _hosts
       if (!/_hosts?$/.test(_globalSiteObj.name)) {
         // append "m" to JVM memory options
+        var value = null;
         if (/_heapsize|_newsize|_maxnewsize$/.test(_globalSiteObj.name)) {
-          _globalSiteObj.value += "m";
+          value = _globalSiteObj.value + "m";
+          globalSiteProperties[_globalSiteObj.name] = value;
+        } else {
+          globalSiteProperties[_globalSiteObj.name] = _globalSiteObj.value;
         }
-        globalSiteProperties[_globalSiteObj.name] = _globalSiteObj.value;
         console.log("STEP8: name of the global property is: " + _globalSiteObj.name);
         console.log("STEP8: value of the global property is: " + _globalSiteObj.value);
       }
@@ -1052,6 +1024,36 @@
     return {"type": "global", "tag": "version1", "properties": globalSiteProperties};
   },
 
+  createGlobalSitePerSlaveGroup: function () {
+    this.get('slaveComponentConfig.components').forEach(function (_component) {
+      _component.groups.forEach(function (_group) {
+        var globalSiteProperties = {};
+        var properties = _group.properties;
+        properties.forEach(function (_property) {
+          if (!/_hosts?$/.test(_property.name)) {
+            // append "m" to JVM memory options
+            var value = null;
+            if (/_heapsize|_newsize|_maxnewsize$/.test(_property.name)) {
+              value = _property.value + "m";
+              globalSiteProperties[_property.name] = value;
+            } else {
+              globalSiteProperties[_property.name] = _property.storeValue;
+            }
+            console.log("STEP8: name of the global property is: " + _property.name);
+            console.log("STEP8: value of the global property is: " + _property.storeValue);
+          }
+        }, this);
+        var config = _group.configVersion.config;
+        for (var index in config) {
+          if (index === 'datanode-global' || index === 'tasktracker-global' || index === 'regionserver-global') {
+            var data = {"type": index, "tag": config[index], "properties": globalSiteProperties};
+            this.createConfigSiteForService(data);
+          }
+        }
+      }, this);
+    }, this);
+  },
+
   createCoreSiteObj: function () {
     var coreSiteObj = this.get('configs').filterProperty('filename', 'core-site.xml');
     var coreSiteProperties = {};
@@ -1067,7 +1069,7 @@
     return {"type": "core-site", "tag": "version1", "properties": coreSiteProperties};
   },
 
-  createHdfsSiteObj: function (serviceName) {
+  createHdfsSiteObj: function () {
     var hdfsSiteObj = this.get('configs').filterProperty('filename', 'hdfs-site.xml');
     var hdfsProperties = {};
     hdfsSiteObj.forEach(function (_configProperty) {
@@ -1078,7 +1080,29 @@
     return {"type": "hdfs-site", "tag": "version1", "properties": hdfsProperties };
   },
 
-  createMrSiteObj: function (serviceName) {
+  createHdfsSitePerSlaveGroup: function (serviceName) {
+    var hdfsSite = this.createHdfsSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = hdfsSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": hdfsSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      console.log("The value of globalConfig is: " + JSON.stringify(siteProperties));
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
+  createMrSiteObj: function () {
     var configs = this.get('configs').filterProperty('filename', 'mapred-site.xml');
     var mrProperties = {};
     configs.forEach(function (_configProperty) {
@@ -1089,7 +1113,28 @@
     return {type: 'mapred-site', tag: 'version1', properties: mrProperties};
   },
 
-  createHbaseSiteObj: function (serviceName) {
+  createMrSitePerSlaveGroup: function (serviceName) {
+    var mrSite = this.createMrSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = mrSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": mrSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
+  createHbaseSiteObj: function () {
     var configs = this.get('configs').filterProperty('filename', 'hbase-site.xml');
     var hbaseProperties = {};
     configs.forEach(function (_configProperty) {
@@ -1102,17 +1147,38 @@
     return {type: 'hbase-site', tag: 'version1', properties: hbaseProperties};
   },
 
+  createHbaseSitePerSlaveGroup: function (serviceName) {
+    var hbaseSite = this.createHbaseSiteObj();
+    var component = this.get('slaveComponentConfig.components').findProperty('serviceName', serviceName);
+    component.groups.forEach(function (_group) {
+      var siteProperties = hbaseSite.properties;
+      _group.properties.forEach(function (_property) {
+        this.get('configMapping').forEach(function (_config) {
+          if (_config.templateName.contains(_property.name)) {
+            this.get('globals').findProperty('name', _property.name).value = _property.storeValue;
+            var value = this.getGlobConfigValue(_config.templateName, _config.value);
+            if (siteProperties[_config.name]) {
+              siteProperties[_config.name] = value;
+            }
+          }
+        }, this);
+      }, this);
+      var data = {"type": hbaseSite.type, "tag": _group.siteVersion, "properties": siteProperties};
+      this.createConfigSiteForService(data);
+    }, this);
+  },
+
   createOozieSiteObj: function (serviceName) {
     var configs = this.get('configs').filterProperty('filename', 'oozie-site.xml');
     var oozieProperties = {};
     configs.forEach(function (_configProperty) {
       oozieProperties[_configProperty.name] = _configProperty.value;
     }, this);
-    var baseUrl = oozieProperties['oozie.base.url'];
-    oozieProperties = {
-      "oozie.service.JPAService.jdbc.password": " ", "oozie.db.schema.name": "oozie", "oozie.service.JPAService.jdbc.url": "jdbc:derby:/var/data/oozie/oozie-db;create=true", "oozie.service.JPAService.jdbc.driver": "org.apache.derby.jdbc.EmbeddedDriver", "oozie.service.WorkflowAppService.system.libpath": "/user/oozie/share/lib", "oozie.service.JPAService.jdbc.username": "sa", "oozie.service.SchemaService.wf.ext.schemas": "shell-action-0.1.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,sqoop-action-0.2.xsd,ssh-action-0.1.xsd,distcp-action-0.1.xsd", "oozie.service.JPAService.create.db.schema": "false", "use.system.libpath.for.mapreduce.and.pig.jobs": "false", "oozie.service.ActionService.executor.ext.classes": "org.apache.oozie.action.email.EmailActionExecutor,org.apache.oozie.action.hadoop.HiveActionExecutor,org.apache.oozie.action.hadoop.ShellActionExecutor,org.apache.oozie.action.hadoop.SqoopActionExecutor,org.apache.oozie.action.hadoop.DistcpActionExecutor", "oozie.service.HadoopAccessorService.hadoop.configurations": "*=/etc/hadoop/conf"
-    };
-    oozieProperties['oozie.base.url'] = baseUrl;
+    // var baseUrl = oozieProperties['oozie.base.url'];
+    // oozieProperties = {
+    //   "oozie.service.JPAService.jdbc.password": " ", "oozie.db.schema.name": "oozie", "oozie.service.JPAService.jdbc.url": "jdbc:derby:/var/data/oozie/oozie-db;create=true", "oozie.service.JPAService.jdbc.driver": "org.apache.derby.jdbc.EmbeddedDriver", "oozie.service.WorkflowAppService.system.libpath": "/user/oozie/share/lib", "oozie.service.JPAService.jdbc.username": "sa", "oozie.service.SchemaService.wf.ext.schemas": "shell-action-0.1.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,sqoop-action-0.2.xsd,ssh-action-0.1.xsd,distcp-action-0.1.xsd", "oozie.service.JPAService.create.db.schema": "false", "use.system.libpath.for.mapreduce.and.pig.jobs": "false", "oozie.service.ActionService.executor.ext.classes": "org.apache.oozie.action.email.EmailActionExecutor,org.apache.oozie.action.hadoop.HiveActionExecutor,org.apache.oozie.action.hadoop.ShellActionExecutor,org.apache.oozie.action.hadoop.SqoopActionExecutor,org.apache.oozie.action.hadoop.DistcpActionExecutor", "oozie.service.HadoopAccessorService.hadoop.configurations": "*=/etc/hadoop/conf"
+    // };
+    // oozieProperties['oozie.base.url'] = baseUrl;
     return {type: 'oozie-site', tag: 'version1', properties: oozieProperties};
   },
 
@@ -1122,7 +1188,7 @@
     configs.forEach(function (_configProperty) {
       hiveProperties[_configProperty.name] = _configProperty.value;
     }, this);
-    return {type: 'hbase-site', tag: 'version1', properties: hiveProperties};
+    return {type: 'hive-site', tag: 'version1', properties: hiveProperties};
   },
 
   applyCreatedConfToServices: function () {
@@ -1138,28 +1204,45 @@
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/services/' + service;
 
-    $.ajax({
+    this.ajax({
       type: httpMethod,
       url: url,
-      async: false,
-      dataType: 'text',
       data: JSON.stringify(data),
-      timeout: App.timeout,
-      success: function (data) {
-        var jsonData = jQuery.parseJSON(data);
-        console.log("TRACE: STep8 -> In success function for the applyCreatedConfToService call");
-        console.log("TRACE: STep8 -> value of the url is: " + url);
-        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
-      },
-
-      error: function (request, ajaxOptions, error) {
-        console.log('Step8: In Error ');
-        console.log('Step8: Error message is: ' + request.responseText);
-      },
-
-      statusCode: require('data/statusCodes')
+      beforeSend: function () {
+        console.log("BeforeSend: applyCreatedConfToService for " + service);
+      }
     });
-    console.log("Exiting applyCreatedConfToService");
+  },
+
+
+  applyCreatedConfToSlaveGroups: function () {
+    this.get('slaveComponentConfig.components').forEach(function (_component) {
+      _component.groups.forEach(function (_group) {
+        var aggregatedHostNames = '';
+        _group.hostNames.forEach(function (_hostName, index) {
+          aggregatedHostNames += 'HostRoles/host_name=' + _hostName;
+          if (index !== _group.hostNames.length-1) {
+            aggregatedHostNames += '|';
+          }
+        }, this);
+        console.log("The aggregated hostNames value is: " + aggregatedHostNames);
+        this.applyCreatedConfToSlaveGroup(aggregatedHostNames, 'PUT', _group.configVersion,_group.groupName);
+      }, this);
+    }, this);
+  },
+
+  applyCreatedConfToSlaveGroup: function (aggregatedHostNames, httpMethod, data, groupName) {
+    console.log("Inside applyCreatedConfToHost");
+    var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/host_components?' + aggregatedHostNames;
+
+    this.ajax({
+      type: httpMethod,
+      url: url,
+      data: JSON.stringify(data),
+      beforeSend: function () {
+        console.log("BeforeSend: applyCreatedConfToSlaveGroup for group: " + groupName);
+      }
+    });
   },
 
   getConfigForService: function (serviceName) {
@@ -1175,6 +1258,85 @@
       default:
         return {config: {'global': 'version1'}};
     }
+  },
+
+  ajaxQueue: [],
+
+  ajaxQueueFinished: function () {
+    //do something
+  },
+
+  doNextAjaxCall: function () {
+
+    if (this.get('ajaxBusy')) {
+      return;
+    }
+
+    var queue = this.get('ajaxQueue');
+    if (!queue.length) {
+      this.ajaxQueueFinished();
+      return;
+    }
+
+    var first = queue[0];
+    this.set('ajaxQueue', queue.slice(1));
+
+    this.set('ajaxBusy', true);
+    console.log('AJAX send ' + first.url);
+    $.ajax(first);
+
+  },
+
+  /**
+   * We need to do a lot of ajax calls(about 10 or more) async in special order.
+   * To do this i generate array of ajax objects and then send requests step by step.
+   * All ajax objects are stored in <code>ajaxQueue</code>
+   * @param params
+   */
+
+  ajax: function(params){
+    if(App.testMode) return;
+
+    var self = this;
+    params = jQuery.extend({
+      async: true,
+      dataType: 'text',
+      statusCode: require('data/statusCodes'),
+      timeout: App.timeout,
+      error: function (request, ajaxOptions, error) {
+        console.log('Step8: In Error ');
+        console.log('Step8: Error message is: ' + request.responseText);
+      },
+      success: function (data) {
+        var jsonData = jQuery.parseJSON(data);
+        console.log("TRACE: STep8 -> In success function");
+        console.log("TRACE: STep8 -> value of the url is: " + params.url);
+        console.log("TRACE: STep8 -> value of the received data is: " + jsonData);
+      }
+    }, params);
+
+    var success = params.success;
+    var error = params.error;
+
+    params.success = function () {
+      if (success) {
+        success();
+      }
+      ;
+      self.set('ajaxBusy', false);
+      self.doNextAjaxCall();
+    }
+
+    params.error = function () {
+      if (error) {
+        error();
+      }
+      ;
+      self.set('ajaxBusy', false);
+      self.doNextAjaxCall();
+    }
+
+    this.get('ajaxQueue').pushObject(params);
   }
 
 })
diff --git a/ambari-web/app/controllers/wizard/step9_controller.js b/ambari-web/app/controllers/wizard/step9_controller.js
index f52391c..90c6901 100644
--- a/ambari-web/app/controllers/wizard/step9_controller.js
+++ b/ambari-web/app/controllers/wizard/step9_controller.js
@@ -70,6 +70,7 @@
         this.launchStartServices();
       } else {
         this.loadStep();
+        this.loadLogData(this.get('content.cluster.requestId'));
         this.startPolling();
       }
     } else {
@@ -240,13 +241,11 @@
         console.log("TRACE: Step9 -> In success function for the startService call");
         console.log("TRACE: Step9 -> value of the url is: " + url);
         console.log("TRACE: Step9 -> value of the received data is: " + jsonData);
-        var requestId = jsonData.href.match(/.*\/(.*)$/)[1];
+        var requestId = jsonData.Requests.id;
         console.log('requestId is: ' + requestId);
         var clusterStatus = {
-          name: clusterName,
           status: 'INSTALLED',
           requestId: requestId,
-          installStartTime: self.get('content.cluster').installStartTime,
           isStartError: false,
           isCompleted: false
         };
@@ -258,9 +257,7 @@
       error: function () {
         console.log("ERROR");
         var clusterStatus = {
-          name: clusterName,
           status: 'START FAILED',
-          installStartTime: self.get('content.cluster').installStartTime,
           isStartError: true,
           isCompleted: false
         };
@@ -387,8 +384,7 @@
         clusterStatus = {
           status: 'INSTALLED',
           requestId: requestId,
-          isCompleted: true,
-          installStartTime: this.get('content.cluster.installStartTime')
+          isCompleted: true
         }
         if (this.isSuccess(polledData)) {
           clusterStatus.status = 'STARTED';
@@ -414,8 +410,7 @@
         clusterStatus = {
           status: 'PENDING',
           requestId: requestId,
-          isCompleted: false,
-          installStartTime: this.get('content.cluster.installStartTime')
+          isCompleted: false
         }
         if (this.isStepFailed(polledData)) {
           console.log("In installation failure");
@@ -525,25 +520,28 @@
 
   loadLogData:function(requestId){
     var url = this.getUrl(requestId);
-
+    var requestsId = App.db.getCluster().oldRequestsId;
     if (App.testMode) {
       this.POLL_INTERVAL = 1;
       this.numPolls++;
-      if (this.numPolls == 5) {
-        url = this.get('mockDataPrefix') + '/poll_5.json';
-        // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
-      } else {
-        url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
-      }
     }
-    this.getLogsByRequest(url);
 
-    if(typeof(requestId) === 'number' && requestId > 1){
-      requestId--;
-      this.loadLogData(requestId);
-    }
+    requestsId.forEach(function(requestId) {
+      url = this.getUrl(requestId);
+      if (App.testMode) {
+        this.POLL_INTERVAL = 1;
+
+        if (requestId == 1) {
+          url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
+          // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
+        } else {
+          url = this.get('mockDataPrefix') + '/poll_9.json';
+        }
+      }
+      this.getLogsByRequest(url, false);
+    }, this);
   },
-  getLogsByRequest: function(url){
+  getLogsByRequest: function(url, polling){
     var self = this;
     $.ajax({
       type: 'GET',
@@ -555,6 +553,9 @@
         console.log("TRACE: In success function for the GET logs data");
         console.log("TRACE: STep9 -> The value is: ", jQuery.parseJSON(data));
         var result = self.parseHostInfo(jQuery.parseJSON(data));
+        if(!polling){
+          return;
+        }
         if (result !== true) {
           window.setTimeout(function () {
             self.doPolling();
@@ -578,16 +579,10 @@
     var url = this.getUrl();
 
     if (App.testMode) {
-      this.POLL_INTERVAL = 1;
       this.numPolls++;
-      if (this.numPolls == 5) {
-        url = this.get('mockDataPrefix') + '/poll_5.json';
-        // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
-      } else {
-        url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
-      }
+      url = this.get('mockDataPrefix') + '/poll_' + this.get('numPolls') + '.json';
     }
-    this.getLogsByRequest(url);
+    this.getLogsByRequest(url, true);
   },
 
   stopPolling: function () {
@@ -597,8 +592,6 @@
 
   submit: function () {
     if (!this.get('isSubmitDisabled')) {
-      this.set('content.cluster.status', this.get('status'));
-      this.set('content.cluster.isCompleted', true);
       App.router.send('next');
     }
   },
diff --git a/ambari-web/app/data/config_mapping.js b/ambari-web/app/data/config_mapping.js
index 77e1bb4..a83853b 100644
--- a/ambari-web/app/data/config_mapping.js
+++ b/ambari-web/app/data/config_mapping.js
@@ -294,7 +294,7 @@
     "value": "http://<templateName[0]>:11000/oozie",
     "filename": "oozie-site.xml"
   },
-  //TODO: Oozie configs hardcoded for now. Map them to templates later
+  /*
   {
     "name": "oozie.service.JPAService.jdbc.password",
     "templateName": [],
@@ -323,6 +323,7 @@
     "value": " ",
     "filename": "oozie-site.xml"
   },
+  */
   {
     "name": "javax.jdo.option.ConnectionURL",
     "templateName": ["hive_mysql_host", "hive_database_name"],
diff --git a/ambari-web/app/data/config_properties.js b/ambari-web/app/data/config_properties.js
index 5a6d976..e9382ad 100644
--- a/ambari-web/app/data/config_properties.js
+++ b/ambari-web/app/data/config_properties.js
@@ -73,6 +73,7 @@
       "description": "The host that has been assigned to run HBase Master",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "HBase Master"
     },
@@ -86,6 +87,7 @@
       "displayType": "slaveHosts",
       "isVisible": true,
       "isRequired": false,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -98,6 +100,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -110,6 +113,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -122,6 +126,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -134,6 +139,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "HBase Master"
     },
@@ -145,6 +151,7 @@
       "defaultValue": "3",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -155,6 +162,7 @@
       "defaultValue": "0.25",
       "displayType": "float",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -166,6 +174,7 @@
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -176,6 +185,7 @@
       "defaultValue": "30",
       "displayType": "int",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -188,6 +198,7 @@
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -199,6 +210,7 @@
       "defaultValue": "2",
       "displayType": "int",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -211,6 +223,7 @@
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "regionserver-global",
       "serviceName": "HBASE",
       "category": "RegionServer"
     },
@@ -223,6 +236,7 @@
       "displayType": "int",
       "unit": "rows",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -234,6 +248,7 @@
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
     {
@@ -245,6 +260,7 @@
       "displayType": "int",
       "unit": "bytes",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE"
     },
    /* {
@@ -268,6 +284,7 @@
       "isRequired": true,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -280,6 +297,7 @@
       "isRequired": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -292,6 +310,7 @@
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -304,6 +323,7 @@
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -316,6 +336,7 @@
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -330,6 +351,7 @@
       "isRequired": true,
       "displayType": "init",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -342,6 +364,7 @@
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -354,6 +377,7 @@
       "isRequired": false,
       "displayType": "float",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -366,6 +390,7 @@
       "isRequired": true,
       "displayType": "float",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HBASE",
       "category": "Advanced"
     },
@@ -378,6 +403,7 @@
       "isRequired": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -390,6 +416,7 @@
       "description": "The host that has been assigned to run NameNode",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -399,9 +426,11 @@
       "displayName": "NameNode directories",
       "description": "NameNode directories for HDFS to store the file system image",
       "defaultValue": "/grid/0/hadoop/hdfs/namenode\n/grid/1/hadoop/hdfs/namenode\n",
+      "defaultDirectory": "hadoop/hdfs/namenode",
       "isReconfigurable": false,
       "displayType": "directories",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -414,6 +443,7 @@
       "description": "The host that has been assigned to run SecondaryNameNode",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "SNameNode"
     },
@@ -423,9 +453,11 @@
       "displayName": "SecondaryNameNode Checkpoint directory",
       "description": "Directory on the local filesystem where the Secondary NameNode should store the temporary images to merge",
       "defaultValue": "/grid/0/hadoop/hdfs/namesecondary",
+      "defaultDirectory": "hadoop/hdfs/namesecondary",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "SNameNode"
     },
@@ -439,6 +471,7 @@
       "displayType": "slaveHosts",
       "isRequired": false,
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -448,9 +481,11 @@
       "displayName": "DataNode directories",
       "description": "DataNode directories for HDFS to store the data blocks",
       "defaultValue": "/tmp/hadoop-hdfs/dfs/data",
+      "defaultDirectory": "hadoop-hdfs/dfs/data",
       "isReconfigurable": false,
       "displayType": "directories",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -463,6 +498,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -475,6 +511,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -486,6 +523,7 @@
       "defaultValue": true,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -496,6 +534,7 @@
       "defaultValue": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -507,6 +546,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -518,6 +558,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -530,6 +571,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -542,6 +584,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -554,6 +597,7 @@
       "displayType": "int",
       "unit": "GB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HDFS"
     },
     {
@@ -565,6 +609,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -576,6 +621,7 @@
       "defaultValue": "0",
       "displayType": "int",
       "isVisible": true,
+      "domain": "datanode-global",
       "serviceName": "HDFS",
       "category": "DataNode"
     },
@@ -589,6 +635,7 @@
       "displayType": "int",
       "unit": "seconds",
       "isVisible": true,
+      "domain": "global",
       "filename": "core-site.xml",
       "serviceName": "HDFS"
     },
@@ -603,6 +650,7 @@
       "displayType": "float",
       "unit": "GB",
       "isVisible": true,
+      "domain": "global",
       "filename": "core-site.xml",
       "serviceName": "HDFS"
     },
@@ -616,6 +664,7 @@
       "displayType": "advanced",
       "isVisible": true,
       "filename": "core-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -629,6 +678,7 @@
       "displayType": "advanced",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -642,6 +692,7 @@
       "displayType": "advanced",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -655,6 +706,7 @@
       "isReconfigurable": false,
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -668,6 +720,7 @@
       "isReconfigurable": false,
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -681,6 +734,7 @@
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -694,6 +748,7 @@
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -707,6 +762,7 @@
       "displayType": "int",
       "isVisible": true,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -720,6 +776,7 @@
       "displayType": "int",
       "isVisible": false,
       "filename": "hdfs-site.xml",
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -732,6 +789,7 @@
       "isRequired": false,
       "displayType": "checkbox",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -743,6 +801,7 @@
       "defaultValue": "EXAMPLE.COM",
       "isRequired": true,
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -755,6 +814,7 @@
       "isRequired": true,
       "displayType": "password",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -767,6 +827,7 @@
       "isRequired": true,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -794,6 +855,7 @@
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
+    /* Comment out the other hive_database and uncomment this for Hive with Postgres support
     {
       "id": "puppet var",
       "name": "hive_database",
@@ -810,10 +872,64 @@
           foreignKeys: ['hive_existing_database', 'hive_existing_host']
         }
       ],
-      "description": "PostgreSQL will be installed by ambari. Any other database will have to be installed by the user.",
+      "description": "PostgreSQL will be installed by Ambari. Any other database will have to be installed by the user.",
       "displayType": "radio button",
       "radioName": "hive-database",
       "isVisible": true,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    */
+    {
+      "id": "puppet var",
+      "name": "hive_database",
+      "displayName": "Hive Database",
+      "value": "",
+      "defaultValue": "New MySQL Database",
+      "options": [
+        {
+          displayName: 'New MySQL Database',
+          foreignKeys: ['hive_ambari_database', 'hive_ambari_host']
+        },
+        {
+          displayName: 'Existing MySQL Database',
+          foreignKeys: ['hive_existing_database', 'hive_existing_host']
+        }
+      ],
+      "description": "MySQL will be installed by Ambari",
+      "displayType": "radio button",
+      "radioName": "hive-database",
+      "isVisible": true,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    {
+      "id": "puppet var",
+      "name": "hive_existing_database",
+      "displayName": "Database Type",
+      "value": "",
+      "defaultValue": "MySQL",
+      "description": "Using an existing database for Hive Metastore",
+      "displayType": "masterHost",
+      "isVisible": false,
+      "domain": "global",
+      "serviceName": "HIVE",
+      "category": "Hive Metastore"
+    },
+    /* Uncomment for Hive with Postgres support
+    {
+      "id": "puppet var",
+      "name": "hive_existing_database",
+      "displayName": "Hive Database",
+      "value": "",
+      "defaultValue": "MySQL",
+      "description": "Select the database, if you already have existing one for Hive Metastore.",
+      "displayType": "string",
+      "isVisible": false,
+      "options": ['MySQL', 'PostgreSQL'],
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -827,30 +943,34 @@
       "displayType": "combobox",
       "isVisible": false,
       "options": ['MySQL', 'PostgreSQL'],
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
+    */
     {
       "id": "puppet var",
       "name": "hive_existing_host",
       "displayName": "Database host",
-      "description": "Select the host on which the existing database is hosted.",
+      "description": "Specify the host on which the existing database is hosted",
       "defaultValue": "",
       "isReconfigurable": false,
       "displayType": "host",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
     {
       "id": "puppet var",
       "name": "hive_ambari_database",
-      "displayName": "Hive Database",
+      "displayName": "Database Type",
       "value": "",
-      "defaultValue": "PostgreSQL",
-      "description": "PostgreSQL will be installed by ambari.",
+      "defaultValue": "MySQL",
+      "description": "MySQL will be installed by Ambari",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -860,10 +980,11 @@
       "value": "",
       "defaultValue": "",
       "displayName": "PostgreSQL host",
-      "description": "Host  on which the PostgreSQL database will be created by ambari. ",
+      "description": "Host on which the PostgreSQL database will be created by Ambari",
       "isReconfigurable": false,
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -876,6 +997,7 @@
       "isReconfigurable": false,
       "displayType": "host",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -888,6 +1010,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -900,6 +1023,7 @@
       "isReconfigurable": false,
       "displayType": "password",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Hive Metastore"
     },
@@ -912,6 +1036,7 @@
       "isReconfigurable": false,
       "displayType": "int",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -924,6 +1049,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -936,6 +1062,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -948,6 +1075,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -960,6 +1088,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -972,6 +1101,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -984,6 +1114,7 @@
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -996,6 +1127,7 @@
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1008,6 +1140,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1020,6 +1153,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1032,6 +1166,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "GANGLIA",
       "category": "Advanced"
     },
@@ -1044,6 +1179,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1056,6 +1192,7 @@
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1068,6 +1205,7 @@
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1080,6 +1218,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1092,6 +1231,7 @@
       "isReconfigurable": false,
       "displayType": "advanced",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1104,6 +1244,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1116,6 +1257,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "HIVE",
       "category": "Advanced"
     },
@@ -1140,6 +1282,7 @@
       "description": "The host that has been assigned to run JobTracker",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1153,6 +1296,7 @@
       "displayType": "slaveHosts",
       "isVisible": true,
       "isRequired": false,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1162,9 +1306,11 @@
       "displayName": "MapReduce local directories",
       "description": "Directories for MapReduce to store intermediate data files",
       "defaultValue": "/grid/0/hadoop/mapred\n/grid/1/hadoop/mapred\n",
+      "defaultDirectory": "hadoop/mapred",
       "displayType": "directories",
       "isReconfigurable": false,
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1178,6 +1324,7 @@
       "isReconfigurable": false,
       "isVisible": true,
       "isRequired": false,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "Advanced"
     },
@@ -1200,6 +1347,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1212,6 +1360,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1224,6 +1373,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE",
       "category": "JobTracker"
     },
@@ -1235,6 +1385,7 @@
       "defaultValue": "4",
       "displayType": "int",
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1247,6 +1398,7 @@
       "displayType": "int",
       "isVisible": true,
       "isRequired": false,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1259,6 +1411,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1270,6 +1423,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1281,6 +1435,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1292,6 +1447,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1303,6 +1459,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1314,6 +1471,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1325,6 +1483,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "category": "TaskTracker"
     },
@@ -1337,6 +1496,7 @@
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1347,6 +1507,7 @@
       "defaultValue": "0.9",
       "displayType": "float",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1358,6 +1519,7 @@
       "displayType": "int",
       "unit": "hours",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1368,6 +1530,7 @@
       "defaultValue": "-1",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1378,6 +1541,7 @@
       "defaultValue": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1389,6 +1553,7 @@
       "isReconfigurable": false,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     {
@@ -1400,6 +1565,7 @@
       "isReconfigurable": true,
       "displayType": "checkbox",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MAPREDUCE"
     },
     /*{
@@ -1423,6 +1589,7 @@
       "displayType": "directories",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1434,6 +1601,7 @@
       "displayType": "directories",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1445,6 +1613,7 @@
       "displayType": "advanced",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     {
@@ -1456,6 +1625,7 @@
       "displayType": "advanced",
       "isVisible": false,
       "serviceName": "MAPREDUCE",
+      "domain": "global",
       "category": "Advanced"
     },
     /*
@@ -1476,12 +1646,13 @@
       "id": "puppet var",
       "name": "java64_home",
       "displayName": "Path to 64-bit JAVA_HOME",
-      "description": "Path to 64-bit JAVA_HOME",
-      "defaultValue": "",
-      "isRequired": false,
+      "description": "Path to 64-bit JAVA_HOME.  /usr/jdk/jdk1.6.0_31 is the default used by Ambari.  You can override this to a specific path that contains the JDK.  Note that the path must be valid on ALL hosts in your cluster.",
+      "defaultValue": "/usr/jdk64/jdk1.6.0_31",
+      "isRequired": true,
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1494,6 +1665,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -1507,6 +1679,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Advanced"
     },
@@ -1520,6 +1693,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "NameNode"
     },
@@ -1533,6 +1707,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "HDFS",
       "category": "Advanced"
     },
@@ -1546,6 +1721,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1558,6 +1734,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1570,6 +1747,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1582,6 +1760,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     /*
@@ -1607,7 +1786,6 @@
      "isVisible":  true, "serviceName": "MISC",
      "category": "Advanced"
      },
-     */
     {
       "id": "puppet var",
       "name": "using_local_repo",
@@ -1616,7 +1794,8 @@
       "defaultValue": false,
       "isReconfigurable": false,
       "displayType": "checkbox",
-      "isVisible": true,
+      "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC"
     },
     {
@@ -1628,8 +1807,10 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC"
     },
+    */
     {
       "id": "puppet var",
       "name": "hdfs_user",
@@ -1640,6 +1821,7 @@
       "displayType": "user",
       "isVisible": true,
       "serviceName": "MISC",
+      "domain": "global",
       "category": "Users and Groups"
     },
     {
@@ -1651,6 +1833,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1663,6 +1846,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1675,6 +1859,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1687,6 +1872,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1699,6 +1885,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1711,6 +1898,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1723,6 +1911,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1735,6 +1924,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1747,6 +1937,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1759,6 +1950,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1771,6 +1963,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     },
@@ -1783,6 +1976,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1795,6 +1989,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1807,6 +2002,7 @@
       "isReconfigurable": false,
       "displayType": "user",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "Users and Groups"
     },
@@ -1818,6 +2014,7 @@
       "defaultValue": "nagios",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": false,
       "serviceName": "NAGIOS"
     },
@@ -1829,6 +2026,7 @@
       "defaultValue": "nagios",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": false,
       "serviceName": "NAGIOS"
     },
@@ -1840,6 +2038,7 @@
       "defaultValue": "nagiosadmin",
       "isReconfigurable": false,
       "displayType": "user",
+      "domain": "global",
       "isVisible": true,
       "serviceName": "NAGIOS"
     },
@@ -1852,6 +2051,7 @@
       "isReconfigurable": false,
       "displayType": "password",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "NAGIOS"
     },
     {
@@ -1862,6 +2062,7 @@
       "defaultValue": "",
       "displayType": "email",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "NAGIOS"
     },
     {
@@ -1873,6 +2074,7 @@
       "description": "The host that has been assigned to run Oozie Server",
       "displayType": "masterHost",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Oozie Server"
     },
@@ -1997,6 +2199,7 @@
       "displayType": "directory",
       "isVisible": true,
       "isRequired": false,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Oozie Server"
     },
@@ -2009,6 +2212,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Advanced"
     },
@@ -2021,6 +2225,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "OOZIE",
       "category": "Advanced"
     },
@@ -2043,9 +2248,11 @@
       "displayName": "ZooKeeper directory",
       "description": "Data directory for ZooKeeper",
       "defaultValue": "/grid/0/hadoop/zookeeper",
+      "defaultDirectory": "hadoop/zookeeper",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2058,6 +2265,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2070,6 +2278,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2082,6 +2291,7 @@
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "Advanced"
     },
@@ -2094,6 +2304,7 @@
       "displayType": "int",
       "unit": "ms",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2105,6 +2316,7 @@
       "defaultValue": "10",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2116,6 +2328,7 @@
       "defaultValue": "5",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2127,6 +2340,7 @@
       "defaultValue": "2181",
       "displayType": "int",
       "isVisible": true,
+      "domain": "global",
       "serviceName": "ZOOKEEPER",
       "category": "ZooKeeper Server"
     },
@@ -2138,6 +2352,7 @@
       "defaultValue": "/etc/conf/",
       "displayType": "directory",
       "isVisible": false,
+      "domain": "global",
       "serviceName": "MISC",
       "category": "General"
     }
diff --git a/ambari-web/app/data/service_components.js b/ambari-web/app/data/service_components.js
index 0feebb5..6b68e70 100644
--- a/ambari-web/app/data/service_components.js
+++ b/ambari-web/app/data/service_components.js
@@ -164,13 +164,21 @@
   },
   {
     service_name: 'HIVE',
-    component_name: 'HIVE_MYSQL',
+    component_name: 'MYSQL_SERVER',
     display_name: 'MySql Server for Hive',
     isMaster: false,
     isClient: false,
     description: 'The slave for HBase'
   },
   {
+    service_name: 'HCATALOG',
+    component_name: 'HCAT',
+    display_name: 'HCat Client',
+    isMaster: false,
+    isClient: true,
+    description: ''
+  },
+  {
     service_name: 'TEMPLETON',
     component_name: 'TEMPLETON_SERVER',
     display_name: 'Templeton Server',
diff --git a/ambari-web/app/data/service_configs.js b/ambari-web/app/data/service_configs.js
index 5f18c4c..4e91121 100644
--- a/ambari-web/app/data/service_configs.js
+++ b/ambari-web/app/data/service_configs.js
@@ -107,7 +107,7 @@
     serviceName: 'MISC',
     displayName: 'Misc',
     configCategories: [
-      // App.ServiceConfigCategory.create({ name: 'General'}),
+      App.ServiceConfigCategory.create({ name: 'General'}),
       App.ServiceConfigCategory.create({ name: 'Users and Groups'})
     ],
     configs: configProperties.filterProperty('serviceName', 'MISC')
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 7b1c781..53c87c1 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -62,6 +62,7 @@
   'installer.step2.hostName.error.required':'You must specify at least one host name',
   'installer.step2.hostName.error.notRequired':'Host Names will be ignored if not using SSH to automatically configure hosts',
   'installer.step2.hostName.error.invalid':'Invalid Host Name(s) - cannot start or end with a hyphen',
+  'installer.step2.hostName.pattern.header':'Host name pattern expressions',
   'installer.step2.sshKey':'Host Connectivity Information',
   'installer.step2.sshKey.info':'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
   'installer.step2.sshKey.error.required':'SSH Private Key is required',
@@ -74,13 +75,11 @@
   'installer.step2.localRepo.header':'Software Repository',
   'installer.step2.localRepo.label':'Use a local software repository',
   'installer.step2.localRepo.error.required':'Local repository file path is required',
-  'installer.step2.localRepo.info':'The repository configuration file should be installed on each host in your cluster. ' +
-    'This file instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
-    'downloading them from the internet.',
+  'installer.step2.localRepo.info':'Instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
+    'downloading from the internet.',
   'installer.step2.localRepo.tooltip.title':'Local Software Repository',
-  'installer.step2.localRepo.tooltip.content':'The repository configuration file should be installed on each host ' +
-    'in your cluster. This file instructs package manager to use your local' +
-    'software repository to retrieve software packages, instead of using the internet.',
+  'installer.step2.localRepo.tooltip.content':'Instructs the package manager to use your local software repository to retrieve software packages, instead of' +
+    'downloading from the internet.',
   'installer.step2.manualInstall.tooltip.title':'Not Using SSH (Manual Install)',
   'installer.step2.manualInstall.tooltip.content':'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
     ' you have the option of configuring them yourself.  This involves installing and starting Ambari Agent on each of your target hosts.',
@@ -88,17 +87,18 @@
   'installer.step2.manualInstall.popup.body':'You must install Ambari Agents on each host you want to manage before you proceed.  <a href="#" target="_blank">Learn more</a>',
 
   'installer.step3.header':'Confirm Hosts',
-  'installer.step3.body':'Here are the results of the host discovery process.<br>' +
-    'Please verify and remove the ones that you do not want to be part of the cluster.',
-  'installer.step3.hostLog.popup.header':'Bootstrap log for {0}',
+  'installer.step3.body':'Registering your hosts.<br>' +
+    'Please confirm the host list and remove any hosts you do not want to include the cluster.',
+  'installer.step3.hostLog.popup.header':'Registration log for {0}',
   'installer.step3.hosts.remove.popup.header':'Remove Hosts',
   'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?',
   'installer.step3.hosts.retry.popup.header':'Retry Host Discovery',
   'installer.step3.hosts.retry.popup.body':'Are you sure you want to retry discovery of the selected host(s)?',
+  'installer.step3.hosts.summary' : 'Installing: %@, Registering: %@, Successful: %@, Failed: %@ ',
   'installer.step3.hostInformation.popup.header':'Error in retrieving host Information',
   'installer.step3.hostInformation.popup.body' : 'All bootstrapped hosts registered but unable to retrieve cpu and memory related information',
   'installer.step4.header':'Choose Services',
-  'installer.step4.body':'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
+  'installer.step4.body':'Choose which services you want to install on your cluster.',
   'installer.step4.mapreduceCheck.popup.header':'MapReduce Needed',
   'installer.step4.mapreduceCheck.popup.body':'You did not select MapReduce, but it is needed by other services you selected.  We will automatically add MapReduce.  Is this OK?',
   'installer.step4.monitoringCheck.popup.header':'Limited Functionality Warning',
@@ -109,7 +109,7 @@
   'installer.step5.body':'Assign master components to hosts you want to run them on.',
 
   'installer.step6.header':'Assign Slaves and Clients',
-  'installer.step6.body':'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
+  'installer.step6.body':'Assign slave and client components to hosts you want to run them on.<br/>Hosts that are assigned master components are shown with <i class=icon-asterisks>&#10037</i>. <br/>&quot;Client&quot; will install ',
   'installer.step6.error.mustSelectOne':'You must assign at least one host to each.',
 
   'installer.step7.header':'Customize Services',
diff --git a/ambari-web/app/models/hosts.js b/ambari-web/app/models/hosts.js
index da2a342..85feab5 100644
--- a/ambari-web/app/models/hosts.js
+++ b/ambari-web/app/models/hosts.js
@@ -27,10 +27,12 @@
   barColor: 'progress-info',
   isChecked: true,
   bootLog:null,
-  bootStatus:'RUNNING',
+  bootStatus: 'PENDING',
   
   bootStatusForDisplay:function () {
     switch (this.get('bootStatus')) {
+      case 'PENDING':
+        return 'Preparing';
       case 'REGISTERED':
         return 'Success';
       case 'FAILED':
@@ -50,6 +52,7 @@
         return 'progress-success';
       case 'FAILED':
         return 'progress-danger';
+      case 'PENDING':
       case 'RUNNING':
       case 'DONE':
       case 'REGISTERING':
@@ -64,6 +67,7 @@
         return 'text-success';
       case 'FAILED':
         return 'text-error';
+      case 'PENDING':
       case 'RUNNING':
       case 'DONE':
       case 'REGISTERING':
@@ -77,6 +81,7 @@
       case 'REGISTERED':
       case 'FAILED':
         return true;
+      case 'PENDING':
       case 'RUNNING':
       case 'DONE':
       case 'REGISTERING':
@@ -85,6 +90,4 @@
     }
 
   }.property('bootStatus')
-  /* horizonData:
-   [{"cpu":"61","date":"2012-09-05T11:03:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"36","status":"LIVE","rackName":"Rack-0","io":"23"},{"cpu":"1","date":"2012-09-05T11:06:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"54","status":"LIVE","rackName":"Rack-0","io":"96"},{"cpu":"36","date":"2012-09-05T11:09:00+03:00","id":"0","memory":"65","name":"Node-0.0","network":"42","status":"LIVE","rackName":"Rack-0","io":"49"},{"cpu":"50","date":"2012-09-05T11:12:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"67"},{"cpu":"79","date":"2012-09-05T11:15:00+03:00","id":"0","memory":"91","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"47"},{"cpu":"65","date":"2012-09-05T11:18:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"90","status":"LIVE","rackName":"Rack-0","io":"74"},{"cpu":"42","date":"2012-09-05T11:21:00+03:00","id":"0","memory":"96","name":"Node-0.0","network":"29","status":"LIVE","rackName":"Rack-0","io":"6"},{"cpu":"76","date":"2012-09-05T11:24:00+03:00","id":"0","memory":"28","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"1"},{"cpu":"24","date":"2012-09-05T11:27:00+03:00","id":"0","memory":"66","name":"Node-0.0","network":"75","status":"LIVE","rackName":"Rack-0","io":"31"},{"cpu":"71","date":"2012-09-05T11:30:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"1","status":"LIVE","rackName":"Rack-0","io":"36"},{"cpu":"3","date":"2012-09-05T11:33:00+03:00","id":"0","memory":"57","name":"Node-0.0","network":"12","status":"LIVE","rackName":"Rack-0","io":"71"},{"cpu":"85","date":"2012-09-05T11:36:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"54"},{"cpu":"49","date":"2012-09-05T11:39:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"28","status":"LIVE","rackName":"Rack-0","io":"60"},{"cpu":"46","date":"2012-09-05T11:42:00+03:00","id":"0","memory":"75","name":"Node-0.0","network":"7","status":"LIVE","rackName":"Rack-0","io":"86"},{"cpu":"61","date":"2012-09-05T11:45:00+03:00","id":"0","memory":"11","name":"Node-0.0","network":"65","status":"LIVE","rackName":"Rack-0","io":"65"},{"cpu":"5","date":"2012-09-05T11:48:00+03:00","id":"0","memory":"24","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"62"},{"cpu":"30","date":"2012-09-05T11:51:00+03:00","id":"0","memory":"40","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"98"},{"cpu":"5","date":"2012-09-05T11:54:00+03:00","id":"0","memory":"38","name":"Node-0.0","network":"17","status":"LIVE","rackName":"Rack-0","io":"27"},{"cpu":"22","date":"2012-09-05T11:57:00+03:00","id":"0","memory":"80","name":"Node-0.0","network":"62","status":"LIVE","rackName":"Rack-0","io":"38"}] */
 });
diff --git a/ambari-web/app/models/service_config.js b/ambari-web/app/models/service_config.js
index 22d4cfc..1238807 100644
--- a/ambari-web/app/models/service_config.js
+++ b/ambari-web/app/models/service_config.js
@@ -106,6 +106,7 @@
   displayName: '',
   value: '',
   defaultValue: '',
+  defaultDirectory: '',
   description: '',
   displayType: 'string', // string, digits, number, directories, custom
   unit: '',
@@ -127,6 +128,8 @@
   initialValue: function () {
     var masterComponentHostsInDB = App.db.getMasterComponentHosts();
     //console.log("value in initialvalue: " + JSON.stringify(masterComponentHostsInDB));
+    var hostsInfo = App.db.getHosts(); // which we are setting in installerController in step3.
+    var isOnlyFirstOneNeeded = true;
     switch (this.get('name')) {
       case 'namenode_host':
         var temp = masterComponentHostsInDB.findProperty('component', 'NAMENODE');
@@ -156,9 +159,112 @@
       case 'zookeeperserver_hosts':
         this.set('value', masterComponentHostsInDB.findProperty('component', 'ZOOKEEPER_SERVER').hostName);
         break;
+      case 'dfs_name_dir':
+      case 'dfs_data_dir':
+      case 'mapred_local_dir':
+         this.unionAllMountPoints( !isOnlyFirstOneNeeded );
+      break;
+      case 'fs_checkpoint_dir':
+      case 'zk_data_dir' :
+        this.unionAllMountPoints( isOnlyFirstOneNeeded );
+        break;
     }
   },
+  unionAllMountPoints : function( isOnlyFirstOneNeeded ){
+    var datanode_hostname = '';
+    var mountPointsPerHost = [];
+    var mountPointsAsRoot =   [];
+    var mountPointsAsBoot =   [];
+    var mountPointsAsHome =   [];
+    var mountPointsFortmpfs =   [];
+    var mountPointsForVboxsf =   [];
+    var masterComponentHostsInDB = App.db.getMasterComponentHosts();
+    var slaveComponentHostsInDB = App.db.getSlaveComponentHosts();
+    var hostsInfo = App.db.getHosts(); // which we are setting in installerController in step3.
+    var temp = '';
+    var setOfHostNames = [];
+    switch(this.get('name')){
+      case 'dfs_name_dir':
+        var components = masterComponentHostsInDB.filterProperty('component', 'NAMENODE');
+        components.forEach(function(component){
+          setOfHostNames.push(component.hostName);
+        },this);
+        break;
+      case 'fs_checkpoint_dir':
+        var components = masterComponentHostsInDB.filterProperty('component', 'SECONDARY_NAMENODE');
+        components.forEach(function(component){
+          setOfHostNames.push(component.hostName);
+        },this);
+        break;
+      case 'dfs_data_dir':
+        temp = slaveComponentHostsInDB.findProperty('componentName', 'DATANODE');
+        temp.hosts.forEach(function(host){
+          setOfHostNames.push(host.hostName);
+        },this);
+        break;
 
+      case 'mapred_local_dir':
+        temp = slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER');
+        temp.hosts.forEach(function(host){
+          setOfHostNames.push(host.hostName);
+        },this);
+        break;
+
+      case 'zk_data_dir':
+        var components = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER');
+        components.forEach(function(component){
+          setOfHostNames.push(component.hostName);
+        },this);
+        break;
+    }
+
+    var allMountPoints = [];
+    for(var i = 0; i < setOfHostNames.length; i++ ){
+      datanode_hostname = setOfHostNames[i];
+      mountPointsPerHost = hostsInfo[datanode_hostname].disk_info;
+      mountPointsAsRoot =   mountPointsPerHost.filterProperty('mountpoint', '/');
+      mountPointsAsBoot =   mountPointsPerHost.filterProperty('mountpoint', '/boot');
+      mountPointsAsHome =   mountPointsPerHost.filterProperty('mountpoint', '/home');
+      mountPointsFortmpfs =   mountPointsPerHost.filterProperty('type', 'tmpfs');
+      mountPointsForVboxsf =   mountPointsPerHost.filterProperty('type', 'vboxsf');
+
+      var mountPointsToBeIgnored = [];
+      mountPointsToBeIgnored.push(mountPointsAsRoot);
+      mountPointsToBeIgnored.push(mountPointsAsBoot);
+      mountPointsToBeIgnored.push(mountPointsAsHome);
+
+      mountPointsFortmpfs.forEach(function(mpoint){
+        mountPointsToBeIgnored.push(mpoint);
+      },this);
+      mountPointsForVboxsf.forEach(function(mpoint){
+        mountPointsToBeIgnored.push(mpoint);
+      },this);
+
+      mountPointsPerHost = mountPointsPerHost.removeAll(mountPointsToBeIgnored);
+
+      mountPointsPerHost.forEach(function(mPoint){
+        allMountPoints.push(mPoint);
+      },this);
+    }
+    if( allMountPoints.length == 0 ){
+      allMountPoints.push(mountPointsAsRoot[0]);
+    }
+    this.set('value','');
+    if( !isOnlyFirstOneNeeded ){
+      allMountPoints.forEach(function(eachDrive){
+          var mPoint = this.get('value');
+          if(!mPoint)
+            mPoint = "";
+          mPoint += ( eachDrive.mountpoint + this.get('defaultDirectory') + "\n" );
+          this.set('value', mPoint);
+          this.set('defaultValue', mPoint );
+      },this);
+    } else{
+      this.set('value', allMountPoints[0].mountpoint + this.get('defaultDirectory') );
+      this.set('defaultValue', allMountPoints[0].mountpoint + this.get('defaultDirectory')  );
+    }
+
+  },
   isValid: function () {
     return this.get('errorMessage') === '';
   }.property('errorMessage'),
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index 1bfaadd..9e8f315 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -255,18 +255,53 @@
       return 'installer';
     }
   },
+
   logOff: function(context){
-    console.log('logging off');
+    var hash = window.btoa(this.get('loginController.loginName') + ":" + this.get('loginController.password'));
+
     // App.db.cleanUp() must be called before router.clearAllSteps().
     // otherwise, this.set('installerController.currentStep, 0) would have no effect
     // since it's a computed property but we are not setting it as a dependent of App.db.
     App.db.cleanUp();
     this.clearAllSteps();
-    console.log("Log off: " + App.db.getClusterName());
+    console.log("Log off: " + App.router.getClusterName());
     this.set('loginController.loginName', '');
     this.set('loginController.password', '');
+
+    if (!App.testMode) {
+      $.ajax({
+        url: App.apiPrefix + '/logout',
+        dataType: 'json',
+        type: 'GET',
+        beforeSend: function (xhr) {
+          xhr.setRequestHeader("Authorization", "Basic " + hash);
+        },
+        statusCode: {
+          200: function () {
+            console.log("Status code 200: Success.");
+          },
+          401: function () {
+            console.log("Error code 401: Unauthorized.");
+          },
+          403: function () {
+            console.log("Error code 403: Forbidden.");
+          }
+        },
+        success: function (data) {
+          console.log("invoked logout on the server successfully");
+        },
+        error: function (data) {
+          console.log("failed to invoke logout on the server");
+        },
+        complete: function () {
+          console.log('done');
+        }
+      });
+    }
+
     this.transitionTo('login', context);
   },
+
   root: Em.Route.extend({
     index: Em.Route.extend({
       route: '/',
diff --git a/ambari-web/app/routes/add_host_routes.js b/ambari-web/app/routes/add_host_routes.js
index bdfceef..4c3cdc9 100644
--- a/ambari-web/app/routes/add_host_routes.js
+++ b/ambari-web/app/routes/add_host_routes.js
@@ -32,6 +32,7 @@
         }),
         primary:Em.I18n.t('form.cancel'),
         secondary: null,
+        showFooter: false,
 
         onPrimary:function () {
           this.hide();
@@ -57,15 +58,19 @@
     connectOutlets: function (router) {
       console.log('in addHost.step1:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('1', false);
+      controller.setCurrentStep('1');
       controller.set('hideBackButton', true);
       controller.dataLoading().done(function () {
-      controller.loadAllPriorSteps();
-      controller.connectOutlet('wizardStep2', controller.get('content.hosts'));
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('wizardStep2', controller.get('content'));
       })
     },
 
     next: function (router) {
+      var controller = router.get('addHostController');
+      var wizardStep2Controller = router.get('wizardStep2Controller');
+      wizardStep2Controller.patternExpression();
+      controller.saveHosts(wizardStep2Controller);
       router.transitionTo('step2');
       App.db.setBootStatus(false);
     },
@@ -77,7 +82,6 @@
       wizardStep2Controller.set('hasSubmitted', true);
 
       if (!wizardStep2Controller.get('isSubmitDisabled')) {
-        addHostController.saveHosts(wizardStep2Controller);
         wizardStep2Controller.evaluateStep();
       }
     }
@@ -88,7 +92,7 @@
     connectOutlets: function (router) {
       console.log('in addHost.step2:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('2', false);
+      controller.setCurrentStep('2');
       controller.dataLoading().done(function () {
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep3', controller.get('content'));
@@ -122,7 +126,7 @@
     connectOutlets: function (router, context) {
       console.log('in addHost.step3:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('3', false);
+      controller.setCurrentStep('3');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep6', controller.get('content'));
@@ -148,7 +152,7 @@
     connectOutlets: function (router) {
       console.log('in addHost.step4:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('4', false);
+      controller.setCurrentStep('4');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep7', controller.get('content'));
@@ -168,7 +172,7 @@
     connectOutlets: function (router, context) {
       console.log('in addHost.step5:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('5', false);
+      controller.setCurrentStep('5');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep8', controller.get('content'));
@@ -189,7 +193,7 @@
     connectOutlets: function (router, context) {
       console.log('in addHost.step6:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('6', false);
+      controller.setCurrentStep('6');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         if (!App.testMode) {              //if test mode is ON don't disable prior steps link.
@@ -228,7 +232,7 @@
     connectOutlets: function (router, context) {
       console.log('in addHost.step7:connectOutlets');
       var controller = router.get('addHostController');
-      controller.setCurrentStep('7', false);
+      controller.setCurrentStep('7');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep10', controller.get('content'));
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 9eb1a2a..248d379 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -31,6 +31,7 @@
             controllerBinding: 'App.router.addServiceController'
           }),
           primary:Em.I18n.t('form.cancel'),
+          showFooter: false,
           secondary: null,
 
           onPrimary:function () {
@@ -62,7 +63,7 @@
     connectOutlets: function (router) {
       console.log('in addService.step1:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('1', false);
+      controller.setCurrentStep('1');
       controller.set('hideBackButton', true);
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
@@ -84,7 +85,7 @@
     connectOutlets: function (router) {
       console.log('in addService.step2:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('2', false);
+      controller.setCurrentStep('2');
       controller.set('hideBackButton', false);
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
@@ -107,7 +108,7 @@
     connectOutlets: function (router) {
       console.log('in addService.step3:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('3', false);
+      controller.setCurrentStep('3');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep6', controller.get('content'));
@@ -140,7 +141,7 @@
     connectOutlets: function (router) {
       console.log('in addService.step4:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('4', false);
+      controller.setCurrentStep('4');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep7', controller.get('content'));
@@ -169,7 +170,7 @@
     connectOutlets: function (router, context) {
       console.log('in addService.step5:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('5', false);
+      controller.setCurrentStep('5');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep8', controller.get('content'));
@@ -190,7 +191,7 @@
     connectOutlets: function (router, context) {
       console.log('in addService.step6:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('6', false);
+      controller.setCurrentStep('6');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         if (!App.testMode) {              //if test mode is ON don't disable prior steps link.
@@ -229,7 +230,7 @@
     connectOutlets: function (router, context) {
       console.log('in addService.step7:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setCurrentStep('7', false);
+      controller.setCurrentStep('7');
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps();
         controller.connectOutlet('wizardStep10', controller.get('content'));
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index d72e3da..f448872 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -72,15 +72,14 @@
     connectOutlets: function (router) {
       console.log('in installer.step1:connectOutlets');
       var controller = router.get('installerController');
-      controller.setCurrentStep('1', false);
+      controller.setCurrentStep('1');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep1', controller.get('content'));
     },
 
     next: function (router) {
       var installerController = router.get('installerController');
-      var wizardStep1Controller = router.get('wizardStep1Controller');
-      installerController.saveClusterInfo(wizardStep1Controller);
+      installerController.save('cluster');
       installerController.clearHosts();
       router.transitionTo('step2');
     }
@@ -92,14 +91,15 @@
       router.setNavigationFlow('step2');
 
       var controller = router.get('installerController');
-      controller.setCurrentStep('2', false);
+      controller.setCurrentStep('2');
       controller.loadAllPriorSteps();
-      controller.connectOutlet('wizardStep2', controller.get('content.hosts'));
+      controller.connectOutlet('wizardStep2', controller.get('content'));
     },
     back: Em.Router.transitionTo('step1'),
     next: function (router) {
       var controller = router.get('installerController');
       var wizardStep2Controller = router.get('wizardStep2Controller');
+      wizardStep2Controller.patternExpression();
       controller.saveHosts(wizardStep2Controller);
       router.transitionTo('step3');
       App.db.setBootStatus(false);
@@ -114,7 +114,6 @@
       wizardStep2Controller.set('hasSubmitted', true);
 
       if (!wizardStep2Controller.get('isSubmitDisabled')) {
-        App.db.setBootStatus(false);
         wizardStep2Controller.evaluateStep();
       }
     }
@@ -125,7 +124,7 @@
     connectOutlets: function (router) {
       console.log('in installer.step3:connectOutlets');
       var controller = router.get('installerController');
-      controller.setCurrentStep('3', false);
+      controller.setCurrentStep('3');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep3', controller.get('content'));
     },
@@ -134,7 +133,6 @@
       var installerController = router.get('installerController');
       var wizardStep3Controller = router.get('wizardStep3Controller');
       installerController.saveConfirmedHosts(wizardStep3Controller);
-      App.db.setSshKey(null);
       App.db.setBootStatus(true);
       var displayOrderConfig = require('data/services');
       var apiUrl = '/stacks/HDP/version/1.2.0';
@@ -161,7 +159,7 @@
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step4');
       var controller = router.get('installerController');
-      controller.setCurrentStep('4', false);
+      controller.setCurrentStep('4');
       controller.loadAllPriorSteps();
       controller.loadServices();
       controller.connectOutlet('wizardStep4', controller.get('content.services'));
@@ -186,7 +184,7 @@
 
       var controller = router.get('installerController');
       var wizardStep5Controller = router.get('wizardStep5Controller');
-      controller.setCurrentStep('5', false);
+      controller.setCurrentStep('5');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep5', controller.get('content'));
     },
@@ -206,7 +204,7 @@
       router.setNavigationFlow('step6');
 
       var controller = router.get('installerController');
-      controller.setCurrentStep('6', false);
+      controller.setCurrentStep('6');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep6', controller.get('content'));
     },
@@ -233,7 +231,7 @@
     enter: function (router) {
       console.log('in /wizardStep7Controller:enter');
       var controller = router.get('installerController');
-      controller.setCurrentStep('7', false);
+      controller.setCurrentStep('7');
       controller.loadAllPriorSteps();
     },
     connectOutlets: function (router, context) {
@@ -254,7 +252,7 @@
     connectOutlets: function (router, context) {
       console.log('in installer.step8:connectOutlets');
       var controller = router.get('installerController');
-      controller.setCurrentStep('8', false);
+      controller.setCurrentStep('8');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep8', controller.get('content'));
     },
@@ -274,7 +272,7 @@
     connectOutlets: function (router, context) {
       console.log('in installer.step9:connectOutlets');
       var controller = router.get('installerController');
-      controller.setCurrentStep('9', false);
+      controller.setCurrentStep('9');
       controller.loadAllPriorSteps();
       if (!App.testMode) { // if test mode is ON don't disable prior steps link.
         controller.setLowerStepsDisable(9);
@@ -311,7 +309,7 @@
     connectOutlets: function (router, context) {
       console.log('in installer.step10:connectOutlets');
       var controller = router.get('installerController');
-      controller.setCurrentStep('10', false);
+      controller.setCurrentStep('10');
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep10', controller.get('content'));
     },
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index a7bbcc4..029a177 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -259,7 +259,7 @@
     },
     showDetails:function (router, event) {
       router.get('mainHostDetailsController').setBack(true);
-      router.transitionTo('hosts.hostDetails.index', event.context)
+      router.transitionTo('hosts.hostDetails.summary', event.context);
     },
     filterHosts:function (router, component) {
       router.transitionTo('hosts');
@@ -335,7 +335,7 @@
       },
       showDetails:function (router, event) {
         router.get('mainHostDetailsController').setBack(true);
-        router.transitionTo('hosts.hostDetails.index', event.context)
+        router.transitionTo('hosts.hostDetails.summary', event.context);
       }
     }),
     showService:Em.Router.transitionTo('service'),
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 628ab55..1ce5e0a 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -52,10 +52,6 @@
   padding: 20px 0;
 }
 
-.modal-body {
-  max-height: 500px;
-}
-
 #top-nav {
   .navbar {
     font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
@@ -194,6 +190,22 @@
   color: #5AB400;
 }
 
+.icon-empty {
+  height: 21px;
+  display: inline-block;
+  width: 8px;
+}
+
+.icon-caret-right {
+  min-width:8px;
+  padding-top: 2px;
+}
+
+.icon-caret-left {
+  min-width:8px;
+  padding-top: 2px;
+}
+
 .icon-remove {
   color: #FF4B4B;
 }
@@ -291,10 +303,10 @@
         width: 30%;
       }
       th.status {
-        width: 40%;
+        width: 30%;
       }
       th.messgage {
-        width: 30%;
+        width: 40%;
       }
       .progress-bar {
         width: 80%;
@@ -528,7 +540,7 @@
     }
     table.table {
       margin-top: 14px;
-      color: #7b7b7b;
+      color: #666;
       font-size: 13px;
       //width: 80%;
       tr > td:first-child {
@@ -576,7 +588,7 @@
 #summary-info {
   border-top: none;
   border-collapse: collapse;
-  color: #7B7B7B;
+  color: #666;
   font-size: 13px;
 
   td.summary-label {
@@ -678,9 +690,10 @@
 }
 
 .modal-graph-line {
-  width: 750px;
+  width: 790px;
   .modal-body {
-    min-height: 320px !important;
+    min-height: 420px !important;
+    overflow: hidden;
   }
 }
 
@@ -691,16 +704,38 @@
   cursor: pointer;
   cursor:-moz-zoom-in;
   cursor:-webkit-zoom-in;
+
   &.chart-container-popup {
-    cursor: auto;
+    cursor: auto !important;
+    margin-left: 0;
+    overflow: visible;
+    width: 650px;
+    .chart {
+      left: 60px;
+      overflow: visible;
+      position: relative;
+    }
+    .chart-y-axis {
+      position: absolute;
+      top: -15px;
+      bottom: 0;
+      width: 60px;
+    }
+    .chart-legend {
+      left: 60px;
+      top: 245px;
+    }
+    .x_tick {
+      .title {
+        margin-top: 35px !important;
+      }
+    }
   }
   position: relative;
   margin: 20px 15px 0px 15px;
 
   .chart {
-    padding-bottom: 0px !important;
     position: relative;
-    height: 160px;
     z-index: 1;
   }
   .chart-y-axis {
@@ -718,11 +753,30 @@
     width: 30%;
     z-index: 2;
   }
+  .x_tick {
+    margin-top: 5px;
+    .title {
+      padding: 0 2px 0 2px;
+      opacity: 1 !important;
+      top: 148px;
+    }
+  }
+  svg {
+    g {
+      g:nth-child(1) {
+        display: none;
+      }
+    }
+  }
+  text{
+    font-weight: 700;
+    opacity: 1 !important;
+  }
   .chart-legend {
     font-family: 'Courier New';
     position: absolute;
     top: 180px;
-    z-index: 2;
+    z-index: 3;
   }
   .rickshaw_legend {
     background-color: #999999 !important;
@@ -984,6 +1038,9 @@
 
     div.view-wrapper {
       float: left;
+      .btn-group{
+        margin-bottom: 9px;
+      }
     }
 
     a.ui-icon-circle-close {
@@ -1193,6 +1250,12 @@
 }
 
 .background-operations {
+  .progress {
+    margin-bottom: 5px;
+    .bar {
+      width: 100%;
+    }
+  }
   .open-details {
     clear: left;
     display: block;
@@ -1835,6 +1898,14 @@
   }
 }
 
+.screensaver{
+  width: 90%;
+  height: 160px;
+  border: 1px solid silver;
+  margin: 20px 15px 10px 15px;
+  background: url(/img/spinner.gif) no-repeat center center;
+}
+
 /* TIME RANGE WIDGET END */
 
 #host-details .host-components .btn-group > .btn {
@@ -1927,3 +1998,46 @@
     }
   }
 }
+
+
+//
+// Gray palette
+//
+.nav-pills > .active > a, .nav-pills > .active > a:hover {
+    background-color: #666666;
+}
+
+.nav-list > .active > a, .nav-list > .active > a:hover {
+  background-color: #666666;
+}
+
+.alert-info {
+  background-color: #E6F1F6;
+  border-color: #D2D9DD;
+  color: #4E575B;
+  text-shadow: none;
+}
+
+/*
+.progress-striped .bar {
+  background-color: #A5A5A5;
+}
+
+.progress-info.progress-striped .bar, .progress-striped .bar-info {
+  background-color: #A5A5A5;
+}
+*/
+
+.btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] {
+  background-color: #555555;
+}
+
+#main-nav .brand {
+  background-color: #777777;
+  color: #FFFFFF;
+  text-shadow: none;
+}
+
+.modal-body {
+  max-height: none;
+}
\ No newline at end of file
diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs
index 6127968..b1558e8 100644
--- a/ambari-web/app/templates/application.hbs
+++ b/ambari-web/app/templates/application.hbs
@@ -23,15 +23,11 @@
         <div class="container">
           <a {{translateAttr href="topnav.logo.href"}} target="_blank"><img id="logo" src="/img/logo-small.gif"></a>
           <a class="brand" {{translateAttr href="topnav.logo.href"}} target="_blank">{{t app.name}}</a>
-          {{#if isClusterDataLoaded}}
-            <a class="brand cluster-name" href="#">
-              - {{clusterName}}
-            </a>
-          {{else}}
-            <a class="brand cluster-name" href="#">
-              - Install Wizard
-            </a>
-          {{/if}}
+            {{#if App.router.loggedIn}}
+              <a class="brand cluster-name" href="#">
+                - {{clusterName}}
+              </a>
+            {{/if}}
           <ul class="nav">
             <li class="right"><a class="help" {{translateAttr href="topnav.help.href"}} target="_blank">Help</a></li>
             {{#if App.router.loggedIn}}
diff --git a/ambari-web/app/templates/login.hbs b/ambari-web/app/templates/login.hbs
index 479ba29..d6d6059 100644
--- a/ambari-web/app/templates/login.hbs
+++ b/ambari-web/app/templates/login.hbs
@@ -24,7 +24,7 @@
     </div>
     {{/if}}
     <label>{{t login.username}}</label>
-    {{view Ember.TextField valueBinding="loginName" class="span4"}}
+    {{view view.loginTextField valueBinding="loginName" class="span4"}}
     <label>{{t login.password}}</label>
     {{view view.passTextField type="password" valueBinding="password" class="span4"}}
         <button class="btn btn-success" {{action "submit" target="controller"}}>{{t login.loginButton}}</button>
diff --git a/ambari-web/app/templates/main.hbs b/ambari-web/app/templates/main.hbs
index 473c648..6a1573a 100644
--- a/ambari-web/app/templates/main.hbs
+++ b/ambari-web/app/templates/main.hbs
@@ -21,17 +21,13 @@
   <div class="navbar">
     <div class="navbar-inner">
       <a class="brand" href="#">
-        {{#if clusterName}}
-          {{clusterName}}
-        {{else}}
-          My Cluster
-        {{/if}}
-          {{#view App.EmptyView controllerBinding="App.router.backgroundOperationsController"}}
-            {{#if allOperationsCount}}
-              <span class="label operations-count" {{action "showPopup" target="controller"}}>{{allOperationsCount}}</span>
-            {{/if}}
-          {{/view}}
+        {{clusterName}}
 
+        {{#view App.EmptyView controllerBinding="App.router.backgroundOperationsController"}}
+          {{#if allOperationsCount}}
+            <span class="label operations-count" {{action "showPopup" target="controller"}}>{{allOperationsCount}}</span>
+          {{/if}}
+        {{/view}}
       </a>
       {{view App.MainMenuView}}
     </div>
diff --git a/ambari-web/app/templates/main/background_operations_popup.hbs b/ambari-web/app/templates/main/background_operations_popup.hbs
index 75f6186..6102564 100644
--- a/ambari-web/app/templates/main/background_operations_popup.hbs
+++ b/ambari-web/app/templates/main/background_operations_popup.hbs
@@ -18,30 +18,36 @@
 
 {{#each operation in allOperations}}
   {{#view App.MainBackgroundOperation contentBinding="operation"}}
+<div>
+  <a {{action showOperationLog target="view"}} href="#">
+    <i {{bindAttr class="view.iconClass"}}></i>
+    {{#if view.isOpen}}Hide{{else}}Show{{/if}} info about {{operation.command}} {{operation.role}}
+    on {{operation.host_name}}
+  </a>
+  {{#if view.hasProgressBar}}
+  <div {{bindAttr class="view.isInProgress:progress-striped :active view.barColor :progress"}}>
+    <div class="bar"></div>
+  </div>
+  {{/if}}
+  <div class="content-area">
+    <div class="textTrigger">click to highlight</div>
+    {{#if view.isOpen}}
+    {{#if view.isTextArea}}
     <div>
-      <a {{action showOperationLog target="view"}} href="#">
-        <i {{bindAttr class="view.iconClass"}}></i>
-        {{#if view.isOpen}}Hide{{else}}Show{{/if}} info about {{operation.command}} {{operation.role}} on {{operation.host_name}}
-      </a>
-      <div class="content-area">
-      <div class="textTrigger">click to highlight</div>
-      {{#if view.isOpen}}
-      {{#if view.isTextArea}}
-      <div>
       {{view view.textArea contentBinding="operation"}}
-      </div>
-      {{else}}
-      <div>
-        <h5>exitcode:</h5>
-        <pre class="stderr">{{operation.exit_code}}</pre>
-        <h5>stderr:</h5>
-        <pre class="stderr">{{highlight operation.stderr [err;fail]}}</pre>
-        <h5>stdout:</h5>
-        <pre class="stdout">{{highlight operation.stdout [err;fail]}}</pre>
-      </div>
-      {{/if}}
-      {{/if}}
-      </div>
-     </div>
+    </div>
+    {{else}}
+    <div>
+      <h5>exitcode:</h5>
+      <pre class="stderr">{{operation.exit_code}}</pre>
+      <h5>stderr:</h5>
+      <pre class="stderr">{{highlight operation.stderr [err;fail]}}</pre>
+      <h5>stdout:</h5>
+      <pre class="stdout">{{highlight operation.stdout [err;fail]}}</pre>
+    </div>
+    {{/if}}
+    {{/if}}
+  </div>
+</div>
   {{/view}}
 {{/each}}
\ No newline at end of file
diff --git a/ambari-web/app/templates/main/charts/linear_time.hbs b/ambari-web/app/templates/main/charts/linear_time.hbs
index f89e26d..b4ed659 100644
--- a/ambari-web/app/templates/main/charts/linear_time.hbs
+++ b/ambari-web/app/templates/main/charts/linear_time.hbs
@@ -15,7 +15,11 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div id="{{unbound view.id}}-container" class="chart-container" {{action showGraphInPopup target="view"}} title="Click to zoom">
+
+<div class="screensaver chart-container" {{bindAttr class="view.isReady:hide"}} >
+  <div id="{{unbound view.id}}-title" class="chart-title">{{view.title}}</div>
+</div>
+<div  id="{{unbound view.id}}-container" class="chart-container hide" {{bindAttr class="view.isReady:show"}}  {{action showGraphInPopup target="view"}} title="Click to zoom">
   <div id="{{unbound view.id}}-yaxis" class="chart-y-axis"></div>
   <div id="{{unbound view.id}}-xaxis" class="chart-x-axis"></div>
   <div id="{{unbound view.id}}-legend" class="chart-legend"></div>
@@ -23,4 +27,4 @@
   <div id="{{unbound view.id}}-timeline" class="timeline"></div>
 
   <div id="{{unbound view.id}}-title" class="chart-title">{{view.title}}</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/ambari-web/app/templates/main/dashboard/service/hive.hbs b/ambari-web/app/templates/main/dashboard/service/hive.hbs
index 13e0bc8..7bd2161 100644
--- a/ambari-web/app/templates/main/dashboard/service/hive.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/hive.hbs
@@ -16,7 +16,7 @@
 * limitations under the License.
 }}
 
-<div class="clearfix like_pointer">
+<div class="clearfix">
   <div class="name span2">
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>
diff --git a/ambari-web/app/templates/main/dashboard/service/oozie.hbs b/ambari-web/app/templates/main/dashboard/service/oozie.hbs
index 13e0bc8..1234661 100644
--- a/ambari-web/app/templates/main/dashboard/service/oozie.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/oozie.hbs
@@ -16,8 +16,9 @@
 * limitations under the License.
 }}
 
-<div class="clearfix like_pointer">
+<div class="clearfix">
   <div class="name span2">
+    <i class="pull-left icon-empty"></i>
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>
     {{#if view.criticalAlertsCount}}
diff --git a/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs b/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs
index 13e0bc8..1234661 100644
--- a/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs
+++ b/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs
@@ -16,8 +16,9 @@
 * limitations under the License.
 }}
 
-<div class="clearfix like_pointer">
+<div class="clearfix">
   <div class="name span2">
+    <i class="pull-left icon-empty"></i>
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>
     {{#if view.criticalAlertsCount}}
diff --git a/ambari-web/app/templates/main/service/info/configs.hbs b/ambari-web/app/templates/main/service/info/configs.hbs
index a4d13cb..b5e923e 100644
--- a/ambari-web/app/templates/main/service/info/configs.hbs
+++ b/ambari-web/app/templates/main/service/info/configs.hbs
@@ -140,9 +140,9 @@
       <div class="accordion-group">
         <div class="accordion-heading">
           {{#if category.isCollapsed}}
-          <i class='icon-caret-left pull-right accordion-toggle'></i>
+          <i class='icon-caret-right pull-left accordion-toggle'></i>
           {{else}}
-          <i class='icon-caret-down pull-right accordion-toggle'></i>
+          <i class='icon-caret-down pull-left accordion-toggle'></i>
           {{/if}}
           <a class="accordion-toggle" {{action "onToggleBlock" category target="view"}}>
             {{category.name}}
diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs
index 8c663c7..3f53e35 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -137,6 +137,7 @@
 </div>
 </div>
 <div class="span6">
+  {{#if view.hasAlertsBox }}
 	<div class="box">
 		<div class="box-header">
 			<h4>Alerts and Health Checks</h4>
@@ -162,6 +163,7 @@
 			{{/if}}
 		</ul>
 	</div>
+  {{/if}}
 </div>
 </div>
 {{#if view.serviceMetricGraphs.length}}
diff --git a/ambari-web/app/templates/wizard/step2.hbs b/ambari-web/app/templates/wizard/step2.hbs
index ea26757..e33dbff 100644
--- a/ambari-web/app/templates/wizard/step2.hbs
+++ b/ambari-web/app/templates/wizard/step2.hbs
@@ -34,20 +34,20 @@
       </p>
 
       {{#if view.parentView.controller.hideBackButton}}
-        {{#if content.oldHostNames }}
+        {{#if content.hosts.oldHostNames }}
           <p class="alert alert-info">
             {{t hosts.add.step2.warning}}
             <br/>
-            {{{content.oldHostNames}}}
-              {{#if content.showMoreHostsText}}
-                <a href="" {{action showMoreHosts target="view.parentView.controller"}}>{{content.showMoreHostsText}}</a>
+            {{{content.hosts.oldHostNames}}}
+              {{#if content.hosts.showMoreHostsText}}
+                <a href="" {{action showMoreHosts target="view.parentView.controller"}}>{{content.hosts.showMoreHostsText}}</a>
               {{/if}}
           </p>
         {{/if}}
       {{/if}}
 
       <div class="controls">
-        {{view Ember.TextArea class="span6" valueBinding="content.hostNames" rows="5" placeholder="host names"}}
+        {{view Ember.TextArea class="span6" valueBinding="content.hosts.hostNames" rows="5" placeholder="host names"}}
         {{#if hostsError}}
         <p class="help-inline">{{hostsError}}</p>
         {{/if}}
@@ -64,10 +64,11 @@
       <div {{bindAttr class="sshKeyError:error :control-group"}}>
         {{#if view.isFileApi}}
           {{view App.SshKeyFileUploader}}
-          <pre {{bindAttr class="view.sshKeyPreviewClass"}}>{{content.sshKey}}</pre>
+          <pre {{bindAttr class="view.sshKeyPreviewClass"}}>{{content.hosts.sshKey}}</pre>
         {{/if}}
         <div class="controls">
-          {{view Ember.TextArea class="span6" rows="4" classBinding="view.sshKeyClass"  id="sshKey" placeholder="ssh private key" disabledBinding="view.sshKeyState" valueBinding="content.sshKey"}}
+          {{view Ember.TextArea class="span6" rows="4" classBinding="view.sshKeyClass"  id="sshKey"
+          placeholder="ssh private key" disabledBinding="view.sshKeyState" valueBinding="content.hosts.sshKey"}}
           {{#if sshKeyError}}
           <span class="help-inline">{{sshKeyError}}</span>
           {{/if}}
@@ -81,7 +82,7 @@
            rel="popover"
           {{translateAttr title="installer.step2.manualInstall.tooltip.title" data-content="installer.step2.manualInstall.tooltip.content"}}>
           Learn more</a>
-        {{view Ember.Checkbox checkedBinding="content.manualInstall"}}
+        {{view Ember.Checkbox checkedBinding="content.hosts.manualInstall"}}
       </label>
       </div>
 
@@ -92,11 +93,11 @@
       {{/if}}
 
       <!--
-    {{view Ember.TextField type="text" placeholder="passphrase" valueBinding="content.passphrase"}}
+    {{view Ember.TextField type="text" placeholder="passphrase" valueBinding="content.hosts.passphrase"}}
 
     <div {{bindAttr class="passphraseMatchErr:error :control-group :ambari-agents"}}>
       <div class="controls">
-        {{view Ember.TextField type="text" placeholder="confirm passphrase" valueBinding="content.confirmPassphrase"}}
+        {{view Ember.TextField type="text" placeholder="confirm passphrase" valueBinding="content.hosts.confirmPassphrase"}}
 
         {{#if passphraseMatchErr}}
         <p class="help-inline">{{t installer.step2.passphrase.error.match}}</p>
@@ -115,7 +116,7 @@
          rel="popover"
         {{translateAttr title="installer.step2.localRepo.tooltip.title" data-content="installer.step2.localRepo.tooltip.content"}}>
         Learn more</a>
-      {{view Ember.Checkbox checkedBinding="content.localRepo"}}
+      {{view Ember.Checkbox checkedBinding="content.hosts.localRepo"}}
     </label>
 
     {{#if "localRepo"}}
@@ -131,7 +132,7 @@
     <a class="btn pull-left" {{action back}}>&larr; Back</a>
     {{/unless}}
     <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action evaluateStep}}>
-      Discover and Validate &rarr;</a>
+      Register and Confirm &rarr;</a>
   </div>
 
 </div>
\ No newline at end of file
diff --git a/ambari-web/app/templates/wizard/step3.hbs b/ambari-web/app/templates/wizard/step3.hbs
index c0ed52b..461e32a 100644
--- a/ambari-web/app/templates/wizard/step3.hbs
+++ b/ambari-web/app/templates/wizard/step3.hbs
@@ -20,20 +20,22 @@
   <h2>{{t installer.step3.header}}</h2>
 
   <p class="alert alert-info">{{t installer.step3.body}}</p>
-
+  <div>{{controller.hostStatusSummary}}</div>
   <div class="box">
     <div class="box-header">
       <div class="button-section">
-        <a class="btn btn-primary decommission" {{bindAttr disabled="isRetryDisabled"}}
-           href="#" {{action retrySelectedHosts target="controller"}}><i
-                class="icon-repeat icon-white"></i>
-          Retry
-        </a>
         <a class="btn btn-primary" {{bindAttr disabled="noHostsSelected"}}
            href="#" {{action removeSelectedHosts target="controller" }}><i
                 class="icon-trash icon-white"></i>
-          Remove
+          Remove Selected
         </a>
+        {{#unless isRetryDisabled}}
+        <a class="btn btn-primary decommission"
+           href="#" {{action retrySelectedHosts target="controller"}}><i
+          class="icon-repeat icon-white"></i>
+          Retry Failed
+        </a>
+        {{/unless}}
         {{#if App.testMode}}
         <a class="btn btn-info"
            href="#" {{action mockBtn target="controller" }}>
@@ -47,12 +49,13 @@
 
         <div id="host-filter" class="dropdown pull-right">
           {{view Ember.Select class="pull-right"
-       contentBinding="controller.categories"
-       selectionBinding="controller.category"
-       }}
+              contentBinding="controller.categories"
+              optionValuePath="content.value"
+              optionLabelPath="content.label"
+              selectionBinding="controller.category"
+          }}
           <h5 class="pull-right">Show:</h5>
         </div>
-
       </div>
     </div>
 
diff --git a/ambari-web/app/templates/wizard/step7.hbs b/ambari-web/app/templates/wizard/step7.hbs
index f29b0bf..0682f15 100644
--- a/ambari-web/app/templates/wizard/step7.hbs
+++ b/ambari-web/app/templates/wizard/step7.hbs
@@ -39,9 +39,9 @@
     <div class="accordion-group {{unbound category.name}}">
       <div class="accordion-heading" {{action "onToggleBlock" category target="view"}}>
         {{#if category.isCollapsed}}
-        <i class='icon-caret-left pull-right accordion-toggle'></i>
+        <i class='icon-caret-right pull-left accordion-toggle'></i>
         {{else}}
-        <i class='icon-caret-down pull-right accordion-toggle'></i>
+        <i class='icon-caret-down pull-left accordion-toggle'></i>
         {{/if}}
         <a class="accordion-toggle">
           {{category.name}}
diff --git a/ambari-web/app/utils/data_table.js b/ambari-web/app/utils/data_table.js
index cd35bee..dff63f3 100644
--- a/ambari-web/app/utils/data_table.js
+++ b/ambari-web/app/utils/data_table.js
@@ -58,9 +58,11 @@
    * Custom methods for correct bandwidth sorting
    */
   "ambari-bandwidth-pre": function (bandwidth_string) {
-    bandwidth_string = (jQuery(bandwidth_string).text()) ? jQuery(bandwidth_string).text() : bandwidth_string;
     var convertedRowValue;
-    if (bandwidth_string === '<1KB') {
+    if (Boolean(bandwidth_string.match(/<.*>/g))) {
+        bandwidth_string = jQuery(bandwidth_string).text();
+    }
+    if (bandwidth_string === '<1KB' || bandwidth_string === '&lt;1KB') {
       convertedRowValue = 1;
     } else {
       var rowValueScale = bandwidth_string.substr(bandwidth_string.length - 2, 2);
@@ -252,7 +254,7 @@
       }
 
       function bandwidthFilter(rangeExp, rowValue) {
-        rowValue = $(rowValue).text();
+        //rowValue = $(rowValue).text();
         var compareChar = rangeExp.charAt(0);
         var compareScale = rangeExp.charAt(rangeExp.length - 1);
         var compareValue = isNaN(parseFloat(compareScale)) ? parseFloat(rangeExp.substr(1, rangeExp.length - 2)) : parseFloat(rangeExp.substr(1, rangeExp.length - 1));
@@ -264,6 +266,7 @@
             compareValue *= 1024;
         }
         rowValue = (jQuery(rowValue).text()) ? jQuery(rowValue).text() : rowValue;
+
         var convertedRowValue;
         if (rowValue === '<1KB') {
           convertedRowValue = 1;
diff --git a/ambari-web/app/utils/db.js b/ambari-web/app/utils/db.js
index a1247a5..47db810 100644
--- a/ambari-web/app/utils/db.js
+++ b/ambari-web/app/utils/db.js
@@ -106,13 +106,6 @@
   console.log('Now present value of authentication is: ' + App.db.data.app.authenticated);
 };
 
-App.db.setClusterName = function (name) {
-  console.log('TRACE: Entering db:setClusterName function');
-  App.db.data = localStorage.getObject('ambari');
-  App.db.data.Installer.ClusterName = name;
-  localStorage.setObject('ambari', App.db.data);
-};
-
 App.db.setAllHostNames = function (hostNames) {
   console.log('TRACE: Entering db:setAllHostNames function');
   App.db.data = localStorage.getObject('ambari');
@@ -120,6 +113,13 @@
   localStorage.setObject('ambari', App.db.data);
 };
 
+App.db.setAllHostNamesPattern = function (hostNames) {
+  console.log('TRACE: Entering db:setAllHostNamesPattern function');
+  App.db.data = localStorage.getObject('ambari');
+  App.db.data.Installer.hostNamesPattern = hostNames;
+  localStorage.setObject('ambari', App.db.data);
+};
+
 App.db.setHosts = function (hostInfo) {
   console.log('TRACE: Entering db:setHosts function');
   App.db.data = localStorage.getObject('ambari');
@@ -225,7 +225,7 @@
   localStorage.setObject('ambari', App.db.data);
 };
 
-App.db.setClusterStatus = function (status) {
+App.db.setCluster = function (status) {
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.clusterStatus = status;
   console.log('db.setClusterStatus called: ' + JSON.stringify(status));
@@ -236,13 +236,11 @@
  * Set current step value for specified Wizard Type
  * @param wizardType
  * @param currentStep
- * @param completed
  */
-App.db.setWizardCurrentStep = function (wizardType, currentStep, completed) {
+App.db.setWizardCurrentStep = function (wizardType, currentStep) {
   console.log('TRACE: Entering db:setWizardCurrentStep function');
 
   App.db.data[wizardType.capitalize()].currentStep = currentStep;
-  App.db.data[wizardType.capitalize()].completed = completed;
 
   localStorage.setObject('ambari', App.db.data);
 };
@@ -274,12 +272,6 @@
   return App.db.data.app.authenticated;
 };
 
-App.db.getClusterName = function () {
-  console.log('Trace: Entering db:getClusterName function');
-  App.db.data = localStorage.getObject('ambari');
-  return App.db.data.Installer.ClusterName;
-};
-
 App.db.getAmbariStacks = function () {
   console.log('TRACE: Entering db:setAmbariStacks function');
   App.db.data = localStorage.getObject('ambari');
@@ -305,6 +297,12 @@
   return App.db.data.Installer.hostNames;
 };
 
+App.db.getAllHostNamesPattern = function () {
+  console.log('TRACE: Entering db:getHostNamesPattern function');
+  App.db.data = localStorage.getObject('ambari');
+  return App.db.data.Installer.hostNamesPattern;
+};
+
 App.db.getInstallType = function () {
   console.log('TRACE: Entering db:getHostNames function');
   App.db.data = localStorage.getObject('ambari');
@@ -390,7 +388,7 @@
   return App.db.data.Installer.slaveProperties;
 };
 
-App.db.getClusterStatus = function () {
+App.db.getCluster = function () {
   console.log('TRACE: Entering db:getClusterStatus function');
   App.db.data = localStorage.getObject('ambari');
   return App.db.data.Installer.clusterStatus;
diff --git a/ambari-web/app/utils/graph.js b/ambari-web/app/utils/graph.js
index 438b1e8..736c6e9 100644
--- a/ambari-web/app/utils/graph.js
+++ b/ambari-web/app/utils/graph.js
@@ -169,7 +169,8 @@
 
     var yAxis = new Rickshaw.Graph.Axis.Y({
       graph:graph,
-      ticksTreatment:ticksTreatment
+      ticksTreatment:ticksTreatment,
+      tickFormat: function(y) { return y / 1000 + 's' }
     });
     yAxis.render();
 
diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js
index 5b62093..94d289e 100644
--- a/ambari-web/app/utils/helper.js
+++ b/ambari-web/app/utils/helper.js
@@ -243,11 +243,11 @@
       case 'NAMENODE':
         return 'NameNode';
       case 'NAMENODE_SERVICE_CHECK':
-        return 'NameNode Service Check';
+        return 'NameNode Check';
       case 'DATANODE':
         return 'DataNode';
       case 'HDFS_SERVICE_CHECK':
-        return 'HDFS Service Check';
+        return 'HDFS Check';
       case 'SECONDARY_NAMENODE':
         return 'SNameNode';
       case 'HDFS_CLIENT':
@@ -275,15 +275,15 @@
       case 'HADOOP_CLIENT':
         return 'Hadoop Client';
       case 'JOBTRACKER_SERVICE_CHECK':
-        return 'JobTracker Service Check';
+        return 'JobTracker Check';
       case 'MAPREDUCE_SERVICE_CHECK':
-        return 'MapReduce Service Check';
+        return 'MapReduce Check';
       case 'ZOOKEEPER_SERVICE_CHECK':
-        return 'ZooKeeper Service Check';
+        return 'ZooKeeper Check';
       case 'ZOOKEEPER_QUORUM_SERVICE_CHECK':
-        return 'ZooKeeper Quorum Service Check';
+        return 'ZK Quorum Check';
       case  'HBASE_SERVICE_CHECK':
-        return 'HBase Service Check';
+        return 'HBase Check';
       case 'MYSQL_SERVER':
         return 'MySQL Server';
       case 'HIVE_SERVER':
@@ -291,31 +291,31 @@
       case 'HIVE_CLIENT':
         return 'Hive Client';
       case 'HIVE_SERVICE_CHECK':
-        return 'Hive Service Check';
+        return 'Hive Check';
       case 'HCAT':
         return 'HCat';
       case 'HCAT_SERVICE_CHECK':
-        return 'HCat Service Check';
+        return 'HCat Check';
       case 'OOZIE_CLIENT':
         return 'Oozie Client';
       case 'OOZIE_SERVER':
         return 'Oozie Server';
       case 'OOZIE_SERVICE_CHECK':
-        return 'Oozie Service Check';
+        return 'Oozie Check';
       case 'PIG':
         return 'Pig';
       case 'PIG_SERVICE_CHECK':
-        return 'Pig Service Check';
+        return 'Pig Check';
       case 'SQOOP':
         return 'Sqoop';
       case 'SQOOP_SERVICE_CHECK':
-        return 'Sqoop Service Check';
+        return 'Sqoop Check';
       case 'TEMPLETON_CLIENT':
         return 'Templeton Client';
       case 'TEMPLETON_SERVER':
         return 'Templeton Server';
       case 'TEMPLETON_SERVICE_CHECK':
-        return 'Templeton Service Check';
+        return 'Templeton Check';
       case 'NAGIOS_SERVER':
         return 'Nagios Server';
       case 'GANGLIA_SERVER':
@@ -323,9 +323,9 @@
       case 'GANGLIA_MONITOR':
         return 'Ganglia Monitor';
       case 'GMOND_SERVICE_CHECK':
-        return 'Gmond Service Check'
+        return 'Gmond Check'
       case 'GMETAD_SERVICE_CHECK':
-        return 'Gmetad Service Check';
+        return 'Gmetad Check';
       case 'DECOMMISSION_DATANODE':
         return 'Decommission DataNode';
     }
@@ -343,4 +343,12 @@
   taskStatus:function (_taskStatus) {
     return _taskStatus.replace('_', ' ').toLowerCase();
   }
-};
\ No newline at end of file
+};
+
+Array.prototype.removeAll = function(array){
+  var temp = array;
+  for(var i = 0 ; i < array.length ; i++ ){
+    temp = temp.without(array[i]);
+  }
+  return temp;
+};
diff --git a/ambari-web/app/views/common/chart/linear_time.js b/ambari-web/app/views/common/chart/linear_time.js
index e10a0a6..88c7153 100644
--- a/ambari-web/app/views/common/chart/linear_time.js
+++ b/ambari-web/app/views/common/chart/linear_time.js
@@ -92,17 +92,23 @@
 
       isPopup: false,
 
+      isReady: false,
+
+      isPopupReady: false,
+
       /**
        * Color palette used for this chart
-       * 
+       *
        * @private
        * @type String[]
        */
+       /*
       _paletteScheme: [ 'rgba(181,182,169,0.4)', 'rgba(133,135,114,0.4)',
           'rgba(120,95,67,0.4)', 'rgba(150,85,126,0.4)',
           'rgba(70,130,180,0.4)', 'rgba(0,255,204,0.4)',
           'rgba(255,105,180,0.4)', 'rgba(101,185,172,0.4)',
           'rgba(115,192,58,0.4)', 'rgba(203,81,58,0.4)' ].reverse(),
+      */
 
       init: function () {
         this._super();
@@ -135,7 +141,7 @@
           hash.dataType = 'json';
           hash.contentType = 'application/json; charset=utf-8';
           hash.context = this;
-          hash.success = this._refreshGraph;
+          hash.success = this._refreshGraph,
           hash.error = function (xhr, textStatus, errorThrown) {
             this._showMessage('warn', 'Error', 'There was a problem getting data for the chart (' + textStatus + ': ' + errorThrown + ')');
           }
@@ -267,6 +273,7 @@
           this.draw(seriesData);
         }
         else {
+          this.set('isReady', true);
           this._showMessage('info', 'No Data', 'There was no data available.');
         }
       },
@@ -315,13 +322,21 @@
         if (isPopup) {
           p = this.get('popupSuffix');
         }
-        var palette = new Rickshaw.Color.Palette({
-          scheme: this._paletteScheme
-        });
+        var palette = new Rickshaw.Color.Palette({ scheme: 'munin'});
+
+        // var palette = new Rickshaw.Color.Palette({
+        //   scheme: this._paletteScheme
+        // });
+
         var self = this;
         var series_min_length = 100000000;
         seriesData.forEach(function (series, index) {
-          series.color = /*this.colorForSeries(series) ||*/ palette.color();
+          // Don't draw empty graph
+          if (series.data.length == 0) {
+            this.set('isPopup', false);
+            return;
+          }
+          series.color = palette.color();
           series.stroke = 'rgba(0,0,0,0.3)';
           if (isPopup) {
             // calculate statistic data for popup legend
@@ -355,22 +370,27 @@
         var xaxisElementId = "#" + this.id + "-xaxis" + p;
         var yaxisElementId = "#" + this.id + "-yaxis" + p;
         var legendElementId = "#" + this.id + "-legend" + p;
-        var timelineElementId = "#" + this.id + "-timeline" + p;
 
         var chartElement = document.querySelector(chartId);
         var overlayElement = document.querySelector(chartOverlayId);
         var xaxisElement = document.querySelector(xaxisElementId);
         var yaxisElement = document.querySelector(yaxisElementId);
         var legendElement = document.querySelector(legendElementId);
-        var timelineElement = document.querySelector(timelineElementId);
 
         var strokeWidth = 1;
         if (this.get('renderer') != 'area') {
           strokeWidth = 2;
         }
 
+        var height = 150;
+        var width = 400;
+        if (isPopup) {
+          height = 180;
+          width = 670;
+        }
         var _graph = new Rickshaw.Graph({
-          height: 150,
+          height: height,
+          width: width,
           element: chartElement,
           series: seriesData,
           interpolation: 'step-after',
@@ -378,16 +398,23 @@
           renderer: this.get('renderer'),
           strokeWidth: strokeWidth
         });
-        _graph.renderer.unstack = false;
+        if (this.get('renderer') === 'area') {
+          _graph.renderer.unstack = false;
+        }
 
         xAxis = new Rickshaw.Graph.Axis.Time({
           graph: _graph,
           timeUnit: this.localeTimeUnit()
         });
 
+        var orientation = 'right';
+        if (isPopup) {
+          orientation = 'left';
+        }
         yAxis = new Rickshaw.Graph.Axis.Y({
           tickFormat: this.yAxisFormatter,
           element: yaxisElement,
+          orientation: orientation,
           graph: _graph
         });
 
@@ -419,13 +446,12 @@
           graph: _graph,
           legend: legend
         });
-
-        var annotator = new Rickshaw.Graph.Annotate({
-          graph: _graph,
-          element: timelineElement
+        //show the graph when it's loaded
+        _graph.onUpdate(function(){
+          self.set('isReady', true);
         });
-
         _graph.render();
+
         if (isPopup) {
           var self = this;
           var hoverDetail = new Rickshaw.Graph.HoverDetail({
@@ -453,17 +479,20 @@
               }
             }
           });
+          //show the graph when it's loaded
+          _graph.onUpdate(function(){
+            self.set('isPopupReady', true);
+          });
           _graph.update();
 
-          $('#'+self.get('id')+'-container'+self.get('popupSuffix')+' a.action').click(function() {
-            var series = new Array();
+          $('li.line').click(function() {
+            var series = [];
             $('#'+self.get('id')+'-container'+self.get('popupSuffix')+' a.action').each(function(index, v) {
               series[index] = v.parentNode.classList;
             });
             self.set('_seriesProperties', series);
           });
 
-
           this.set('_popupGraph', _graph);
         }
         else {
@@ -488,15 +517,15 @@
             '</div>',
             '<div class="modal-body">',
             '{{#if bodyClass}}{{view bodyClass}}',
-            '{{else}}'+
-              '<div id="'+this.get('id')+'-container'+this.get('popupSuffix')+'" class="chart-container chart-container'+this.get('popupSuffix')+'">'+
-                '<div id="'+this.get('id')+'-yaxis'+this.get('popupSuffix')+'" class="'+this.get('id')+'-yaxis chart-y-axis"></div>'+
-                '<div id="'+this.get('id')+'-xaxis'+this.get('popupSuffix')+'" class="'+this.get('id')+'-xaxis chart-x-axis"></div>'+
-                '<div id="'+this.get('id')+'-legend'+this.get('popupSuffix')+'" class="'+this.get('id')+'-legend chart-legend"></div>'+
-                '<div id="'+this.get('id')+'-chart'+this.get('popupSuffix')+'" class="'+this.get('id')+'-chart chart"></div>'+
+            '{{else}}',
+              '<div class="screensaver no-borders chart-container" {{bindAttr class="view.isReady:hide"}} ></div>',
+              '<div id="'+this.get('id')+'-container'+this.get('popupSuffix')+'" class="chart-container chart-container'+this.get('popupSuffix')+' hide" {{bindAttr class="view.isReady:show"}} >',
+                '<div id="'+this.get('id')+'-yaxis'+this.get('popupSuffix')+'" class="'+this.get('id')+'-yaxis chart-y-axis"></div>',
+                '<div id="'+this.get('id')+'-xaxis'+this.get('popupSuffix')+'" class="'+this.get('id')+'-xaxis chart-x-axis"></div>',
+                '<div id="'+this.get('id')+'-legend'+this.get('popupSuffix')+'" class="'+this.get('id')+'-legend chart-legend"></div>',
+                '<div id="'+this.get('id')+'-chart'+this.get('popupSuffix')+'" class="'+this.get('id')+'-chart chart"></div>',
                 '<div id="'+this.get('id')+'-title'+this.get('popupSuffix')+'" class="'+this.get('id')+'-title chart-title">{{view.title}}</div>'+
-                '<div id="'+this.get('id')+'-timeline'+this.get('popupSuffix')+'" class="'+this.get('id')+'-timeline timeline"></div>'+
-              '</div>'+
+              '</div>',
             '{{/if}}',
             '</div>',
             '<div class="modal-footer">',
@@ -506,6 +535,10 @@
           ].join('\n')),
 
           header: this.get('title'),
+          self: self,
+          isReady: function(){
+            return this.get('self.isPopupReady');
+          }.property('self.isPopupReady'),
           primary: 'OK',
           onPrimary: function() {
             this.hide();
@@ -514,6 +547,7 @@
         });
         Ember.run.next(function() {
           self.loadData();
+          self.set('isPopupReady', false);
         });
       }
     });
diff --git a/ambari-web/app/views/common/modal_popup.js b/ambari-web/app/views/common/modal_popup.js
index 02e3626..b7b15a5 100644
--- a/ambari-web/app/views/common/modal_popup.js
+++ b/ambari-web/app/views/common/modal_popup.js
@@ -33,10 +33,12 @@
     '{{#if bodyClass}}{{view bodyClass}}',
     '{{else}}{{#if encodeBody}}{{body}}{{else}}{{{body}}}{{/if}}{{/if}}',
     '</div>',
+    '{{#if showFooter}}',
     '<div class="modal-footer">',
     '{{#if view.secondary}}<a class="btn" {{action onSecondary target="view"}}>{{view.secondary}}</a>{{/if}}',
     '{{#if view.primary}}<a class="btn btn-success" {{action onPrimary target="view"}}>{{view.primary}}</a>{{/if}}',
     '</div>',
+    '{{/if}}',
     '</div>'
   ].join('\n')),
 
@@ -60,8 +62,15 @@
 
   hide: function() {
     this.destroy();
-  }
+  },
 
+  showFooter: true,
+
+  didInsertElement: function(){
+    this._super();
+    var block = this.$().find('#modal').first();
+    block.css('max-height', $(window).height()-20); // fix popup height
+  }
 });
 
 App.ModalPopup.reopenClass({
diff --git a/ambari-web/app/views/login.js b/ambari-web/app/views/login.js
index 6f9faef..3c3c9fd 100644
--- a/ambari-web/app/views/login.js
+++ b/ambari-web/app/views/login.js
@@ -22,6 +22,12 @@
 App.LoginView = Em.View.extend({
 
   templateName: require('templates/login'),
+  loginTextField: Em.TextField.extend({
+    didInsertElement: function(){
+      this._super();
+      this.$().focus();
+    }
+  }),
   passTextField : Em.TextField.extend({
     insertNewline: function(){
       this.get("controller").submit();
diff --git a/ambari-web/app/views/main.js b/ambari-web/app/views/main.js
index ebd6482..0e0da78 100644
--- a/ambari-web/app/views/main.js
+++ b/ambari-web/app/views/main.js
@@ -27,14 +27,31 @@
   content: null,
   classNames: ['background-operations'],
   classNameBindings: ['isOpen'],
-  isOpen: false,
+  isOpen: function () {
+    return this.get('content.isOpen');
+  }.property('content.isOpen'),
   iconClass: function(){
     return this.get('isOpen') ? 'icon-minus' : 'icon-plus';
   }.property('isOpen'),
   showOperationLog:function(){
-    this.set('isOpen', !this.get('isOpen'));
+    this.set('content.isOpen', !this.get('content.isOpen'));
     this.set('isTextArea', false);
   },
+  hasProgressBar: function () {
+    return this.get('content.command') == 'EXECUTE';
+  }.property('content.command'),
+  isInProgress: function () {
+    var status = this.get('content.status');
+    return status == 'IN_PROGRESS' || status == 'QUEUED' || status == 'PENDING';
+  }.property('content.status'),
+  barColor: function () {
+    if (this.get('isInProgress')) {
+      return 'progress-info';
+    } else {
+      if (this.get('content.status') == 'COMPLETED') return 'progress-success';
+      return 'progress-danger';
+    }
+  }.property('isInProgress'),
   buttonLabel:function(){
     var button = $(this.get('element')).find('.textTrigger');
     if(this.get('isTextArea')){
diff --git a/ambari-web/app/views/main/dashboard/cluster_metrics/cpu.js b/ambari-web/app/views/main/dashboard/cluster_metrics/cpu.js
index b9afa0e..e89c0b8 100644
--- a/ambari-web/app/views/main/dashboard/cluster_metrics/cpu.js
+++ b/ambari-web/app/views/main/dashboard/cluster_metrics/cpu.js
@@ -40,6 +40,7 @@
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     if (jsonData && jsonData.metrics && jsonData.metrics.cpu) {
+      var cpu_idle;
       for ( var name in jsonData.metrics.cpu) {
         var displayName = name;
         var seriesData = jsonData.metrics.cpu[name];
@@ -58,9 +59,15 @@
               y: seriesData[index][0]
             });
           }
-          seriesArray.push(series);
+          if (name != 'Idle') {
+            seriesArray.push(series);
+          }
+          else {
+            cpu_idle = series;
+          }
         }
       }
+      seriesArray.push(cpu_idle);
     }
     return seriesArray;
   },
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index b6193de..3c70e6b 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -305,7 +305,6 @@
       self.get('parentView').get('oTable').fnFilter('', 6);
       jQuery('#components_filter').closest('th').addClass('notActive');
     },
-
     closeFilters:function () {
       $(document).unbind('click');
       this.clickFilterButton();
@@ -333,12 +332,10 @@
         });
       }
     },
-    /*closeFilter: function(){
-     this.set('open', false);
-     },*/
     applyFilter:function() {
       var chosenComponents = new Array();
-      this.set('open', !this.get('open'));
+
+      this.set('isFilterOpen', !this.get('isFilterOpen'));
       this.get('masterComponents').forEach(function(item){
         if(item.get('checkedForHostFilter')) chosenComponents.push(item.get('displayName'));
       });
diff --git a/ambari-web/app/views/main/host/metrics/cpu.js b/ambari-web/app/views/main/host/metrics/cpu.js
index 111ac64..0b56af5 100644
--- a/ambari-web/app/views/main/host/metrics/cpu.js
+++ b/ambari-web/app/views/main/host/metrics/cpu.js
@@ -31,6 +31,7 @@
   title: "CPU Usage",
   yAxisFormatter: App.ChartLinearTimeView.PercentageFormatter,
 
+
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/cpu/cpu_user[{fromSeconds},{toSeconds},{stepSeconds}],metrics/cpu/cpu_wio[{fromSeconds},{toSeconds},{stepSeconds}],metrics/cpu/cpu_nice[{fromSeconds},{toSeconds},{stepSeconds}],metrics/cpu/cpu_aidle[{fromSeconds},{toSeconds},{stepSeconds}],metrics/cpu/cpu_system[{fromSeconds},{toSeconds},{stepSeconds}],metrics/cpu/cpu_idle[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),
@@ -41,6 +42,7 @@
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     if (jsonData && jsonData.metrics && jsonData.metrics.cpu) {
+      var cpu_idle;
       for ( var name in jsonData.metrics.cpu) {
         var displayName;
         var seriesData = jsonData.metrics.cpu[name];
@@ -81,9 +83,15 @@
               y: seriesData[index][0]
             });
           }
-          seriesArray.push(series);
+          if (name != 'cpu_idle') {
+            seriesArray.push(series);
+          }
+          else {
+            cpu_idle = series;
+          }
         }
       }
+      seriesArray.push(cpu_idle);
     }
     return seriesArray;
   },
diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js
index f2c7777..ab1bcda 100644
--- a/ambari-web/app/views/main/menu.js
+++ b/ambari-web/app/views/main/menu.js
@@ -31,7 +31,7 @@
       { label:'Charts', routing:'charts'},
       { label:'Services', routing:'services'},
       { label:'Hosts', routing:'hosts'},
-      { label:'Apps', routing:'apps'}
+      { label:'Jobs', routing:'apps'}
 
     ];
       if(App.db.getUser().admin) result.push({ label:'Admin', routing:'admin'});
diff --git a/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_heap.js b/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_heap.js
index 968ecb9..3cf12f0 100644
--- a/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_heap.js
+++ b/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_heap.js
@@ -30,7 +30,7 @@
   id: "service-metrics-mapreduce-jvm-heap",
   title: "JVM Memory Status",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-
+  renderer: 'line',
   url: function () {
     var mrService = App.MapReduceService.find().objectAt(0);
     var jtHostName = mrService.get('jobTracker').get('hostName');
diff --git a/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_threads.js b/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_threads.js
index 21cda67..db220af 100644
--- a/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_threads.js
+++ b/ambari-web/app/views/main/service/info/metrics/mapreduce/jvm_threads.js
@@ -29,7 +29,7 @@
 App.ChartServiceMetricsMapReduce_JVMThreads = App.ChartLinearTimeView.extend({
   id: "service-metrics-mapreduce-jvm-threads",
   title: "JVM Thread Status",
-
+  renderer: 'line',
   url: function () {
     var mrService = App.MapReduceService.find().objectAt(0);
     var jtHostName = mrService.get('jobTracker').get('hostName');
diff --git a/ambari-web/app/views/main/service/info/summary.js b/ambari-web/app/views/main/service/info/summary.js
index c6eb6ca..e1839e4 100644
--- a/ambari-web/app/views/main/service/info/summary.js
+++ b/ambari-web/app/views/main/service/info/summary.js
@@ -239,5 +239,11 @@
     });
 
     return names.length ? names.join(', ') : false;
-  }.property('clientComponents')
+  }.property('clientComponents'),
+  hasAlertsBox: function(){
+    var services = [
+      'NAGIOS'
+    ];
+    return -1 === services.indexOf(this.get('controller.content.serviceName'));
+  }.property('controller.content.serviceName')
 });
\ No newline at end of file
diff --git a/ambari-web/app/views/main/service/item.js b/ambari-web/app/views/main/service/item.js
index 7e63427..f6dd4ba 100644
--- a/ambari-web/app/views/main/service/item.js
+++ b/ambari-web/app/views/main/service/item.js
@@ -27,9 +27,9 @@
 //      case 'HDFS':
 //        options.push({action: 'runRebalancer', 'label': Em.I18n.t('services.service.actions.run.rebalancer')});
 //        break;
-      case 'HBASE':
-        options.push({action: 'runCompaction', 'label': Em.I18n.t('services.service.actions.run.compaction')});
-        break;
+//      case 'HBASE':
+//        options.push({action: 'runCompaction', 'label': Em.I18n.t('services.service.actions.run.compaction')});
+//        break;
       default:
         options.push({action: 'runSmokeTest', 'label': Em.I18n.t('services.service.actions.run.smoke')});
     }
diff --git a/ambari-web/app/views/wizard/step1_view.js b/ambari-web/app/views/wizard/step1_view.js
index e633cee..955eb5c 100644
--- a/ambari-web/app/views/wizard/step1_view.js
+++ b/ambari-web/app/views/wizard/step1_view.js
@@ -35,7 +35,8 @@
   }.property('controller.clusterNameError'),
 
   submit: function(event) {
-    App.router.wizardStep1Controller.submit();
+    this.get('controller').submit();
+    return false;
   }
 
 });
diff --git a/ambari-web/app/views/wizard/step2_view.js b/ambari-web/app/views/wizard/step2_view.js
index 0479af1..a41e647 100644
--- a/ambari-web/app/views/wizard/step2_view.js
+++ b/ambari-web/app/views/wizard/step2_view.js
@@ -32,7 +32,7 @@
         return function(e) {
           $('#sshKey').html(e.target.result);
           //$('.sshKey-file-view').html(e.target.result);
-          self.set("controller.content.sshKey", e.target.result);
+          self.set("controller.content.hosts.sshKey", e.target.result);
         };
       })(file);
       reader.readAsText(file);
@@ -62,8 +62,8 @@
   }.observes('controller.hostNameEmptyError', 'controller.hostNameNotRequiredErr', 'controller.hostNameErr'),
 
   sshKeyState: function(){
-    return this.get("controller").get("content.manualInstall");
-  }.property("controller.content.manualInstall"),
+    return this.get("controller.content.hosts.manualInstall");
+  }.property("controller.content.hosts.manualInstall"),
 
   sshKeyClass:function() {
     //alert(this.get("isFileApi"))
@@ -75,8 +75,8 @@
   }.property(),
 
   sshKeyPreviewClass: function() {
-    if (this.get('controller.content.sshKey').trim() != '') {
-      if (this.get('controller.content.manualInstall')) {
+    if (this.get('controller.content.hosts.sshKey').trim() != '') {
+      if (this.get('controller.content.hosts.manualInstall')) {
         return 'sshKey-file-view disabled';
       } else {
         return 'sshKey-file-view';
@@ -84,7 +84,7 @@
     } else {
       return 'hidden';
     }
-  }.property('controller.content.sshKey', 'controller.content.manualInstall')
+  }.property('controller.content.hosts.sshKey', 'controller.content.hosts.manualInstall')
 
 });
 
diff --git a/ambari-web/app/views/wizard/step9_view.js b/ambari-web/app/views/wizard/step9_view.js
index bd12895..ae3935b 100644
--- a/ambari-web/app/views/wizard/step9_view.js
+++ b/ambari-web/app/views/wizard/step9_view.js
@@ -198,7 +198,7 @@
           return roleArr;
         }.property('startedTasks.@each'),
 
-        didInsertElement: function () {debugger;
+        didInsertElement: function () {
           console.log('The value of event context is: ' + host.name);
           this.get('roles').forEach(function (role) {
             role.taskInfos.forEach(function (task) {
