 +      }else if(schemaPath.length == 2){
 +          self.editor_holder.parentElement.setAttribute('style','position: relative;padding-right:0px;padding-left:11px;');
 +      }
-+      if(this.schema.collapse && !clickAddItem){
-+          this.toggle_button = this.getButton('','expand','Expand');
-+          this.title_controls.appendChild(this.toggle_button);
-+          self.editor_holder.style.display = 'none';
-+          this.collapsed = true;
++      if(this.schema.collapse){
++          if(this.schema.title !== undefined){
++              var title = this.schema.title.split('');
++              if(title[0] == '[' && clickAddItem){
++                  this.toggle_button = this.getButton('','collapse','Collapse');
++                  this.title_controls.appendChild(this.toggle_button);
++                  self.editor_holder.style.display = '';
++                  this.collapsed = false;
++              }else{
++                  this.toggle_button = this.getButton('','expand','Expand');
++                  this.title_controls.appendChild(this.toggle_button);
++                  self.editor_holder.style.display = 'none';
++                  this.collapsed = true;
++              }
++          }else{
++              this.toggle_button = this.getButton('','expand','Expand');
++              this.title_controls.appendChild(this.toggle_button);
++              self.editor_holder.style.display = 'none';
++              this.collapsed = true;
++          }
 +      }else{
 +          this.toggle_button = this.getButton('','collapse','Collapse');
 +          this.title_controls.appendChild(this.toggle_button);
 +          self.editor_holder.style.display = '';
 +          this.collapsed = false;
 +      }
-+
++      this.title.addEventListener('click',function(e) {
++          e.preventDefault();
++          e.stopPropagation();
++          if(self.collapsed) {
++            $(self.editor_holder).slideDown(700);
++            self.collapsed = false;
++            self.setButtonText(self.toggle_button,'','collapse','Collapse');
++            this.firstChild.firstChild.setAttribute('style','margin-top:-8px;');
++          }
++          else {
++            $(self.editor_holder).slideUp(700);
++            self.collapsed = true;
++            self.setButtonText(self.toggle_button,'','expand','Expand');
++            this.firstChild.firstChild.setAttribute('style','margin-top:0px;');
++          }
++      });
        this.toggle_button.addEventListener('click',function(e) {
          e.preventDefault();
          e.stopPropagation();
          if(self.collapsed) {
 -          self.editor_holder.style.display = '';
-+          //self.editor_holder.style.display = '';
 +          $(self.editor_holder).slideDown(700);
            self.collapsed = false;
            self.setButtonText(self.toggle_button,'','collapse','Collapse');

     return el;
   },
   getTable: function() {
@@ -7394,26 +7998,26 @@
 
 JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({
   mapping: {

     if(this.schema.readOnly || this.schema.readonly || this.schema.template) {
       this.always_disabled = true;
       this.input.disabled = true;
@@ -2108,8 +2200,15 @@
     }
 
     if(this.format) this.input.setAttribute('data-schemaformat',this.format);
-
-    this.control = this.theme.getFormControl(this.label, this.input, this.description);
+    if(this.schema.description){
+        this.input.setAttribute('title',this.schema.description);
+    }
+    if(this.schema.required == 'required' || this.schema.required == 'true'){
+        var icon = document.createElement('i');
+        icon.className = 'fa fa-asterisk jsonEditor-form-asterisk';
+        this.label.appendChild(icon);
+    }
+    this.control = this.theme.getFormControl(this.label, this.input, this.description,this.hideIconForProp);
     this.container.appendChild(this.control);
 
     // Any special formatting that needs to happen after the input is added to the dom
@@ -2482,13 +2581,34 @@
     else {
       container = document.createElement('div');
       $each(this.property_order, function(i,key) {
