diff --git a/frontend/src/components/Modal.jsx b/frontend/src/components/Modal.jsx
index 1f641343ec594635684826ea1865b55ab6507578..9bd41a660ddd071ba23956d763536f10d5f1084b 100644
--- a/frontend/src/components/Modal.jsx
+++ b/frontend/src/components/Modal.jsx
@@ -1,18 +1,11 @@
 import React, { Component, PropTypes } from "react";
 import ReactDOM from "react-dom";
 
-import TimeoutTransitionGroup from "react-components/timeout-transition-group";
+import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 
 import OnClickOutsideWrapper from "./OnClickOutsideWrapper.jsx";
 
 export default class Modal extends Component {
-    constructor(props, context) {
-        super(props, context);
-        this.state = {
-            isOpen: false
-        };
-    }
-
     static propTypes = {
         isOpen: PropTypes.bool
     };
@@ -22,21 +15,11 @@ export default class Modal extends Component {
         isOpen: true
     };
 
-    componentWillReceiveProps(nextProps) {
-        this.setState({
-            isOpen: nextProps.isOpen
-        });
-    }
-
     componentWillMount() {
         this._modalElement = document.createElement('span');
         this._modalElement.className = 'ModalContainer';
         this._modalElement.id = Math.floor((Math.random() * 698754) + 1);
         document.querySelector('body').appendChild(this._modalElement);
-
-        // HACK: TimeoutTransitionGroup doesn't support "appear" transition
-        // NOTE: Use "appear" transition in ReactCSSTransitionGroup once upgraded to React 0.14+
-        setTimeout(() => this.setState({ isOpen: this.props.isOpen }), 1);
     }
 
     componentDidMount() {
@@ -72,13 +55,13 @@ export default class Modal extends Component {
 
     _renderPopover() {
         ReactDOM.render(
-            <TimeoutTransitionGroup transitionName="Modal" enterTimeout={250} leaveTimeout={250}>
-                { this.state.isOpen &&
+            <ReactCSSTransitionGroup transitionName="Modal" transitionAppear={true} transitionAppearTimeout={250} transitionEnterTimeout={250} transitionLeaveTimeout={250}>
+                { this.props.isOpen &&
                     <div key="modal" className="Modal-backdrop" style={this.props.style}>
                         {this._modalComponent()}
                     </div>
                 }
-            </TimeoutTransitionGroup>
+            </ReactCSSTransitionGroup>
         , this._modalElement);
     }
 
diff --git a/frontend/src/components/modal/modal.css b/frontend/src/components/modal/modal.css
index 479f459b346980746a7fe84300a96bb0a632043b..cc7480c43b0ea6c75d215278f46b255d16232f38 100644
--- a/frontend/src/components/modal/modal.css
+++ b/frontend/src/components/modal/modal.css
@@ -67,11 +67,13 @@
 
 /* backdrop */
 
+.Modal-backdrop.Modal-appear,
 .Modal-backdrop.Modal-enter {
   transition: background-color 200ms ease-in-out;
   background-color: rgba(255, 255, 255, 0.01);
 }
 
+.Modal-backdrop.Modal-appear-active,
 .Modal-backdrop.Modal-enter-active {
   background-color: rgba(255, 255, 255, 0.6);
 }
@@ -87,12 +89,14 @@
 
 /* modal */
 
+.Modal-backdrop.Modal-appear .Modal,
 .Modal-backdrop.Modal-enter .Modal {
   transition: opacity 200ms linear, transform 200ms ease-in-out;
   opacity: 0.01;
   transform: translate(-50%, -55%);
 }
 
+.Modal-backdrop.Modal-appear-active .Modal,
 .Modal-backdrop.Modal-enter-active .Modal {
   opacity: 1;
   transform: translate(-50%, -50%);
diff --git a/frontend/src/tutorial/PageFlag.jsx b/frontend/src/tutorial/PageFlag.jsx
index 3b81a9687a77159ecd960736a8046f823a9eead6..1ddb9f49c57a5fa5f965cc81ffbddb55945a9b6a 100644
--- a/frontend/src/tutorial/PageFlag.jsx
+++ b/frontend/src/tutorial/PageFlag.jsx
@@ -1,6 +1,6 @@
 import React, { Component, PropTypes } from "react";
 
-import TimeoutTransitionGroup from "react-components/timeout-transition-group";
+import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 
 import BodyComponent from "metabase/components/BodyComponent.jsx";
 
@@ -23,9 +23,9 @@ export default class PageFlag extends Component {
 
     render() {
         return (
-            <TimeoutTransitionGroup transitionName="PageFlag" enterTimeout={250} leaveTimeout={250}>
+            <ReactCSSTransitionGroup transitionName="PageFlag" transitionEnterTimeout={250} transitionLeaveTimeout={250}>
                 { this.props.target ? [this.renderPageFlag()] : [] }
-            </TimeoutTransitionGroup>
+            </ReactCSSTransitionGroup>
         );
     }
 }
diff --git a/package.json b/package.json
index d8684afbba8631c532974feef0112b83a19dbb1b..a6e31f5dd4563e5fe7212af265373e37ea071efa 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
     "normalizr": "^1.4.0",
     "password-generator": "^2.0.1",
     "react": "^0.14.7",
-    "react-components": "^0.4.0",
+    "react-addons-css-transition-group": "^0.14.7",
     "react-dom": "^0.14.7",
     "react-draggable": "^1.1.3",
     "react-onclickout": "^2.0.4",