diff --git a/dist/index.js b/dist/index.js
index 86992ad..bd3d7d4 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -207,7 +207,7 @@
     }, function(module, exports, __webpack_require__) {
         __webpack_require__(18);
         var Component = __webpack_require__(1)(__webpack_require__(7), __webpack_require__(15), null, null);
-        Component.options.__file = "/Users/yev/Projects/vue/vue-js-modal/src/Dialog.vue", 
+        Component.options.__file = "/Users/dd/code/sandbox/vue-js-modal/src/Dialog.vue", 
         Component.esModule && Object.keys(Component.esModule).some(function(key) {
             return "default" !== key && "__esModule" !== key;
         }) && console.error("named exports are not supported in *.vue files."), Component.options.functional && console.error("[vue-loader] Dialog.vue: functional components are not supported with templates, they should use render functions."), 
@@ -215,7 +215,7 @@
     }, function(module, exports, __webpack_require__) {
         __webpack_require__(19);
         var Component = __webpack_require__(1)(__webpack_require__(8), __webpack_require__(16), null, null);
-        Component.options.__file = "/Users/yev/Projects/vue/vue-js-modal/src/Modal.vue", 
+        Component.options.__file = "/Users/dd/code/sandbox/vue-js-modal/src/Modal.vue", 
         Component.esModule && Object.keys(Component.esModule).some(function(key) {
             return "default" !== key && "__esModule" !== key;
         }) && console.error("named exports are not supported in *.vue files."), Component.options.functional && console.error("[vue-loader] Modal.vue: functional components are not supported with templates, they should use render functions."), 
@@ -282,7 +282,11 @@
         Object.defineProperty(exports, "__esModule", {
             value: !0
         });
-        var _index = __webpack_require__(3), _index2 = _interopRequireDefault(_index), _Resizer = __webpack_require__(14), _Resizer2 = _interopRequireDefault(_Resizer), _util = __webpack_require__(4), _parser = __webpack_require__(10), _parser2 = _interopRequireDefault(_parser);
+        var _index = __webpack_require__(3), _index2 = _interopRequireDefault(_index), _Resizer = __webpack_require__(14), _Resizer2 = _interopRequireDefault(_Resizer), _util = __webpack_require__(4), _parser = __webpack_require__(10), _parser2 = _interopRequireDefault(_parser), MutationObserver = function() {
+            for (var prefixes = [ "", "WebKit", "Moz", "O", "Ms" ], i = 0; i < prefixes.length; i++) if (prefixes[i] + "MutationObserver" in window) return console.log("got MutationObserver:", prefixes[i] + "MutationObserver"), 
+            window[prefixes[i] + "MutationObserver"];
+            return !1;
+        }();
         exports.default = {
             name: "VueJsModal",
             props: {
@@ -395,12 +399,14 @@
                         width: 0,
                         widthType: "px",
                         height: 0,
-                        heightType: "px"
+                        heightType: "px",
+                        renderedHeight: 0
                     },
                     window: {
                         width: 0,
                         height: 0
-                    }
+                    },
+                    mutationObserver: null
                 };
             },
             watch: {
@@ -408,11 +414,11 @@
                     var _this = this;
                     value ? (this.visibility.overlay = !0, setTimeout(function() {
                         _this.visibility.modal = !0, _this.$nextTick(function() {
-                            _this.addDraggableListeners();
+                            _this.addDraggableListeners(), _this.callAfterEvent(!0);
                         });
                     }, this.delay)) : (this.visibility.modal = !1, setTimeout(function() {
                         _this.visibility.overlay = !1, _this.$nextTick(function() {
-                            _this.removeDraggableListeners();
+                            _this.removeDraggableListeners(), _this.callAfterEvent(!1);
                         });
                     }, this.delay));
                 }
@@ -425,7 +431,10 @@
                 _index2.default.event.$on("toggle", function(name, state, params) {
                     name === _this2.name && (void 0 === state && (state = !_this2.visible), _this2.toggle(state, params));
                 }), window.addEventListener("resize", this.onWindowResize), this.onWindowResize(), 
-                this.scrollable && !this.isAutoHeight && console.warn('Modal "' + this.name + '" has scrollable flag set to true but height is not "auto" (' + this.height + ")");
+                this.scrollable && !this.isAutoHeight && console.warn('Modal "' + this.name + '" has scrollable flag set to true but height is not "auto" (' + this.height + ")"), 
+                this.isAutoHeight && MutationObserver && (this.mutationObserver = new MutationObserver(function(mutations) {
+                    _this2.updateRenderedHeight();
+                }));
             },
             beforeDestroy: function() {
                 window.removeEventListener("resize", this.onWindowResize);
@@ -435,10 +444,10 @@
                     return "auto" === this.modal.heightType;
                 },
                 position: function() {
-                    var window = this.window, shift = this.shift, pivotX = this.pivotX, pivotY = this.pivotY, trueModalWidth = this.trueModalWidth, trueModalHeight = this.trueModalHeight, maxLeft = window.width - trueModalWidth, maxTop = window.height - trueModalHeight, minTop = this.scrollable ? Number.NEGATIVE_INFINITY : 0, left = shift.left + pivotX * maxLeft, top = shift.top + pivotY * maxTop;
+                    var window = this.window, shift = this.shift, pivotX = this.pivotX, pivotY = this.pivotY, trueModalWidth = this.trueModalWidth, trueModalHeight = this.trueModalHeight, maxLeft = window.width - trueModalWidth, maxTop = window.height - trueModalHeight, left = shift.left + pivotX * maxLeft, top = shift.top + pivotY * maxTop;
                     return {
                         left: (0, _util.inRange)(0, maxLeft, left),
-                        top: (0, _util.inRange)(minTop, maxTop, top)
+                        top: (0, _util.inRange)(0, maxTop, top)
                     };
                 },
                 trueModalWidth: function() {
@@ -447,7 +456,7 @@
                 },
                 trueModalHeight: function() {
                     var window = this.window, modal = this.modal, isAutoHeight = this.isAutoHeight, adaptive = this.adaptive, value = "%" === modal.heightType ? window.height / 100 * modal.height : modal.height;
-                    return isAutoHeight ? 0 : adaptive ? (0, _util.inRange)(this.minHeight, this.window.height, value) : value;
+                    return isAutoHeight ? this.modal.renderedHeight : adaptive ? (0, _util.inRange)(this.minHeight, this.window.height, value) : value;
                 },
                 overlayClass: function() {
                     return {
@@ -495,10 +504,9 @@
                     this.$emit("resize", resizeEvent);
                 },
                 toggle: function(state, params) {
-                    var reset = this.reset, scrollable = this.scrollable, visible = this.visible, beforeEventName = visible ? "before-close" : "before-open", afterEventName = visible ? "closed" : "opened";
-                    "before-open" === beforeEventName && (reset && (this.setInitialSize(), this.shift.left = 0, 
-                    this.shift.top = 0), scrollable && document.body.classList.add("v--modal-block-scroll")), 
-                    "before-close" === beforeEventName && scrollable && document.body.classList.remove("v--modal-block-scroll");
+                    var reset = this.reset, scrollable = this.scrollable, visible = this.visible, beforeEventName = visible ? "before-close" : "before-open";
+                    "before-open" === beforeEventName ? (reset && (this.setInitialSize(), this.shift.left = 0, 
+                    this.shift.top = 0), scrollable && document.body.classList.add("v--modal-block-scroll")) : scrollable && document.body.classList.remove("v--modal-block-scroll");
                     var stopEventExecution = !1, stop = function() {
                         stopEventExecution = !0;
                     }, beforeEvent = this.genEventObject({
@@ -506,13 +514,7 @@
                         state: state,
                         params: params
                     });
-                    if (this.$emit(beforeEventName, beforeEvent), !stopEventExecution) {
-                        var afterEvent = this.genEventObject({
-                            state: state,
-                            params: params
-                        });
-                        this.visible = state, this.$emit(afterEventName, afterEvent);
-                    }
+                    this.$emit(beforeEventName, beforeEvent), stopEventExecution || (this.visible = state);
                 },
                 getDraggableElement: function() {
                     var selector = "string" != typeof this.draggable ? ".v--modal-box" : this.draggable;
@@ -552,7 +554,26 @@
                         }
                     }
                 },
-                removeDraggableListeners: function() {}
+                removeDraggableListeners: function() {},
+                callAfterEvent: function(state) {
+                    state ? this.observe() : this.disconnectObserver();
+                    var afterEventName = state ? "opened" : "closed", afterEvent = this.genEventObject({
+                        state: state
+                    });
+                    this.$emit(afterEventName, afterEvent), state && this.isAutoHeight && this.updateRenderedHeight();
+                },
+                updateRenderedHeight: function() {
+                    this.modal.renderedHeight = this.$refs.modal.getBoundingClientRect().height;
+                },
+                observe: function() {
+                    this.mutationObserver && this.mutationObserver.observe(this.$refs.modal, {
+                        childList: !0,
+                        subtree: !0
+                    });
+                },
+                disconnectObserver: function() {
+                    this.mutationObserver && this.mutationObserver.disconnect();
+                }
             }
         };
     }, function(module, exports, __webpack_require__) {
@@ -685,13 +706,13 @@
             sourceRoot: "webpack://"
         } ]);
     }, function(module, exports, __webpack_require__) {
-        exports = module.exports = __webpack_require__(0)(), exports.push([ module.i, "\n.v--modal-block-scroll {\n  overflow: hidden;\n}\n.v--modal-overlay {\n  position: fixed;\n  box-sizing: border-box;\n  left: 0;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  background: rgba(0, 0, 0, 0.2);\n  z-index: 999;\n  opacity: 1;\n}\n.v--modal-overlay.scrollable {\n  height: 100%;\n  min-height: 100vh;\n  overflow-y: auto;\n  padding-bottom: 10px;\n}\n.v--modal-overlay .v--modal-box {\n  position: relative;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n.v--modal-overlay.scrollable .v--modal-box {\n  margin-bottom: 10px;\n}\n.v--modal {\n  background-color: white;\n  text-align: left;\n  border-radius: 3px;\n  box-shadow: 0 20px 60px -2px rgba(27, 33, 58, .4);\n  padding: 0;\n}\n.v--modal.v--modal-fullscreen {\n  width: 100vw;\n  height: 100vh;\n  margin: 0;\n  left: 0;\n  top: 0;\n}\n.v--modal-top-right {\n  display: block;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.overlay-fade-enter-active, .overlay-fade-leave-active {\n  transition: all 0.2s;\n}\n.overlay-fade-enter, .overlay-fade-leave-active {\n  opacity: 0;\n}\n.nice-modal-fade-enter-active, .nice-modal-fade-leave-active {\n  transition: all 0.4s;\n}\n.nice-modal-fade-enter, .nice-modal-fade-leave-active {\n  opacity: 0;\n  transform: translateY(-20px);\n}\n", "", {
+        exports = module.exports = __webpack_require__(0)(), exports.push([ module.i, "\n.v--modal-block-scroll {\n  overflow: hidden;\n}\n.v--modal-overlay {\n  position: fixed;\n  box-sizing: border-box;\n  left: 0;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  background: rgba(0, 0, 0, 0.2);\n  z-index: 999;\n  opacity: 1;\n}\n.v--modal-overlay.scrollable {\n  height: 100%;\n  min-height: 100vh;\n  overflow-y: auto;\n  padding-bottom: 10px;\n}\n.v--modal-overlay .v--modal-box {\n  position: relative;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n.v--modal-overlay.scrollable .v--modal-box {\n  margin-bottom: 10px;\n  transition: top 0.2s ease;\n}\n.v--modal {\n  background-color: white;\n  text-align: left;\n  border-radius: 3px;\n  box-shadow: 0 20px 60px -2px rgba(27, 33, 58, .4);\n  padding: 0;\n}\n.v--modal.v--modal-fullscreen {\n  width: 100vw;\n  height: 100vh;\n  margin: 0;\n  left: 0;\n  top: 0;\n}\n.v--modal-top-right {\n  display: block;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.overlay-fade-enter-active, .overlay-fade-leave-active {\n  transition: all 0.2s;\n}\n.overlay-fade-enter, .overlay-fade-leave-active {\n  opacity: 0;\n}\n.nice-modal-fade-enter-active, .nice-modal-fade-leave-active {\n  transition: all 0.4s;\n}\n.nice-modal-fade-enter, .nice-modal-fade-leave-active {\n  opacity: 0;\n  transform: translateY(-20px);\n}\n", "", {
             version: 3,
-            sources: [ "/./src/Modal.vue?2cbada4c" ],
+            sources: [ "/./src/Modal.vue?d2188c9c" ],
             names: [],
-            mappings: ";AA4fA;EACA,iBAAA;CACA;AAEA;EACA,gBAAA;EACA,uBAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;EACA,cAAA;EACA,+BAAA;EACA,aAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,qBAAA;CACA;AAEA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;CACA;AAEA;EACA,oBAAA;CACA;AAEA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,kDAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,SAAA;EACA,OAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;EACA,6BAAA;CACA",
+            mappings: ";AAglBA;EACA,iBAAA;CACA;AAEA;EACA,gBAAA;EACA,uBAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;EACA,cAAA;EACA,+BAAA;EACA,aAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,qBAAA;CACA;AAEA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;CACA;AAEA;EACA,oBAAA;EACA,0BAAA;CACA;AAEA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,kDAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,SAAA;EACA,OAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;EACA,6BAAA;CACA",
             file: "Modal.vue",
-            sourcesContent: [ "\n  \n    \n      
\n        \n      
\n      
\n        \n          \n          \n        
\n      \n