diff --git a/src/containers/editable-container.js b/src/containers/editable-container.js
index 609cfea..6b0ac34 100644
--- a/src/containers/editable-container.js
+++ b/src/containers/editable-container.js
@@ -137,7 +137,9 @@ Applied as jQuery method.
                 resize: $.proxy(this.setPosition, this), //this allows to re-position container when form size is changed 
                 rendered: $.proxy(function(){
                     /**        
-                    Fired when container is shown and form is rendered (for select will wait for loading dropdown options)
+                    Fired when container is shown and form is rendered (for select will wait for loading dropdown options).
+                    **Note:** Bootstrap popover has own `shown` event that now cannot be separated from x-editable's one.
+                    The workaround is to check `arguments.length` that is always `2` for x-editable.                     
                     
                     @event shown 
                     @param {Object} event event object
@@ -147,7 +149,10 @@ Applied as jQuery method.
                         editable.input.$input.val('overwriting value of input..');
                     });                     
                     **/                      
-                    this.$element.triggerHandler('shown');
+                    /*
+                     added second param mainly to distinguish bootstrap's shown event. It's a hotfix that will be solved in 1.5 via namespaced events.  
+                    */
+                    this.$element.triggerHandler('shown', this); 
                 }, this) 
             })
             .editableform('render');
@@ -213,11 +218,13 @@ Applied as jQuery method.
             this.innerHide();
             
             /**        
-            Fired when container was hidden. It occurs on both save or cancel.
+            Fired when container was hidden. It occurs on both save or cancel.  
+            **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one.
+            The workaround is to check `arguments.length` that is always `2` for x-editable. 
 
             @event hidden 
             @param {object} event event object
-            @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|undefined (=manual)</code>
+            @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|manual</code>
             @example
             $('#username').on('hidden', function(e, reason) {
                 if(reason === 'save' || reason === 'cancel') {
@@ -226,7 +233,7 @@ Applied as jQuery method.
                 } 
             });            
             **/             
-            this.$element.triggerHandler('hidden', reason);   
+            this.$element.triggerHandler('hidden', reason || 'manual');   
         },
         
         /* internal show method. To be overwritten in child classes */
diff --git a/test/unit/api.js b/test/unit/api.js
index 1579b80..aff15c8 100644
--- a/test/unit/api.js
+++ b/test/unit/api.js
@@ -85,12 +85,16 @@ $(function () {
             e = $('<a href="#" data-pk="1" data-type="select" data-url="post.php" data-name="text" data-value="'+val+'"></a>').appendTo(fx);
         
         e.on('shown', function(event) {
-             var editable = $(this).data('editable');
-             equal(editable.value, val, 'shown triggered, value correct');
+            //distinguish from native bootstrap popover event
+            if(arguments.length != 2) return;
+            var editable = $(this).data('editable');
+            equal(editable.value, val, 'shown triggered, value correct');
         });
         
         e.on('hidden', function(event, reason) {
-             ok((reason === test_reason) || (test_reason === 'manual' && reason === undefined), 'hidden triggered, reason ok'); 
+            //distinguish from native bootstrap popover event
+            if(arguments.length != 2) return;
+            ok((reason === test_reason) || (test_reason === 'manual' && reason === undefined), 'hidden triggered, reason ok'); 
         });            
         
         e.editable({
@@ -104,28 +108,28 @@ $(function () {
              
              test_reason = 'cancel'
              p.find('.editable-cancel').click();  //cancel
-             ok(!p.is(':visible'), 'popover closed');
+             ok(!p.is(':visible'), 'popover closed '+test_reason);
 
              test_reason = 'onblur'            
              e.click();
              p = tip(e);
-             ok(p.is(':visible'), 'popover shown');
+             ok(p.is(':visible'), 'popover shown '+test_reason);
              e.parent().click();
-             ok(!p.is(':visible'), 'popover closed');
+             ok(!p.is(':visible'), 'popover closed '+test_reason);
              
              test_reason = 'nochange'            
              e.click();
              p = tip(e);
-             ok(p.is(':visible'), 'popover shown');
+             ok(p.is(':visible'), 'popover shown '+test_reason);
              p.find('form').submit();  //submit value without changes
-             ok(!p.is(':visible'), 'popover closed');             
+             ok(!p.is(':visible'), 'popover closed '+test_reason);             
              
              test_reason = 'manual'            
              e.click();
              p = tip(e);
-             ok(p.is(':visible'), 'popover shown');
+             ok(p.is(':visible'), 'popover shown '+test_reason);
              e.editable('hide');
-             ok(!p.is(':visible'), 'popover closed');             
+             ok(!p.is(':visible'), 'popover closed '+test_reason);             
              
              e.remove();    
              start();  
@@ -143,6 +147,8 @@ $(function () {
         });
         
         e.on('hidden', function(event, reason) {
+            //distinguish from native bootstrap popover event
+            if(arguments.length != 2) return;            
             equal(reason, 'save', 'hidden triggered, reason ok'); 
         });