 
       {id, options, element} = @opened
 
-      element.removeClass "visible"
-      $timeout ->
-        element.addClass "hide"
-      , 250, false
-      @bindingEvents "unbind"
-      @opened = null
-
-      if options.moduleMethod
-        element.scope().$destroy()
-        element.remove()
-
-      $rootScope.$broadcast "modalWasHidden", id
-
-      callback?()
+      $animate.removeClass element, "visible"
+
+      # 250ms timeout is added to account for the hide modal animation
+      $timeout =>
+        @bindingEvents "unbind"
+        @opened = null
+
+        if options.moduleMethod
+          element.scope().$destroy()
+          $animate.leave element
+        else
+          $animate.addClass element, "hide"
+
+        $rootScope.$broadcast "modalWasHidden", id
+
+        callback && callback()
+      , 250
 
     bindingEvents: (action = "bind") ->
       return unless action in ["bind", "unbind"] and @opened?

  "$controller"
  "modalViews"
  "keys"
  ($rootScope, $timeout, $templateCache, $compile, $http, $controller, modalViews, keys) ->
    # Dictionary of registered modal
    registered: modalViews.registered


            element = angular.element(@modalTemplate).attr options.attributes
            wrapper = angular.element element[0].getElementsByClassName("modal-content-wrapper")
            wrapper.html template

            $animate.enter element, angular.element(document.body)
            $compile(element) viewScope

            showModal element
            $rootScope.$apply() if invokeApply
