diff --git a/.eslintrc b/.eslintrc
index f522a534d6aba867c232b5e9876a9b7e0583b416..9dbe198988b824953d24c71806c75c80a096765f 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -2,7 +2,7 @@
     "rules": {
         "strict": [2, "never"],
         "no-undef": 2,
-        "no-unused-vars": [1, {"vars": "all", "args": "none", "varsIgnorePattern": "^(React|PropTypes|Component)$"}],
+        "no-unused-vars": [1, {"vars": "all", "args": "none"}],
         "import/no-commonjs": 1,
         "quotes": 0,
         "camelcase": 0,
diff --git a/frontend/src/metabase/App.jsx b/frontend/src/metabase/App.jsx
index 73954a11290ef435c4a124c800d21a31bea3a1b0..89922c39f14769a232e61c36a5a64bdbe913df61 100644
--- a/frontend/src/metabase/App.jsx
+++ b/frontend/src/metabase/App.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import Navbar from "metabase/nav/containers/Navbar.jsx";
diff --git a/frontend/src/metabase/admin/databases/components/CreatedDatabaseModal.jsx b/frontend/src/metabase/admin/databases/components/CreatedDatabaseModal.jsx
index eb6788801c35d82b27302f4e64664f894a7ce076..7db4fd4a3abfc7c97c6313860c715d6893a1af5c 100644
--- a/frontend/src/metabase/admin/databases/components/CreatedDatabaseModal.jsx
+++ b/frontend/src/metabase/admin/databases/components/CreatedDatabaseModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
diff --git a/frontend/src/metabase/admin/databases/components/DatabaseEditForms.jsx b/frontend/src/metabase/admin/databases/components/DatabaseEditForms.jsx
index feeb38e6dbe951e6ad8a590180343e25e7972e56..ffdcb6bcdf7364f73406a100946a65240559d15d 100644
--- a/frontend/src/metabase/admin/databases/components/DatabaseEditForms.jsx
+++ b/frontend/src/metabase/admin/databases/components/DatabaseEditForms.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 import DatabaseDetailsForm from "metabase/components/DatabaseDetailsForm.jsx";
diff --git a/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx b/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
index 920c65e77fabeef9271b229c54644441f55002f4..1498d90312e97eaae8acec2407b2ca8b070dd528 100644
--- a/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
+++ b/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 
diff --git a/frontend/src/metabase/admin/databases/containers/DatabaseEditApp.jsx b/frontend/src/metabase/admin/databases/containers/DatabaseEditApp.jsx
index ad8c03784e8bf4f337c21d653f247f5281ece429..b3e122cbc78e59a1dedd976dc1c45c2e8ab5cbe2 100644
--- a/frontend/src/metabase/admin/databases/containers/DatabaseEditApp.jsx
+++ b/frontend/src/metabase/admin/databases/containers/DatabaseEditApp.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import MetabaseSettings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
index 439a2c7246ee42152036e345a49f37340dbdea80..ab7241838a81395ecb91c0bcdb54cf1e90b276fd 100644
--- a/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
+++ b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 import { Link } from "react-router";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/FormInput.jsx b/frontend/src/metabase/admin/datamodel/components/FormInput.jsx
index 0cb6812714174fec17835e381f7893e0079f50a6..bfce1383e6f27116d91c5ada25e3af8a1d47a4a6 100644
--- a/frontend/src/metabase/admin/datamodel/components/FormInput.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/FormInput.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import cx from "classnames";
 import { formDomOnlyProps } from "metabase/lib/redux";
diff --git a/frontend/src/metabase/admin/datamodel/components/FormLabel.jsx b/frontend/src/metabase/admin/datamodel/components/FormLabel.jsx
index de2e6fdb440de7938ae07b3e6a4e168bad06de63..c45ee4b1208e5601dab8a96356e20eed93ca81c7 100644
--- a/frontend/src/metabase/admin/datamodel/components/FormLabel.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/FormLabel.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 export default class FormLabel extends Component {
     static propTypes = {
diff --git a/frontend/src/metabase/admin/datamodel/components/FormTextArea.jsx b/frontend/src/metabase/admin/datamodel/components/FormTextArea.jsx
index e440768bc3e53ce118678d438daba3ba15b9d6b2..a2119223ab145de400721a0a35d488909cbcebfa 100644
--- a/frontend/src/metabase/admin/datamodel/components/FormTextArea.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/FormTextArea.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.jsx b/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.jsx
index 9910e1a11a7a4915d4884a6c09ba60046ec5da5c..7e03f702055f9f6ba417f7be4007b864a4baa319 100644
--- a/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/ObjectRetireModal.jsx b/frontend/src/metabase/admin/datamodel/components/ObjectRetireModal.jsx
index 4393e9d0b1621ed908e63510ceebb3926c89cc85..7f4b8b32638d6d23f88cd47b689e2cc9fdaaab5d 100644
--- a/frontend/src/metabase/admin/datamodel/components/ObjectRetireModal.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/ObjectRetireModal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import ActionButton from "metabase/components/ActionButton.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/PartialQueryBuilder.jsx b/frontend/src/metabase/admin/datamodel/components/PartialQueryBuilder.jsx
index ea5abefc8c5f745bece440f429f9836f0d7dfd12..ac46b9c868c425a7e745338ba50f53746b3221bc 100644
--- a/frontend/src/metabase/admin/datamodel/components/PartialQueryBuilder.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/PartialQueryBuilder.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import GuiQueryEditor from "metabase/query_builder/components/GuiQueryEditor.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/database/ColumnItem.jsx b/frontend/src/metabase/admin/datamodel/components/database/ColumnItem.jsx
index 752e30bdca0a33e3813c6978d6653a1e32e4a9a9..a1283fd11080ced28ad6dc43f862172320ec0e77 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/ColumnItem.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/ColumnItem.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Input from "metabase/components/Input.jsx";
 import Select from "metabase/components/Select.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/ColumnsList.jsx b/frontend/src/metabase/admin/datamodel/components/database/ColumnsList.jsx
index 7fce80642ffc7c0fd4a59755bd00d33cf3639053..306b46a5cc5c22347e90394618fa397a8f21c9ae 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/ColumnsList.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/ColumnsList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ColumnItem from "./ColumnItem.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataHeader.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataHeader.jsx
index 7ce8cf02a275d396c60dea167b65759e7bbaad2a..24900337e631605128b91d715b474b9a869bd6ce 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataHeader.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import SaveStatus from "metabase/components/SaveStatus.jsx";
 import Toggle from "metabase/components/Toggle.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataSchema.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataSchema.jsx
index 55c4a4e88ff43d029ebafe510823b3c9c30cfbd5..571cbaed564a98a8d413e0a65ff2095ea089d240 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataSchema.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataSchema.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 export default class MetadataSchema extends Component {
     static propTypes = {
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataSchemaList.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataSchemaList.jsx
index ef5ecba11ba5a4f7f0ef223e6aa8b710388862c2..f5a1220ef3aaa7d3afa8d9e68c0452366d6e1f03 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataSchemaList.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataSchemaList.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataTable.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataTable.jsx
index 92b1a392780814fca12e6ab9b74e10cc2e44c702..190f29442097dabc5623bc672a3d99a65301b12f 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataTable.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataTable.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetricsList from "./MetricsList.jsx";
 import ColumnsList from "./ColumnsList.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataTableList.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataTableList.jsx
index eeea47c7c4d2e306e66512813119b715030bcc67..5c0897a543e8d4deae1f443b8c71862f07880d68 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataTableList.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataTableList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ProgressBar from "metabase/components/ProgressBar.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetadataTablePicker.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetadataTablePicker.jsx
index fd9a65a18250cc0e264b1407b435dd24620bb3c9..6c6df516e693a1195e1280cfd8d562821eb2c456 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetadataTablePicker.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetadataTablePicker.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetadataTableList from "./MetadataTableList.jsx";
 import MetadataSchemaList from "./MetadataSchemaList.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetricItem.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetricItem.jsx
index c3149b62a0b07039cc9835d003d4fbfc64dfdcdf..fa8ce0053fcab6d515d178cad42bd285d34eb43e 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetricItem.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetricItem.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ObjectActionSelect from "../ObjectActionSelect.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/database/MetricsList.jsx b/frontend/src/metabase/admin/datamodel/components/database/MetricsList.jsx
index 15197ce4b1abe022cfb6aae92163e672bf90f908..b2b0452db84b39e864ac32be2baee3615a13893e 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/MetricsList.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/MetricsList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import MetricItem from "./MetricItem.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/database/SegmentItem.jsx b/frontend/src/metabase/admin/datamodel/components/database/SegmentItem.jsx
index 85afc4e7c26d9d073748bc3f5c2228bfb0b0377c..529d3b5e9377d526ab7e348cd3abfb913dc02e0e 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/SegmentItem.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/SegmentItem.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ObjectActionSelect from "../ObjectActionSelect.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/database/SegmentsList.jsx b/frontend/src/metabase/admin/datamodel/components/database/SegmentsList.jsx
index f6c7e032a3969a49d7a12739ab4704aa09a651a6..4035b6bd5fac66e54c689f27434adb15dace9ecc 100644
--- a/frontend/src/metabase/admin/datamodel/components/database/SegmentsList.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/database/SegmentsList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import SegmentItem from "./SegmentItem.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/QueryDiff.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/QueryDiff.jsx
index fecf6b6ff1530875af886e2af55268b138402503..9d6e29ef3e947177df5ec253b4604fa7e0543568 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/QueryDiff.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/QueryDiff.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
index 9a2e79460fa089607ff78faae67cb34199bbd578..7a5149b28ac10d51ccc14854ace086261c4df028 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import RevisionDiff from "./RevisionDiff.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.jsx
index 6d0a0fef8da69e575c7f78b3469828da23d333c8..410bab3eab61013192e072fc21890bc8848f3813 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import TextDiff from "./TextDiff.jsx";
 import QueryDiff from "./QueryDiff.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionHistory.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionHistory.jsx
index 08dafb3bd6a231978af2cf9b2ad5ebe29e7464ea..69535b8e52765be0b97c45660f4904a62cb167bc 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionHistory.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionHistory.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Revision from "./Revision.jsx";
 
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/TextDiff.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/TextDiff.jsx
index 922a0ad0fe7b372bc4cf18158b6f2099d9251c80..507eb67c54bbfc3c2a8ea3f390fd845cc16a5d3a 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/TextDiff.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/TextDiff.jsx
@@ -1,6 +1,7 @@
 /*eslint-env node */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import { diffWords } from 'diff';
 
diff --git a/frontend/src/metabase/admin/datamodel/containers/MetadataEditorApp.jsx b/frontend/src/metabase/admin/datamodel/containers/MetadataEditorApp.jsx
index 5c96a1335d54fbfaa1dfaa3dce172d5a71d5194f..cfba3ebbf3a95950eed261532a2437ad8cab0914 100644
--- a/frontend/src/metabase/admin/datamodel/containers/MetadataEditorApp.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/MetadataEditorApp.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import _ from "underscore";
diff --git a/frontend/src/metabase/admin/datamodel/containers/MetricApp.jsx b/frontend/src/metabase/admin/datamodel/containers/MetricApp.jsx
index a8f4cf5ad2230b39a140eb214cda0dc81e5df19a..19707a34cde6dcc1dc5957c6b4377cae1a0624a8 100644
--- a/frontend/src/metabase/admin/datamodel/containers/MetricApp.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/MetricApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/admin/datamodel/containers/MetricForm.jsx b/frontend/src/metabase/admin/datamodel/containers/MetricForm.jsx
index 5ad0b08922d20b80bc018b316d59c9e614e54d6e..2029c47fa6eb6cbc00556513d591da5a5c6db990 100644
--- a/frontend/src/metabase/admin/datamodel/containers/MetricForm.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/MetricForm.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 
 import FormLabel from "../components/FormLabel.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/containers/RevisionHistoryApp.jsx b/frontend/src/metabase/admin/datamodel/containers/RevisionHistoryApp.jsx
index d5e2f1d2aeb00498fca0f6c29a01117ad0b92b09..bf4043b2a553838b40ebf49b8466f27d64e5664f 100644
--- a/frontend/src/metabase/admin/datamodel/containers/RevisionHistoryApp.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/RevisionHistoryApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import RevisionHistory from "../components/revisions/RevisionHistory.jsx";
diff --git a/frontend/src/metabase/admin/datamodel/containers/SegmentApp.jsx b/frontend/src/metabase/admin/datamodel/containers/SegmentApp.jsx
index 735eca3e2d7a1b8dca6893ae483e8f74c1f49a1f..a4fbba0163f443aa6640a30aa9fa8c4edfc1d1f6 100644
--- a/frontend/src/metabase/admin/datamodel/containers/SegmentApp.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/SegmentApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/admin/datamodel/containers/SegmentForm.jsx b/frontend/src/metabase/admin/datamodel/containers/SegmentForm.jsx
index cd99d32ff2475fa2f0fc75353fed4ee827892ea7..9f5bf96c06559e8241ebdc6d39d9284aeed11e54 100644
--- a/frontend/src/metabase/admin/datamodel/containers/SegmentForm.jsx
+++ b/frontend/src/metabase/admin/datamodel/containers/SegmentForm.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 
 import FormLabel from "../components/FormLabel.jsx";
diff --git a/frontend/src/metabase/admin/people/components/AddRow.jsx b/frontend/src/metabase/admin/people/components/AddRow.jsx
index a33568fae6a93673cada34e8449f010c331855fe..e0a6a58ba289d4af3488199664ead59866a35334 100644
--- a/frontend/src/metabase/admin/people/components/AddRow.jsx
+++ b/frontend/src/metabase/admin/people/components/AddRow.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/admin/people/components/EditUserForm.jsx b/frontend/src/metabase/admin/people/components/EditUserForm.jsx
index 6ae4e222ce3c41560fb725b13666bb59d8a65f09..b5280a9980cb029908a7cdc911e29f7aacaaa364 100644
--- a/frontend/src/metabase/admin/people/components/EditUserForm.jsx
+++ b/frontend/src/metabase/admin/people/components/EditUserForm.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import FormField from "metabase/components/form/FormField.jsx";
diff --git a/frontend/src/metabase/admin/people/components/GroupSelect.jsx b/frontend/src/metabase/admin/people/components/GroupSelect.jsx
index 69815705a72fe7ba2c761c568ffa1de19b1e8970..e92435ef8fdabb1962dd60072e1d38c5cdde7e36 100644
--- a/frontend/src/metabase/admin/people/components/GroupSelect.jsx
+++ b/frontend/src/metabase/admin/people/components/GroupSelect.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import CheckBox from "metabase/components/CheckBox.jsx";
 
diff --git a/frontend/src/metabase/admin/people/components/GroupSummary.jsx b/frontend/src/metabase/admin/people/components/GroupSummary.jsx
index 1ed9e3d643297607e38f50a07cf0428d5b1bc661..13e9a22e024d1db7dc57e3d293815056c4a208f6 100644
--- a/frontend/src/metabase/admin/people/components/GroupSummary.jsx
+++ b/frontend/src/metabase/admin/people/components/GroupSummary.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import _ from "underscore";
 
diff --git a/frontend/src/metabase/admin/people/components/UserActionsSelect.jsx b/frontend/src/metabase/admin/people/components/UserActionsSelect.jsx
index 7d6108a84987472e51b0e11d5024cea1354a1eb2..ce88849accf75385b4c829d38f18185acbd48d3e 100644
--- a/frontend/src/metabase/admin/people/components/UserActionsSelect.jsx
+++ b/frontend/src/metabase/admin/people/components/UserActionsSelect.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import MetabaseSettings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx b/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
index cffd89efa0c5eba3570398618284fdbf4941b01e..b8e835c5b9426b60a90a541d2ae380c7b2063d86 100644
--- a/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
+++ b/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/admin/people/containers/AdminPeopleApp.jsx b/frontend/src/metabase/admin/people/containers/AdminPeopleApp.jsx
index 1ea8e2fc98dc151b9a1e4a87a0cb41b4eda08cb3..c08dd3678f592853a466233639d2a949813b3af2 100644
--- a/frontend/src/metabase/admin/people/containers/AdminPeopleApp.jsx
+++ b/frontend/src/metabase/admin/people/containers/AdminPeopleApp.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import { LeftNavPane, LeftNavPaneItem } from "metabase/components/LeftNavPane.jsx";
 
diff --git a/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx b/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
index c306b66c19fb0e0f3bea3f54a890a94e2199f618..408f9c77a93b6fc7f8c1f0696d44813d9f1a327a 100644
--- a/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
+++ b/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import _ from "underscore";
 import { connect } from "react-redux";
diff --git a/frontend/src/metabase/admin/permissions/components/FixedHeaderGrid.jsx b/frontend/src/metabase/admin/permissions/components/FixedHeaderGrid.jsx
index 4de3c687ea7ff17a5409dc65e245637aea597133..205a6e09307b50a56cac6eca799970919bbe509a 100644
--- a/frontend/src/metabase/admin/permissions/components/FixedHeaderGrid.jsx
+++ b/frontend/src/metabase/admin/permissions/components/FixedHeaderGrid.jsx
@@ -1,6 +1,6 @@
 /* eslint-disable react/display-name */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { Grid, ScrollSync } from 'react-virtualized'
 import 'react-virtualized/styles.css';
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsConfirm.jsx b/frontend/src/metabase/admin/permissions/components/PermissionsConfirm.jsx
index 92abdcaa9d67acb0070b8a0b327f8919b0f9c377..782974f644d889eedac58d2e2e99e8964be21b04 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsConfirm.jsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsConfirm.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { inflect } from "metabase/lib/formatting";
 
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsEditor.jsx b/frontend/src/metabase/admin/permissions/components/PermissionsEditor.jsx
index b9ad99a77e491846b8c54f50b04935720093326c..a35dcf3310070bee770ce208458f2152e35fc334 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsEditor.jsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsEditor.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 import Confirm from "metabase/components/Confirm.jsx";
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsGrid.jsx b/frontend/src/metabase/admin/permissions/components/PermissionsGrid.jsx
index cad0652cc54cdfe12f3b0daa55d499184f5170f1..5e9dfe6bf15f38afaba310f621b71212412d480a 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsGrid.jsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsGrid.jsx
@@ -1,6 +1,6 @@
 /* eslint-disable react/display-name */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { Link } from "react-router";
 
diff --git a/frontend/src/metabase/admin/permissions/containers/CollectionsPermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/CollectionsPermissionsApp.jsx
index 7e182b4de13545392ae959fe239ba70bbae08d33..585d002b56e20fe08ef0296bb77d8f18f191b215 100644
--- a/frontend/src/metabase/admin/permissions/containers/CollectionsPermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/CollectionsPermissionsApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import PermissionsEditor from "../components/PermissionsEditor.jsx";
diff --git a/frontend/src/metabase/admin/permissions/containers/DataPermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/DataPermissionsApp.jsx
index 823d6a46f979650ed70e1d3fe77bfd92de05dd3e..9cc8f3a18c0dce61951dfaea543326867ff59f81 100644
--- a/frontend/src/metabase/admin/permissions/containers/DataPermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/DataPermissionsApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux"
 
 import PermissionsApp from "./PermissionsApp.jsx";
diff --git a/frontend/src/metabase/admin/permissions/containers/DatabasesPermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/DatabasesPermissionsApp.jsx
index 3614f63a52fd6e57563889c068888c011983a19a..6a58c07a5fe1d73effdc9789f4074c11db4a59a6 100644
--- a/frontend/src/metabase/admin/permissions/containers/DatabasesPermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/DatabasesPermissionsApp.jsx
@@ -1,4 +1,3 @@
-import React, { Component, PropTypes } from "react";
 import { connect } from "react-redux";
 
 import PermissionsEditor from "../components/PermissionsEditor.jsx";
diff --git a/frontend/src/metabase/admin/permissions/containers/PermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/PermissionsApp.jsx
index f4afd2bb54eab5cc306ef6240d03de9faeec367c..47bb661672719eec9fc4ef0c9ce99e1f0903daac 100644
--- a/frontend/src/metabase/admin/permissions/containers/PermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/PermissionsApp.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { withRouter } from "react-router";
 import { connect } from "react-redux"
 import { push } from "react-router-redux";
diff --git a/frontend/src/metabase/admin/permissions/containers/SchemasPermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/SchemasPermissionsApp.jsx
index fdcbed3a8ebed55bb3a809f82a1147838779a6d0..744ed2d9e55e3d6af448a665565c8b15c07af414 100644
--- a/frontend/src/metabase/admin/permissions/containers/SchemasPermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/SchemasPermissionsApp.jsx
@@ -1,4 +1,3 @@
-import React, { Component, PropTypes } from "react";
 import { connect } from "react-redux";
 
 import PermissionsEditor from "../components/PermissionsEditor.jsx";
diff --git a/frontend/src/metabase/admin/permissions/containers/TablesPermissionsApp.jsx b/frontend/src/metabase/admin/permissions/containers/TablesPermissionsApp.jsx
index 43216ff56a16ccb9502d0c4abdb33be51c707905..31ad4e730a4f722437a4e0979d83cb16e64499e6 100644
--- a/frontend/src/metabase/admin/permissions/containers/TablesPermissionsApp.jsx
+++ b/frontend/src/metabase/admin/permissions/containers/TablesPermissionsApp.jsx
@@ -1,4 +1,3 @@
-import React, { Component, PropTypes } from "react";
 import { connect } from "react-redux";
 
 import PermissionsEditor from "../components/PermissionsEditor.jsx";
diff --git a/frontend/src/metabase/admin/permissions/routes.jsx b/frontend/src/metabase/admin/permissions/routes.jsx
index 2b976fe0dcb8495870b2d628f7e8ce956dfd51cb..47308bb5699934df97207a1de4e079202407ddd8 100644
--- a/frontend/src/metabase/admin/permissions/routes.jsx
+++ b/frontend/src/metabase/admin/permissions/routes.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 import { Route, IndexRedirect } from 'react-router';
 
 import DataPermissionsApp from "./containers/DataPermissionsApp.jsx";
diff --git a/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx
index f3f4451b123ead08a4747a32f6ec992f3b5f63db..de3639693cb4af2697575517e404cb079693df46 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsEmailForm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import _ from "underscore";
 
diff --git a/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx b/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx
index 8f98e9d7c280022551901c287a578eb223cc7501..8e5498b759b80f4d52b3b19588a7084c33d1ccd3 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsSetting.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import SettingHeader from "./SettingHeader.jsx";
 
diff --git a/frontend/src/metabase/admin/settings/components/SettingsSetupList.jsx b/frontend/src/metabase/admin/settings/components/SettingsSetupList.jsx
index 111727d889a93f047e8b7861256fe1d3967b3c8a..b6b58ff722f001194d5e491afccd265dc3065511 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsSetupList.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsSetupList.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 import Icon from "metabase/components/Icon.jsx";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
diff --git a/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
index c6606d9d0f325ff97e2f4c5290255b44de98bfd6..722f5e81bc205c08ffaca4f30672101cae902c66 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 import _ from "underscore";
diff --git a/frontend/src/metabase/admin/settings/components/SettingsSlackForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsSlackForm.jsx
index ba5fe3c053b3f9f6fe54abe5ea33048a2e0c41b4..fb111c719574dc4977fa6a391735cc6b18ef4e56 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsSlackForm.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsSlackForm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetabaseAnalytics from "metabase/lib/analytics";
 import MetabaseUtils from "metabase/lib/utils";
diff --git a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm.jsx
index bb27567c535793e72027d9e4c57beb5da0d28ce3..1b137d567f2aaa9a04b20395e11a6ff6d883ec87 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetabaseSettings from "metabase/lib/settings";
 import MetabaseUtils from "metabase/lib/utils";
diff --git a/frontend/src/metabase/admin/settings/components/widgets/CustomGeoJSONWidget.jsx b/frontend/src/metabase/admin/settings/components/widgets/CustomGeoJSONWidget.jsx
index c36cda10147a25d18ea928c93a7f4d1a30226093..5308fcd1cd408de0d28ea7ed4a9d872750b7403c 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/CustomGeoJSONWidget.jsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/CustomGeoJSONWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Utils from "metabase/lib/utils";
 
diff --git a/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx b/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
index c2719ee5c9d4c6434c437efc1c6ff541036bc904..892ba549ca6aeb38110a651b9fa711153f6b7e2c 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon";
 import Link from "metabase/components/Link";
diff --git a/frontend/src/metabase/admin/settings/components/widgets/SecretKeyWidget.jsx b/frontend/src/metabase/admin/settings/components/widgets/SecretKeyWidget.jsx
index c4b066484f8f74a17a5a754d994146b8e81686c1..192e2b305c0ac13f82a81cd5db29eaf93175c8ad 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/SecretKeyWidget.jsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/SecretKeyWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import SettingInput from "./SettingInput";
 import Button from "metabase/components/Button";
diff --git a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
index 90d818639cda26de2b30555145fa6625199a9307..0928a1420d60e83ec6c58c92eec2ed837016f83b 100644
--- a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
+++ b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import { connect } from "react-redux";
 import MetabaseAnalytics from "metabase/lib/analytics";
diff --git a/frontend/src/metabase/auth/components/AuthScene.jsx b/frontend/src/metabase/auth/components/AuthScene.jsx
index 21f84fb783316a65c43091650b8b189574f48c33..5a00cebce7863e68a0aa865cab3eea906ad2dea8 100644
--- a/frontend/src/metabase/auth/components/AuthScene.jsx
+++ b/frontend/src/metabase/auth/components/AuthScene.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 export default class AuthScene extends Component {
diff --git a/frontend/src/metabase/auth/components/SSOLoginButton.jsx b/frontend/src/metabase/auth/components/SSOLoginButton.jsx
index 91cb3b72fd66e0756302b241495280754fb3c10a..7af959a1a02d070b58eff7922fd55ba64da5dbe7 100644
--- a/frontend/src/metabase/auth/components/SSOLoginButton.jsx
+++ b/frontend/src/metabase/auth/components/SSOLoginButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import Icon from "metabase/components/Icon";
 import { capitalize } from 'humanize'
 
diff --git a/frontend/src/metabase/auth/containers/ForgotPasswordApp.jsx b/frontend/src/metabase/auth/containers/ForgotPasswordApp.jsx
index f9bce741aa031cbd4314e70fe1de1c7424ff8e1e..0c51a8a90fd448a31f906868fdfd9e6400f60e94 100644
--- a/frontend/src/metabase/auth/containers/ForgotPasswordApp.jsx
+++ b/frontend/src/metabase/auth/containers/ForgotPasswordApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import _ from "underscore";
 import cx from "classnames";
diff --git a/frontend/src/metabase/auth/containers/LoginApp.jsx b/frontend/src/metabase/auth/containers/LoginApp.jsx
index 1223d3c25c1fbbb75ea1454a7770344a21bdb3eb..229febd771c0a21a04db540746c7fe5a041aeb16 100644
--- a/frontend/src/metabase/auth/containers/LoginApp.jsx
+++ b/frontend/src/metabase/auth/containers/LoginApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { findDOMNode } from "react-dom";
 import { Link } from "react-router";
 import { connect } from "react-redux";
diff --git a/frontend/src/metabase/auth/containers/LogoutApp.jsx b/frontend/src/metabase/auth/containers/LogoutApp.jsx
index c7ac8276c83d8f19243087ed6910444156fc8b10..5c42f34868d43fecd1eaa9194ffba54d7e023899 100644
--- a/frontend/src/metabase/auth/containers/LogoutApp.jsx
+++ b/frontend/src/metabase/auth/containers/LogoutApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import { Component } from "react";
 import { connect } from "react-redux";
 
 import { logout } from "../auth";
diff --git a/frontend/src/metabase/auth/containers/PasswordResetApp.jsx b/frontend/src/metabase/auth/containers/PasswordResetApp.jsx
index 2db47592cacd1d7328c563f8123e158a8f0005d5..cc2aeb724fcd101d0d0801fc741633b02d011e2f 100644
--- a/frontend/src/metabase/auth/containers/PasswordResetApp.jsx
+++ b/frontend/src/metabase/auth/containers/PasswordResetApp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { Link } from "react-router";
 
diff --git a/frontend/src/metabase/components/AccordianList.jsx b/frontend/src/metabase/components/AccordianList.jsx
index 953be139c289362f20d0024ae4d7698ed6e4abd6..64fb9752e73736eab212b5571c88838179782517 100644
--- a/frontend/src/metabase/components/AccordianList.jsx
+++ b/frontend/src/metabase/components/AccordianList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import cx from "classnames";
diff --git a/frontend/src/metabase/components/ActionButton.jsx b/frontend/src/metabase/components/ActionButton.jsx
index 465fd693c6b50dca5656caac3899d8587748f731..168d2c71a6ee66d8c4c2f64f4258cf2f1b677033 100644
--- a/frontend/src/metabase/components/ActionButton.jsx
+++ b/frontend/src/metabase/components/ActionButton.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon";
 import Button from "metabase/components/Button";
diff --git a/frontend/src/metabase/components/AddToDashSelectDashModal.jsx b/frontend/src/metabase/components/AddToDashSelectDashModal.jsx
index 0492804ed33e38179f64bd9d66b10f5a31fceb19..64d6ef600c945e7326c547cbe7e48b15ff454663 100644
--- a/frontend/src/metabase/components/AddToDashSelectDashModal.jsx
+++ b/frontend/src/metabase/components/AddToDashSelectDashModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import CreateDashboardModal from 'metabase/components/CreateDashboardModal.jsx';
 import Icon from 'metabase/components/Icon.jsx';
diff --git a/frontend/src/metabase/components/AdminEmptyText.jsx b/frontend/src/metabase/components/AdminEmptyText.jsx
index 727b17f71e833f5d6aa322cf0c7a71c71d2e2095..a9aec2383bc565e9efa277e5aa95749c71accc1d 100644
--- a/frontend/src/metabase/components/AdminEmptyText.jsx
+++ b/frontend/src/metabase/components/AdminEmptyText.jsx
@@ -1,4 +1,5 @@
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 const AdminEmptyText = ({ message }) =>
     <h2 className="text-grey-3">{message}</h2>
diff --git a/frontend/src/metabase/components/AdminHeader.jsx b/frontend/src/metabase/components/AdminHeader.jsx
index ea413d439a4022d02ea7047e91c934b65986804d..c2507bb5f740839c0ac767b9ecd1605944281748 100644
--- a/frontend/src/metabase/components/AdminHeader.jsx
+++ b/frontend/src/metabase/components/AdminHeader.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import SaveStatus from "metabase/components/SaveStatus.jsx";
 
diff --git a/frontend/src/metabase/components/AdminLayout.jsx b/frontend/src/metabase/components/AdminLayout.jsx
index 697281025d930647096ed184393ac795511608f8..8dff1b7fe84be3c8604837ec22c58ac6682e4cb2 100644
--- a/frontend/src/metabase/components/AdminLayout.jsx
+++ b/frontend/src/metabase/components/AdminLayout.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import AdminHeader from "./AdminHeader.jsx";
 
diff --git a/frontend/src/metabase/components/AdminPaneLayout.jsx b/frontend/src/metabase/components/AdminPaneLayout.jsx
index 5709b31eaa3c50ceb943ff3c75bb2b6cabc3ae88..11cae74b5d1275776ec5685679cf9012c76b9e9e 100644
--- a/frontend/src/metabase/components/AdminPaneLayout.jsx
+++ b/frontend/src/metabase/components/AdminPaneLayout.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/components/Alert.jsx b/frontend/src/metabase/components/Alert.jsx
index c9ee25c3bb51f163be88e7b620402ddbaa5d4932..5fc912ca84b1d3c5953395b223ccdc4240f79942 100644
--- a/frontend/src/metabase/components/Alert.jsx
+++ b/frontend/src/metabase/components/Alert.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Modal from "metabase/components/Modal.jsx";
 
diff --git a/frontend/src/metabase/components/BodyComponent.jsx b/frontend/src/metabase/components/BodyComponent.jsx
index 11de27256f1648df07a49c7c7877c9939f7bb463..b14e7b8e15f19e8ed062c510fdea0d621340068a 100644
--- a/frontend/src/metabase/components/BodyComponent.jsx
+++ b/frontend/src/metabase/components/BodyComponent.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 export default ComposedComponent => class extends Component {
diff --git a/frontend/src/metabase/components/Breadcrumbs.jsx b/frontend/src/metabase/components/Breadcrumbs.jsx
index 9931219ba4dfdf8165eda1bf1df3d655f1706597..c4b10537b02b798f920b970f3d8396baaea053e4 100644
--- a/frontend/src/metabase/components/Breadcrumbs.jsx
+++ b/frontend/src/metabase/components/Breadcrumbs.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import S from "./Breadcrumbs.css";
diff --git a/frontend/src/metabase/components/Button.jsx b/frontend/src/metabase/components/Button.jsx
index bb8eb9f5a383b4de62596efba06a1cdd2cd49c6d..0bea4d0c9481528eaf488483b25c141736e0e98b 100644
--- a/frontend/src/metabase/components/Button.jsx
+++ b/frontend/src/metabase/components/Button.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/components/ButtonBar.jsx b/frontend/src/metabase/components/ButtonBar.jsx
index 851689df07061ce19a98534a511009e6d6dfad69..24381f8eac5e5cba064f43e3386aa5ebf0a3924d 100644
--- a/frontend/src/metabase/components/ButtonBar.jsx
+++ b/frontend/src/metabase/components/ButtonBar.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 
 export default class ButtonBar extends Component {
diff --git a/frontend/src/metabase/components/Calendar.jsx b/frontend/src/metabase/components/Calendar.jsx
index d3b16c32f139ff32148120ca6c12c32ab8d95f2b..6715dcb129dcaeca413aceed6cd914540f0a5fcd 100644
--- a/frontend/src/metabase/components/Calendar.jsx
+++ b/frontend/src/metabase/components/Calendar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 
 import "./Calendar.css";
 
diff --git a/frontend/src/metabase/components/CheckBox.jsx b/frontend/src/metabase/components/CheckBox.jsx
index c22ec977a378c7354ef58064e2071c292efe8bdd..d215052027bd764feb8d3a3ab2b567a258e71330 100644
--- a/frontend/src/metabase/components/CheckBox.jsx
+++ b/frontend/src/metabase/components/CheckBox.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import Icon from "metabase/components/Icon.jsx";
 
 import cx from "classnames";
diff --git a/frontend/src/metabase/components/Code.jsx b/frontend/src/metabase/components/Code.jsx
index 53364f56b49edca86783e67d4688cb398e78819f..b262c0683aa68006f2d21e5ae860c850000db4da 100644
--- a/frontend/src/metabase/components/Code.jsx
+++ b/frontend/src/metabase/components/Code.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 const Code = ({ children, block }) => {
     if (block) {
diff --git a/frontend/src/metabase/components/ColorPicker.jsx b/frontend/src/metabase/components/ColorPicker.jsx
index 076c097e7c50f88d74a744f6c1a070fb9d6b571f..272ed65b5a832e4d058e540e9b4e0292e8f4fc41 100644
--- a/frontend/src/metabase/components/ColorPicker.jsx
+++ b/frontend/src/metabase/components/ColorPicker.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger";
 
diff --git a/frontend/src/metabase/components/ColumnarSelector.jsx b/frontend/src/metabase/components/ColumnarSelector.jsx
index 13512c863b4e221ed152963b8a4af8e0828e2167..e456a839cc886f7154ce7456763c69b23fc22361 100644
--- a/frontend/src/metabase/components/ColumnarSelector.jsx
+++ b/frontend/src/metabase/components/ColumnarSelector.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import "./ColumnarSelector.css";
 
diff --git a/frontend/src/metabase/components/Confirm.jsx b/frontend/src/metabase/components/Confirm.jsx
index 79e9733e599721befca7d101dd0b1a8ea8314480..ca10c75a0508f6dcbb9561392518f92f113737e5 100644
--- a/frontend/src/metabase/components/Confirm.jsx
+++ b/frontend/src/metabase/components/Confirm.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalWithTrigger from "metabase/components/ModalWithTrigger.jsx";
 import ConfirmContent from "./ConfirmContent.jsx";
diff --git a/frontend/src/metabase/components/ConfirmContent.jsx b/frontend/src/metabase/components/ConfirmContent.jsx
index 984d420db23c298abd2da2dc6f37e965ceb11dea..64234914d058b63f3099b71969c68dffbd572f19 100644
--- a/frontend/src/metabase/components/ConfirmContent.jsx
+++ b/frontend/src/metabase/components/ConfirmContent.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 
diff --git a/frontend/src/metabase/components/ConstrainToScreen.jsx b/frontend/src/metabase/components/ConstrainToScreen.jsx
index 52b6956b27c9b6fa61041d17a42b8f0b656db450..354878bbc8ffb0e94c35b38c10e2e4e029facd70 100644
--- a/frontend/src/metabase/components/ConstrainToScreen.jsx
+++ b/frontend/src/metabase/components/ConstrainToScreen.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import { constrainToScreen } from "metabase/lib/dom";
diff --git a/frontend/src/metabase/components/CopyButton.jsx b/frontend/src/metabase/components/CopyButton.jsx
index 7d2ef27b5f6d13f120d5a3870638a470d1c55365..76a51cbf5387694ebe4c529773908a2c75ff229a 100644
--- a/frontend/src/metabase/components/CopyButton.jsx
+++ b/frontend/src/metabase/components/CopyButton.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon";
 import Tooltip from "metabase/components/Tooltip";
diff --git a/frontend/src/metabase/components/CopyWidget.jsx b/frontend/src/metabase/components/CopyWidget.jsx
index 7006b591f9bd5dde63acd68e9fae73a5c9e2e2bf..01a3b4854073bfe0fb3e9482b543fbd84020f392 100644
--- a/frontend/src/metabase/components/CopyWidget.jsx
+++ b/frontend/src/metabase/components/CopyWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import CopyButton from "./CopyButton";
 
diff --git a/frontend/src/metabase/components/CreateDashboardModal.jsx b/frontend/src/metabase/components/CreateDashboardModal.jsx
index e39425df144470eefa1301fc06f55246d34c542f..58a9141cf05ef3c22005be481589442a72ed90c4 100644
--- a/frontend/src/metabase/components/CreateDashboardModal.jsx
+++ b/frontend/src/metabase/components/CreateDashboardModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import FormField from "metabase/components/FormField.jsx";
 import ModalContent from "metabase/components/ModalContent.jsx";
diff --git a/frontend/src/metabase/components/DatabaseDetailsForm.jsx b/frontend/src/metabase/components/DatabaseDetailsForm.jsx
index 8a8e26de7835b6fdb06a8f1fb372d5e48fcf6306..65bf744eafab904554bfd95945ef94c3b32ba8ee 100644
--- a/frontend/src/metabase/components/DatabaseDetailsForm.jsx
+++ b/frontend/src/metabase/components/DatabaseDetailsForm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 import FormField from "metabase/components/form/FormField.jsx";
diff --git a/frontend/src/metabase/components/DeleteModalWithConfirm.jsx b/frontend/src/metabase/components/DeleteModalWithConfirm.jsx
index d4380609900deb313087c0b3b025221dff9d78dc..a0009f137748a89d48364b794b62928056de4639 100644
--- a/frontend/src/metabase/components/DeleteModalWithConfirm.jsx
+++ b/frontend/src/metabase/components/DeleteModalWithConfirm.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 import CheckBox from "metabase/components/CheckBox.jsx";
diff --git a/frontend/src/metabase/components/DeleteQuestionModal.jsx b/frontend/src/metabase/components/DeleteQuestionModal.jsx
index 9f9977ba2ae972c05681d032d5adbf020c4478cf..510693b1fa80724a1a6b673a548934652c1737d1 100644
--- a/frontend/src/metabase/components/DeleteQuestionModal.jsx
+++ b/frontend/src/metabase/components/DeleteQuestionModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 
diff --git a/frontend/src/metabase/components/DisclosureTriangle.jsx b/frontend/src/metabase/components/DisclosureTriangle.jsx
index 25eba51de80fc7e33e620b9218bc1378b0e8f7c8..908286bc03a9af78187d1df2f414b59439cbee56 100644
--- a/frontend/src/metabase/components/DisclosureTriangle.jsx
+++ b/frontend/src/metabase/components/DisclosureTriangle.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 import { Motion, spring, presets } from "react-motion";
 
 import Icon from "metabase/components/Icon";
diff --git a/frontend/src/metabase/components/DownloadButton.jsx b/frontend/src/metabase/components/DownloadButton.jsx
index 2095f254563529a1ecf8d76f3a6b300885a7edc1..e6d45c3871ef037dde4163b0de33369eb3dca6f5 100644
--- a/frontend/src/metabase/components/DownloadButton.jsx
+++ b/frontend/src/metabase/components/DownloadButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Button from "metabase/components/Button.jsx";
 
diff --git a/frontend/src/metabase/components/EditBar.jsx b/frontend/src/metabase/components/EditBar.jsx
index 3069c0d8d88a771d6dc1a083cad165640a57e4c7..9f18730d62548d02446ed26b5456dcd0dd36c0ff 100644
--- a/frontend/src/metabase/components/EditBar.jsx
+++ b/frontend/src/metabase/components/EditBar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 class EditBar extends Component {
diff --git a/frontend/src/metabase/components/Ellipsified.jsx b/frontend/src/metabase/components/Ellipsified.jsx
index a6c2718dd2e97ca0f5bdd6fcfc315238b47af4c6..5162a76a644084013b8193d39edb1667c89096a1 100644
--- a/frontend/src/metabase/components/Ellipsified.jsx
+++ b/frontend/src/metabase/components/Ellipsified.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import Tooltip from "metabase/components/Tooltip.jsx";
diff --git a/frontend/src/metabase/components/EmojiIcon.jsx b/frontend/src/metabase/components/EmojiIcon.jsx
index 3256aeec840336c7d33df5b5d4fc09607ee8cc1d..fd1a0d0e23ed726da158a59de4f8a24fbeefed8a 100644
--- a/frontend/src/metabase/components/EmojiIcon.jsx
+++ b/frontend/src/metabase/components/EmojiIcon.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import { emoji } from "metabase/lib/emoji";
 
diff --git a/frontend/src/metabase/components/EmptyState.jsx b/frontend/src/metabase/components/EmptyState.jsx
index a2e16089ca21859f261bd2ee5637c9893b257bdc..323cdb10afc4b0c79251838e7ca1237144d6d3b8 100644
--- a/frontend/src/metabase/components/EmptyState.jsx
+++ b/frontend/src/metabase/components/EmptyState.jsx
@@ -1,4 +1,5 @@
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/components/Expandable.jsx b/frontend/src/metabase/components/Expandable.jsx
index f921bde99352074b612009e367948fc4d638999b..256eeb20c99e0c29ae90bacfc7bd2833170d1c31 100644
--- a/frontend/src/metabase/components/Expandable.jsx
+++ b/frontend/src/metabase/components/Expandable.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 const Expandable = (ComposedComponent) => class extends Component {
     static displayName = "Expandable["+(ComposedComponent.displayName || ComposedComponent.name)+"]";
diff --git a/frontend/src/metabase/components/ExplicitSize.jsx b/frontend/src/metabase/components/ExplicitSize.jsx
index be7c380b4457ddf6107cabe9086ac709d0fc1969..9d10e95f74f14cef9c10ce22b77ebd63446d3ac1 100644
--- a/frontend/src/metabase/components/ExplicitSize.jsx
+++ b/frontend/src/metabase/components/ExplicitSize.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import ResizeObserver from "resize-observer-polyfill";
diff --git a/frontend/src/metabase/components/FieldSet.jsx b/frontend/src/metabase/components/FieldSet.jsx
index d73e60dc5af0e35fab8494a6de0275e4173a75f7..2e787403e5aefdefb2385bb11b820107bf942af4 100644
--- a/frontend/src/metabase/components/FieldSet.jsx
+++ b/frontend/src/metabase/components/FieldSet.jsx
@@ -1,4 +1,4 @@
-import React, {Component, PropTypes} from "react";
+import React from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/components/FormField.jsx b/frontend/src/metabase/components/FormField.jsx
index 3000b231d68f6f245a8dfec10905c3b07fd3d1e2..a615e91d64afa863976f1ff822dc717acb07dd41 100644
--- a/frontend/src/metabase/components/FormField.jsx
+++ b/frontend/src/metabase/components/FormField.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/components/Header.jsx b/frontend/src/metabase/components/Header.jsx
index 2f16bfbb78da0113f897fd0c794fb3cb16e3c68f..f8948586f987b91aaefe5fd4697a4b147d6bd136 100644
--- a/frontend/src/metabase/components/Header.jsx
+++ b/frontend/src/metabase/components/Header.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import Input from "metabase/components/Input.jsx";
diff --git a/frontend/src/metabase/components/HeaderBar.jsx b/frontend/src/metabase/components/HeaderBar.jsx
index 5a67451b39f67b4906b083486018f5df22e6f04e..c82d1a23020f8c26cf0150d3c62ad054842d7171 100644
--- a/frontend/src/metabase/components/HeaderBar.jsx
+++ b/frontend/src/metabase/components/HeaderBar.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Input from "metabase/components/Input.jsx";
 import TitleAndDescription from "metabase/components/TitleAndDescription.jsx";
diff --git a/frontend/src/metabase/components/HeaderModal.jsx b/frontend/src/metabase/components/HeaderModal.jsx
index 16b18c3ea40ff87d6cc0d34bcf76b5d9b3b24a7e..6de586575247a16b3a28f54f4c1a39441bf8afcc 100644
--- a/frontend/src/metabase/components/HeaderModal.jsx
+++ b/frontend/src/metabase/components/HeaderModal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import BodyComponent from "metabase/components/BodyComponent";
 import cx from "classnames";
diff --git a/frontend/src/metabase/components/HeaderWithBack.jsx b/frontend/src/metabase/components/HeaderWithBack.jsx
index 6f5761adfc0bf1f90ca26cf8d70ab74d321e8fb6..b3fbfbf2b889d6c4a7533028f04f1dfa70025eee 100644
--- a/frontend/src/metabase/components/HeaderWithBack.jsx
+++ b/frontend/src/metabase/components/HeaderWithBack.jsx
@@ -1,4 +1,5 @@
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon";
 import TitleAndDescription from "metabase/components/TitleAndDescription";
diff --git a/frontend/src/metabase/components/HistoryModal.jsx b/frontend/src/metabase/components/HistoryModal.jsx
index 6aa9f41d0c8a4fd4072549eaaf4882f1685e6d22..3b545724611c3afbb110586d732256c215b38da5 100644
--- a/frontend/src/metabase/components/HistoryModal.jsx
+++ b/frontend/src/metabase/components/HistoryModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ActionButton from "metabase/components/ActionButton.jsx";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
diff --git a/frontend/src/metabase/components/Icon.jsx b/frontend/src/metabase/components/Icon.jsx
index 847e1cc131e6d55aa169f0db8eb9a0dddd9e92f9..ff6078af9f0ffc2f3e62a34d85a5298e40984fa9 100644
--- a/frontend/src/metabase/components/Icon.jsx
+++ b/frontend/src/metabase/components/Icon.jsx
@@ -1,6 +1,7 @@
 /*eslint-disable react/no-danger */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import RetinaImage from "react-retina-image";
 
 import { loadIcon } from 'metabase/icon_paths';
diff --git a/frontend/src/metabase/components/IconBorder.jsx b/frontend/src/metabase/components/IconBorder.jsx
index b23a29bf1655bd73df445e5ac7962f405d20abab..f249b505b2a49de2c2b6e63d5acd9c940d4cf783 100644
--- a/frontend/src/metabase/components/IconBorder.jsx
+++ b/frontend/src/metabase/components/IconBorder.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 /*
diff --git a/frontend/src/metabase/components/Input.jsx b/frontend/src/metabase/components/Input.jsx
index bfef3a9a2988d52d906adb5dd318cd0eaa403e5d..9d754421d076894331c8f61fc03504560bc56667 100644
--- a/frontend/src/metabase/components/Input.jsx
+++ b/frontend/src/metabase/components/Input.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import _ from "underscore";
 
diff --git a/frontend/src/metabase/components/LabelIcon.jsx b/frontend/src/metabase/components/LabelIcon.jsx
index 51ce497119276171807674ab91a8b8cd4e0e589d..b62b0752479e5f49ecc6358b426a04dc51fc9390 100644
--- a/frontend/src/metabase/components/LabelIcon.jsx
+++ b/frontend/src/metabase/components/LabelIcon.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import S from "./LabelIcon.css";
 
diff --git a/frontend/src/metabase/components/List.jsx b/frontend/src/metabase/components/List.jsx
index 407cafe8b88ad608d7073307690824cf6808a8a4..047518a04c3ab389e81dad992853b198fbf3b430 100644
--- a/frontend/src/metabase/components/List.jsx
+++ b/frontend/src/metabase/components/List.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import S from "./List.css";
 import pure from "recompose/pure";
diff --git a/frontend/src/metabase/components/ListItem.jsx b/frontend/src/metabase/components/ListItem.jsx
index f7e15914a6b7db38f112aa2d87a191652e950f45..6082dc558bd8b6e04829c5ec77f816d83ace479a 100644
--- a/frontend/src/metabase/components/ListItem.jsx
+++ b/frontend/src/metabase/components/ListItem.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import S from "./List.css";
 
diff --git a/frontend/src/metabase/components/ListSearchField.jsx b/frontend/src/metabase/components/ListSearchField.jsx
index 0783744264ab81252a98f5f08f8582d70dddd429..6025da72aacd978db8625c02fc901897b9cf288c 100644
--- a/frontend/src/metabase/components/ListSearchField.jsx
+++ b/frontend/src/metabase/components/ListSearchField.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/components/LoadingAndErrorWrapper.jsx b/frontend/src/metabase/components/LoadingAndErrorWrapper.jsx
index fd4c7df84662c17f003b7903ae6a853ea28ab591..a0fc95eae3c38bc1107a25b7cd74f5569dfd811c 100644
--- a/frontend/src/metabase/components/LoadingAndErrorWrapper.jsx
+++ b/frontend/src/metabase/components/LoadingAndErrorWrapper.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import LoadingSpinner from "metabase/components/LoadingSpinner.jsx";
 
diff --git a/frontend/src/metabase/components/LoadingSpinner.jsx b/frontend/src/metabase/components/LoadingSpinner.jsx
index 8356d3d71216aea07723bef88c5951164d95d159..38a5d0a8bae99f415cf5d3b87d25d320bba36d0f 100644
--- a/frontend/src/metabase/components/LoadingSpinner.jsx
+++ b/frontend/src/metabase/components/LoadingSpinner.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import "./LoadingSpinner.css";
 
diff --git a/frontend/src/metabase/components/LogoIcon.jsx b/frontend/src/metabase/components/LogoIcon.jsx
index 15443a7e57805c18307f15997323a15551fe6435..b3134321a4f48d3a4e07a543be1d308818579b9d 100644
--- a/frontend/src/metabase/components/LogoIcon.jsx
+++ b/frontend/src/metabase/components/LogoIcon.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 export default class LogoIcon extends Component {
diff --git a/frontend/src/metabase/components/Logs.jsx b/frontend/src/metabase/components/Logs.jsx
index aa3e31572ad1b3b6c5a4c9f682cf1ad315e9e1b6..eb1521b1b217a7412375917ad9f1f5a9b0fc110d 100644
--- a/frontend/src/metabase/components/Logs.jsx
+++ b/frontend/src/metabase/components/Logs.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 import fetch from 'isomorphic-fetch';
 
diff --git a/frontend/src/metabase/components/Modal.jsx b/frontend/src/metabase/components/Modal.jsx
index 592a39fc1bfb60bb20965daf9381f69c06eab7ba..04d97740acfd632b116169f0f7c4626b492199f8 100644
--- a/frontend/src/metabase/components/Modal.jsx
+++ b/frontend/src/metabase/components/Modal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/components/ModalContent.jsx b/frontend/src/metabase/components/ModalContent.jsx
index 560aca89e9de922aea4715d6943fecd6d2637c8b..51909fcdea445bb91926073cd2fb473f8aa564d8 100644
--- a/frontend/src/metabase/components/ModalContent.jsx
+++ b/frontend/src/metabase/components/ModalContent.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import { MODAL_CHILD_CONTEXT_TYPES } from "./Modal";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/components/NewsletterForm.jsx b/frontend/src/metabase/components/NewsletterForm.jsx
index 18955f11386584ca14d33e4a359165071b29fee0..55a52d563c6d2f7d04b6fb03c8cdf8531e15254f 100644
--- a/frontend/src/metabase/components/NewsletterForm.jsx
+++ b/frontend/src/metabase/components/NewsletterForm.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import Icon from 'metabase/components/Icon.jsx';
diff --git a/frontend/src/metabase/components/NotFound.jsx b/frontend/src/metabase/components/NotFound.jsx
index cdf98c4afcac3c1fccdfc438d34ca0e947f6344b..08c54655ccf0cf68cb99631ced3add58f3c2b897 100644
--- a/frontend/src/metabase/components/NotFound.jsx
+++ b/frontend/src/metabase/components/NotFound.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 
 import * as Urls from "metabase/lib/urls";
diff --git a/frontend/src/metabase/components/OnClickOutsideWrapper.jsx b/frontend/src/metabase/components/OnClickOutsideWrapper.jsx
index 7a972d73ec8c0bee92630b34eb954b946b2291bf..961382729f9324e365e1351207531c8ec5ae8c96 100644
--- a/frontend/src/metabase/components/OnClickOutsideWrapper.jsx
+++ b/frontend/src/metabase/components/OnClickOutsideWrapper.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 // keep track of the order popovers were opened so we only close the last one when clicked outside
diff --git a/frontend/src/metabase/components/PasswordReveal.jsx b/frontend/src/metabase/components/PasswordReveal.jsx
index eba44e2cc2d075b759376c8d308fe5e1c8d86a25..be1387260a99f4fff186c6a430d9f4179c3646ef 100644
--- a/frontend/src/metabase/components/PasswordReveal.jsx
+++ b/frontend/src/metabase/components/PasswordReveal.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 export default class PasswordReveal extends Component {
 
diff --git a/frontend/src/metabase/components/Popover.jsx b/frontend/src/metabase/components/Popover.jsx
index f4d255e88c3aea8ad4c6a7c5d362e331f5b45c7d..cd72579ac1558cecd4cf550494cb984c06043548 100644
--- a/frontend/src/metabase/components/Popover.jsx
+++ b/frontend/src/metabase/components/Popover.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 
diff --git a/frontend/src/metabase/components/ProgressBar.jsx b/frontend/src/metabase/components/ProgressBar.jsx
index cdc79c62f7d4d58acace1ff048b5b3a0c4b009d7..a10bf6de3685c4257ba41b8bedc1036a245bb689 100644
--- a/frontend/src/metabase/components/ProgressBar.jsx
+++ b/frontend/src/metabase/components/ProgressBar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 export default class ProgressBar extends Component {
     static propTypes = {
diff --git a/frontend/src/metabase/components/QueryButton.jsx b/frontend/src/metabase/components/QueryButton.jsx
index 83fdb22244dfeda38d2097d0a7860a3b54309119..58985a6ae905c2ee55a6e00e4f5e7d0735d44d40 100644
--- a/frontend/src/metabase/components/QueryButton.jsx
+++ b/frontend/src/metabase/components/QueryButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import pure from "recompose/pure";
 import cx from "classnames";
@@ -39,4 +40,4 @@ QueryButton.propTypes = {
     link: PropTypes.string
 };
 
-export default pure(QueryButton);
\ No newline at end of file
+export default pure(QueryButton);
diff --git a/frontend/src/metabase/components/QuestionSavedModal.jsx b/frontend/src/metabase/components/QuestionSavedModal.jsx
index 6623904d06014358400fdffe83b2d3862acc4e00..6bcbe8486e6ea8ed97bcbb95bd57f570835b04cd 100644
--- a/frontend/src/metabase/components/QuestionSavedModal.jsx
+++ b/frontend/src/metabase/components/QuestionSavedModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 
diff --git a/frontend/src/metabase/components/Radio.jsx b/frontend/src/metabase/components/Radio.jsx
index 3707ed77871e26d369809fcc23ae83ab5f60d925..0a5c7eb9c80429d334215e67eead3f01ce46a996 100644
--- a/frontend/src/metabase/components/Radio.jsx
+++ b/frontend/src/metabase/components/Radio.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 import _ from "underscore";
diff --git a/frontend/src/metabase/components/SaveStatus.jsx b/frontend/src/metabase/components/SaveStatus.jsx
index 21719c6ae7af6ad8c5b08e3bf67e7f001f7c52d2..2b6405f0c96bb8c8e37138156ac7569d5bebc5de 100644
--- a/frontend/src/metabase/components/SaveStatus.jsx
+++ b/frontend/src/metabase/components/SaveStatus.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 import LoadingSpinner from "metabase/components/LoadingSpinner.jsx";
diff --git a/frontend/src/metabase/components/Select.jsx b/frontend/src/metabase/components/Select.jsx
index 20adc9c358a24b0216b040e7acf630be9878d727..46452638ca8020475919afe1daa823cbaed7b6a0 100644
--- a/frontend/src/metabase/components/Select.jsx
+++ b/frontend/src/metabase/components/Select.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ColumnarSelector from "metabase/components/ColumnarSelector.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/components/SelectButton.jsx b/frontend/src/metabase/components/SelectButton.jsx
index f0156b5c45269b55c13734514e16aedde32ba986..e14ed5577c0c8171bd9faf7758b5058e085a07be 100644
--- a/frontend/src/metabase/components/SelectButton.jsx
+++ b/frontend/src/metabase/components/SelectButton.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/components/ShrinkableList.jsx b/frontend/src/metabase/components/ShrinkableList.jsx
index 15f9a89a19fdd06548923f97eda749b3be7c95f9..457841fd15c62d49a9945102ec96c4e89e03ade5 100644
--- a/frontend/src/metabase/components/ShrinkableList.jsx
+++ b/frontend/src/metabase/components/ShrinkableList.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import ExplicitSize from "metabase/components/ExplicitSize";
diff --git a/frontend/src/metabase/components/Sidebar.jsx b/frontend/src/metabase/components/Sidebar.jsx
index ff8983019307843cdc49e9e6fafb8f38a37a783b..2d5d89794c76150df5bde3fa377a28d7e3fbec56 100644
--- a/frontend/src/metabase/components/Sidebar.jsx
+++ b/frontend/src/metabase/components/Sidebar.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import S from "./Sidebar.css";
 
diff --git a/frontend/src/metabase/components/SidebarLayout.jsx b/frontend/src/metabase/components/SidebarLayout.jsx
index 3ad943653ccfb66c89dcd344d68e6a2f2a8872ee..6a72feeadcc938d2c852b430f77693b77c41fada 100644
--- a/frontend/src/metabase/components/SidebarLayout.jsx
+++ b/frontend/src/metabase/components/SidebarLayout.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 const SidebarLayout = ({ className, style, sidebar, children }) =>
     <div className={className} style={{ ...style, display: "flex", flexDirection: "row"}}>
diff --git a/frontend/src/metabase/components/SortableItemList.jsx b/frontend/src/metabase/components/SortableItemList.jsx
index 00495171c6ff8fe3a56c83e9f629225452409b57..417eaacacff8a95e844e15f1308af066b58a7fdc 100644
--- a/frontend/src/metabase/components/SortableItemList.jsx
+++ b/frontend/src/metabase/components/SortableItemList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import "./SortableItemList.css";
 
diff --git a/frontend/src/metabase/components/StackedCheckBox.jsx b/frontend/src/metabase/components/StackedCheckBox.jsx
index 6b44a0dbaa1a0f2ef38a20525074a46075f61d6a..0332500ed3045a0edf069d2f80b68b3d51d1fd82 100644
--- a/frontend/src/metabase/components/StackedCheckBox.jsx
+++ b/frontend/src/metabase/components/StackedCheckBox.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import CheckBox from "metabase/components/CheckBox.jsx";
 
diff --git a/frontend/src/metabase/components/TextEditor.jsx b/frontend/src/metabase/components/TextEditor.jsx
index db65a48337fb5c7b84f4b18fc373f944fae4ba68..d23fc3505aec4e4ef33e88f50cba0692e54751b6 100644
--- a/frontend/src/metabase/components/TextEditor.jsx
+++ b/frontend/src/metabase/components/TextEditor.jsx
@@ -1,6 +1,7 @@
 /*global ace*/
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import "ace/ace";
diff --git a/frontend/src/metabase/components/TitleAndDescription.jsx b/frontend/src/metabase/components/TitleAndDescription.jsx
index 81dee583aad5a0617bdc0d3ece93aee999ba9728..899de18e87ff7f913f8486f7bfd1b24df7e6f346 100644
--- a/frontend/src/metabase/components/TitleAndDescription.jsx
+++ b/frontend/src/metabase/components/TitleAndDescription.jsx
@@ -1,4 +1,5 @@
-import React, { PropTypes } from 'react';
+import React from 'react';
+import PropTypes from "prop-types";
 import pure from "recompose/pure";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/components/Toggle.jsx b/frontend/src/metabase/components/Toggle.jsx
index 79f80c4d1069f86815f9297cbbd7f69a0970d941..7617f8723622bf3ba192ef9175a87a4b0756ebd9 100644
--- a/frontend/src/metabase/components/Toggle.jsx
+++ b/frontend/src/metabase/components/Toggle.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import styles from "./Toggle.css";
 
diff --git a/frontend/src/metabase/components/Tooltip.jsx b/frontend/src/metabase/components/Tooltip.jsx
index b892ba3e0fdfc840742c4de580e78be3b9a9350f..7b8d6f5fbb4c1adf7ba7f639195a044462f45704 100644
--- a/frontend/src/metabase/components/Tooltip.jsx
+++ b/frontend/src/metabase/components/Tooltip.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import TooltipPopover from "./TooltipPopover.jsx";
diff --git a/frontend/src/metabase/components/TooltipPopover.jsx b/frontend/src/metabase/components/TooltipPopover.jsx
index 5bbf6c15ab6a31bbe3602e67ed8403ffafe687cc..5fceead08de609725c46ed812fc92d966d24c337 100644
--- a/frontend/src/metabase/components/TooltipPopover.jsx
+++ b/frontend/src/metabase/components/TooltipPopover.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/components/Triggerable.jsx b/frontend/src/metabase/components/Triggerable.jsx
index 9a4fbc67d51d8f2f13fedf23204bac63819b703d..b30d90daca10f29915e5e069866fd0caed8b5ec3 100644
--- a/frontend/src/metabase/components/Triggerable.jsx
+++ b/frontend/src/metabase/components/Triggerable.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import { isObscured } from "metabase/lib/dom";
diff --git a/frontend/src/metabase/components/Unauthorized.jsx b/frontend/src/metabase/components/Unauthorized.jsx
index 7c29bac0f7f9ed425226851485e01b4e88cbdd8e..d43c1eb98a9c87e8a86a601b2e6ce5016b87c407 100644
--- a/frontend/src/metabase/components/Unauthorized.jsx
+++ b/frontend/src/metabase/components/Unauthorized.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/components/UserAvatar.jsx b/frontend/src/metabase/components/UserAvatar.jsx
index af24b4bcf6bc6986d78330e2d1f48d0d5cf1f21b..0c002cd4d32931636033ea4ab727e69c0b27de9b 100644
--- a/frontend/src/metabase/components/UserAvatar.jsx
+++ b/frontend/src/metabase/components/UserAvatar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import cx from 'classnames';
 
 export default class UserAvatar extends Component {
diff --git a/frontend/src/metabase/components/form/FormField.jsx b/frontend/src/metabase/components/form/FormField.jsx
index 90cf12e242f7edc03ddb73146e28fb296c4b1ae2..4e4066d20969dddfbf9b7808754712fd0b4c15cf 100644
--- a/frontend/src/metabase/components/form/FormField.jsx
+++ b/frontend/src/metabase/components/form/FormField.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/components/form/FormLabel.jsx b/frontend/src/metabase/components/form/FormLabel.jsx
index 5e79a4bb8a50ed7730b33c525f7c6b925c1fb505..5a14bed3229ad96489b1a4040543389a9e1a9149 100644
--- a/frontend/src/metabase/components/form/FormLabel.jsx
+++ b/frontend/src/metabase/components/form/FormLabel.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 
diff --git a/frontend/src/metabase/components/form/FormMessage.jsx b/frontend/src/metabase/components/form/FormMessage.jsx
index 1fead88a8a2142d2c17ba58ad76614f7cc2e8bf4..09f2c4ca15ea682dd34c66a7f62f2484c2d55637 100644
--- a/frontend/src/metabase/components/form/FormMessage.jsx
+++ b/frontend/src/metabase/components/form/FormMessage.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import cx from "classnames";
 
 
diff --git a/frontend/src/metabase/containers/SaveQuestionModal.jsx b/frontend/src/metabase/containers/SaveQuestionModal.jsx
index 6e4ed2b26b0d9220254fdf51900bb54eabdbf361..7e7dae69a8a5745ba16408ecfc3c2d09c38e79ed 100644
--- a/frontend/src/metabase/containers/SaveQuestionModal.jsx
+++ b/frontend/src/metabase/containers/SaveQuestionModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 
diff --git a/frontend/src/metabase/containers/UndoListing.jsx b/frontend/src/metabase/containers/UndoListing.jsx
index 8d1e7785a39cb51b33b74d790bdb01d20421a02a..672fcd1d86906f66496fcda45e0851e480ac17e0 100644
--- a/frontend/src/metabase/containers/UndoListing.jsx
+++ b/frontend/src/metabase/containers/UndoListing.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import S from "./UndoListing.css";
diff --git a/frontend/src/metabase/dashboard/components/AddSeriesModal.jsx b/frontend/src/metabase/dashboard/components/AddSeriesModal.jsx
index 4dfbefdcadeb031a842a90661be62a8390e730f5..d373afa4b74a12f312be6c6b394e58abdd15d661 100644
--- a/frontend/src/metabase/dashboard/components/AddSeriesModal.jsx
+++ b/frontend/src/metabase/dashboard/components/AddSeriesModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Visualization from "metabase/visualizations/components/Visualization.jsx";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
diff --git a/frontend/src/metabase/dashboard/components/AddToDashSelectQuestionModal.jsx b/frontend/src/metabase/dashboard/components/AddToDashSelectQuestionModal.jsx
index 1d513501c53df8ecf1b277ac0d76114c2a542fd3..0ab0ea01ddc693a8d45b094189192f875c624201 100644
--- a/frontend/src/metabase/dashboard/components/AddToDashSelectQuestionModal.jsx
+++ b/frontend/src/metabase/dashboard/components/AddToDashSelectQuestionModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetabaseAnalytics from "metabase/lib/analytics";
 import AddToDashboard from "metabase/questions/containers/AddToDashboard.jsx";
diff --git a/frontend/src/metabase/dashboard/components/DashCard.jsx b/frontend/src/metabase/dashboard/components/DashCard.jsx
index 0ef43f0234fb8a89309a3c11d006dbd81499c650..01bb76aeff49686d006fdb854fd5b5c96630a0f5 100644
--- a/frontend/src/metabase/dashboard/components/DashCard.jsx
+++ b/frontend/src/metabase/dashboard/components/DashCard.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import visualizations, { getVisualizationRaw } from "metabase/visualizations";
diff --git a/frontend/src/metabase/dashboard/components/Dashboard.jsx b/frontend/src/metabase/dashboard/components/Dashboard.jsx
index 931f3d9969ea0b7ef2366c8923f40bc3c2876481..5325abcbdd86492c2bb0a301d9bede809b99ecc6 100644
--- a/frontend/src/metabase/dashboard/components/Dashboard.jsx
+++ b/frontend/src/metabase/dashboard/components/Dashboard.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import DashboardHeader from "../components/DashboardHeader.jsx";
 import DashboardGrid from "../components/DashboardGrid.jsx";
diff --git a/frontend/src/metabase/dashboard/components/DashboardGrid.jsx b/frontend/src/metabase/dashboard/components/DashboardGrid.jsx
index a037198fc1b42e9a037b36d1dabe345f93f1cebe..4441f0249d1d3900b451f32908881a42ef70f5ec 100644
--- a/frontend/src/metabase/dashboard/components/DashboardGrid.jsx
+++ b/frontend/src/metabase/dashboard/components/DashboardGrid.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import GridLayout from "./grid/GridLayout.jsx";
 import DashCard from "./DashCard.jsx";
diff --git a/frontend/src/metabase/dashboard/components/DashboardHeader.jsx b/frontend/src/metabase/dashboard/components/DashboardHeader.jsx
index aea7c4a5fd0d2a2c68b6be5332634367e2965a4f..db1f7d977f87d32f2150aab9882267d9d519caee 100644
--- a/frontend/src/metabase/dashboard/components/DashboardHeader.jsx
+++ b/frontend/src/metabase/dashboard/components/DashboardHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ActionButton from "metabase/components/ActionButton.jsx";
 import AddToDashSelectQuestionModal from "./AddToDashSelectQuestionModal.jsx";
diff --git a/frontend/src/metabase/dashboard/components/DeleteDashboardModal.jsx b/frontend/src/metabase/dashboard/components/DeleteDashboardModal.jsx
index 653449a0899930a454017e99479d208f00af4ded..f75223b38abe756115200ad4dfa9029dfe857496 100644
--- a/frontend/src/metabase/dashboard/components/DeleteDashboardModal.jsx
+++ b/frontend/src/metabase/dashboard/components/DeleteDashboardModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalContent from "metabase/components/ModalContent.jsx";
 
diff --git a/frontend/src/metabase/dashboard/components/RefreshWidget.jsx b/frontend/src/metabase/dashboard/components/RefreshWidget.jsx
index 7558419887f11b33d70c2e54c16cfcd4a3090f19..afcf9cf84e6f4e4ec7579af80ab11c8b68bf42d2 100644
--- a/frontend/src/metabase/dashboard/components/RefreshWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/RefreshWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import styles from "./RefreshWidget.css";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
diff --git a/frontend/src/metabase/dashboard/components/RemoveFromDashboardModal.jsx b/frontend/src/metabase/dashboard/components/RemoveFromDashboardModal.jsx
index e6d17b5fa6122f15c26c49701d9315898adf9418..b1d85a855b075c0f6649eb53458fbda733f9df95 100644
--- a/frontend/src/metabase/dashboard/components/RemoveFromDashboardModal.jsx
+++ b/frontend/src/metabase/dashboard/components/RemoveFromDashboardModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetabaseAnalytics from "metabase/lib/analytics";
 import ModalContent from "metabase/components/ModalContent.jsx";
diff --git a/frontend/src/metabase/dashboard/components/grid/GridItem.jsx b/frontend/src/metabase/dashboard/components/grid/GridItem.jsx
index 481cda2928d94c1408cdd3fa6cbc94ca4060149d..6a0b745f8dce13f7cfb09a5633e50daa4c4294c9 100644
--- a/frontend/src/metabase/dashboard/components/grid/GridItem.jsx
+++ b/frontend/src/metabase/dashboard/components/grid/GridItem.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { DraggableCore } from "react-draggable";
 import { Resizable } from "react-resizable";
diff --git a/frontend/src/metabase/dashboard/components/grid/GridLayout.jsx b/frontend/src/metabase/dashboard/components/grid/GridLayout.jsx
index 57f9d0e365ed11d2559785d873bef99b24066232..701934e1ca19e6cbd361019f7c15b6bbff8917e5 100644
--- a/frontend/src/metabase/dashboard/components/grid/GridLayout.jsx
+++ b/frontend/src/metabase/dashboard/components/grid/GridLayout.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import GridItem from "./GridItem.jsx";
diff --git a/frontend/src/metabase/dashboard/components/parameters/DashCardParameterMapper.jsx b/frontend/src/metabase/dashboard/components/parameters/DashCardParameterMapper.jsx
index 197501d631b7b0a2de598be4e54ff0440212bd17..00a5bc7476a71085a655458bb948e8add226d23b 100644
--- a/frontend/src/metabase/dashboard/components/parameters/DashCardParameterMapper.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/DashCardParameterMapper.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import DashCardCardParameterMapper from "../../containers/DashCardCardParameterMapper.jsx";
 
diff --git a/frontend/src/metabase/dashboard/components/parameters/ParameterValueWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/ParameterValueWidget.jsx
index 4aacaf8dff48740d3752a72e4df363ff07088f3f..c7d44bf601f85dfca12787a1fff1c65bc5977dec 100644
--- a/frontend/src/metabase/dashboard/components/parameters/ParameterValueWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/ParameterValueWidget.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, {Component, PropTypes} from "react"
+import React, {Component} from "react"
+import PropTypes from "prop-types";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/dashboard/components/parameters/ParametersPopover.jsx b/frontend/src/metabase/dashboard/components/parameters/ParametersPopover.jsx
index d1788e09a6685d0dd315d0ecf388d9198a4db1db..636c2f92323db6b95b9b5d1fa3852171a407df27 100644
--- a/frontend/src/metabase/dashboard/components/parameters/ParametersPopover.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/ParametersPopover.jsx
@@ -1,5 +1,5 @@
 /* @flow */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { PARAMETER_SECTIONS } from "metabase/meta/Dashboard";
 import type { ParameterOption } from "metabase/meta/types/Dashboard";
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/CategoryWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/CategoryWidget.jsx
index 553f579c6c9635cd2ab99ed6cafcc4d614fa933c..1d19376aee2b7e29ddeea6c7263bb000ceb2ade5 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/CategoryWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/CategoryWidget.jsx
@@ -1,7 +1,8 @@
 /* @flow */
 /* eslint "react/prop-types": "warn" */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import { createMultiwordSearchRegex } from "metabase/lib/string";
 
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateAllOptionsWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateAllOptionsWidget.jsx
index 8c6bf8188c4d73492833bf63dbbc0eb6db3a8189..52b252b6de994e5a428cf3e21e8511fedd30dc3d 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateAllOptionsWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateAllOptionsWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, {Component, PropTypes} from "react";
+import React, {Component} from "react";
 import cx from "classnames";
 
 import DatePicker, {DATE_OPERATORS} from "metabase/query_builder/components/filters/pickers/DatePicker.jsx";
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateMonthYearWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateMonthYearWidget.jsx
index 64c904c407ada9e7b2ed7eb4d548e5c16b7a69b7..a037e3576f3cc4316021a3377d7b81304c62bc00 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateMonthYearWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateMonthYearWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import YearPicker from "./YearPicker.jsx";
 
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateQuarterYearWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateQuarterYearWidget.jsx
index 47e3ece51266cc889a6e42258a83e61bf0f9e2be..7fb3c4549b39968ed6fb819ff59099776cdddeab 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateQuarterYearWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateQuarterYearWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import YearPicker from "./YearPicker.jsx";
 
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateRangeWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateRangeWidget.jsx
index fd664cc474b772bef6b5c47dbab6079cc72c2d31..b3c777f50653f537749d8182cbdaebbc40775e6a 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateRangeWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateRangeWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Calendar from "metabase/components/Calendar.jsx";
 import moment from "moment";
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateRelativeWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateRelativeWidget.jsx
index dfc1f98bece7aadd1c101229c11e7a373de99818..e5d865a86d0d6888a73aad46e281b64778440948 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateRelativeWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateRelativeWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 import _ from "underscore";
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/DateSingleWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/DateSingleWidget.jsx
index 1035cf795d40e785e0575a45426cd923f24f547e..09141e8f4e137bb4fe7b1dee6174021f97ac0265 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/DateSingleWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/DateSingleWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Calendar from "metabase/components/Calendar.jsx";
 import moment from "moment";
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/TextWidget.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/TextWidget.jsx
index b26c6f929ca16caf9ba7b2ea7ec6907898b1411e..553c01eaee5ac465b771c4a5dacafac797d7b4ab 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/TextWidget.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/TextWidget.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 export default class TextWidget extends Component {
     constructor(props, context) {
diff --git a/frontend/src/metabase/dashboard/components/parameters/widgets/YearPicker.jsx b/frontend/src/metabase/dashboard/components/parameters/widgets/YearPicker.jsx
index df2a080279da2fd39aa388051fd91de22761fbbb..455eeb5fc466b9623184922623e87cb497db7140 100644
--- a/frontend/src/metabase/dashboard/components/parameters/widgets/YearPicker.jsx
+++ b/frontend/src/metabase/dashboard/components/parameters/widgets/YearPicker.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Select from "metabase/components/Select.jsx";
 import _ from "underscore";
diff --git a/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx b/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
index f23e115582c97416696af72db8e352b1ed14809e..f2049bfce17699c3f815077a5854b736e3dd2239 100644
--- a/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import S from "./DashCardCardParameterMapper.css";
diff --git a/frontend/src/metabase/dashboard/containers/DashboardApp.jsx b/frontend/src/metabase/dashboard/containers/DashboardApp.jsx
index 6ec9f224767665e4b7c468e664a5dea6c20e9d85..8e704cde2cdc3225d7c6a29d626cc344f587e87d 100644
--- a/frontend/src/metabase/dashboard/containers/DashboardApp.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashboardApp.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx b/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
index 50ca40dee81a890a314713e9f0adac57686d7c9a..cd76a516159bb1b31fe14cd12ee93e2eaf917491 100644
--- a/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import EmbedWidget from "metabase/public/components/widgets/EmbedWidget";
diff --git a/frontend/src/metabase/dashboard/containers/ParameterWidget.jsx b/frontend/src/metabase/dashboard/containers/ParameterWidget.jsx
index e352c644b130e2fc9c67233e6b8ec30905713116..cb81c3845169edfde21e6791528d0063d352d951 100644
--- a/frontend/src/metabase/dashboard/containers/ParameterWidget.jsx
+++ b/frontend/src/metabase/dashboard/containers/ParameterWidget.jsx
@@ -1,4 +1,5 @@
-import React, {Component, PropTypes} from 'react';
+import React, {Component} from 'react';
+import PropTypes from "prop-types";
 import {connect} from "react-redux";
 
 import ParameterValueWidget from "../components/parameters/ParameterValueWidget.jsx";
diff --git a/frontend/src/metabase/dashboard/containers/Parameters.jsx b/frontend/src/metabase/dashboard/containers/Parameters.jsx
index c0d14c887c0ed80efbc85f2352b7f6b9c1cf45c2..27922677a5f5ab5172ed0918ac7f465698bb0861 100644
--- a/frontend/src/metabase/dashboard/containers/Parameters.jsx
+++ b/frontend/src/metabase/dashboard/containers/Parameters.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ParameterWidget from "./ParameterWidget.jsx";
 
diff --git a/frontend/src/metabase/hoc/Routeless.jsx b/frontend/src/metabase/hoc/Routeless.jsx
index 1e2b22de0357f296d9e44a23c6aa6921efc90bb1..f231e6c2798bfb476cc904b66b09f6c7b2e1b072 100644
--- a/frontend/src/metabase/hoc/Routeless.jsx
+++ b/frontend/src/metabase/hoc/Routeless.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { connect } from "react-redux";
 import { push, goBack } from "react-router-redux";
diff --git a/frontend/src/metabase/hoc/Tooltipify.jsx b/frontend/src/metabase/hoc/Tooltipify.jsx
index e2c8a2e45f0820cb544e25fc66e7569e47adc0ba..5aaae09c1eb677ea25508976425a156de05df041 100644
--- a/frontend/src/metabase/hoc/Tooltipify.jsx
+++ b/frontend/src/metabase/hoc/Tooltipify.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Tooltip from "metabase/components/Tooltip";
 
diff --git a/frontend/src/metabase/hoc/Typeahead.jsx b/frontend/src/metabase/hoc/Typeahead.jsx
index 2fa2e872eb7b21a5a3fc1c6401a126d7475c95d6..bbe356554a3f1f7e201288a67e8cf26aa99e3b34 100644
--- a/frontend/src/metabase/hoc/Typeahead.jsx
+++ b/frontend/src/metabase/hoc/Typeahead.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import _ from "underscore";
 
diff --git a/frontend/src/metabase/home/components/Activity.jsx b/frontend/src/metabase/home/components/Activity.jsx
index bc8d65ca2c60aab05fb1102ef878b4661f4c9731..fe3a77789457ede273e3b0255c4a84b1e9f83061 100644
--- a/frontend/src/metabase/home/components/Activity.jsx
+++ b/frontend/src/metabase/home/components/Activity.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import _ from 'underscore';
 
diff --git a/frontend/src/metabase/home/components/ActivityItem.jsx b/frontend/src/metabase/home/components/ActivityItem.jsx
index b453b1eb4b8707b228b6bb08c90bb1d67f238621..8d7ba0966acc930656e531126128437b1cfd1792 100644
--- a/frontend/src/metabase/home/components/ActivityItem.jsx
+++ b/frontend/src/metabase/home/components/ActivityItem.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import Icon from 'metabase/components/Icon.jsx';
 import IconBorder from 'metabase/components/IconBorder.jsx';
 import UserAvatar from 'metabase/components/UserAvatar.jsx';
diff --git a/frontend/src/metabase/home/components/ActivityStory.jsx b/frontend/src/metabase/home/components/ActivityStory.jsx
index 93446a019a5984604c536cb5b04c356c696836d2..5c520197a9f9e1c631059ae2e4c6695de42a483f 100644
--- a/frontend/src/metabase/home/components/ActivityStory.jsx
+++ b/frontend/src/metabase/home/components/ActivityStory.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 export default class ActivityStory extends Component {
diff --git a/frontend/src/metabase/home/components/NewUserOnboardingModal.jsx b/frontend/src/metabase/home/components/NewUserOnboardingModal.jsx
index d58b1ff6912110f687a4df04804bae7e4fc7f8a5..12e9b1c812fda901b8595a2b0df77ce893a4150f 100644
--- a/frontend/src/metabase/home/components/NewUserOnboardingModal.jsx
+++ b/frontend/src/metabase/home/components/NewUserOnboardingModal.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import MetabaseSettings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/home/components/NextStep.jsx b/frontend/src/metabase/home/components/NextStep.jsx
index a3d1ef4a52fb6f8e118000b5b16e2db8f3f2c726..95424080c7806ae205ac52eedfcc2c450582d26b 100644
--- a/frontend/src/metabase/home/components/NextStep.jsx
+++ b/frontend/src/metabase/home/components/NextStep.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 import fetch from 'isomorphic-fetch';
 
diff --git a/frontend/src/metabase/home/components/RecentViews.jsx b/frontend/src/metabase/home/components/RecentViews.jsx
index 9a967584956eed30780e4128ede71e705e7f7b1e..a1b0a36ed9e6dc4c3725d04a0e7a98f7493fffce 100644
--- a/frontend/src/metabase/home/components/RecentViews.jsx
+++ b/frontend/src/metabase/home/components/RecentViews.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/home/components/SidebarSection.jsx b/frontend/src/metabase/home/components/SidebarSection.jsx
index a83469d754b758be168f3cb03b5f7df2560471cb..cfbd4537bf6a9a9e1473e5c7eb08418f0addc884 100644
--- a/frontend/src/metabase/home/components/SidebarSection.jsx
+++ b/frontend/src/metabase/home/components/SidebarSection.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/home/containers/HomepageApp.jsx b/frontend/src/metabase/home/containers/HomepageApp.jsx
index 1644539b7c056abbebd2c43b7a06f0a82f7fe275..cd5be9797e6a557cfd5b8b7b29a07a2df8e6a9fa 100644
--- a/frontend/src/metabase/home/containers/HomepageApp.jsx
+++ b/frontend/src/metabase/home/containers/HomepageApp.jsx
@@ -1,5 +1,6 @@
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import Greeting from "metabase/lib/greeting";
diff --git a/frontend/src/metabase/nav/components/ProfileLink.jsx b/frontend/src/metabase/nav/components/ProfileLink.jsx
index a244dc74eeef0f54d59301c51cc099b9a1f0bac3..d9b3ad48a7087e8c4656980fdad314394150a644 100644
--- a/frontend/src/metabase/nav/components/ProfileLink.jsx
+++ b/frontend/src/metabase/nav/components/ProfileLink.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import OnClickOutsideWrapper from 'metabase/components/OnClickOutsideWrapper';
diff --git a/frontend/src/metabase/nav/containers/DashboardsDropdown.jsx b/frontend/src/metabase/nav/containers/DashboardsDropdown.jsx
index 425c4d220862d0d318126d3c532ed7560f8ca26f..a4f1cd7c1e93f45ab2f5fdcde2a7838cda786f0f 100644
--- a/frontend/src/metabase/nav/containers/DashboardsDropdown.jsx
+++ b/frontend/src/metabase/nav/containers/DashboardsDropdown.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 import { Link } from "react-router";
 
diff --git a/frontend/src/metabase/nav/containers/Navbar.jsx b/frontend/src/metabase/nav/containers/Navbar.jsx
index 3dc5c7f4cef6f4ebf7bba46752d1e5fdf9baa5bb..3c286bcbfaa7606cafcb486063df0cab68c61d68 100644
--- a/frontend/src/metabase/nav/containers/Navbar.jsx
+++ b/frontend/src/metabase/nav/containers/Navbar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 import { connect } from "react-redux";
diff --git a/frontend/src/metabase/public/components/EmbedFrame.jsx b/frontend/src/metabase/public/components/EmbedFrame.jsx
index 5dcfb7f14379029b4a9c5d5de2bb3a15289bca96..65588c87a67530ee5a4413e2906be1f6a56967a4 100644
--- a/frontend/src/metabase/public/components/EmbedFrame.jsx
+++ b/frontend/src/metabase/public/components/EmbedFrame.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { withRouter } from "react-router"; import { IFRAMED } from "metabase/lib/dom";
 
 import Parameters from "metabase/dashboard/containers/Parameters";
diff --git a/frontend/src/metabase/public/components/MetabaseEmbed.jsx b/frontend/src/metabase/public/components/MetabaseEmbed.jsx
index 841d3fa3f257ccfe8df84a3e18189c58de81b8f4..80635a96ca845345af476a2c217bd796ba424517 100644
--- a/frontend/src/metabase/public/components/MetabaseEmbed.jsx
+++ b/frontend/src/metabase/public/components/MetabaseEmbed.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import querystring from "querystring";
 import _ from "underscore";
diff --git a/frontend/src/metabase/public/components/PublicError.jsx b/frontend/src/metabase/public/components/PublicError.jsx
index 01e429cfccb78ec6abee1f68eb53a84e6eb06c87..d0ce8d1dffd6c61af60674731ff13ea48793e439 100644
--- a/frontend/src/metabase/public/components/PublicError.jsx
+++ b/frontend/src/metabase/public/components/PublicError.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { connect } from "react-redux";
 import { getErrorMessage } from "metabase/selectors/app";
diff --git a/frontend/src/metabase/public/components/PublicNotFound.jsx b/frontend/src/metabase/public/components/PublicNotFound.jsx
index 1c775ff4a478a514c52d88d3af66ac0171215db0..0ae0e771ad8a1a2bfb0e7414ce6a0cebd3c534ac 100644
--- a/frontend/src/metabase/public/components/PublicNotFound.jsx
+++ b/frontend/src/metabase/public/components/PublicNotFound.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import EmbedFrame from "./EmbedFrame";
 
diff --git a/frontend/src/metabase/public/components/widgets/AdvancedEmbedPane.jsx b/frontend/src/metabase/public/components/widgets/AdvancedEmbedPane.jsx
index 1462d528d9c0157b4dce35cbebee57c654ef7198..f5f4d111e1c43a7e643ebcb2035e79ebb0b7e91b 100644
--- a/frontend/src/metabase/public/components/widgets/AdvancedEmbedPane.jsx
+++ b/frontend/src/metabase/public/components/widgets/AdvancedEmbedPane.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import ToggleLarge from "metabase/components/ToggleLarge";
 import Button from "metabase/components/Button";
diff --git a/frontend/src/metabase/public/components/widgets/CodeSample.jsx b/frontend/src/metabase/public/components/widgets/CodeSample.jsx
index 0db42c7e1b0280b3e535739603be425ddf7665f5..f236fd875b1a1c91c9f6fa38f28bda6e6aa0e217 100644
--- a/frontend/src/metabase/public/components/widgets/CodeSample.jsx
+++ b/frontend/src/metabase/public/components/widgets/CodeSample.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Select, { Option } from "metabase/components/Select";
 import CopyButton from "metabase/components/CopyButton";
diff --git a/frontend/src/metabase/public/components/widgets/DisplayOptionsPane.jsx b/frontend/src/metabase/public/components/widgets/DisplayOptionsPane.jsx
index 57aa1fdca1d39a54a0e0509f2320be1c86ff20f6..748840682947e4497e769589277ecbda7ca447de 100644
--- a/frontend/src/metabase/public/components/widgets/DisplayOptionsPane.jsx
+++ b/frontend/src/metabase/public/components/widgets/DisplayOptionsPane.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import EmbedSelect from "./EmbedSelect";
 import CheckBox from "metabase/components/CheckBox";
diff --git a/frontend/src/metabase/public/components/widgets/EmbedCodePane.jsx b/frontend/src/metabase/public/components/widgets/EmbedCodePane.jsx
index 5671264be8f8465f13e0f5c600c0bbdd27275f43..3958f551e00d797aed0d33242f430fbd199dcc3e 100644
--- a/frontend/src/metabase/public/components/widgets/EmbedCodePane.jsx
+++ b/frontend/src/metabase/public/components/widgets/EmbedCodePane.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ExternalLink from "metabase/components/ExternalLink";
 import CodeSample from "./CodeSample";
diff --git a/frontend/src/metabase/public/components/widgets/EmbedModalContent.jsx b/frontend/src/metabase/public/components/widgets/EmbedModalContent.jsx
index d5796ef95c8f5894a472e77a841f311290e54c6b..e46b9fb677fc6188dca638e23fd76bf77498dd4d 100644
--- a/frontend/src/metabase/public/components/widgets/EmbedModalContent.jsx
+++ b/frontend/src/metabase/public/components/widgets/EmbedModalContent.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { titleize } from "inflection";
 
diff --git a/frontend/src/metabase/public/components/widgets/EmbedSelect.jsx b/frontend/src/metabase/public/components/widgets/EmbedSelect.jsx
index 3ef3b3d0867ad1b54db2019d6b5c5f6b8cd6d0ea..5e569c9b2859318c112f50fe8922d316f6149246 100644
--- a/frontend/src/metabase/public/components/widgets/EmbedSelect.jsx
+++ b/frontend/src/metabase/public/components/widgets/EmbedSelect.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Icon from "metabase/components/Icon";
 
diff --git a/frontend/src/metabase/public/components/widgets/EmbedWidget.jsx b/frontend/src/metabase/public/components/widgets/EmbedWidget.jsx
index b92714f51cb11edd7a5c3fc0e56cb67f7bd0f852..05a759a4ba821eb7b8f3f1e96513bd805879ccfb 100644
--- a/frontend/src/metabase/public/components/widgets/EmbedWidget.jsx
+++ b/frontend/src/metabase/public/components/widgets/EmbedWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ModalWithTrigger from "metabase/components/ModalWithTrigger";
 import Tooltip from "metabase/components/Tooltip";
diff --git a/frontend/src/metabase/public/components/widgets/PreviewPane.jsx b/frontend/src/metabase/public/components/widgets/PreviewPane.jsx
index 975f527b869fe77bd6d2a18e9281f311a239540b..28fa3d17766654dbf287d70d37febbf6eff3f4f7 100644
--- a/frontend/src/metabase/public/components/widgets/PreviewPane.jsx
+++ b/frontend/src/metabase/public/components/widgets/PreviewPane.jsx
@@ -1,5 +1,5 @@
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/public/components/widgets/SharingPane.jsx b/frontend/src/metabase/public/components/widgets/SharingPane.jsx
index 624896fa8151cea1102f8fa283eb314a0f5bd788..6d9a8aa8ad4775775f04cd79cd4301ba855c0150 100644
--- a/frontend/src/metabase/public/components/widgets/SharingPane.jsx
+++ b/frontend/src/metabase/public/components/widgets/SharingPane.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import RetinaImage from "react-retina-image";
 import Icon from "metabase/components/Icon";
diff --git a/frontend/src/metabase/public/containers/PublicApp.jsx b/frontend/src/metabase/public/containers/PublicApp.jsx
index 8155831aa9872f72309f2931d8194831d8ce74e3..9405c6015ae048f78ea2c1ade05614d4034f5761 100644
--- a/frontend/src/metabase/public/containers/PublicApp.jsx
+++ b/frontend/src/metabase/public/containers/PublicApp.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import PublicNotFound from "metabase/public/components/PublicNotFound";
diff --git a/frontend/src/metabase/public/containers/PublicDashboard.jsx b/frontend/src/metabase/public/containers/PublicDashboard.jsx
index e21f21732ce93090b5a781068f92094416f1b8d7..6076dd92be8d5eb52a765bc8ae9a449d9f991b71 100644
--- a/frontend/src/metabase/public/containers/PublicDashboard.jsx
+++ b/frontend/src/metabase/public/containers/PublicDashboard.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/public/containers/PublicQuestion.jsx b/frontend/src/metabase/public/containers/PublicQuestion.jsx
index 6462682a24ad96bd87a99bb86b8ed148f3f0791a..dc4b154063d552fef7798eb3e9ae2aa166bcc019 100644
--- a/frontend/src/metabase/public/containers/PublicQuestion.jsx
+++ b/frontend/src/metabase/public/containers/PublicQuestion.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import Visualization from "metabase/visualizations/components/Visualization";
diff --git a/frontend/src/metabase/pulse/components/CardPicker.jsx b/frontend/src/metabase/pulse/components/CardPicker.jsx
index 9a0069980853c17f5fe10fbcd283f4eea6af0f9d..7d5d883862ed863853644fa679a9ca4893824539 100644
--- a/frontend/src/metabase/pulse/components/CardPicker.jsx
+++ b/frontend/src/metabase/pulse/components/CardPicker.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/pulse/components/PulseCardPreview.jsx b/frontend/src/metabase/pulse/components/PulseCardPreview.jsx
index 2afafd3dbf8116adf9fdcca8acbcb85f3a41f56e..fd6a1aac9ac37b26fd8d5e9013bbaa62fab54204 100644
--- a/frontend/src/metabase/pulse/components/PulseCardPreview.jsx
+++ b/frontend/src/metabase/pulse/components/PulseCardPreview.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 /*eslint-disable react/no-danger */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import LoadingSpinner from "metabase/components/LoadingSpinner.jsx";
diff --git a/frontend/src/metabase/pulse/components/PulseEdit.jsx b/frontend/src/metabase/pulse/components/PulseEdit.jsx
index 7d50c9bae6f5d01a32bb07201cf5dd07a071fc45..a212847eebcf3b8f43d9e1ca9c25245d5212b4cb 100644
--- a/frontend/src/metabase/pulse/components/PulseEdit.jsx
+++ b/frontend/src/metabase/pulse/components/PulseEdit.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import PulseEditName from "./PulseEditName.jsx";
diff --git a/frontend/src/metabase/pulse/components/PulseEditCards.jsx b/frontend/src/metabase/pulse/components/PulseEditCards.jsx
index 2f631f9459aefdf43028074c2b58252b0a4ec5a1..b05bd4e20befa1c9e058b77094bf179a6a40425b 100644
--- a/frontend/src/metabase/pulse/components/PulseEditCards.jsx
+++ b/frontend/src/metabase/pulse/components/PulseEditCards.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import CardPicker from "./CardPicker.jsx";
 import PulseCardPreview from "./PulseCardPreview.jsx";
diff --git a/frontend/src/metabase/pulse/components/PulseEditChannels.jsx b/frontend/src/metabase/pulse/components/PulseEditChannels.jsx
index c92a3215312688b996aea6152064d99f87ea7cc5..56363d46a080273da1a2387371a4a5c073569ebc 100644
--- a/frontend/src/metabase/pulse/components/PulseEditChannels.jsx
+++ b/frontend/src/metabase/pulse/components/PulseEditChannels.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import _ from "underscore";
 import { assoc, assocIn } from "icepick";
diff --git a/frontend/src/metabase/pulse/components/PulseEditName.jsx b/frontend/src/metabase/pulse/components/PulseEditName.jsx
index c3c0cbacecf4af47b203cea549a8df20981d0c98..f725b04685b775ec4f8868ef305f9c86c6bc45cb 100644
--- a/frontend/src/metabase/pulse/components/PulseEditName.jsx
+++ b/frontend/src/metabase/pulse/components/PulseEditName.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import _ from "underscore";
diff --git a/frontend/src/metabase/pulse/components/PulseEditSkip.jsx b/frontend/src/metabase/pulse/components/PulseEditSkip.jsx
index 4c17054314ebac9831fd5b0dfc43c0f5a5b6ac10..21b99a6cd4578a4486325be134be7991cd65d17d 100644
--- a/frontend/src/metabase/pulse/components/PulseEditSkip.jsx
+++ b/frontend/src/metabase/pulse/components/PulseEditSkip.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Toggle from "metabase/components/Toggle.jsx";
 
diff --git a/frontend/src/metabase/pulse/components/PulseList.jsx b/frontend/src/metabase/pulse/components/PulseList.jsx
index 4df6d170d0f5ecbb4d599f26a507957f93488eb8..e560516d847ae2e1a43acedc46b8d41f7736b698 100644
--- a/frontend/src/metabase/pulse/components/PulseList.jsx
+++ b/frontend/src/metabase/pulse/components/PulseList.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import PulseListItem from "./PulseListItem.jsx";
 import WhatsAPulse from "./WhatsAPulse.jsx";
diff --git a/frontend/src/metabase/pulse/components/PulseListChannel.jsx b/frontend/src/metabase/pulse/components/PulseListChannel.jsx
index 3c53647b0540b7cfaddd5df7274f9fb34cb160cd..e7775c1bc330d5df1c9ec22295e2121d10bae5b0 100644
--- a/frontend/src/metabase/pulse/components/PulseListChannel.jsx
+++ b/frontend/src/metabase/pulse/components/PulseListChannel.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/pulse/components/PulseListItem.jsx b/frontend/src/metabase/pulse/components/PulseListItem.jsx
index 47c0e3b7e2c6468f17cdcef9b4fda291c0572723..116ab53f43942d34a8824f12755f3d95cd4d2ce7 100644
--- a/frontend/src/metabase/pulse/components/PulseListItem.jsx
+++ b/frontend/src/metabase/pulse/components/PulseListItem.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import { Link } from "react-router";
 
diff --git a/frontend/src/metabase/pulse/components/RecipientPicker.jsx b/frontend/src/metabase/pulse/components/RecipientPicker.jsx
index 67db8b2cd3cca1a4e5706a7d378f8ce417933624..b53fba16aa3e68fbe5efedfbf9615c4a867a2405 100644
--- a/frontend/src/metabase/pulse/components/RecipientPicker.jsx
+++ b/frontend/src/metabase/pulse/components/RecipientPicker.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/pulse/components/SchedulePicker.jsx b/frontend/src/metabase/pulse/components/SchedulePicker.jsx
index 99e70181c37960d4ed5a2a5839b88653f4bcd024..69ed785abcc22b32d6be6e61fcdc2ed50fbbf1f5 100644
--- a/frontend/src/metabase/pulse/components/SchedulePicker.jsx
+++ b/frontend/src/metabase/pulse/components/SchedulePicker.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Select from "metabase/components/Select.jsx";
 
diff --git a/frontend/src/metabase/pulse/components/SetupMessage.jsx b/frontend/src/metabase/pulse/components/SetupMessage.jsx
index 1efa3a30e05bfc5e982548cd0289ae35ed46d0bf..416321fdfc6459670743075f335b6d0320e7c847 100644
--- a/frontend/src/metabase/pulse/components/SetupMessage.jsx
+++ b/frontend/src/metabase/pulse/components/SetupMessage.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import Settings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/pulse/components/SetupModal.jsx b/frontend/src/metabase/pulse/components/SetupModal.jsx
index e4996fa8e276b8177dfb9a138019174b9850eaba..c0a7edbf93a14aa7291ec26b38ed63968979d008 100644
--- a/frontend/src/metabase/pulse/components/SetupModal.jsx
+++ b/frontend/src/metabase/pulse/components/SetupModal.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import SetupMessage from "./SetupMessage.jsx";
 import ModalContent from "metabase/components/ModalContent.jsx";
diff --git a/frontend/src/metabase/pulse/components/WhatsAPulse.jsx b/frontend/src/metabase/pulse/components/WhatsAPulse.jsx
index 639fc20d4d31ba45b8af9786078a60a81f95157a..0d44604a99758b1ed9ba13be70b6a39cde1619f4 100644
--- a/frontend/src/metabase/pulse/components/WhatsAPulse.jsx
+++ b/frontend/src/metabase/pulse/components/WhatsAPulse.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import RetinaImage from "react-retina-image";
 
diff --git a/frontend/src/metabase/pulse/containers/PulseEditApp.jsx b/frontend/src/metabase/pulse/containers/PulseEditApp.jsx
index fc7510993e1fe53817dcceb2f9abea3a30e77964..60c68b4aa41af0ee53acb4adb1de150d9ef6a8b8 100644
--- a/frontend/src/metabase/pulse/containers/PulseEditApp.jsx
+++ b/frontend/src/metabase/pulse/containers/PulseEditApp.jsx
@@ -1,5 +1,5 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/pulse/containers/PulseListApp.jsx b/frontend/src/metabase/pulse/containers/PulseListApp.jsx
index bc01b350b7c702cf68433deae0bf273124ff7677..239841391e1608daede3a89807d13a8d14806af7 100644
--- a/frontend/src/metabase/pulse/containers/PulseListApp.jsx
+++ b/frontend/src/metabase/pulse/containers/PulseListApp.jsx
@@ -1,5 +1,5 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
 
diff --git a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
index b8c6348ff9f1e3daa44f1a999de69d9b5eac16d2..285e528400e100284e6c370c8d317912019f1290 100644
--- a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
+++ b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import DatePicker
     from "metabase/query_builder/components/filters/pickers/DatePicker";
diff --git a/frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx b/frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx
index b07282f3b549e225b8b44c0d193e008b69fd5f5e..f548331efd29641dc6a6fe19063a0313b71bcd5b 100644
--- a/frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx
+++ b/frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import TimeGroupingPopover
     from "metabase/query_builder/components/TimeGroupingPopover";
diff --git a/frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx b/frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx
index 1165f67ffc6972bb4a4f4d8658fa29c53b6d2e2b..a7b811801fd68a06dab6d27736107fb536417d21 100644
--- a/frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx
+++ b/frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React from "react";
-
 import { isCategory, isAddress } from "metabase/lib/schema_metadata";
 
 import PivotByAction from "./PivotByAction";
diff --git a/frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx b/frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx
index 218ee7f08200ec2cf15853ae6efc9d7bb36b9ddf..0b4f241ba1da0478052bbd065c13e90f81d93751 100644
--- a/frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx
+++ b/frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React from "react";
-
 import { isAddress } from "metabase/lib/schema_metadata";
 
 import PivotByAction from "./PivotByAction";
diff --git a/frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx b/frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx
index b80c6bdc549b020ae6bfc10110594c1e0a151966..c70764e3f0468469ee2420b014d57842076c2941 100644
--- a/frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx
+++ b/frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React from "react";
-
 import { isDate } from "metabase/lib/schema_metadata";
 
 import PivotByAction from "./PivotByAction";
diff --git a/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx b/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx
index 8d05d6502b7926dc22ebae4c412c6d8e6f7d08b9..97a53e6d458dc884197c81465d838a3498496b13 100644
--- a/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx
+++ b/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import AggregationPopover from "metabase/qb/components/gui/AggregationPopover";
 
diff --git a/frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx b/frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx
index f10a4d8aa883711cd2835519fce48fa98f2feb5b..fdc7580a417f1ff565f6ccb87b3959b616b0e03e 100644
--- a/frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx
+++ b/frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
-
 import PivotByCategoryAction from "../actions/PivotByCategoryAction";
 
 import type {
diff --git a/frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx b/frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx
index 385a54969550c2c2a75eb29c69c5d10f7e8872fb..b365e0b955e53f41b3c5b57a09136a8419e3128f 100644
--- a/frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx
+++ b/frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
-
 import PivotByLocationAction from "../actions/PivotByLocationAction";
 
 import type {
diff --git a/frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx b/frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx
index 110d5c12336756e9c662a951576c13c3f9636d3c..9d2c7969d1bb443e5540abfbdafab20323422031 100644
--- a/frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx
+++ b/frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
-
 import PivotByTimeAction from "../actions/PivotByTimeAction";
 
 import type {
diff --git a/frontend/src/metabase/qb/components/gui/AggregationPopover.jsx b/frontend/src/metabase/qb/components/gui/AggregationPopover.jsx
index e5ff6ff997038f31d6aaf371033c6f3f9dceded0..7e5e0bf1b9fd81dd59c7189db6736f7c7cb25191 100644
--- a/frontend/src/metabase/qb/components/gui/AggregationPopover.jsx
+++ b/frontend/src/metabase/qb/components/gui/AggregationPopover.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import AggPopover from "metabase/query_builder/components/AggregationPopover";
 
diff --git a/frontend/src/metabase/qb/components/gui/BreakoutPopover.jsx b/frontend/src/metabase/qb/components/gui/BreakoutPopover.jsx
index 285fe299bf3f88eab7707ce725e8c95121da2897..2a985b1f39e39d68b7158d0852102b8bf08b5afb 100644
--- a/frontend/src/metabase/qb/components/gui/BreakoutPopover.jsx
+++ b/frontend/src/metabase/qb/components/gui/BreakoutPopover.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import FieldList from "metabase/query_builder/components/FieldList.jsx";
 
diff --git a/frontend/src/metabase/qb/components/modes/NativeMode.jsx b/frontend/src/metabase/qb/components/modes/NativeMode.jsx
index abaf45d3587774a6bc70c4f867973e8868c17a1f..debf0cea4f81a0313d1a391be1afe77d97096249 100644
--- a/frontend/src/metabase/qb/components/modes/NativeMode.jsx
+++ b/frontend/src/metabase/qb/components/modes/NativeMode.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React from "react";
-
 import type { QueryMode } from "metabase/meta/types/Visualization";
 
 const NativeMode: QueryMode = {
diff --git a/frontend/src/metabase/qb/components/modes/SegmentMode.jsx b/frontend/src/metabase/qb/components/modes/SegmentMode.jsx
index 974154f82bb70f8acefd6f529d8b7ceb0f38bca0..c302cc83f025dfa3031cd437b39e38c25b463dd3 100644
--- a/frontend/src/metabase/qb/components/modes/SegmentMode.jsx
+++ b/frontend/src/metabase/qb/components/modes/SegmentMode.jsx
@@ -1,7 +1,5 @@
 /* @flow */
 
-import React from "react";
-
 import { DEFAULT_ACTIONS } from "../actions";
 import { DEFAULT_DRILLS } from "../drill";
 
diff --git a/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx b/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx
index 2842d620b655da38b7c16bf7e41c1a82bc8dfab8..8f77ec576b22fa63acda94a7586008ba404321b0 100644
--- a/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx
+++ b/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import TimeseriesGroupingWidget
     from "metabase/qb/components/TimeseriesGroupingWidget";
diff --git a/frontend/src/metabase/query_builder/components/ActionsWidget.jsx b/frontend/src/metabase/query_builder/components/ActionsWidget.jsx
index fccb165d952d715624ed713e5424272bf87efe36..1cc9e5473c74ad2ea4b657243ef9e581310b6541 100644
--- a/frontend/src/metabase/query_builder/components/ActionsWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/ActionsWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon";
 import OnClickOutsideWrapper from "metabase/components/OnClickOutsideWrapper";
diff --git a/frontend/src/metabase/query_builder/components/AddClauseButton.jsx b/frontend/src/metabase/query_builder/components/AddClauseButton.jsx
index 27bbc17d244484ad8102908955119be6a202fe9a..fe49f92665908f8f6dcb51ded6dd25725b2aca70 100644
--- a/frontend/src/metabase/query_builder/components/AddClauseButton.jsx
+++ b/frontend/src/metabase/query_builder/components/AddClauseButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import IconBorder from "metabase/components/IconBorder.jsx";
diff --git a/frontend/src/metabase/query_builder/components/AggregationPopover.jsx b/frontend/src/metabase/query_builder/components/AggregationPopover.jsx
index d02705b9ebcca688e4dcee8dd40e0b7561e9c894..d4e53eef082ac454dba7c90356a38e78a1f48382 100644
--- a/frontend/src/metabase/query_builder/components/AggregationPopover.jsx
+++ b/frontend/src/metabase/query_builder/components/AggregationPopover.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import AccordianList from "metabase/components/AccordianList.jsx";
 import FieldList from './FieldList.jsx';
diff --git a/frontend/src/metabase/query_builder/components/AggregationWidget.jsx b/frontend/src/metabase/query_builder/components/AggregationWidget.jsx
index d833d2c8d72f55115a1c26c316dfe407b4f4daad..a36a9b8e50a36607ca2b0afd41c0954125fcde88 100644
--- a/frontend/src/metabase/query_builder/components/AggregationWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/AggregationWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import AggregationPopover from "./AggregationPopover.jsx";
 import FieldName from './FieldName.jsx';
diff --git a/frontend/src/metabase/query_builder/components/BreakoutWidget.jsx b/frontend/src/metabase/query_builder/components/BreakoutWidget.jsx
index 4719bfb7cdfa6374797256a4ca0b1c312a7481c5..285e31223afbbc099236b38f918956b36c667998 100644
--- a/frontend/src/metabase/query_builder/components/BreakoutWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/BreakoutWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import FieldList from "./FieldList.jsx";
 import FieldName from "./FieldName.jsx";
diff --git a/frontend/src/metabase/query_builder/components/DataSelector.jsx b/frontend/src/metabase/query_builder/components/DataSelector.jsx
index 24504e412ba6229f7f328998edaede93e7f73663..1b8a48983a2c2636121fdced07ad8a41abc90b8d 100644
--- a/frontend/src/metabase/query_builder/components/DataSelector.jsx
+++ b/frontend/src/metabase/query_builder/components/DataSelector.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
diff --git a/frontend/src/metabase/query_builder/components/ExpandableString.jsx b/frontend/src/metabase/query_builder/components/ExpandableString.jsx
index 90127363e4ba354f4d10e59ee0997bfd852a37a0..002cefdf5cd9ef05943077c7a27ae69fcbdd3568 100644
--- a/frontend/src/metabase/query_builder/components/ExpandableString.jsx
+++ b/frontend/src/metabase/query_builder/components/ExpandableString.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Humanize from 'humanize';
 
diff --git a/frontend/src/metabase/query_builder/components/ExtendedOptions.jsx b/frontend/src/metabase/query_builder/components/ExtendedOptions.jsx
index b5c13ee78ad4490114ded991d31ec7818e5ee9d3..c6faaf9dfe4a0911ef2908d475ffb367d471e120 100644
--- a/frontend/src/metabase/query_builder/components/ExtendedOptions.jsx
+++ b/frontend/src/metabase/query_builder/components/ExtendedOptions.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import _ from "underscore";
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/query_builder/components/FieldList.jsx b/frontend/src/metabase/query_builder/components/FieldList.jsx
index 143ad547f31595ec1e518f5f7789ddfdc3c12728..9ecf0e7efea297727035833ee0f7a4cd50a38b78 100644
--- a/frontend/src/metabase/query_builder/components/FieldList.jsx
+++ b/frontend/src/metabase/query_builder/components/FieldList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import AccordianList from "metabase/components/AccordianList.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/query_builder/components/FieldName.jsx b/frontend/src/metabase/query_builder/components/FieldName.jsx
index d21e0f44cf5f2d4b39df63adcf0f633e3ffef4aa..d5aa48c5d6219ec811d8c9255e2c8482bb73bdac 100644
--- a/frontend/src/metabase/query_builder/components/FieldName.jsx
+++ b/frontend/src/metabase/query_builder/components/FieldName.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import Clearable from "./Clearable.jsx";
diff --git a/frontend/src/metabase/query_builder/components/FieldWidget.jsx b/frontend/src/metabase/query_builder/components/FieldWidget.jsx
index 08232b33d1713c3622af3545349baf599f97716b..659157a747cfe053ecac30fdcd50a974ebe3c09f 100644
--- a/frontend/src/metabase/query_builder/components/FieldWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/FieldWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import FieldList from "./FieldList.jsx";
 import FieldName from "./FieldName.jsx";
diff --git a/frontend/src/metabase/query_builder/components/GuiQueryEditor.jsx b/frontend/src/metabase/query_builder/components/GuiQueryEditor.jsx
index d6d99f521255d3c2346f567e42fcf0597c5dd8d8..9dee1e629a51b25e64a3275516e9f95a6f222f7d 100644
--- a/frontend/src/metabase/query_builder/components/GuiQueryEditor.jsx
+++ b/frontend/src/metabase/query_builder/components/GuiQueryEditor.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import AggregationWidget from './AggregationWidget.jsx';
diff --git a/frontend/src/metabase/query_builder/components/LimitWidget.jsx b/frontend/src/metabase/query_builder/components/LimitWidget.jsx
index ab72989a4eb133649ec466138006b59a55305d04..a85f0069c96e2ef60abe9556295a36dea70c8b21 100644
--- a/frontend/src/metabase/query_builder/components/LimitWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/LimitWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 
diff --git a/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx b/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
index 9c53a89e8aa66c29e8dde0c99f1a3f0f74e1e128..645519774829e6067f5ae4a151203d72d76bf3da 100644
--- a/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
+++ b/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
@@ -1,7 +1,8 @@
 /*global ace*/
 /* eslint "react/prop-types": "warn" */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import "./NativeQueryEditor.css";
diff --git a/frontend/src/metabase/query_builder/components/QueryDefinitionTooltip.jsx b/frontend/src/metabase/query_builder/components/QueryDefinitionTooltip.jsx
index d86211846e3dc53b74ec7653ade9deee383bb5fd..d7fa933a7dfee7e152f3e9c82340cab0264f0329 100644
--- a/frontend/src/metabase/query_builder/components/QueryDefinitionTooltip.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryDefinitionTooltip.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import FilterList from "./filters/FilterList.jsx";
 import AggregationWidget from "./AggregationWidget.jsx";
diff --git a/frontend/src/metabase/query_builder/components/QueryDownloadWidget.jsx b/frontend/src/metabase/query_builder/components/QueryDownloadWidget.jsx
index 337b5ac6b1f0c91c5523244ba746833e0b63483e..0726bbdc7a7ab439a2c3ae241e583881b85743a9 100644
--- a/frontend/src/metabase/query_builder/components/QueryDownloadWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryDownloadWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/query_builder/components/QueryHeader.jsx b/frontend/src/metabase/query_builder/components/QueryHeader.jsx
index ff451023ecaa2485dfb2044d9a0cb93533fdc446..046d39df20344c0c18fe931d4b1d872140ad83ca 100644
--- a/frontend/src/metabase/query_builder/components/QueryHeader.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import QueryModeButton from "./QueryModeButton.jsx";
diff --git a/frontend/src/metabase/query_builder/components/QueryModeButton.jsx b/frontend/src/metabase/query_builder/components/QueryModeButton.jsx
index 6e0fd438dc233057f7d54f366a3254da773b9b47..47f0890a29fe8f2927f0665df26a90e63c5f80c5 100644
--- a/frontend/src/metabase/query_builder/components/QueryModeButton.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryModeButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 import { formatSQL, capitalize } from "metabase/lib/formatting";
diff --git a/frontend/src/metabase/query_builder/components/QueryVisualization.jsx b/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
index bfa9b9c33acfe617c15b2c9567611c87779b784f..5cdc602c9e48f5dcd5576eb669e6c44c0b2c5a93 100644
--- a/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import LoadingSpinner from 'metabase/components/LoadingSpinner.jsx';
diff --git a/frontend/src/metabase/query_builder/components/QueryVisualizationObjectDetailTable.jsx b/frontend/src/metabase/query_builder/components/QueryVisualizationObjectDetailTable.jsx
index df548770d3f4ad88d7c218894ce7787d4f619d4d..de4b791b3fa3fd5a58184e4e1566958f0e08dd02 100644
--- a/frontend/src/metabase/query_builder/components/QueryVisualizationObjectDetailTable.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryVisualizationObjectDetailTable.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ExpandableString from './ExpandableString.jsx';
 import Icon from 'metabase/components/Icon.jsx';
diff --git a/frontend/src/metabase/query_builder/components/RunButton.jsx b/frontend/src/metabase/query_builder/components/RunButton.jsx
index 64763834590a41f8a9f0417bb436ffa28ab4793f..91ecceca4a1fa6e6aa8bbe22c18e1ce605246ff7 100644
--- a/frontend/src/metabase/query_builder/components/RunButton.jsx
+++ b/frontend/src/metabase/query_builder/components/RunButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/SavedQuestionIntroModal.jsx b/frontend/src/metabase/query_builder/components/SavedQuestionIntroModal.jsx
index c4a08ab92732f8b9166fac9bfbc44c0bd36bf13b..a96780e8789ef7856e65e810d87337ff5cc024b6 100644
--- a/frontend/src/metabase/query_builder/components/SavedQuestionIntroModal.jsx
+++ b/frontend/src/metabase/query_builder/components/SavedQuestionIntroModal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Modal from "metabase/components/Modal.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/SearchBar.jsx b/frontend/src/metabase/query_builder/components/SearchBar.jsx
index 02467fea4c21df781abc2082ac1298a97798dbc6..abca8cf77a553d7451d85c4abab220305fa03c55 100644
--- a/frontend/src/metabase/query_builder/components/SearchBar.jsx
+++ b/frontend/src/metabase/query_builder/components/SearchBar.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 export default class SearchBar extends React.Component {
diff --git a/frontend/src/metabase/query_builder/components/SelectionModule.jsx b/frontend/src/metabase/query_builder/components/SelectionModule.jsx
index 2bd4a20d9741551b5c557a10c4b307ee32f235ca..3224055dd7097aabaa793cbe254834b892fb1e8a 100644
--- a/frontend/src/metabase/query_builder/components/SelectionModule.jsx
+++ b/frontend/src/metabase/query_builder/components/SelectionModule.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Popover from "metabase/components/Popover.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/query_builder/components/SortWidget.jsx b/frontend/src/metabase/query_builder/components/SortWidget.jsx
index f499138daa38ccfb725ebcd1412282e5de01081b..dccce59acc8d7911bda53236b306e2127b8c2ca6 100644
--- a/frontend/src/metabase/query_builder/components/SortWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/SortWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import FieldWidget from './FieldWidget.jsx';
diff --git a/frontend/src/metabase/query_builder/components/TimeGroupingPopover.jsx b/frontend/src/metabase/query_builder/components/TimeGroupingPopover.jsx
index 029ebb2228be2814afc33f55c52bb78ecf0c7d2e..462c94134b36f94079b7323aa464cdc66a2ecabd 100644
--- a/frontend/src/metabase/query_builder/components/TimeGroupingPopover.jsx
+++ b/frontend/src/metabase/query_builder/components/TimeGroupingPopover.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import { parseFieldBucketing, formatBucketing } from "metabase/lib/query_time";
 
diff --git a/frontend/src/metabase/query_builder/components/VisualizationError.jsx b/frontend/src/metabase/query_builder/components/VisualizationError.jsx
index a43c2e264b09ef83f4a278b2226703b46fd85030..80b795c90fe77b0a274bedb252da92363cd94ca8 100644
--- a/frontend/src/metabase/query_builder/components/VisualizationError.jsx
+++ b/frontend/src/metabase/query_builder/components/VisualizationError.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 
 import MetabaseSettings from "metabase/lib/settings";
 import VisualizationErrorMessage from './VisualizationErrorMessage';
diff --git a/frontend/src/metabase/query_builder/components/VisualizationErrorMessage.jsx b/frontend/src/metabase/query_builder/components/VisualizationErrorMessage.jsx
index 0b2908a87dad377141cfc4b4de2a488271b9fdfa..47fb7cdcc6c120e08df7f108b272ec21fc30df60 100644
--- a/frontend/src/metabase/query_builder/components/VisualizationErrorMessage.jsx
+++ b/frontend/src/metabase/query_builder/components/VisualizationErrorMessage.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { PropTypes } from 'react';
+import React from 'react';
+import PropTypes from "prop-types";
 
 const VisualizationErrorMessage = ({title, type, message, action}) => {
     return (
diff --git a/frontend/src/metabase/query_builder/components/VisualizationResult.jsx b/frontend/src/metabase/query_builder/components/VisualizationResult.jsx
index 1637825a4044fe8e1739dfe5856f6b1d6f0c711d..d959a936de3aa3bd747248fb0e3213abc5c18bb3 100644
--- a/frontend/src/metabase/query_builder/components/VisualizationResult.jsx
+++ b/frontend/src/metabase/query_builder/components/VisualizationResult.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import QueryVisualizationObjectDetailTable from './QueryVisualizationObjectDetailTable.jsx';
 import VisualizationErrorMessage from './VisualizationErrorMessage';
 import Visualization from "metabase/visualizations/components/Visualization.jsx";
diff --git a/frontend/src/metabase/query_builder/components/VisualizationSettings.jsx b/frontend/src/metabase/query_builder/components/VisualizationSettings.jsx
index f414f0f5435ca7789ebed3188d4df8a0e11451e4..8e6b07a5f14b754d79a49eec5ed14eb205550d6c 100644
--- a/frontend/src/metabase/query_builder/components/VisualizationSettings.jsx
+++ b/frontend/src/metabase/query_builder/components/VisualizationSettings.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
diff --git a/frontend/src/metabase/query_builder/components/dataref/DataReference.jsx b/frontend/src/metabase/query_builder/components/dataref/DataReference.jsx
index 31c4a8b5638d6a4e228ad55a2f24ad5761b5fd3c..13664ab7e8761d31ca1cec679c4c5abed84933c7 100644
--- a/frontend/src/metabase/query_builder/components/dataref/DataReference.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/DataReference.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MainPane from './MainPane.jsx';
 import TablePane from './TablePane.jsx';
diff --git a/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx b/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
index f1705a42973259d9435d1f3c21a06bf7c4649b91..cd8203745c1096b91d0e0537ad6453e916822f29 100644
--- a/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx b/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
index 3e301ac5e2676b8620043091f2409bcfa13ca8d8..baa074fe261acdd2b819467a73414f92baa51f66 100644
--- a/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import DetailPane from "./DetailPane.jsx";
 import QueryButton from "metabase/components/QueryButton.jsx";
diff --git a/frontend/src/metabase/query_builder/components/dataref/MainPane.jsx b/frontend/src/metabase/query_builder/components/dataref/MainPane.jsx
index 29841da129e10a1a8166b5e8e994e8ce97f2bfb2..7963e969fe1f3420b53b59ea02643890de9c43dd 100644
--- a/frontend/src/metabase/query_builder/components/dataref/MainPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/MainPane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import { isQueryable } from "metabase/lib/table";
 
diff --git a/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx b/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx
index fc2d964519f992d7a86744ac048827468efe2fd7..527782119e3268005aaa5cee37038a7687852823 100644
--- a/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import DetailPane from "./DetailPane.jsx";
 import QueryButton from "metabase/components/QueryButton.jsx";
diff --git a/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx b/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
index 7b2c49b6f0953929249a211098636a7878f1768c..3cc284aa23362feba9ac66eeb4f56a16c261c9af 100644
--- a/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import FilterList from "../filters/FilterList.jsx";
 import AggregationWidget from "../AggregationWidget.jsx";
diff --git a/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
index 0e3a9f4d32a23619ce3fbffa6781c33db8013ed9..59878068c3cb032152626501c37b743ed25525f4 100644
--- a/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import DetailPane from "./DetailPane.jsx";
 import QueryButton from "metabase/components/QueryButton.jsx";
diff --git a/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx b/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
index 99ff5c7e1072fb8619bb814c9ad424383a8cdc9e..206a720240a4325a4fa0aafe00b1bd9ec2860d57 100644
--- a/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import QueryButton from "metabase/components/QueryButton.jsx";
 import { createCard } from "metabase/lib/card";
diff --git a/frontend/src/metabase/query_builder/components/dataref/UseForButton.jsx b/frontend/src/metabase/query_builder/components/dataref/UseForButton.jsx
index 8e4254e413147e92b50c2597b5dbddfd73997282..ae3853de049591928f3167fb07426b14fa57507e 100644
--- a/frontend/src/metabase/query_builder/components/dataref/UseForButton.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/UseForButton.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorTextfield.jsx b/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorTextfield.jsx
index d7099a9d5f57a4590873b245350c6cf43b5e5169..3c3c73f632db068d7dd0bdd69490ee3a1f325172 100644
--- a/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorTextfield.jsx
+++ b/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorTextfield.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import S from "./ExpressionEditorTextfield.css";
 
diff --git a/frontend/src/metabase/query_builder/components/expressions/ExpressionWidget.jsx b/frontend/src/metabase/query_builder/components/expressions/ExpressionWidget.jsx
index 19ebf2437291eb2ad60e2d23939d8b3b0b788c7f..4f592ba64c357abdaa519082a16e44cae9033d3f 100644
--- a/frontend/src/metabase/query_builder/components/expressions/ExpressionWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/expressions/ExpressionWidget.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import cx from "classnames";
 import _ from 'underscore';
 
diff --git a/frontend/src/metabase/query_builder/components/expressions/Expressions.jsx b/frontend/src/metabase/query_builder/components/expressions/Expressions.jsx
index f2a1360e225c7b68c4a95b8d613c12d3eb6135f7..a65797a093eb9964c20136ebb8d773b71fe3b586 100644
--- a/frontend/src/metabase/query_builder/components/expressions/Expressions.jsx
+++ b/frontend/src/metabase/query_builder/components/expressions/Expressions.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import _ from "underscore";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/query_builder/components/expressions/TokenizedExpression.jsx b/frontend/src/metabase/query_builder/components/expressions/TokenizedExpression.jsx
index 66163c0abab7079247c339def3aced5bc98549d7..6d56e2b263b0e8d80d4a0d3be703303085023a95 100644
--- a/frontend/src/metabase/query_builder/components/expressions/TokenizedExpression.jsx
+++ b/frontend/src/metabase/query_builder/components/expressions/TokenizedExpression.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import "./TokenizedExpression.css";
 
diff --git a/frontend/src/metabase/query_builder/components/expressions/TokenizedInput.jsx b/frontend/src/metabase/query_builder/components/expressions/TokenizedInput.jsx
index d02dfdcc2bb84b18cafe7d176a3a52b2a3ac7371..f431a6c542f00b146a34e34a33deb270b5ef7584 100644
--- a/frontend/src/metabase/query_builder/components/expressions/TokenizedInput.jsx
+++ b/frontend/src/metabase/query_builder/components/expressions/TokenizedInput.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import TokenizedExpression from "./TokenizedExpression.jsx";
diff --git a/frontend/src/metabase/query_builder/components/filters/DateOperatorSelector.jsx b/frontend/src/metabase/query_builder/components/filters/DateOperatorSelector.jsx
index 16eb3999fac7140f2e4c81a173ca548a267082a9..5aca73f9400d560f68e4dd0b1dddf7b17cf4fbfe 100644
--- a/frontend/src/metabase/query_builder/components/filters/DateOperatorSelector.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/DateOperatorSelector.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import cx from "classnames";
 import { titleCase } from "humanize-plus";
diff --git a/frontend/src/metabase/query_builder/components/filters/FilterList.jsx b/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
index 08ebdef0e11d57cfc797da78d92f138f2451a677..b83df09ce9e0deab83d87be6c1c39caeb5a2413e 100644
--- a/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { findDOMNode } from 'react-dom';
 
 import FilterWidget from './FilterWidget.jsx';
diff --git a/frontend/src/metabase/query_builder/components/filters/FilterPopover.jsx b/frontend/src/metabase/query_builder/components/filters/FilterPopover.jsx
index 1f3460474b824cbce14b121188d7b1c930c2a0bd..8239053f68f3d5ed6f4e3ee143aedef348b746c6 100644
--- a/frontend/src/metabase/query_builder/components/filters/FilterPopover.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/FilterPopover.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import FieldList from "../FieldList.jsx";
 import OperatorSelector from "./OperatorSelector.jsx";
diff --git a/frontend/src/metabase/query_builder/components/filters/FilterWidget.jsx b/frontend/src/metabase/query_builder/components/filters/FilterWidget.jsx
index 495ea0ccc5d0c72f7f608dc6cc67e51f0b5cb296..274faf29b88153bb0edfc9f561974b1780d1c30c 100644
--- a/frontend/src/metabase/query_builder/components/filters/FilterWidget.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/FilterWidget.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 import FieldName from '../FieldName.jsx';
diff --git a/frontend/src/metabase/query_builder/components/filters/OperatorSelector.jsx b/frontend/src/metabase/query_builder/components/filters/OperatorSelector.jsx
index 4d5ce7a240fc237ba19ecda0b730b99a71392bbd..b6acdcbde667b1da3b90b8b1f7d05738d88f64cc 100644
--- a/frontend/src/metabase/query_builder/components/filters/OperatorSelector.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/OperatorSelector.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/DatePicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/DatePicker.jsx
index bfb8e9cd2d56f47d3a05674c6a7435c0a4401392..c0152c54148cbdc7f2afc64b6e93fb346ef4cbce 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/DatePicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/DatePicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import SpecificDatePicker from "./SpecificDatePicker";
 import RelativeDatePicker, { DATE_PERIODS, UnitPicker } from "./RelativeDatePicker";
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/NumberPicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/NumberPicker.jsx
index 910842392f55fd9be4199b399a2d49270cf91be0..8fa6e7098ee5d13911898bdcb72c77c92139c8c0 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/NumberPicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/NumberPicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import TextPicker from "./TextPicker.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/RelativeDatePicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/RelativeDatePicker.jsx
index 589a529dc9c10ad0a879c10f09ca1b6ac84d7399..50be208d1497dc3402dfa607edd617d965950537 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/RelativeDatePicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/RelativeDatePicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { pluralize, titleCase, capitalize } from "humanize-plus";
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/SelectPicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/SelectPicker.jsx
index a91fdd0633f186000e974962a043fdc110c55e92..040d960c5489e5592ed54c597d01b8bc44275693 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/SelectPicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/SelectPicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import CheckBox from 'metabase/components/CheckBox.jsx';
 import ListSearchField from "metabase/components/ListSearchField.jsx";
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/SpecificDatePicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/SpecificDatePicker.jsx
index 8b5096629906e92327da0907e198583a51227298..83d9ab5ae3a18deb2a86f772c2a31395a86a3b2a 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/SpecificDatePicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/SpecificDatePicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 
 import Calendar from "metabase/components/Calendar";
 import Input from "metabase/components/Input";
diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/TextPicker.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/TextPicker.jsx
index 90755d02ea841a28eba067041e3d21da0be57ede..29e58cb2e139783c01d7327e1500acf8287d4ae8 100644
--- a/frontend/src/metabase/query_builder/components/filters/pickers/TextPicker.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/pickers/TextPicker.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, {Component, PropTypes} from "react";
+import React, {Component} from "react";
+import PropTypes from "prop-types";
 import AutosizeTextarea from 'react-textarea-autosize';
 
 import cx from "classnames";
diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorHelp.jsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorHelp.jsx
index 4a43f13bf97862f1d7cadfc605e03e010a09064e..a8ecf63af1d755f9970901c6a616347137ce0197 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorHelp.jsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorHelp.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Code from "metabase/components/Code.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx
index fc385c58253f903783ba7c8a12e63dfe919e7577..75cc35c13acf85a134fcbb12305779dc4782f7c4 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import Toggle from "metabase/components/Toggle.jsx";
 import Select, { Option } from "metabase/components/Select.jsx";
diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorSidebar.jsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorSidebar.jsx
index b1dadd198f9b755d50034d3747934360d678a21f..b969fcbd9e985811a1c885a84915c00a0f5a6802 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorSidebar.jsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorSidebar.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import Icon from "metabase/components/Icon.jsx";
 import TagEditorParam from "./TagEditorParam.jsx";
 import TagEditorHelp from "./TagEditorHelp.jsx";
diff --git a/frontend/src/metabase/query_builder/containers/QueryBuilder.jsx b/frontend/src/metabase/query_builder/containers/QueryBuilder.jsx
index e0fddf9f11224e94198af92083e27dd7dae97aee..d934891be8cb6a19b532b1d3611cda766ee24d69 100644
--- a/frontend/src/metabase/query_builder/containers/QueryBuilder.jsx
+++ b/frontend/src/metabase/query_builder/containers/QueryBuilder.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 import { connect } from "react-redux";
 import cx from "classnames";
diff --git a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
index faf973c0dcde01a03a5344df4eacb9b05aad9e71..5ad4562fd5611ea0d4e2b96a4bacbfec9eab98fe 100644
--- a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
+++ b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import EmbedWidget from "metabase/public/components/widgets/EmbedWidget";
diff --git a/frontend/src/metabase/questions/components/ActionHeader.jsx b/frontend/src/metabase/questions/components/ActionHeader.jsx
index 041e8cf186daea51db034576691c5504c0b40ad9..a0eb0cea3e13c5b3c2f265158ebbaab2374e0411 100644
--- a/frontend/src/metabase/questions/components/ActionHeader.jsx
+++ b/frontend/src/metabase/questions/components/ActionHeader.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import S from "./ActionHeader.css";
 
 import StackedCheckBox from "metabase/components/StackedCheckBox.jsx";
diff --git a/frontend/src/metabase/questions/components/ArchivedItem.jsx b/frontend/src/metabase/questions/components/ArchivedItem.jsx
index bcfe9200e77f7525f589ed616cafb90fa572aeda..babb93cfedfe2d20fc31bbee6677666baaca7bc4 100644
--- a/frontend/src/metabase/questions/components/ArchivedItem.jsx
+++ b/frontend/src/metabase/questions/components/ArchivedItem.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import Icon from "metabase/components/Icon";
 import Tooltip from "metabase/components/Tooltip";
diff --git a/frontend/src/metabase/questions/components/CollectionBadge.jsx b/frontend/src/metabase/questions/components/CollectionBadge.jsx
index 17cb724c593c6a9675ae80f29e048a7d60b49483..42711f9f18a02d4dde90ea27c39e2d8c22467fbe 100644
--- a/frontend/src/metabase/questions/components/CollectionBadge.jsx
+++ b/frontend/src/metabase/questions/components/CollectionBadge.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 import { Link } from "react-router";
 
 import * as Urls from "metabase/lib/urls";
diff --git a/frontend/src/metabase/questions/components/CollectionButtons.jsx b/frontend/src/metabase/questions/components/CollectionButtons.jsx
index a27c6f4a61b0b6af4d53f2ad3a2d6dabfaa58d6b..ce2b246ec29085b3738c6aaa597d7c423232a2a5 100644
--- a/frontend/src/metabase/questions/components/CollectionButtons.jsx
+++ b/frontend/src/metabase/questions/components/CollectionButtons.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/questions/components/ExpandingSearchField.jsx b/frontend/src/metabase/questions/components/ExpandingSearchField.jsx
index 51ae5c303dad0d1ddefafb41b9fb0155addf4aac..b2583c2c48d7af90b15fbb8df24049270b9a3825 100644
--- a/frontend/src/metabase/questions/components/ExpandingSearchField.jsx
+++ b/frontend/src/metabase/questions/components/ExpandingSearchField.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import cx from "classnames";
diff --git a/frontend/src/metabase/questions/components/Item.jsx b/frontend/src/metabase/questions/components/Item.jsx
index 0f24593d33436ab5a8f50609763634927756e878..533016e71cbe52afa983ed79b5bdc7734c6bea67 100644
--- a/frontend/src/metabase/questions/components/Item.jsx
+++ b/frontend/src/metabase/questions/components/Item.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import cx from "classnames";
 import pure from "recompose/pure";
diff --git a/frontend/src/metabase/questions/components/LabelIconPicker.jsx b/frontend/src/metabase/questions/components/LabelIconPicker.jsx
index c78d4898592af89e481c592eecbfc266d96e32d8..fe58e7058ac4253ac63d81465fc181aa7cecd813 100644
--- a/frontend/src/metabase/questions/components/LabelIconPicker.jsx
+++ b/frontend/src/metabase/questions/components/LabelIconPicker.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import S from "./LabelIconPicker.css";
 
diff --git a/frontend/src/metabase/questions/components/LabelPicker.jsx b/frontend/src/metabase/questions/components/LabelPicker.jsx
index 36d6645ea2c20a57a53ff8e9ae1113deb4d6c671..f835089581eaac5ac9a132f28971fca534f79f68 100644
--- a/frontend/src/metabase/questions/components/LabelPicker.jsx
+++ b/frontend/src/metabase/questions/components/LabelPicker.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import S from "./LabelPicker.css";
diff --git a/frontend/src/metabase/questions/components/Labels.jsx b/frontend/src/metabase/questions/components/Labels.jsx
index dabc0137ce8a198158efdd891d5a8ebef9123e32..87f822aa96cbe4833aa66ce63519a43dd93568df 100644
--- a/frontend/src/metabase/questions/components/Labels.jsx
+++ b/frontend/src/metabase/questions/components/Labels.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import S from "./Labels.css";
 import color from 'color'
diff --git a/frontend/src/metabase/questions/components/List.jsx b/frontend/src/metabase/questions/components/List.jsx
index a02ba7d094451095e2a219924479c5f576d1c3e6..cc49ac1cf0ab94d1ff5773371f55b8ae442c9533 100644
--- a/frontend/src/metabase/questions/components/List.jsx
+++ b/frontend/src/metabase/questions/components/List.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 
 import S from "./List.css";
 import pure from "recompose/pure";
diff --git a/frontend/src/metabase/questions/components/SearchHeader.jsx b/frontend/src/metabase/questions/components/SearchHeader.jsx
index abf67231b4c3e7d5af25570b0c216f2146a5172d..2014b6603b9dfb2ade2691eb12ff324370280245 100644
--- a/frontend/src/metabase/questions/components/SearchHeader.jsx
+++ b/frontend/src/metabase/questions/components/SearchHeader.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import S from "./SearchHeader.css";
 
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/questions/containers/ArchiveCollectionWidget.jsx b/frontend/src/metabase/questions/containers/ArchiveCollectionWidget.jsx
index 63e94607239152cadd83a7460f73312604814767..3fc8b913ec6a795af113601f8e55110d7fb76786 100644
--- a/frontend/src/metabase/questions/containers/ArchiveCollectionWidget.jsx
+++ b/frontend/src/metabase/questions/containers/ArchiveCollectionWidget.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import ModalWithTrigger from "metabase/components/ModalWithTrigger";
diff --git a/frontend/src/metabase/questions/containers/CollectionCreate.jsx b/frontend/src/metabase/questions/containers/CollectionCreate.jsx
index d9da2e02dd9fc1cf2e17af946b2677a1e71a36a5..edb1e6a93591ac30b71f849e12987d92034fa286 100644
--- a/frontend/src/metabase/questions/containers/CollectionCreate.jsx
+++ b/frontend/src/metabase/questions/containers/CollectionCreate.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { connect } from "react-redux";
 import { push } from "react-router-redux";
diff --git a/frontend/src/metabase/questions/containers/CollectionEdit.jsx b/frontend/src/metabase/questions/containers/CollectionEdit.jsx
index bf87420bc608b58715e444bf74e6c55ba9559260..b297607024bd6d59d9fe4f7aaa00af56314bc42d 100644
--- a/frontend/src/metabase/questions/containers/CollectionEdit.jsx
+++ b/frontend/src/metabase/questions/containers/CollectionEdit.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { connect } from "react-redux";
 import { goBack } from "react-router-redux";
diff --git a/frontend/src/metabase/questions/containers/CollectionPage.jsx b/frontend/src/metabase/questions/containers/CollectionPage.jsx
index 45f73d2de67caf8169bab7415611dd44dd58f398..c69b15be2244a3fd6a3394eeaf68a405e4f03789 100644
--- a/frontend/src/metabase/questions/containers/CollectionPage.jsx
+++ b/frontend/src/metabase/questions/containers/CollectionPage.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { push, replace, goBack } from "react-router-redux";
 
diff --git a/frontend/src/metabase/questions/containers/EditLabels.jsx b/frontend/src/metabase/questions/containers/EditLabels.jsx
index 45b3aaf0bce084634ae167659f656d9890b068a3..065e38a06d2a68848f67b4a4c361d48faf58d395 100644
--- a/frontend/src/metabase/questions/containers/EditLabels.jsx
+++ b/frontend/src/metabase/questions/containers/EditLabels.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import S from "./EditLabels.css";
diff --git a/frontend/src/metabase/questions/containers/EntityItem.jsx b/frontend/src/metabase/questions/containers/EntityItem.jsx
index 42882525c8b39a4ed1e948b8e3ef6e9e22cf5c07..12b839966c9e02d383383c0620486ac611535880 100644
--- a/frontend/src/metabase/questions/containers/EntityItem.jsx
+++ b/frontend/src/metabase/questions/containers/EntityItem.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import Item from "../components/Item.jsx";
diff --git a/frontend/src/metabase/questions/containers/EntityList.jsx b/frontend/src/metabase/questions/containers/EntityList.jsx
index 67cc28dfb991d4f02eb83880a22a790ce9453edd..b06cc645fec8a4b0926a0e50f3543ea828433655 100644
--- a/frontend/src/metabase/questions/containers/EntityList.jsx
+++ b/frontend/src/metabase/questions/containers/EntityList.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import { connect } from "react-redux";
 
diff --git a/frontend/src/metabase/questions/containers/LabelEditorForm.jsx b/frontend/src/metabase/questions/containers/LabelEditorForm.jsx
index 82f34a8191c59471f96615c8cc553765e80ce992..b1954d1ab91a3ab528fc895323fa28aeaf398f58 100644
--- a/frontend/src/metabase/questions/containers/LabelEditorForm.jsx
+++ b/frontend/src/metabase/questions/containers/LabelEditorForm.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import S from "./LabelEditorForm.css";
 
 import LabelIconPicker from "../components/LabelIconPicker.jsx";
diff --git a/frontend/src/metabase/questions/containers/LabelPopover.jsx b/frontend/src/metabase/questions/containers/LabelPopover.jsx
index b1c67461ba9e8c6c31141daab2f15298ffd3b019..7530929de177fda583887c2bbbf593e44e74c364 100644
--- a/frontend/src/metabase/questions/containers/LabelPopover.jsx
+++ b/frontend/src/metabase/questions/containers/LabelPopover.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
diff --git a/frontend/src/metabase/questions/containers/QuestionIndex.jsx b/frontend/src/metabase/questions/containers/QuestionIndex.jsx
index e65f45470f0db9abf3497fc9ed8f43afe4161d92..e0b95acbc50cd9ce174d5086c5c9b789af5a5d2f 100644
--- a/frontend/src/metabase/questions/containers/QuestionIndex.jsx
+++ b/frontend/src/metabase/questions/containers/QuestionIndex.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 import { Link } from "react-router";
 import Collapse from "react-collapse";
diff --git a/frontend/src/metabase/reference/components/Detail.jsx b/frontend/src/metabase/reference/components/Detail.jsx
index c6d76d55c70bd1ab5071e1f9cf371e00e069eca0..210d4f11167d328deb124402eb486cc10a46dff5 100644
--- a/frontend/src/metabase/reference/components/Detail.jsx
+++ b/frontend/src/metabase/reference/components/Detail.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import S from "./Detail.css";
 
diff --git a/frontend/src/metabase/reference/components/EditButton.jsx b/frontend/src/metabase/reference/components/EditButton.jsx
index fe3a34779fcd078bd9b067f3beb973177fcdca79..81d2513fef3b9ce4addac03620a50da0c6924aba 100644
--- a/frontend/src/metabase/reference/components/EditButton.jsx
+++ b/frontend/src/metabase/reference/components/EditButton.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/reference/components/EditHeader.jsx b/frontend/src/metabase/reference/components/EditHeader.jsx
index 116e82143a8300db3619a6d93b04d01bfbe5b422..5434e4844195886fc8cf6c158f24515f9ccc0e21 100644
--- a/frontend/src/metabase/reference/components/EditHeader.jsx
+++ b/frontend/src/metabase/reference/components/EditHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/reference/components/Field.jsx b/frontend/src/metabase/reference/components/Field.jsx
index 7c2770a99ba320b87db62876f550c63594098fb5..c5c020605f3b18cd830e4b1bcb0fc0377da4e6d0 100644
--- a/frontend/src/metabase/reference/components/Field.jsx
+++ b/frontend/src/metabase/reference/components/Field.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import * as MetabaseCore from "metabase/lib/core";
diff --git a/frontend/src/metabase/reference/components/FieldToGroupBy.jsx b/frontend/src/metabase/reference/components/FieldToGroupBy.jsx
index 33fb42cbb1bc9a86eedc6d03cdcd435d8a58f3df..87852ec59defb46f0a006b2f2f0d58ef2af136c4 100644
--- a/frontend/src/metabase/reference/components/FieldToGroupBy.jsx
+++ b/frontend/src/metabase/reference/components/FieldToGroupBy.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import pure from "recompose/pure";
 
 import S from "./FieldToGroupBy.css";
@@ -42,4 +43,4 @@ FieldToGroupBy.propTypes = {
     secondaryOnClick: PropTypes.func
 };
 
-export default pure(FieldToGroupBy);
\ No newline at end of file
+export default pure(FieldToGroupBy);
diff --git a/frontend/src/metabase/reference/components/FieldTypeDetail.jsx b/frontend/src/metabase/reference/components/FieldTypeDetail.jsx
index ce5cda7e62e02966928188a31b4f8c6e1c722082..c42ab2572e4fcd38901e1f44b86a80d73b4be7bd 100644
--- a/frontend/src/metabase/reference/components/FieldTypeDetail.jsx
+++ b/frontend/src/metabase/reference/components/FieldTypeDetail.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import { getIn } from "icepick";
 import pure from "recompose/pure";
diff --git a/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx b/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
index e5b77572f10ff70486b11e751e53d45baf64bd48..48cd1535bfbd2e533b04ade920f101820355a8f3 100644
--- a/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
+++ b/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/reference/components/Formula.jsx b/frontend/src/metabase/reference/components/Formula.jsx
index 04819cf39f8425f0150268be20c896268802c961..4882a4d1b741312af2c100be4e5c21803db372f2 100644
--- a/frontend/src/metabase/reference/components/Formula.jsx
+++ b/frontend/src/metabase/reference/components/Formula.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import pure from "recompose/pure";
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/reference/components/GuideDetail.jsx b/frontend/src/metabase/reference/components/GuideDetail.jsx
index faf42ad83f95d13464616e6e2b550c21fc823ad3..45b547e95adb026958df62b0c2283c582c1375d2 100644
--- a/frontend/src/metabase/reference/components/GuideDetail.jsx
+++ b/frontend/src/metabase/reference/components/GuideDetail.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import pure from "recompose/pure";
 import cx from "classnames";
diff --git a/frontend/src/metabase/reference/components/GuideDetailEditor.jsx b/frontend/src/metabase/reference/components/GuideDetailEditor.jsx
index cc3eb93c86938cd50f407ac933ca224d2971f84e..cd82f2e410b31dd39156855fb6714f02a20b4b88 100644
--- a/frontend/src/metabase/reference/components/GuideDetailEditor.jsx
+++ b/frontend/src/metabase/reference/components/GuideDetailEditor.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 // FIXME: using pure seems to mess with redux form updates
 // import pure from "recompose/pure";
 import cx from "classnames";
diff --git a/frontend/src/metabase/reference/components/GuideEditSection.jsx b/frontend/src/metabase/reference/components/GuideEditSection.jsx
index f8e416a928dd48be5191f6fa7068da770931c65e..f3b30093b2448bb13c0d610ae384f176fe22eee5 100644
--- a/frontend/src/metabase/reference/components/GuideEditSection.jsx
+++ b/frontend/src/metabase/reference/components/GuideEditSection.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import pure from "recompose/pure";
 import cx from "classnames";
diff --git a/frontend/src/metabase/reference/components/GuideHeader.jsx b/frontend/src/metabase/reference/components/GuideHeader.jsx
index 28a37f070506960c1adeef68496bc3646248381f..863e7d4f08305f80434755a1079647d5037327a1 100644
--- a/frontend/src/metabase/reference/components/GuideHeader.jsx
+++ b/frontend/src/metabase/reference/components/GuideHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import pure from "recompose/pure";
 
 import EditButton from "metabase/reference/components/EditButton.jsx";
diff --git a/frontend/src/metabase/reference/components/MetricImportantFieldsDetail.jsx b/frontend/src/metabase/reference/components/MetricImportantFieldsDetail.jsx
index 1fbf5afb469053cacad2a40fade6fabefaa5e3cd..f21e13d63269a23865f5366b2976204a8079c85a 100644
--- a/frontend/src/metabase/reference/components/MetricImportantFieldsDetail.jsx
+++ b/frontend/src/metabase/reference/components/MetricImportantFieldsDetail.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/reference/components/ReferenceHeader.jsx b/frontend/src/metabase/reference/components/ReferenceHeader.jsx
index 21a718a30e020e3748fb145455e567b326cf6a4e..9a5fcfedde558e2b70d27cc1fa772aa510297e15 100644
--- a/frontend/src/metabase/reference/components/ReferenceHeader.jsx
+++ b/frontend/src/metabase/reference/components/ReferenceHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import cx from "classnames";
 import pure from "recompose/pure";
diff --git a/frontend/src/metabase/reference/components/RevisionMessageModal.jsx b/frontend/src/metabase/reference/components/RevisionMessageModal.jsx
index 5e052780d7d29b164ac7bb1f3815bb4e44e6d770..282e4f54b0a8ddde81a6a8409f9831d71b9caf64 100644
--- a/frontend/src/metabase/reference/components/RevisionMessageModal.jsx
+++ b/frontend/src/metabase/reference/components/RevisionMessageModal.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import ModalWithTrigger from "metabase/components/ModalWithTrigger.jsx";
 import ModalContent from "metabase/components/ModalContent.jsx";
diff --git a/frontend/src/metabase/reference/components/UsefulQuestions.jsx b/frontend/src/metabase/reference/components/UsefulQuestions.jsx
index 0c7e49a463a77860fca9fb1122de35f00f27b1b2..bac4d8e2bcbd5ed42f67312ba03cd5ba7160784d 100644
--- a/frontend/src/metabase/reference/components/UsefulQuestions.jsx
+++ b/frontend/src/metabase/reference/components/UsefulQuestions.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import pure from "recompose/pure";
 
diff --git a/frontend/src/metabase/reference/containers/ReferenceApp.jsx b/frontend/src/metabase/reference/containers/ReferenceApp.jsx
index f89d6b700e4d931c4d466fabb74049a8a085986e..dbb904d0a65fc2e7d2e8b5a85799b7aef51a349a 100644
--- a/frontend/src/metabase/reference/containers/ReferenceApp.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceApp.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
 import { connect } from 'react-redux';
 
 import Sidebar from 'metabase/components/Sidebar.jsx';
diff --git a/frontend/src/metabase/reference/containers/ReferenceEntity.jsx b/frontend/src/metabase/reference/containers/ReferenceEntity.jsx
index b5d43d664d6c7a0c585bf59b9e4fe373ba92883b..45a0b6ec4ac7f76d968d2fa79cae07b745639607 100644
--- a/frontend/src/metabase/reference/containers/ReferenceEntity.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceEntity.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 import { reduxForm } from "redux-form";
 import { push } from "react-router-redux";
diff --git a/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx b/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx
index 9f821341533866af791d903eec787c720cec6106..3773c59cf77c34e39bcdaf1bda60ddd36d2ec68e 100644
--- a/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 import moment from "moment";
 
diff --git a/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx b/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx
index b680dba9f4a54aa3a360db4bd9ad12c881bd8e75..a5aebda8df7c32abe0e925d300af48dd7f7493f4 100644
--- a/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 import { reduxForm } from "redux-form";
 
diff --git a/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx b/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx
index b34c861b019d881c0797b701c203b252bc49b08f..9cdedc4cc97b2a64fb9b4029c58181ca174149c2 100644
--- a/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 import { connect } from 'react-redux';
 import { push } from 'react-router-redux';
diff --git a/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx b/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx
index 192b6b45e583467d2866db37a41a1228a9e17642..05465289ba7289c2adf13f311541b27a6c790217 100644
--- a/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx
+++ b/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { connect } from "react-redux";
 
 import { getIn } from "icepick";
diff --git a/frontend/src/metabase/routes-embed.jsx b/frontend/src/metabase/routes-embed.jsx
index 96e5de25976a2d133116f2ebab42766940c6d3e0..6697785f74855e4906bdd4925979c69bc472c387 100644
--- a/frontend/src/metabase/routes-embed.jsx
+++ b/frontend/src/metabase/routes-embed.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { Route } from 'react-router';
 
diff --git a/frontend/src/metabase/routes-public.jsx b/frontend/src/metabase/routes-public.jsx
index 0ed8e87dd228c8d5350d3f55f7e50527e9b56c68..f40e59cec01b8a3ca84cb667d5d49f9526a57be4 100644
--- a/frontend/src/metabase/routes-public.jsx
+++ b/frontend/src/metabase/routes-public.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { Route } from 'react-router';
 
diff --git a/frontend/src/metabase/routes.jsx b/frontend/src/metabase/routes.jsx
index 1be0d20d54d4ef1eafad19b5edd4864de11cb470..f52854442201ee62eae1d9693c4d623e074c5099 100644
--- a/frontend/src/metabase/routes.jsx
+++ b/frontend/src/metabase/routes.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { Route, Redirect, IndexRedirect, IndexRoute } from 'react-router';
 import { routerActions } from 'react-router-redux';
diff --git a/frontend/src/metabase/setup/components/CollapsedStep.jsx b/frontend/src/metabase/setup/components/CollapsedStep.jsx
index 90ecad4374d914cc10adc81ceab900dec7a0a9e3..34501e614341736a446b9199f99fcd0550d8196f 100644
--- a/frontend/src/metabase/setup/components/CollapsedStep.jsx
+++ b/frontend/src/metabase/setup/components/CollapsedStep.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/setup/components/DatabaseStep.jsx b/frontend/src/metabase/setup/components/DatabaseStep.jsx
index 5bf60b9c2340522889f31d8ed4dcae340403884b..9ec39c01afd0de087400196c1d138cb70e9317f8 100644
--- a/frontend/src/metabase/setup/components/DatabaseStep.jsx
+++ b/frontend/src/metabase/setup/components/DatabaseStep.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import StepTitle from './StepTitle.jsx'
diff --git a/frontend/src/metabase/setup/components/PreferencesStep.jsx b/frontend/src/metabase/setup/components/PreferencesStep.jsx
index 70a21fe00bca237c6ff46e3d2c2abdae6a931c00..bac1d80bcdcceb24ac04b1402bbdb4d6f42bfe0a 100644
--- a/frontend/src/metabase/setup/components/PreferencesStep.jsx
+++ b/frontend/src/metabase/setup/components/PreferencesStep.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import MetabaseAnalytics from "metabase/lib/analytics";
 import MetabaseSettings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/setup/components/Setup.jsx b/frontend/src/metabase/setup/components/Setup.jsx
index 0437ae223d8f347d212824f1b20ecdf9441c0c09..4c99d49bd281a92bb099203516d1052c5354c5b4 100644
--- a/frontend/src/metabase/setup/components/Setup.jsx
+++ b/frontend/src/metabase/setup/components/Setup.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import { Link } from "react-router";
 
 import LogoIcon from 'metabase/components/LogoIcon.jsx';
diff --git a/frontend/src/metabase/setup/components/StepTitle.jsx b/frontend/src/metabase/setup/components/StepTitle.jsx
index 3f1cf52ba8cc5521987b58e5bbc109ab0ace4e53..48531185c97e616b2f6f8e9d1d36a805c4e18eea 100644
--- a/frontend/src/metabase/setup/components/StepTitle.jsx
+++ b/frontend/src/metabase/setup/components/StepTitle.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from 'react'
+import React, { Component } from 'react'
+import PropTypes from "prop-types";
 import Icon from "metabase/components/Icon.jsx";
 
 export default class StepTitle extends Component {
diff --git a/frontend/src/metabase/setup/components/UserStep.jsx b/frontend/src/metabase/setup/components/UserStep.jsx
index 43d5f2258d2d480a6fce0cf3b0aa86c557f244b3..24c31440ee1b0042abe5af605efca2e3c5a0c7f0 100644
--- a/frontend/src/metabase/setup/components/UserStep.jsx
+++ b/frontend/src/metabase/setup/components/UserStep.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import FormField from "metabase/components/form/FormField.jsx";
diff --git a/frontend/src/metabase/setup/containers/SetupApp.jsx b/frontend/src/metabase/setup/containers/SetupApp.jsx
index bd9a7dcba0e481452e87fb0e1977b1af71340859..aa2f5617c9af0dc43021b64b5621a47d1d5b2968 100644
--- a/frontend/src/metabase/setup/containers/SetupApp.jsx
+++ b/frontend/src/metabase/setup/containers/SetupApp.jsx
@@ -1,5 +1,5 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import Setup from "../components/Setup.jsx";
diff --git a/frontend/src/metabase/tutorial/PageFlag.jsx b/frontend/src/metabase/tutorial/PageFlag.jsx
index 2f9e7e328dfaac869f67053de5e65d61fbfe85e9..56c1ca977cf9a24f90a1cc2926f01393a6df9cca 100644
--- a/frontend/src/metabase/tutorial/PageFlag.jsx
+++ b/frontend/src/metabase/tutorial/PageFlag.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import "./PageFlag.css";
 
diff --git a/frontend/src/metabase/tutorial/Portal.jsx b/frontend/src/metabase/tutorial/Portal.jsx
index 052d4d7e092e1adf7f2b4c896600c35de0d38859..150e19b27f15a8ab6e8bffa342f710c5b551636d 100644
--- a/frontend/src/metabase/tutorial/Portal.jsx
+++ b/frontend/src/metabase/tutorial/Portal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import BodyComponent from "metabase/components/BodyComponent.jsx";
 
diff --git a/frontend/src/metabase/tutorial/QueryBuilderTutorial.jsx b/frontend/src/metabase/tutorial/QueryBuilderTutorial.jsx
index ad9d0c1817b5c136d80f3e8c094ea6b849622aaf..24638a3850d7ec602f9cc23d1af9a0047c4473cc 100644
--- a/frontend/src/metabase/tutorial/QueryBuilderTutorial.jsx
+++ b/frontend/src/metabase/tutorial/QueryBuilderTutorial.jsx
@@ -1,6 +1,6 @@
 /* eslint-disable react/display-name */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Tutorial, { qs, qsWithContent } from "./Tutorial.jsx";
 
diff --git a/frontend/src/metabase/tutorial/Tutorial.jsx b/frontend/src/metabase/tutorial/Tutorial.jsx
index 059b17e514f9c22eaf683a44b10d997d433ae2c8..81066e500a9f72c96f350a131ba899d48c484177 100644
--- a/frontend/src/metabase/tutorial/Tutorial.jsx
+++ b/frontend/src/metabase/tutorial/Tutorial.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Modal from "metabase/components/Modal.jsx";
 import Popover from "metabase/components/Popover.jsx";
diff --git a/frontend/src/metabase/tutorial/TutorialModal.jsx b/frontend/src/metabase/tutorial/TutorialModal.jsx
index 46037b83d126c47be500a9826d64531c896fac50..b1c2c73c5db9ebd689034bc2530fe5f450df5e5a 100644
--- a/frontend/src/metabase/tutorial/TutorialModal.jsx
+++ b/frontend/src/metabase/tutorial/TutorialModal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 
diff --git a/frontend/src/metabase/user/components/SetUserPassword.jsx b/frontend/src/metabase/user/components/SetUserPassword.jsx
index bcb2c03c3771116bd84d3edf69d467412398288b..85af677fc4ede5f7dbd02e211fb6086c2aa76831 100644
--- a/frontend/src/metabase/user/components/SetUserPassword.jsx
+++ b/frontend/src/metabase/user/components/SetUserPassword.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import FormField from "metabase/components/form/FormField.jsx";
diff --git a/frontend/src/metabase/user/components/UpdateUserDetails.jsx b/frontend/src/metabase/user/components/UpdateUserDetails.jsx
index c5950c24fb0bb5608d98946f78b3bdeb4eb9d01c..acff1daecbc5e3fabb3eb72368626272fd42ce13 100644
--- a/frontend/src/metabase/user/components/UpdateUserDetails.jsx
+++ b/frontend/src/metabase/user/components/UpdateUserDetails.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import FormField from "metabase/components/form/FormField.jsx";
diff --git a/frontend/src/metabase/user/components/UserSettings.jsx b/frontend/src/metabase/user/components/UserSettings.jsx
index a06bc0807cf2e1d45ca535b1f27c8aa9ae6323da..036ff8898b190217e7a2ae22610ef2bd5533cada 100644
--- a/frontend/src/metabase/user/components/UserSettings.jsx
+++ b/frontend/src/metabase/user/components/UserSettings.jsx
@@ -1,5 +1,6 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import cx from "classnames";
 
 import SetUserPassword from "./SetUserPassword.jsx";
diff --git a/frontend/src/metabase/user/containers/UserSettingsApp.jsx b/frontend/src/metabase/user/containers/UserSettingsApp.jsx
index 971d547953f06267eb1f79694deb960dda97b736..839412015a88510ecb1a1e01e21df1eadea18d58 100644
--- a/frontend/src/metabase/user/containers/UserSettingsApp.jsx
+++ b/frontend/src/metabase/user/containers/UserSettingsApp.jsx
@@ -1,5 +1,5 @@
 /* eslint "react/prop-types": "warn" */
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { connect } from "react-redux";
 
 import UserSettings from "../components/UserSettings.jsx";
diff --git a/frontend/src/metabase/visualizations/components/CardRenderer.jsx b/frontend/src/metabase/visualizations/components/CardRenderer.jsx
index 223184ce7592bed7cae9c4abcdd023dd6c35d80f..545881c62ee9fd4451bd97e1d2533339b0e1b11e 100644
--- a/frontend/src/metabase/visualizations/components/CardRenderer.jsx
+++ b/frontend/src/metabase/visualizations/components/CardRenderer.jsx
@@ -1,6 +1,7 @@
 /* eslint "react/prop-types": "warn" */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import ExplicitSize from "metabase/components/ExplicitSize.jsx";
diff --git a/frontend/src/metabase/visualizations/components/ChartClickActions.jsx b/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
index 0e3563eb51714831c71312168f6b487cb245f326..87c0c1d05c003ab1f4ba629c261c6df0d34e7ddf 100644
--- a/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
+++ b/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Button from "metabase/components/Button";
 import Popover from "metabase/components/Popover";
diff --git a/frontend/src/metabase/visualizations/components/ChartSettings.jsx b/frontend/src/metabase/visualizations/components/ChartSettings.jsx
index a7dce968035f0f5dedfa84e521392746a52d53b3..15e4f01eb7756e53560dce726c4a7eccbee05e5d 100644
--- a/frontend/src/metabase/visualizations/components/ChartSettings.jsx
+++ b/frontend/src/metabase/visualizations/components/ChartSettings.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import cx from "classnames";
 import { assocIn } from "icepick";
 import _ from "underscore";
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip.jsx b/frontend/src/metabase/visualizations/components/ChartTooltip.jsx
index 501b403030d05f48af9fe7fc1b59bb937f742384..71d2383a483ad50f68bd92d8f7fa1c2d9975f003 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip.jsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import TooltipPopover from "metabase/components/TooltipPopover.jsx"
 import Value from "metabase/components/Value.jsx";
diff --git a/frontend/src/metabase/visualizations/components/ChartWithLegend.jsx b/frontend/src/metabase/visualizations/components/ChartWithLegend.jsx
index 9218edfcb3009c2e5de766cbaa5f26a76b66ecfb..4cb2efaf16edf22f8c1dfce215957276335f149d 100644
--- a/frontend/src/metabase/visualizations/components/ChartWithLegend.jsx
+++ b/frontend/src/metabase/visualizations/components/ChartWithLegend.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import styles from "./ChartWithLegend.css";
 
 import LegendVertical from "./LegendVertical.jsx";
diff --git a/frontend/src/metabase/visualizations/components/ChoroplethMap.jsx b/frontend/src/metabase/visualizations/components/ChoroplethMap.jsx
index d390fa5d61203b5a6877e1c46ec9e2596bac3563..d576bd738b37e7a266a64dfc710bb79bca200037 100644
--- a/frontend/src/metabase/visualizations/components/ChoroplethMap.jsx
+++ b/frontend/src/metabase/visualizations/components/ChoroplethMap.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import LoadingSpinner from "metabase/components/LoadingSpinner.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/FunnelBar.jsx b/frontend/src/metabase/visualizations/components/FunnelBar.jsx
index 79454994387531948a582ba368aa0fb591bb7687..1028592b93793e6032836dd598f2569d8dab1b0e 100644
--- a/frontend/src/metabase/visualizations/components/FunnelBar.jsx
+++ b/frontend/src/metabase/visualizations/components/FunnelBar.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import BarChart from "metabase/visualizations/visualizations/BarChart.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/FunnelNormal.jsx b/frontend/src/metabase/visualizations/components/FunnelNormal.jsx
index 2f793f8d1949ac20073e631854455fb7cb360d85..104b44a799aeec7554a0e098aaf5393e78b03361 100644
--- a/frontend/src/metabase/visualizations/components/FunnelNormal.jsx
+++ b/frontend/src/metabase/visualizations/components/FunnelNormal.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import cx from "classnames";
 import styles from "./FunnelNormal.css";
diff --git a/frontend/src/metabase/visualizations/components/LeafletChoropleth.jsx b/frontend/src/metabase/visualizations/components/LeafletChoropleth.jsx
index b958b5b4cd7890e6cb7bbd17cea5b557622fecf9..6099b9eeeec27cd5841fe10dda0396ca91dec170 100644
--- a/frontend/src/metabase/visualizations/components/LeafletChoropleth.jsx
+++ b/frontend/src/metabase/visualizations/components/LeafletChoropleth.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import { normal } from "metabase/lib/colors";
 
diff --git a/frontend/src/metabase/visualizations/components/LeafletMap.jsx b/frontend/src/metabase/visualizations/components/LeafletMap.jsx
index e6e3d1bf109dfda4e0199a64e311acc6eaee701d..380d750eca5caa3411cc3277e909541e77ea92c1 100644
--- a/frontend/src/metabase/visualizations/components/LeafletMap.jsx
+++ b/frontend/src/metabase/visualizations/components/LeafletMap.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import MetabaseSettings from "metabase/lib/settings";
diff --git a/frontend/src/metabase/visualizations/components/LeafletMarkerPinMap.jsx b/frontend/src/metabase/visualizations/components/LeafletMarkerPinMap.jsx
index 7daf75bba13cadbd967286b64ddcf978cb495896..fabd69a39fdf6b55a855ab6ea5593271ca5a7028 100644
--- a/frontend/src/metabase/visualizations/components/LeafletMarkerPinMap.jsx
+++ b/frontend/src/metabase/visualizations/components/LeafletMarkerPinMap.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 import ReactDOM from "react-dom";
 
 import LeafletMap from "./LeafletMap.jsx";
diff --git a/frontend/src/metabase/visualizations/components/LeafletTilePinMap.jsx b/frontend/src/metabase/visualizations/components/LeafletTilePinMap.jsx
index da7b688e340f2a4792ad9d6143b5d620750030f3..9bcf98d86b3422035472c58b3a7969285904b916 100644
--- a/frontend/src/metabase/visualizations/components/LeafletTilePinMap.jsx
+++ b/frontend/src/metabase/visualizations/components/LeafletTilePinMap.jsx
@@ -1,4 +1,3 @@
-import React, { Component, PropTypes } from "react";
 
 import LeafletMap from "./LeafletMap.jsx";
 import L from "leaflet";
diff --git a/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx b/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
index 8059a0b659cdf9f63ca053f339304d5777e0177d..b2f9b507242659772b8da09b59248494e46ec2c2 100644
--- a/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
+++ b/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { isSameSeries } from "metabase/visualizations/lib/utils";
 import d3 from "d3";
diff --git a/frontend/src/metabase/visualizations/components/LegendHeader.jsx b/frontend/src/metabase/visualizations/components/LegendHeader.jsx
index 3574ac8732835fdb54eeb4788714f09b12e5fef5..d625cbd316b0b8a9d5b43be19681b68a66d02b8c 100644
--- a/frontend/src/metabase/visualizations/components/LegendHeader.jsx
+++ b/frontend/src/metabase/visualizations/components/LegendHeader.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import styles from "./Legend.css";
 
diff --git a/frontend/src/metabase/visualizations/components/LegendHorizontal.jsx b/frontend/src/metabase/visualizations/components/LegendHorizontal.jsx
index 2e1d85296e25d47270225fe85245ca818b86c283..10600a508438ebd76db5a0329210b1ce1d1cb77b 100644
--- a/frontend/src/metabase/visualizations/components/LegendHorizontal.jsx
+++ b/frontend/src/metabase/visualizations/components/LegendHorizontal.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 import styles from "./Legend.css";
 
diff --git a/frontend/src/metabase/visualizations/components/LegendItem.jsx b/frontend/src/metabase/visualizations/components/LegendItem.jsx
index 9a594e4317aee5a9370cfdea9afccbbe16dae67d..f7a59666cd9906591a723ed40cd910c3a571ca7a 100644
--- a/frontend/src/metabase/visualizations/components/LegendItem.jsx
+++ b/frontend/src/metabase/visualizations/components/LegendItem.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import Icon from "metabase/components/Icon.jsx";
 import Tooltip from "metabase/components/Tooltip.jsx";
diff --git a/frontend/src/metabase/visualizations/components/LegendVertical.jsx b/frontend/src/metabase/visualizations/components/LegendVertical.jsx
index 1f78062295f24d22472abf0520a756eb2941b127..4d0cf771e2a966aa3f541546e10a1a69fd88aaf8 100644
--- a/frontend/src/metabase/visualizations/components/LegendVertical.jsx
+++ b/frontend/src/metabase/visualizations/components/LegendVertical.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 import styles from "./Legend.css";
 
diff --git a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
index e2716e6f90dd953c56e7bee892c527d16aa3366b..07bcaa255b0b28fc887723c29a5db3a7077bbdb2 100644
--- a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
+++ b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 
 import CardRenderer from "./CardRenderer.jsx";
 import LegendHeader from "./LegendHeader.jsx";
diff --git a/frontend/src/metabase/visualizations/components/PinMap.jsx b/frontend/src/metabase/visualizations/components/PinMap.jsx
index 596864c978aec3be5776947a4373acafef1068cc..ce57b2a3263bdbc60a9ca75797ea19f57bce7d23 100644
--- a/frontend/src/metabase/visualizations/components/PinMap.jsx
+++ b/frontend/src/metabase/visualizations/components/PinMap.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { hasLatitudeAndLongitudeColumns } from "metabase/lib/schema_metadata";
 import { LatitudeLongitudeError } from "metabase/visualizations/lib/errors";
diff --git a/frontend/src/metabase/visualizations/components/TableInteractive.jsx b/frontend/src/metabase/visualizations/components/TableInteractive.jsx
index 4e33e5d28b67367582839eca374a08741290b841..af8a77121c4f6440c91aef961e29ac1fc542d087 100644
--- a/frontend/src/metabase/visualizations/components/TableInteractive.jsx
+++ b/frontend/src/metabase/visualizations/components/TableInteractive.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 
 import "./TableInteractive.css";
diff --git a/frontend/src/metabase/visualizations/components/TableSimple.jsx b/frontend/src/metabase/visualizations/components/TableSimple.jsx
index d2f5081be36f05185dd1b424540606134d3bdc47..db4d176f501c73b5a477d8ee7c35ce728e885c94 100644
--- a/frontend/src/metabase/visualizations/components/TableSimple.jsx
+++ b/frontend/src/metabase/visualizations/components/TableSimple.jsx
@@ -1,6 +1,7 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
+import PropTypes from "prop-types";
 import ReactDOM from "react-dom";
 import styles from "./Table.css";
 
diff --git a/frontend/src/metabase/visualizations/components/Visualization.jsx b/frontend/src/metabase/visualizations/components/Visualization.jsx
index 29d0a5eb9aa79a891983f7b39cec3288c2768541..bfc935a93c8a4d2eb64c4c7244af5d42c5f434a1 100644
--- a/frontend/src/metabase/visualizations/components/Visualization.jsx
+++ b/frontend/src/metabase/visualizations/components/Visualization.jsx
@@ -1,6 +1,6 @@
 /* @flow weak */
 
-import React, { Component, PropTypes, Element } from "react";
+import React, { Component, Element } from "react";
 
 import ExplicitSize from "metabase/components/ExplicitSize.jsx";
 import LegendHeader from "metabase/visualizations/components/LegendHeader.jsx";
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingColorPicker.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingColorPicker.jsx
index 2a2731d01a5f75c9acaac6b3a1efc1eab116c7f4..1cbd1d953792156272f9fecf783c70e6be3bba76 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingColorPicker.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingColorPicker.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ColorPicker from "metabase/components/ColorPicker";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingColorsPicker.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingColorsPicker.jsx
index 740e52a670fe48a8c43a12c4283f0398e0c03696..ff7d45d05ea2087d6ec0cc17df17deaf4f04e347 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingColorsPicker.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingColorsPicker.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ChartSettingColorPicker from "./ChartSettingColorPicker.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.jsx
index 2c7e9896d4e543749099ae6338367e71e13db6a1..32b6a0c6cc4a339df7a9bd5294da23d70e28756d 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Icon from "metabase/components/Icon";
 import cx from "classnames";
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldsPicker.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldsPicker.jsx
index 7e6ea5cc982dc8d9d68ae9788636d9212a71a23a..09463240b7e5ad01fb497df7bda19b2833540a93 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldsPicker.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldsPicker.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import ChartSettingFieldPicker from "./ChartSettingFieldPicker.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingInput.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingInput.jsx
index ecd0cbacdc632be6d37d292eb8b070305f5a8dfa..1f1fcfae14e1ea092a185c3a732f58334a948cfa 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingInput.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingInput.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 const ChartSettingInput = ({ value, onChange }) =>
     <input
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingInputNumeric.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingInputNumeric.jsx
index 76a3dc4f57eecf26146d066d450b08864bb4988a..9341f85c8423a90722840fda1523a7d2485b815f 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingInputNumeric.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingInputNumeric.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import cx from "classnames";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
index f72f67e7aff88627b6862e70930b12414e4238d2..4c9df5db752a42dd18ccd311e3c0ad5f014318c7 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import CheckBox from "metabase/components/CheckBox.jsx";
 import Icon from "metabase/components/Icon.jsx";
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingRadio.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingRadio.jsx
index 0f137687605dafb25c609a88ca4fb7e5d03c0ab6..f935c2c623e5f95537d5270efe4c99209e342d79 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingRadio.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingRadio.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Radio from "metabase/components/Radio.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingSelect.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingSelect.jsx
index b8a2875d4fcf9d591e1caf2860f7cb5fad5d1378..cabe7746d865de7154e347e15eaa6efd6c173063 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingSelect.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingSelect.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Select from "metabase/components/Select.jsx";
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingToggle.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingToggle.jsx
index b3c5c073842e2d137d526bbdb79c2dcdc80b15c8..d0d7f6680d6a26c08a511bb162dfd75e8c229d69 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingToggle.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingToggle.jsx
@@ -1,4 +1,4 @@
-import React, { Component, PropTypes } from "react";
+import React from "react";
 
 import Toggle from "metabase/components/Toggle.jsx";
 
diff --git a/frontend/src/metabase/visualizations/index.js b/frontend/src/metabase/visualizations/index.js
index 2e9780978050ce64be8c86797c60c999dcffb99b..0297c20a1cc69a0b886380efc8d5fdb3d7967ea5 100644
--- a/frontend/src/metabase/visualizations/index.js
+++ b/frontend/src/metabase/visualizations/index.js
@@ -1,7 +1,5 @@
 /* @flow weak */
 
-import { Component } from "react";
-
 import Scalar      from "./visualizations/Scalar.jsx";
 import Progress    from "./visualizations/Progress.jsx";
 import Table       from "./visualizations/Table.jsx";
diff --git a/frontend/src/metabase/visualizations/visualizations/AreaChart.jsx b/frontend/src/metabase/visualizations/visualizations/AreaChart.jsx
index 4732041c65bd3c9ba989cca1b9192bce244fe030..6043514557e20b730e858285f8f5da3c933b0ebc 100644
--- a/frontend/src/metabase/visualizations/visualizations/AreaChart.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/AreaChart.jsx
@@ -1,6 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
 
 import LineAreaBarChart from "../components/LineAreaBarChart.jsx";
 import { areaRenderer } from "../lib/LineAreaBarRenderer";
diff --git a/frontend/src/metabase/visualizations/visualizations/BarChart.jsx b/frontend/src/metabase/visualizations/visualizations/BarChart.jsx
index 3df88ea438cfc3d5a3e159916e1dfa8347a08637..aa2b8bf74d93325e5929a4b2484331c37277dc61 100644
--- a/frontend/src/metabase/visualizations/visualizations/BarChart.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/BarChart.jsx
@@ -1,6 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
 
 import LineAreaBarChart from "../components/LineAreaBarChart.jsx";
 import { barRenderer } from "../lib/LineAreaBarRenderer";
diff --git a/frontend/src/metabase/visualizations/visualizations/Funnel.jsx b/frontend/src/metabase/visualizations/visualizations/Funnel.jsx
index 4fd4fb8ef028bf4a1527415d56701387613a9fb5..63548400bce173fa9bd746be11c830322c8ae069 100644
--- a/frontend/src/metabase/visualizations/visualizations/Funnel.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Funnel.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import { MinRowsError, ChartSettingsError } from "metabase/visualizations/lib/errors";
 
diff --git a/frontend/src/metabase/visualizations/visualizations/LineChart.jsx b/frontend/src/metabase/visualizations/visualizations/LineChart.jsx
index 922dcb00dd9ef48b723075b5b614436250f5c8c9..9b981abc43242dd86c0e7172f779db69e9e62f63 100644
--- a/frontend/src/metabase/visualizations/visualizations/LineChart.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/LineChart.jsx
@@ -1,6 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
 
 import LineAreaBarChart from "../components/LineAreaBarChart.jsx";
 import { lineRenderer } from "../lib/LineAreaBarRenderer";
diff --git a/frontend/src/metabase/visualizations/visualizations/Map.jsx b/frontend/src/metabase/visualizations/visualizations/Map.jsx
index d552cc87a7f73032b44ff851b3bf9b78b6ae5d9e..cd65132915a7cb0863a0df028997e4994fc99110 100644
--- a/frontend/src/metabase/visualizations/visualizations/Map.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Map.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import ChoroplethMap from "../components/ChoroplethMap.jsx";
 import PinMap from "../components/PinMap.jsx";
diff --git a/frontend/src/metabase/visualizations/visualizations/PieChart.jsx b/frontend/src/metabase/visualizations/visualizations/PieChart.jsx
index 1e4420e735f70313604df9b09944eda2e0680887..56e92be176230a0cbf49f72af1508f25d0397c57 100644
--- a/frontend/src/metabase/visualizations/visualizations/PieChart.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/PieChart.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 import styles from "./PieChart.css";
 
diff --git a/frontend/src/metabase/visualizations/visualizations/Progress.jsx b/frontend/src/metabase/visualizations/visualizations/Progress.jsx
index 1189f5d1afcf797b275fcd31bcb3d34e8f33c9cf..1cf8fa459e3724b283bb64da1805121b0af692ab 100644
--- a/frontend/src/metabase/visualizations/visualizations/Progress.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Progress.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import ReactDOM from "react-dom";
 
 import { formatValue } from "metabase/lib/formatting";
diff --git a/frontend/src/metabase/visualizations/visualizations/RowChart.jsx b/frontend/src/metabase/visualizations/visualizations/RowChart.jsx
index c35274410df90e46718d856692f82e903fabd0e0..819123485d8e62f20621cdaa63a437a188991b4c 100644
--- a/frontend/src/metabase/visualizations/visualizations/RowChart.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/RowChart.jsx
@@ -1,6 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
 
 import LineAreaBarChart from "../components/LineAreaBarChart.jsx";
 import { rowRenderer } from "../lib/LineAreaBarRenderer";
diff --git a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
index 0109394d22e216b61bba2ae5395b0ce4892f1645..f55135518c34f78701d54cab1e5d7b273b2b036f 100644
--- a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 import { Link } from "react-router";
 import styles from "./Scalar.css";
 
diff --git a/frontend/src/metabase/visualizations/visualizations/ScatterPlot.jsx b/frontend/src/metabase/visualizations/visualizations/ScatterPlot.jsx
index 8a5c9ac2dc1eb713966092f6a3319c9a6f5daaea..034929f09cd561d47692bebb9ab2d877d4bcbc3f 100644
--- a/frontend/src/metabase/visualizations/visualizations/ScatterPlot.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/ScatterPlot.jsx
@@ -1,6 +1,5 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
 
 import LineAreaBarChart from "../components/LineAreaBarChart.jsx";
 import { scatterRenderer } from "../lib/LineAreaBarRenderer";
diff --git a/frontend/src/metabase/visualizations/visualizations/Table.jsx b/frontend/src/metabase/visualizations/visualizations/Table.jsx
index bd9477488b93f34145278e3f5ddb0e23f4e34bfc..d45ac9c86111bb8a0529872b0f51f694db5501af 100644
--- a/frontend/src/metabase/visualizations/visualizations/Table.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Table.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import React, { Component, PropTypes } from "react";
+import React, { Component } from "react";
 
 import TableInteractive from "../components/TableInteractive.jsx";
 import TableSimple from "../components/TableSimple.jsx";
diff --git a/package.json b/package.json
index 77edb5a62183b55dc27d90deac3fb94b2cfdd11f..0a31831880cf0d2173b911fc259bf7597377e1bf 100644
--- a/package.json
+++ b/package.json
@@ -33,14 +33,15 @@
     "normalizr": "^3.0.2",
     "number-to-locale-string": "^1.0.1",
     "password-generator": "^2.0.1",
-    "react": "^15.2.1",
+    "prop-types": "^15.5.4",
+    "react": "15.5.0",
     "react-addons-css-transition-group": "^15.2.1",
     "react-addons-perf": "^15.2.1",
     "react-addons-shallow-compare": "^15.2.1",
     "react-ansi-style": "^1.0.0",
     "react-collapse": "^2.3.3",
     "react-copy-to-clipboard": "^4.2.3",
-    "react-dom": "^15.2.1",
+    "react-dom": "15.5.0",
     "react-draggable": "^2.2.3",
     "react-height": "^2.1.1",
     "react-motion": "^0.4.5",
diff --git a/yarn.lock b/yarn.lock
index a343edb47001c17cfd759be5ee61eccd6f0f3c6e..ec7e8366665b0c987d859292b1166bf584721bf9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3213,7 +3213,7 @@ fb-watchman@^1.8.0, fb-watchman@^1.9.0:
   dependencies:
     bser "1.0.2"
 
-fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.8:
+fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.8, fbjs@^0.8.9:
   version "0.8.9"
   resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14"
   dependencies:
@@ -6532,6 +6532,18 @@ promise@^7.1.1:
   dependencies:
     asap "~2.0.3"
 
+prop-types@15.5.0-alpha.0:
+  version "15.5.0-alpha.0"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.0-alpha.0.tgz#a342108678256db125eee3d1ae2f889af3531bd7"
+  dependencies:
+    fbjs "^0.8.9"
+
+prop-types@^15.5.4, prop-types@~15.5.0:
+  version "15.5.4"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.4.tgz#2ed3692716a5060f8cc020946d8238e7419d92c0"
+  dependencies:
+    fbjs "^0.8.9"
+
 proxy-addr@~1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074"
@@ -6699,13 +6711,14 @@ react-docgen@^2.12.1:
     node-dir "^0.1.10"
     recast "^0.11.5"
 
-react-dom@^15.2.1:
-  version "15.4.2"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f"
+react-dom@15.5.0:
+  version "15.5.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.0.tgz#86a8d6dcde388473815039de3840706e1f28f697"
   dependencies:
-    fbjs "^0.8.1"
+    fbjs "^0.8.9"
     loose-envify "^1.1.0"
     object-assign "^4.1.0"
+    prop-types "~15.5.0"
 
 react-draggable@^2.1.0, react-draggable@^2.2.3:
   version "2.2.3"
@@ -6860,13 +6873,14 @@ react-virtualized@^8.6.0:
     dom-helpers "^2.4.0 || ^3.0.0"
     loose-envify "^1.3.0"
 
-react@^15.2.1:
-  version "15.4.2"
-  resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef"
+react@15.5.0:
+  version "15.5.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-15.5.0.tgz#1f8e4b492dcfbf77479eb4fdfc48da425002e505"
   dependencies:
-    fbjs "^0.8.4"
+    fbjs "^0.8.9"
     loose-envify "^1.1.0"
     object-assign "^4.1.0"
+    prop-types "15.5.0-alpha.0"
 
 read-cache@^1.0.0:
   version "1.0.0"