diff --git a/js/modal.js b/js/modal.js
index 7433de4c8eb184df0b5974aa244bbfc0162c86b5..43e961baa90d49c0a8b333cbc5f3b5ae15067a58 100644
--- a/js/modal.js
+++ b/js/modal.js
@@ -160,11 +160,12 @@
       this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
         .appendTo(document.body)
 
-      this.$backdrop.click(
-        this.options.backdrop == 'static' ?
-          $.proxy(this.$element[0].focus, this.$element[0])
-        : $.proxy(this.hide, this)
-      )
+      this.$element.on('click', $.proxy(function (e) {
+        if (e.target !== e.currentTarget) return
+        this.options.backdrop == 'static'
+          ? this.$element[0].focus.call(this.$element[0])
+          : this.hide.call(this)
+      }, this))
 
       if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
 
diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js
index 9187b5e23a48cf9aa2d9fd2a3cdc9f25cce3bc0c..90762ea9011df027e3c374766ec4aa38e31a6130 100644
--- a/js/tests/unit/modal.js
+++ b/js/tests/unit/modal.js
@@ -134,4 +134,23 @@ $(function () {
           })
           .modal("show")
       })
+
+      test("should close modal when clicking outside of modal-content", function () {
+        stop()
+        $.support.transition = false
+        var div = $("<div id='modal-test'><div class='contents'></div></div>")
+        div
+          .bind("shown.bs.modal", function () {
+            ok($('#modal-test').length, 'modal insterted into dom')
+            $('.contents').click()
+            ok($('#modal-test').is(":visible"), 'modal visible')
+            $('#modal-test').click()
+          })
+          .bind("hidden.bs.modal", function() {
+            ok(!$('#modal-test').is(":visible"), 'modal hidden')
+            div.remove()
+            start()
+          })
+          .modal("show")
+      })
 })