diff --git a/.eslintrc b/.eslintrc
index 65eb775f8de916b02d1779185c9627d1a26d635b..aa4c8e9f63613906e5ab6efead0a560c877894db 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -29,6 +29,7 @@
         "global-strict": 0,
         "new-cap": 0,
         "no-fallthrough": 0,
+        "no-useless-escape": 0,
         "no-case-declarations": 0,
         "react/no-is-mounted": 2,
         "react/prefer-es6-class": 2,
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index a8f484af147aca756f0f64c38b4d3ec0c00dda0e..614c0ce6f34c577fbfb4c3ae2722290e36309362 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -3,7 +3,7 @@ Before filing an issue we'd appreciate it if you could take a moment to ensure
 there isn't already an open issue or pull-request.
 -----
 
-If there's an exisiting issue, please add a :+1: reaction to the description of
+If there's an existing issue, please add a :+1: reaction to the description of
 the issue. One way we prioritize issues is by the number of :+1: reactions on
 their descriptions. Please DO NOT add `+1` or :+1: comments.
 
diff --git a/Dockerfile b/Dockerfile
index 9145b7b1d4630d129a047e9204f6545f8b5d1e61..12313c85fdbeddd68244c2c9e76f292268cc11c0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,7 @@
 # images hosted on Docker Hub https://hub.docker.com/r/metabase/metabase/ which use the
 # Dockerfile located at ./bin/docker/Dockerfile
 
-FROM java:openjdk-7-jre-alpine
+FROM java:openjdk-8-jre-alpine
 
 ENV JAVA_HOME=/usr/lib/jvm/default-jvm
 ENV PATH /usr/local/bin:$PATH
diff --git a/bin/aws-eb-docker/cloudformation-elasticbeanstalk.json.template b/bin/aws-eb-docker/cloudformation-elasticbeanstalk.json.template
new file mode 100644
index 0000000000000000000000000000000000000000..bc64e84b3e4871fad60e9aab3e129c614ab27b0b
--- /dev/null
+++ b/bin/aws-eb-docker/cloudformation-elasticbeanstalk.json.template
@@ -0,0 +1,149 @@
+{
+    "AWSTemplateFormatVersion": "2010-09-09",
+    "Description": "Deploys Metabase by creating an ElasticBeanstalk application in an contained in a CloudFormation stack.",
+    "Parameters": {
+        "MetabaseVersion": {
+            "Description": "Metabase Version",
+            "Type": "String",
+            "Default": "@@MB_TAG@@"
+        },
+        "KeyName": {
+            "Description": "Name of an existing EC2 KeyPair to enable SSH access to the AWS Elastic Beanstalk instance",
+            "Type": "AWS::EC2::KeyPair::KeyName"
+        },
+        "instanceType": {
+            "Description": "The Type of EC2 instance to use for running Metabase",
+            "Type": "String",
+            "Default": "t2.small"
+        },
+        "VPCid": {
+            "Description": "The VPC to use for running Metabase",
+            "Type": "AWS::EC2::VPC::Id"
+        },
+        "Subnets": {
+            "Description": "The VPC subnet(s) to use for running Metabase",
+            "Type": "List<AWS::EC2::Subnet::Id>"
+        }
+    },
+    "Resources": {
+        "metabaseApplication": {
+            "Type": "AWS::ElasticBeanstalk::Application",
+            "Properties": {
+                "Description": "Metabase Application",
+                "ApplicationVersions": [
+                    {
+                        "VersionLabel": {
+                            "Ref": "MetabaseVersion"
+                        },
+                        "Description": "Metabase Application Version",
+                        "SourceBundle": {
+                            "S3Bucket": "downloads.metabase.com",
+                            "S3Key": {
+                                "Fn::Join": [
+                                    "/",
+                                    [
+                                        {
+                                            "Ref": "MetabaseVersion"
+                                        },
+                                        "metabase-aws-eb.zip"
+                                    ]
+                                ]
+                            }
+                        }
+                    }
+                ],
+                "ConfigurationTemplates": [
+                    {
+                        "TemplateName": "MetabaseConfiguration",
+                        "Description": "Metabase Application Configuration",
+                        "SolutionStackName": "64bit Amazon Linux 2017.03 v2.7.0 running Docker 17.03.1-ce",
+                        "OptionSettings": [
+                            {
+                                "Namespace": "aws:autoscaling:launchconfiguration",
+                                "OptionName": "EC2KeyName",
+                                "Value": {
+                                    "Ref": "KeyName"
+                                }
+                            },
+                            {
+                                "Namespace": "aws:rds:dbinstance",
+                                "OptionName": "DBEngine",
+                                "Value": "postgres"
+                            },
+                            {
+                                "Namespace": "aws:rds:dbinstance",
+                                "OptionName": "DBAllocatedStorage",
+                                "Value": "10"
+                            },
+                            {
+                                "Namespace": "aws:rds:dbinstance",
+                                "OptionName": "DBInstanceClass",
+                                "Value": "db.t2.small"
+                            },
+                            {
+                                "Namespace": "aws:rds:dbinstance",
+                                "OptionName": "MultiAZDatabase",
+                                "Value": "false"
+                            },
+                            {
+                                "Namespace": "aws:rds:dbinstance",
+                                "OptionName": "DBDeletionPolicy",
+                                "Value": "Snapshot"
+                            },
+                            {
+                                "Namespace": "aws:autoscaling:launchconfiguration",
+                                "OptionName": "InstanceType",
+                                "Value": {
+                                    "Ref": "instanceType"
+                                }
+                            },
+                            {
+                                "Namespace": "aws:ec2:vpc",
+                                "OptionName": "VPCId",
+                                "Value": {
+                                    "Ref": "VPCid"
+                                }
+                            },
+                            {
+                                "Namespace": "aws:ec2:vpc",
+                                "OptionName": "Subnets",
+                                "Value": {
+                                    "Fn::Join": [
+                                        ",",
+                                        {
+                                            "Ref": "Subnets"
+                                        }
+                                    ]
+                                }
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        "metabaseEnvironment": {
+            "Type": "AWS::ElasticBeanstalk::Environment",
+            "Properties": {
+                "ApplicationName": {
+                    "Ref": "metabaseApplication"
+                },
+                "Description": "AWS Elastic Beanstalk Environment for Metabase",
+                "TemplateName": "MetabaseConfiguration",
+                "VersionLabel": {
+                    "Ref": "MetabaseVersion"
+                }
+            }
+        }
+    },
+    "Outputs": {
+        "URL": {
+            "Description": "Metabase URL",
+            "Value": {
+                "Fn::GetAtt": [
+                    "metabaseEnvironment",
+                    "EndpointURL"
+                ]
+            }
+        }
+    }
+}
diff --git a/bin/aws-eb-docker/functions b/bin/aws-eb-docker/functions
index 70e776495087df0c7d2a68917230b2b1146f7af3..deb0bb26719ce04ef27ebde0367e45d91a66889d 100644
--- a/bin/aws-eb-docker/functions
+++ b/bin/aws-eb-docker/functions
@@ -12,6 +12,9 @@ export LANG=en_US.UTF-8
 export LANGUAGE=$LANG
 export LC_ALL=$LANG
 
+CF_TEMPLATE=cloudformation-elasticbeanstalk.json
+CF_TEMPLATE_PATH=/tmp/$CF_TEMPLATE
+S3_CF_TEMPLATE_PATH=s3://$ARTIFACTS_S3BUCKET/eb/$CF_TEMPLATE
 
 make_eb_version() {
     MB_TAG=$1
@@ -37,6 +40,9 @@ make_eb_version() {
     sed "s/@@MB_REPOSITORY@@/${MB_DOCKER_REPOSITORY}/" < ${BASEDIR}/Dockerrun.aws.json.template > ${BASEDIR}/Dockerrun.aws.json.tmp
     sed "s/@@MB_TAG@@/${MB_TAG}/" < ${BASEDIR}/Dockerrun.aws.json.tmp > ${BASEDIR}/Dockerrun.aws.json
 
+    # set the default version in the cloudformation template from the template-template (yo dawg i heard you like templates ;)
+    sed "s/@@MB_TAG@@/${MB_TAG}/" < ${BASEDIR}/$CF_TEMPLATE.template > $CF_TEMPLATE_PATH
+
     # create our EB zip file
     cd $BASEDIR; zip -r ${RELEASE_FILE} .ebextensions Dockerrun.aws.json; cd $CURRENTDIR
 
@@ -57,6 +63,10 @@ upload_eb_version() {
 
     echo "uploading /tmp/${MB_TAG}.zip -> $ARTIFACTS_S3BUCKET/eb/"
     aws s3 cp /tmp/${MB_TAG}.zip s3://$ARTIFACTS_S3BUCKET/eb/${MB_TAG}.zip
+
+    echo "uploading $CF_TEMPLATE_PATH -> $S3_CF_TEMPLATE_PATH"
+    aws s3 cp $CF_TEMPLATE_PATH $S3_CF_TEMPLATE_PATH
+
 }
 
 create_eb_version() {
diff --git a/bin/ci b/bin/ci
index 71f0748400d49527e2c1ddae35702b49c6666f01..a461187df7c94fd125108a2d60e655c452f1cc71 100755
--- a/bin/ci
+++ b/bin/ci
@@ -8,7 +8,7 @@ node-0() {
     if is_engine_enabled "mongo"; then
         run_step install-mongodb
     fi
-    run_step lein-test
+    MB_MYSQL_TEST_USER=ubuntu run_step lein-test
 }
 node-1() {
     is_enabled "drivers" && export ENGINES="h2,sqlserver,oracle" || export ENGINES="h2"
@@ -27,7 +27,7 @@ node-2() {
         run_step install-presto
     fi
     MB_ENCRYPTION_SECRET_KEY='Orw0AAyzkO/kPTLJRxiyKoBHXa/d6ZcO+p+gpZO/wSQ=' MB_DB_TYPE=mysql MB_DB_DBNAME=circle_test MB_DB_PORT=3306 MB_DB_USER=ubuntu MB_DB_HOST=localhost \
-        MB_PRESTO_HOST=localhost MB_PRESTO_PORT=8080 \
+        MB_PRESTO_TEST_HOST=localhost MB_PRESTO_TEST_PORT=8080 MB_POSTGRESQL_TEST_USER=ubuntu \
         run_step lein-test
 }
 node-3() {
@@ -55,13 +55,20 @@ node-6() {
     if is_enabled "jar" || is_enabled "e2e" || is_enabled "screenshots"; then
         run_step ./bin/build version frontend-fast sample-dataset uberjar
     fi
-    if is_enabled "e2e" || is_enabled "compare_screenshots"; then
-        USE_SAUCE=true \
-            run_step yarn run test-e2e
-    fi
-    if is_enabled "screenshots"; then
-        run_step node_modules/.bin/babel-node ./bin/compare-screenshots
+
+    # NOTE Atte Keinänen 6/23/17: Reuse the existing E2E infra for running integrated tests (they require the prebuild jar too)
+    if is_enabled "e2e"; then
+        run_step yarn run test-integrated
     fi
+
+    # TODO Atte Keinänen 6/22/17: Disabled due to Sauce problems, all tests will be converted to use Jest and Enzyme
+    # if is_enabled "e2e" || is_enabled "compare_screenshots"; then
+    #     USE_SAUCE=true \
+    #         run_step yarn run test-e2e
+    # fi
+    # if is_enabled "screenshots"; then
+    #     run_step node_modules/.bin/babel-node ./bin/compare-screenshots
+    # fi
 }
 
 
diff --git a/bin/docker/run_metabase.sh b/bin/docker/run_metabase.sh
index 93ef3fa837830f9486ba2db0f323f0bb0cae667e..cd2eb1c3d0da1955818c8917db6261759fbd6973 100755
--- a/bin/docker/run_metabase.sh
+++ b/bin/docker/run_metabase.sh
@@ -119,4 +119,4 @@ fi
 # Launch the application
 # exec is here twice on purpose to  ensure that metabase runs as PID 1 (the init process)
 # and thus receives signals sent to the container. This allows it to shutdown cleanly on exit
-exec su metabase -s /bin/sh -c "exec java $JAVA_OPTS -jar /app/metabase.jar"
+exec su metabase -s /bin/sh -c "exec java $JAVA_OPTS -jar /app/metabase.jar $@"
diff --git a/docs/administration-guide/03-metadata-editing.md b/docs/administration-guide/03-metadata-editing.md
index dae0d82a0c875637edb71bcde11ce04e36550cad..ecda1bad02a5280d93ad3fcf502ced2ebaec2676 100644
--- a/docs/administration-guide/03-metadata-editing.md
+++ b/docs/administration-guide/03-metadata-editing.md
@@ -74,6 +74,24 @@ This is also where you set mark special fields in a table:
 * Entity Name — different from the entity key, this is the field whose heading represents what each row in the table *is*. For example, in a Users table, the User column might be the entity name.
 * Foreign Key — this is a field in this table that uniquely identifies a *row* in another table. In other words, this is a field that, almost always, points to the primary key of another table. For example, in a Products table, you might have a Customer ID field that points to a Customers table, where Customer ID is the primary key.
 
+### Remapping field values
+One thing that happens commonly in tables is that you'll have a foreign key field, like `Product ID`, with a bunch of ID values in it, when what you actually want to see most of the time is the entity name, like the `Product Title`. You might also have fields which contain coded values that you'd prefer to show up as translated or readable values in your tables and charts — like changing `0`, `1`, and `2` to `Female`, `Male`, and `Other` for example.
+
+To do this in Metabase, click on the gear icon to the right of a field's Type dropdown in the Data Model section of the Admin Panel. You'll see a form with these options:
+
+![Remapping form](./images/remapping/form.png)
+
+`Visibility` and `Type` are the same as on the main Data Model page, but `Display values` lets you choose to swap out a field's values with something else.
+
+Foreign key remapping lets you swap out a foreign key's values with the values of any other field in the connected table. In this example, we're swapping out the `Product ID` field's values with the values in the `Title` field in the Product table:
+
+![Remapping form](./images/remapping/fk-mapping.png)
+
+Another option is custom remapping, which is currently only possible for numeric fields. This lets you map every number that occurs in this field to either a different numeric value or even to a text value, like in this example:
+
+![Remapping form](./images/remapping/custom-mapping.png)
+
+
 ---
 
 ## Next: managing users
diff --git a/docs/administration-guide/databases/vertica.md b/docs/administration-guide/databases/vertica.md
index f17768e780b14505af3d9a6c9b55aae8c05c48f7..a7b1491abccbbfa3ba50a51937b8fac40fe558ae 100644
--- a/docs/administration-guide/databases/vertica.md
+++ b/docs/administration-guide/databases/vertica.md
@@ -36,4 +36,5 @@ If you're running Metabase from the Mac App, the plugins directory defaults to `
 /Users/camsaul/Library/Application Support/Metabase/Plugins/vertica-jdbc-8.0.0-0.jar
 ```
 
-Finally, you can choose a custom plugins directory if the default doesn't suit your needs by setting the environment variable `MB_PLUGINS_DIR`.
+If you are running the Docker image or you want to use another directory for plugins, you should then specify a custom plugins directory by setting the environment variable `MB_PLUGINS_DIR`. 
+
diff --git a/docs/administration-guide/images/remapping/custom-mapping.png b/docs/administration-guide/images/remapping/custom-mapping.png
new file mode 100644
index 0000000000000000000000000000000000000000..149d59a19b5fc200574b1b2f559f27edf059983f
Binary files /dev/null and b/docs/administration-guide/images/remapping/custom-mapping.png differ
diff --git a/docs/administration-guide/images/remapping/fk-mapping.png b/docs/administration-guide/images/remapping/fk-mapping.png
new file mode 100644
index 0000000000000000000000000000000000000000..483c129b2bad062dd9525ebaaa922ddd41924558
Binary files /dev/null and b/docs/administration-guide/images/remapping/fk-mapping.png differ
diff --git a/docs/administration-guide/images/remapping/form.png b/docs/administration-guide/images/remapping/form.png
new file mode 100644
index 0000000000000000000000000000000000000000..4782d908d01a0d9b0b62a258f0956691aa4dd751
Binary files /dev/null and b/docs/administration-guide/images/remapping/form.png differ
diff --git a/docs/api-documentation.md b/docs/api-documentation.md
index 65de1da123cf064922ec7ea94982e8304d44186f..cc23fffd5a56d5be31d344cfaf6074e891da5654 100644
--- a/docs/api-documentation.md
+++ b/docs/api-documentation.md
@@ -1193,7 +1193,7 @@ Fetch the results for a Card in a publically-accessible Dashboard. Does not requ
 
 ## `GET /api/public/oembed`
 
-oEmbed endpoint used to retreive embed code and metadata for a (public) Metabase URL.
+oEmbed endpoint used to retrieve embed code and metadata for a (public) Metabase URL.
 
 ##### PARAMS:
 
@@ -1709,7 +1709,7 @@ Fetch the current `User`.
 
 ## `POST /api/user/`
 
-Create a new `User`, or or reäctivate an existing one.
+Create a new `User`, or or reactivate an existing one.
 
 You must be a superuser to do this.
 
@@ -1783,7 +1783,7 @@ You must be a superuser to do this.
 
 ## `GET /api/util/random_token`
 
-Return a cryptographically secure random 32-byte token, encoded as a hexidecimal string.
+Return a cryptographically secure random 32-byte token, encoded as a hexadecimal string.
    Intended for use when creating a value for `embedding-secret-key`.
 
 
@@ -1801,4 +1801,4 @@ Endpoint that checks if the supplied password meets the currently configured pas
 
 ##### PARAMS:
 
-*  **`password`** Insufficient password strength
\ No newline at end of file
+*  **`password`** Insufficient password strength
diff --git a/docs/operations-guide/running-metabase-on-docker.md b/docs/operations-guide/running-metabase-on-docker.md
index 0e2821f9df9bc3cb1e59d94fc8636bc5cb950270..940c430829e0f26c736bc848a631c63179e71145 100644
--- a/docs/operations-guide/running-metabase-on-docker.md
+++ b/docs/operations-guide/running-metabase-on-docker.md
@@ -2,6 +2,8 @@
 
 Metabase provides an official Docker image via Dockerhub that can be used for deployments on any system that is running Docker.
 
+If you're trying to upgrade your Metabase version on Docker, check out these [upgrading instructions](./start.md#upgrading-metabase).
+
 ### Launching Metabase on a new container
 
 Here's a quick one-liner to get you off the ground (please note, we recommend further configuration for production deployments below):
@@ -69,7 +71,35 @@ In this scenario all you need to do is make sure you launch Metabase with the co
 
 Keep in mind that Metabase will be connecting from within your docker container, so make sure that either you're using a fully qualified hostname or that you've set a proper entry in your container's `/etc/hosts file`.
 
-See instructions for [migrating from H2 to MySQL or Postgres](./start.md#migrating-from-using-the-h2-database-to-mysql-or-postgres).
+### Migrating from H2 to Postgres as the Metabase application database
+
+For general information, see instructions for [migrating from H2 to MySQL or Postgres](./start.md#migrating-from-using-the-h2-database-to-mysql-or-postgres).
+
+To migrate an existing Metabase container from an H2 application database to another database container (e.g. Postgres, MySQL), there are a few considerations to keep in mind:
+
+* The target database container must be accessible (i.e. on an available network)
+* The target database container must be supported (e.g. MySQL, Postgres)
+* The existing H2 database should be [mapped outside the running container](#mounting-a-mapped-file-storage-volume)
+
+The migration process involves 2 main steps:
+
+1. Stop the existing Metabase container
+2. Run a new, temporary Metabase container to perform the migration
+
+Using a Postgres container as the target, here's an example invocation:
+
+    docker run --name metabase-migration \
+        -v /path/metabase/data:/metabase-data \
+        -e "MB_DB_FILE=/metabase-data/metabase.db" \
+        -e "MB_DB_TYPE=postgres" \
+        -e "MB_DB_DBNAME=metabase" \
+        -e "MB_DB_PORT=5432" \
+        -e "MB_DB_USER=<username>" \
+        -e "MB_DB_PASS=<password>" \
+        -e "MB_DB_HOST=my-database-host" \
+        metabase/metabase load-from-h2
+
+To further explain the example: in addition to specifying the target database connection details, set the `MB_DB_FILE` environment variable for the source H2 database location, and pass the argument `load-from-h2` to begin migrating.
 
 ### Setting the Java Timezone
 
@@ -103,12 +133,12 @@ The DB contents will be left in a directory named metabase.db.
 Note that some older versions of metabase stored their db in a different default location.
 
     docker cp CONTAINER_ID:/metabase.db.mv.db metabase.db.mv.db
-    
+
 ### Fixing OutOfMemoryErrors in some hosted environments
 
 On some hosts Metabase can fail to start with an error message like:
 
     java.lang.OutOfMemoryError: Java heap space
-    
+
 If that happens, you'll need to set a JVM option to manually configure the maximum amount of memory the JVM uses for the heap. Refer
 to [these instructions](./start.md#metabase-fails-to-start-due-to-heap-space-outofmemoryerrors) for details on how to do that.
diff --git a/docs/operations-guide/start.md b/docs/operations-guide/start.md
index fbbf600b1ec094d4f09f3d06bd2e31fd40d8bcb5..1ad0822d8a3f1257c423ddd38d522538ffc23bbd 100644
--- a/docs/operations-guide/start.md
+++ b/docs/operations-guide/start.md
@@ -43,7 +43,7 @@ Community support only at this time, but we have reports of Metabase instances r
 
 # Upgrading Metabase
 
-Before you attempt to upgrade Metabase, you should make a backup of the database just in case. While it is unlikely you will need to rollback, it will do wonders for your peace of mind.
+Before you attempt to upgrade Metabase, you should make a backup of the application database just in case. While it is unlikely you will need to roll back, it will do wonders for your peace of mind.
 
 How you upgrade Metabase depends on how you are running it. See below for information on how to update Metabase on managed platforms.
 
@@ -51,14 +51,14 @@ How you upgrade Metabase depends on how you are running it. See below for inform
 
 
 #### Docker Image
-If you are running it via docker, then you simply kill the docker process, and start a new container with the latest image. On startup, Metabase will perform any upgrade tasks it needs to perform, and once it is finished, you'll be running the new version.
+If you are running Metabase via docker, then you simply need to kill the Docker process and start a new container with the latest Metabase image. On startup, Metabase will perform any upgrade tasks it needs to perform, and once it's finished you'll be running the new version.
 
 #### Jar file
-If you are running the JVM Jar file directly, then you simply kill the process, and restart the server. On startup, Metabase will perform any upgrade tasks it needs to perform, and once it is finished, you'll be running the new version.
+If you are running the JVM Jar file directly, then you simply kill the process and restart the server. On startup, Metabase will perform any upgrade tasks it needs to perform, and once it's finished you'll be running the new version.
 
 
-#### Mac OS X Application
-If you are using the Metabase app, you will be notified when there is a new version available. You will see a dialog displaying the changes in the latest version and prompt you to upgrade.
+#### macOS Application
+If you are using the Metabase macOS app, you will be notified when there is a new version available. You will see a dialog displaying the changes in the latest version and prompting you to upgrade.
 
 ![Autoupdate Confirmation Dialog](images/AutoupdateScreenshot.png)
 
@@ -113,7 +113,7 @@ You'll just need to set a JVM option to let it know explicitly how much memory i
 
     java -Xmx2g -jar metabase.jar
 
-Adjust this number as appropriate for your shared hosting instance. Make sure to set the number lower than the total amount of RAM available on your instance, because Metabase isn't the only process that'll be running. Generally, leaving 1-2 GB of RAM for these other processes should be enough; for example, you might set `-Xmx` to `1g` for an instance with 2 GB of RAM, `2g` for one with 4 GB of RAM, `6g` for an instance with 8 GB of RAM, and so forth. You may need to experment with these settings a bit to find the right number.
+Adjust this number as appropriate for your shared hosting instance. Make sure to set the number lower than the total amount of RAM available on your instance, because Metabase isn't the only process that'll be running. Generally, leaving 1-2 GB of RAM for these other processes should be enough; for example, you might set `-Xmx` to `1g` for an instance with 2 GB of RAM, `2g` for one with 4 GB of RAM, `6g` for an instance with 8 GB of RAM, and so forth. You may need to experiment with these settings a bit to find the right number.
 
 As above, you can use the environment variable `JAVA_TOOL_OPTIONS` to set JVM args instead of passing them directly to `java`. This is useful when running the Docker image,
 for example.
@@ -128,7 +128,7 @@ On Windows 10, if you see an error message like
 
     Exception in thread "main" java.lang.AssertionError: Assert failed: Unable to connect to Metabase DB.
 
-when running the JAR, you can unblock the file by right-clicking, clicking "Properties", and then clicking "Unblock".
+when running the JAR, you can unblock the file by right-clicking, clicking "Properties," and then clicking "Unblock."
 See Microsoft's documentation [here](https://blogs.msdn.microsoft.com/delay/p/unblockingdownloadedfile/) for more details on unblocking downloaded files.
 
 There are a few other reasons why Metabase might not be able to connect to your H2 DB. Metabase connects to the DB over a TCP port, and it's possible
diff --git a/docs/users-guide/04-asking-questions.md b/docs/users-guide/04-asking-questions.md
index 767576f96741d1ab034ac8498c8ff93d5f55c024..60f5725b26e495a119c4fa1965c4f5cb61c70c94 100644
--- a/docs/users-guide/04-asking-questions.md
+++ b/docs/users-guide/04-asking-questions.md
@@ -1,15 +1,23 @@
 
-## Asking Questions
+## Asking questions
 ---
-Metabase's two core concepts are questions and their corresponding answers. Everything else is based around questions and answers. To ask Metabase a question, click the New Question button at the top of the screen to go to the question builder.  
+Metabase's two core concepts are questions and their corresponding answers. Everything else is based around questions and answers. To ask Metabase a question, click the New Question button at the top of the screen to go to the question builder. (Note: to [create a new SQL query](04-asking-questions.html#using-sql), click the console icon in the top right of the new question screen.)
 
 ![queryinterfacebar](images/QueryInterfaceBar.png)
 
 Questions are made up of a number of parts: source data, filters, and answer output.
 
-### Source Data
+### Source data
 ---
-All of the data in databases are in tables. Typically, tables will be named for the thing that each row in the table contains. For example, in a Customers table, each row in the table would represent a single customer. This means that when you’re thinking about how to phrase your question, you’ll need to decide what your question is about, and which table has that information in it. The first dropdown menu in the question builder is where you’ll choose the table you want.  
+All of the data in databases are in tables. Typically, tables will be named for the thing that each row in the table contains. For example, in a Customers table, each row in the table would represent a single customer. This means that when you’re thinking about how to phrase your question, you’ll need to decide what your question is about, and which table has that information in it.
+
+The first dropdown menu in the question builder is where you’ll choose the database and table you want.
+
+#### Using saved questions as source data
+
+If you've [saved some questions](06-sharing-answers.html), in the Data menu you'll see the option to use one of your saved questions as source data. What this means in practice is that you can do things like use complex SQL queries to create new tables that can be used in a question just like any other table in your database.
+
+You can use any saved question as source data, provided you have [permission](../administration-guide/05-setting-permissions.html) to view that question. You can even use questions that were saved as a chart rather than a table. The only caveat is that you can't use a saved question which itself uses a saved question as source data. (That's more inception than Metabase can handle!)
 
 ### Filters
 ---
@@ -47,7 +55,7 @@ Now the relative date will be referencing the past 30 days from *today*, *not* f
 #### Using segments
 If your Metabase admins have created special named filters, called segments, for the table you’re viewing, they’ll appear at the top of the filter dropdown in purple text with a star next to them. These are shortcuts to sets of filters that are commonly used in your organization. They might be something like “Active Users,” or “Most Popular Products.”
 
-### Answer Output
+### Answer output
 ---
 The last section of the question builder is where you select what you want the output of your answer to be, under the View dropdown. You’re basically telling Metabase, “I want to view the…” Metabase can output the answer to your question in four different ways:
 
diff --git a/docs/users-guide/09-multi-series-charting.md b/docs/users-guide/09-multi-series-charting.md
index bec40797ed17296cd0682e75b142695c5b664429..f626a7d641e247ff534e6490deb208321614a3fb 100644
--- a/docs/users-guide/09-multi-series-charting.md
+++ b/docs/users-guide/09-multi-series-charting.md
@@ -30,7 +30,7 @@ If you already have two or more saved questions you’d like to compare, and the
 
 ![multiseriesmodal1](images/MultiSeriesModal1.png)
 
-The X and Y axis will automagically update if necessary and Metabase will create a legend using the existing card titles to help you understand which question maps to which series on the chart. Repeat this process as many times as you need.
+The X and Y axis will automatically update if necessary and Metabase will create a legend using the existing card titles to help you understand which question maps to which series on the chart. Repeat this process as many times as you need.
 
 To remove a series either uncheck the box, or click the x next to the title in the legend above the chart.
 
diff --git a/docs/users-guide/11-metabot.md b/docs/users-guide/11-metabot.md
index f1100861552b2c63d0d92db39de939e4a3bef973..bb58fbdeb55fd34c350a039f6970a9821d7768f0 100644
--- a/docs/users-guide/11-metabot.md
+++ b/docs/users-guide/11-metabot.md
@@ -1,43 +1,45 @@
 ## Getting answers in Slack with MetaBot
 
-You can already send data to Slack on  a set schedule via [Pulses](10-pulses.md) but what about when you need an answer right now? Say hello to MetaBot.
+You can already send data to Slack on a set schedule with [Pulses](10-pulses.md), but what about when you need an answer right now? Say hello to MetaBot.
 
 MetaBot helps add context to conversations you’re having in Slack by letting you insert results from Metabase.
 
 ### Connecting to Slack.
 To use MetaBot with Slack you’ll first need to connect Metabase to your Slack with an API token.
 
-See [Setting up Slack](http://www.metabase.com/docs/latest/administration-guide/07-setting-up-slack) for more information.
+See [Setting up Slack](../administration-guide/09-setting-up-slack.md) for more information.
 
 
 ### What can MetaBot do?
-
 MetaBot can show individual questions and also lists of questions that have already been asked in Metabase.
 
 If you ever need help remembering what MetaBot can do, just type ```metabot help``` in Slack.
 
 ![MetaBot help](images/metabot/MetabotHelp.png)
 
+### Where can I use MetaBot?
+You can talk to MetaBot in any Slack channel, including private ones, as long as you've invited the MetaBot Slack user to that channel.
+
 ### Showing questions
 
 To see a question from Metabase in Slack type
-'''metabot show "<question-name>"''' where question name is the title of one of saved questions. If you have several similarly named questions Metabot will ask you to differentiate between the two by typing the number next to the name.
+```metabot show [question name]``` where ```question name``` is the title of one of your saved questions. If you have several similarly named questions, Metabot will ask you to differentiate between the two by typing the number next to the name.
 
 ![MetaBot similar](images/metabot/MetabotSimilarItems.png)
 
-That number is the ID number of the question in Metabase and if you find yourself using the same question over and over again you can save a bit of time by typing “MetaBot show 19.”
+That number is the ID number of the question in Metabase, and if you find yourself using the same question over and over again you can save a bit of time by typing “MetaBot show 19.”
 
 ![MetaBot show](images/metabot/MetabotShow.png)
 
 ## Listing questions
-If you don’t have a sense of which questions you want to view in  Slack, you can type ```MetaBot list``` to get a list of recent questions from your Metabase.
+If you don’t have a sense of which questions you want to view in  Slack, you can type ```MetaBot list``` to get a list of the most recently saved questions in your Metabase.
 
 ![MetaBot show](images/metabot/MetabotList.png)
 
 
 ## To review
 
-- [Connect to Slack](10-pulses.md) to start using MetaBot.
+- [Connect to Slack](../administration-guide/09-setting-up-slack.md) to start using MetaBot.
 - Show data from Metabase in Slack using ```metabot show <question-id>```
 - Search for questions by typing ```metabot show <search-term>```
 - Get a list of questions by typing ```metabot list```
diff --git a/frontend/interfaces/underscore.js b/frontend/interfaces/underscore.js
index d5c7251adc744a4f6fd045eba1a393d6b20327a2..8b3511ac04ba9054b193152dff50dbb5dc1a3333 100644
--- a/frontend/interfaces/underscore.js
+++ b/frontend/interfaces/underscore.js
@@ -56,6 +56,7 @@ declare module "underscore" {
   declare function pick(o: {[key: any]: any}, ...properties: string[]): {[key: any]: any};
   declare function pick(o: {[key: any]: any}, predicate: (val: any, key: any, object: {[key: any]: any})=>boolean): {[key: any]: any};
   declare function pluck(o: Array<{[key: any]: any}>, propertyNames: string): Array<any>;
+  declare function has(o: {[key: any]: any}, ...properties: string[]): boolean;
 
   declare function difference<T>(array: T[], ...others: T[][]): T[];
 
diff --git a/frontend/src/metabase-lib/lib/Dimension.js b/frontend/src/metabase-lib/lib/Dimension.js
index 37af20f62a411978fb4f586e44446ddbd2f7a421..b8dd64b6f371108fe3448f3b8bffacba44dd28c4 100644
--- a/frontend/src/metabase-lib/lib/Dimension.js
+++ b/frontend/src/metabase-lib/lib/Dimension.js
@@ -32,7 +32,7 @@ type DimensionOption = {
 /**
  * Dimension base class, represents an MBQL field reference.
  *
- * Used for displaying fields (like Created At) and their "sub-dimensions" (like Hour of day)
+ * Used for displaying fields (like Created At) and their "sub-dimensions" (like Created At by Day)
  * in field lists and active value widgets for filters, aggregations and breakouts.
  *
  * @abstract
@@ -338,7 +338,8 @@ export class FieldIDDimension extends FieldDimension {
     }
 
     field() {
-        return this._metadata.fields[this._args[0]] || new Field();
+        return (this._metadata && this._metadata.fields[this._args[0]]) ||
+            new Field();
     }
 }
 
@@ -375,7 +376,8 @@ export class FKDimension extends FieldDimension {
     }
 
     field() {
-        return this._metadata.fields[this._args[0]] || new Field();
+        return (this._metadata && this._metadata.fields[this._args[0]]) ||
+            new Field();
     }
 
     render() {
diff --git a/frontend/src/metabase-lib/lib/Mode.spec.js b/frontend/src/metabase-lib/lib/Mode.spec.js
index 07b6685b065416f6812b18e8bbc3ef709da51f73..7591a8d6f9ca6e08251903993673d9d336d4cf31 100644
--- a/frontend/src/metabase-lib/lib/Mode.spec.js
+++ b/frontend/src/metabase-lib/lib/Mode.spec.js
@@ -56,39 +56,31 @@ describe("Mode", () => {
 
     describe("actions()", () => {
         describe("for a new question with Orders table and Raw data aggregation", () => {
+            pending();
             it("returns a correct number of mode actions", () => {
-                expect(rawDataQuestionMode.actions().length).toBe(4);
+                expect(rawDataQuestionMode.actions().length).toBe(3);
             });
-            it("returns 'View this as a table' as mode action 1", () => {
+            it("returns a defined metric as mode action 1", () => {
                 expect(rawDataQuestionMode.actions()[0].name).toBe(
-                    "underlying-data"
-                );
-                expect(rawDataQuestionMode.actions()[0].icon).toBe("table");
-                expect(rawDataQuestionMode.actions()[0].title).toBe(
-                    "View this as a table"
-                );
-            });
-            it("returns a defined metric as mode action 2", () => {
-                expect(rawDataQuestionMode.actions()[1].name).toBe(
                     "common-metric"
                 );
                 // TODO: Sameer 6/16/17
                 // This is wack and not really testable. We shouldn't be passing around react components in this imo
                 // expect(question.actions()[1].title.props.children).toBe("Total Order Value");
             });
-            it("returns a count timeseries as mode action 3", () => {
-                expect(rawDataQuestionMode.actions()[2].name).toBe(
+            it("returns a count timeseries as mode action 2", () => {
+                expect(rawDataQuestionMode.actions()[1].name).toBe(
                     "count-by-time"
                 );
-                expect(rawDataQuestionMode.actions()[2].icon).toBe("line");
+                expect(rawDataQuestionMode.actions()[1].icon).toBe("line");
                 // TODO: Sameer 6/16/17
                 // This is wack and not really testable. We shouldn't be passing around react components in this imo
                 // expect(question.actions()[2].title.props.children).toBe("Count of rows by time");
             });
-            it("returns summarize as mode action 4", () => {
-                expect(rawDataQuestionMode.actions()[3].name).toBe("summarize");
-                expect(rawDataQuestionMode.actions()[3].icon).toBe("sum");
-                expect(rawDataQuestionMode.actions()[3].title).toBe(
+            it("returns summarize as mode action 3", () => {
+                expect(rawDataQuestionMode.actions()[2].name).toBe("summarize");
+                expect(rawDataQuestionMode.actions()[2].icon).toBe("sum");
+                expect(rawDataQuestionMode.actions()[2].title).toBe(
                     "Summarize this segment"
                 );
             });
diff --git a/frontend/src/metabase-lib/lib/Question.js b/frontend/src/metabase-lib/lib/Question.js
index 257573e7902666ee9ce80caba22c3969c37aa820..c4fa66fbc4f50de784e7efe1c0885594ef54760e 100644
--- a/frontend/src/metabase-lib/lib/Question.js
+++ b/frontend/src/metabase-lib/lib/Question.js
@@ -278,6 +278,10 @@ export default class Question {
         return this._card && this._card.name;
     }
 
+    setDisplayName(name: String) {
+        return this.setCard(assoc(this.card(), "name", name));
+    }
+
     id(): number {
         return this._card && this._card.id;
     }
@@ -308,17 +312,21 @@ export default class Question {
     async getResults(
         { cancelDeferred, isDirty = false, ignoreCache = false } = {}
     ): Promise<[Dataset]> {
+        // TODO Atte Keinänen 7/5/17: Should we clean this query with Query.cleanQuery(query) before executing it?
+
         const canUseCardApiEndpoint = !isDirty && this.isSaved();
 
-        const parametersList = this.parametersList().map(param =>
-            _.pick(param, "target", "type", "value"));
-        const hasParameters = parametersList.length > 0;
+        const parameters = this.parametersList()
+            // include only parameters that have a value applied
+            .filter(param => _.has(param, "value"))
+            // only the superset of parameters object that API expects
+            .map(param => _.pick(param, "type", "target", "value"));
 
         if (canUseCardApiEndpoint) {
             const queryParams = {
                 cardId: this.id(),
                 ignore_cache: ignoreCache,
-                ...(hasParameters ? { parameters: parametersList } : {})
+                parameters
             };
 
             return [
@@ -330,7 +338,7 @@ export default class Question {
             const getDatasetQueryResult = datasetQuery => {
                 const datasetQueryWithParameters = {
                     ...datasetQuery,
-                    ...(hasParameters ? { parameters: parametersList } : {})
+                    parameters
                 };
 
                 return MetabaseApi.dataset(
@@ -384,7 +392,9 @@ export default class Question {
                 return false;
             }
         } else {
-            const origCardSerialized = originalQuestion._serializeForUrl();
+            const origCardSerialized = originalQuestion._serializeForUrl({
+                includeOriginalCardId: false
+            });
             const currentCardSerialized = this._serializeForUrl({
                 includeOriginalCardId: false
             });
diff --git a/frontend/src/metabase-lib/lib/Question.spec.js b/frontend/src/metabase-lib/lib/Question.spec.js
index b50c571091e15267c50ab776fea1aae90de5bd6a..0a47c29840c57f5d44c3f7512ed8fc7245045958 100644
--- a/frontend/src/metabase-lib/lib/Question.spec.js
+++ b/frontend/src/metabase-lib/lib/Question.spec.js
@@ -35,7 +35,7 @@ describe("Question", () => {
                 expect(question.canRun()).toBe(true);
             });
             it("has correct display settings", () => {
-                expect(question.display()).toBeUndefined();
+                expect(question.display()).toBe("table");
             });
             it("has correct mode", () => {
                 expect(question.mode().name()).toBe("segment");
@@ -162,6 +162,24 @@ describe("Question", () => {
         });
     });
 
+    describe("CARD METHODS", () => {
+        describe("card()", () => {
+            it("A question wraps a query/card and you can see the underlying card with card()", () => {
+                const question = new Question(metadata, orders_raw_card);
+                expect(question.card()).toEqual(orders_raw_card);
+            });
+        });
+
+        describe("setCard(card)", () => {
+            it("changes the underlying card", () => {
+                const question = new Question(metadata, orders_raw_card);
+                expect(question.card()).toEqual(orders_raw_card);
+                const newQustion = question.setCard(orders_count_by_id_card);
+                expect(question.card()).toEqual(orders_raw_card);
+                expect(newQustion.card()).toEqual(orders_count_by_id_card);
+            });
+        });
+    });
     describe("RESETTING METHODS", () => {
         describe("withoutNameAndId()", () => {
             it("unsets the name and id", () => {
@@ -535,7 +553,16 @@ describe("Question", () => {
         });
     });
 
-    fdescribe("COMPARISON TO OTHER QUESTIONS", () => {
+    describe("QUESTION EXECUTION", () => {
+        describe("getResults()", () => {
+            it("executes correctly a native query with field filter parameters", () => {
+                pending();
+                // test also here a combo of parameter with a value + parameter without a value + parameter with a default value
+            });
+        });
+    });
+
+    describe("COMPARISON TO OTHER QUESTIONS", () => {
         describe("isDirtyComparedTo(question)", () => {
             it("New questions are automatically dirty", () => {
                 const question = new Question(metadata, orders_raw_card);
@@ -559,7 +586,7 @@ describe("Question", () => {
             it("returns a question with hash for an unsaved question", () => {
                 const question = new Question(metadata, orders_raw_card);
                 expect(question.getUrl()).toBe(
-                    "/question#eyJuYW1lIjoiUmF3IG9yZGVycyBkYXRhIiwiZGF0YXNldF9xdWVyeSI6eyJ0eXBlIjoicXVlcnkiLCJkYXRhYmFzZSI6MSwicXVlcnkiOnsic291cmNlX3RhYmxlIjoxfX19"
+                    "/question#eyJuYW1lIjoiUmF3IG9yZGVycyBkYXRhIiwiZGF0YXNldF9xdWVyeSI6eyJ0eXBlIjoicXVlcnkiLCJkYXRhYmFzZSI6MSwicXVlcnkiOnsic291cmNlX3RhYmxlIjoxfX0sImRpc3BsYXkiOiJ0YWJsZSIsInZpc3VhbGl6YXRpb25fc2V0dGluZ3MiOnt9fQ=="
                 );
             });
         });
diff --git a/frontend/src/metabase-lib/lib/metadata/Field.js b/frontend/src/metabase-lib/lib/metadata/Field.js
index efdf769982cc197e43e731cca262a68ac166db23..5ae5e0fd0ab99191e5c733519024b32a9d2ab449 100644
--- a/frontend/src/metabase-lib/lib/metadata/Field.js
+++ b/frontend/src/metabase-lib/lib/metadata/Field.js
@@ -105,4 +105,20 @@ export default class Field extends Base {
             return this.operators_lookup[op];
         }
     }
+
+    /**
+     * Returns a default breakout MBQL clause for this field
+     *
+     * Tries to look up a default subdimension (like "Created At: Day" for "Created At" field)
+     * and if it isn't found, uses the plain field id dimension (like "Product ID") as a fallback.
+     */
+    getDefaultBreakout = () => {
+        const fieldIdDimension = this.dimension();
+        const defaultSubDimension = fieldIdDimension.defaultDimension();
+        if (defaultSubDimension) {
+            return defaultSubDimension.mbql();
+        } else {
+            return fieldIdDimension.mbql();
+        }
+    };
 }
diff --git a/frontend/src/metabase-lib/lib/metadata/Table.spec.js b/frontend/src/metabase-lib/lib/metadata/Table.spec.js
index 72096dd81d475390932576e8e983056d4b90256b..c5576bb73a2383da2e19e4f9f979549394e145ce 100644
--- a/frontend/src/metabase-lib/lib/metadata/Table.spec.js
+++ b/frontend/src/metabase-lib/lib/metadata/Table.spec.js
@@ -24,12 +24,10 @@ describe("Table", () => {
     });
 
     describe("dimensions", () => {
-        /*
-        it('returns dimension fields', () => {
-            console.log(metadata)
-            expect(table.dimensions().length)
-        })
-        */
+        it("returns dimension fields", () => {
+            pending();
+            // expect(table.dimensions().length)
+        });
     });
 
     describe("date fields", () => {
diff --git a/frontend/src/metabase-lib/lib/queries/NativeQuery.spec.js b/frontend/src/metabase-lib/lib/queries/NativeQuery.spec.js
index f27098c5c1b88e6351146a40242d26b24fc84b70..b702964db51d7c504d8a515f3db0ebef15c355f3 100644
--- a/frontend/src/metabase-lib/lib/queries/NativeQuery.spec.js
+++ b/frontend/src/metabase-lib/lib/queries/NativeQuery.spec.js
@@ -160,7 +160,6 @@ describe("NativeQuery", () => {
                 const newQuery = makeQuery().updateQueryText(
                     "SELECT * from ORDERS where total < {{max_price}}"
                 );
-                console.log(newQuery.templateTags());
                 expect(newQuery.templateTags().length).toBe(1);
             });
         });
diff --git a/frontend/src/metabase/__support__/integrated_tests.js b/frontend/src/metabase/__support__/integrated_tests.js
index 9ae186f1facc79fd2c78c7f92ca4b0b77780f093..9a812221c2b1edfb48a3a97672dc9e31643a2c5b 100644
--- a/frontend/src/metabase/__support__/integrated_tests.js
+++ b/frontend/src/metabase/__support__/integrated_tests.js
@@ -4,8 +4,13 @@
  * Import this file before other imports in integrated tests
  */
 
+// Mocks in a separate file as they would clutter this file
+// This must be before all other imports
+import "./integrated_tests_mocks";
+
+import { format as urlFormat } from "url";
 import api from "metabase/lib/api";
-import { SessionApi } from "metabase/services";
+import { CardApi, SessionApi } from "metabase/services";
 import { METABASE_SESSION_COOKIE } from "metabase/lib/cookies";
 import reducers from 'metabase/reducers-main';
 
@@ -14,27 +19,58 @@ import { Provider } from 'react-redux';
 
 import { createMemoryHistory } from 'history'
 import { getStore } from "metabase/store";
-import { useRouterHistory } from "react-router";
+import { createRoutes, Router, useRouterHistory } from "react-router";
+import _ from 'underscore';
 
 // Importing isomorphic-fetch sets the global `fetch` and `Headers` objects that are used here
 import fetch from 'isomorphic-fetch';
 
-// Mocks in a separate file as they would clutter this file
-import "./integrated_tests_mocks";
+import { refreshSiteSettings } from "metabase/redux/settings";
+import { getRoutes } from "metabase/routes";
 
-// Stores the current login session
-var loginSession = null;
+let hasCreatedStore = false;
+let loginSession = null; // Stores the current login session
+let simulateOfflineMode = false;
 
 /**
  * Login to the Metabase test instance with default credentials
  */
 export async function login() {
-    loginSession = await SessionApi.create({ email: "bob@metabase.com", password: "12341234"});
+    if (hasCreatedStore) {
+        console.warn(
+            "Warning: You have created a test store before calling login() which means that up-to-date site settings " +
+            "won't be in the store unless you call `refreshSiteSettings` action manually. Please prefer " +
+            "logging in before all tests and creating the store inside an individual test or describe block."
+        )
+    }
+
+    if (process.env.SHARED_LOGIN_SESSION_ID) {
+        loginSession = { id: process.env.SHARED_LOGIN_SESSION_ID }
+    } else {
+        loginSession = await SessionApi.create({ username: "bob@metabase.com", password: "12341234"});
+    }
+}
+
+/**
+ * Calls the provided function while simulating that the browser is offline.
+ */
+export async function whenOffline(callWhenOffline) {
+    simulateOfflineMode = true;
+    return callWhenOffline()
+        .then((result) => {
+            simulateOfflineMode = false;
+            return result;
+        })
+        .catch((e) => {
+            simulateOfflineMode = false;
+            throw e;
+        });
 }
 
+
 // Patches the metabase/lib/api module so that all API queries contain the login credential cookie.
 // Needed because we are not in a real web browser environment.
-api._makeRequest = async (method, url, headers, body, data, options) => {
+api._makeRequest = async (method, url, headers, requestBody, data, options) => {
     const headersWithSessionCookie = {
         ...headers,
         ...(loginSession ? {"Cookie": `${METABASE_SESSION_COOKIE}=${loginSession.id}`} : {})
@@ -44,21 +80,42 @@ api._makeRequest = async (method, url, headers, body, data, options) => {
         credentials: "include",
         method,
         headers: new Headers(headersWithSessionCookie),
-        ...(body ? {body} : {})
+        ...(requestBody ? { body: requestBody } : {})
     };
 
-    const result = await fetch(api.basename + url, fetchOptions);
+    let isCancelled = false
+    if (options.cancelled) {
+        options.cancelled.then(() => {
+            isCancelled = true;
+        });
+    }
+    const result = simulateOfflineMode
+        ? { status: 0, responseText: '' }
+        : (await fetch(api.basename + url, fetchOptions));
+
+    if (isCancelled) {
+        throw { status: 0, data: '', isCancelled: true}
+    }
+
+    let resultBody = null
+    try {
+        resultBody = await result.text();
+        // Even if the result conversion to JSON fails, we still return the original text
+        // This is 1-to-1 with the real _makeRequest implementation
+        resultBody = JSON.parse(resultBody);
+    } catch (e) {}
+
+
     if (result.status >= 200 && result.status <= 299) {
-        try {
-            return await result.json();
-        } catch (e) {
-            return null;
-        }
+        return resultBody
     } else {
-        const error = {status: result.status, data: await result.json()}
-        console.log('A request made in a test failed with the following error:')
-        console.dir(error, { depth: null })
-
+        const error = { status: result.status, data: resultBody, isCancelled: false }
+        if (!simulateOfflineMode) {
+            console.log('A request made in a test failed with the following error:');
+            console.log(error, { depth: null });
+            console.log(`The original request: ${method} ${url}`);
+            if (requestBody) console.log(`Original payload: ${requestBody}`);
+        }
         throw error
     }
 }
@@ -73,35 +130,141 @@ if (process.env.E2E_HOST) {
     process.quit(0)
 }
 
-export const createReduxStore = () => {
-    return getStore(reducers);
-}
-export const createReduxStoreWithBrowserHistory = () => {
+/**
+ * Creates an augmented Redux store for testing the whole app including browser history manipulation. Includes:
+ * - A simulated browser history that is used by react-router
+ * - Methods for
+ *     * manipulating the browser history
+ *     * waiting until specific Redux actions have been dispatched
+ *     * getting a React container subtree for the current route
+ */
+
+export const createTestStore = async () => {
+    hasCreatedStore = true;
+
     const history = useRouterHistory(createMemoryHistory)();
-    const store = getStore(reducers, history);
-    return { history, store }
+    const store = getStore(reducers, history, undefined, (createStore) => testStoreEnhancer(createStore, history));
+    store.setFinalStoreInstance(store);
+
+    await store.dispatch(refreshSiteSettings());
+    return store;
 }
 
-/**
- * Returns the given React container with an access to a global Redux store
- */
-export function linkContainerToGlobalReduxStore(component) {
-    return (
-        <Provider store={globalReduxStore}>
-            {component}
-        </Provider>
-    );
+const testStoreEnhancer = (createStore, history) => {
+    return (...args) => {
+        const store = createStore(...args);
+
+        const testStoreExtensions = {
+            _originalDispatch: store.dispatch,
+            _onActionDispatched: null,
+            _dispatchedActions: [],
+            _finalStoreInstance: null,
+
+            setFinalStoreInstance: (finalStore) => {
+                store._finalStoreInstance = finalStore;
+            },
+
+            dispatch: (action) => {
+                const result = store._originalDispatch(action);
+                store._dispatchedActions = store._dispatchedActions.concat([action]);
+                if (store._onActionDispatched) store._onActionDispatched();
+                return result;
+            },
+
+            resetDispatchedActions: () => {
+                store._dispatchedActions = [];
+            },
+
+            /**
+             * Waits until all actions with given type identifiers have been called or fails if the maximum waiting
+             * time defined in `timeout` is exceeded.
+             *
+             * Convenient in tests for waiting specific actions to be executed after mounting a React container.
+             */
+            waitForActions: (actionTypes, {timeout = 8000} = {}) => {
+                actionTypes = Array.isArray(actionTypes) ? actionTypes : [actionTypes]
+
+                const allActionsAreTriggered = () => _.every(actionTypes, actionType =>
+                    store._dispatchedActions.filter((action) => action.type === actionType).length > 0
+                );
+
+                if (allActionsAreTriggered()) {
+                    // Short-circuit if all action types are already in the history of dispatched actions
+                    return;
+                } else {
+                    return new Promise((resolve, reject) => {
+                        store._onActionDispatched = () => {
+                            if (allActionsAreTriggered()) resolve()
+                        };
+                        setTimeout(() => {
+                            store._onActionDispatched = null;
+
+                            if (allActionsAreTriggered()) {
+                                // TODO: Figure out why we sometimes end up here instead of _onActionDispatched hook
+                                resolve()
+                            } else {
+                                return reject(
+                                    new Error(
+                                        `Actions ${actionTypes.join(", ")} were not dispatched within ${timeout}ms. ` +
+                                        `Dispatched actions so far: ${store._dispatchedActions.map((a) => a.type).join(", ")}`
+                                    )
+                                )
+                            }
+
+                        }, timeout)
+                    });
+                }
+            },
+
+            getDispatchedActions: () => {
+                return store._dispatchedActions;
+            },
+
+            pushPath: (path) => history.push(path),
+            goBack: () => history.goBack(),
+            getPath: () => urlFormat(history.getCurrentLocation()),
+
+            connectContainer: (reactContainer) => {
+                const routes = createRoutes(getRoutes(store._finalStoreInstance))
+                return store._connectWithStore(
+                    <Router
+                        routes={routes}
+                        history={history}
+                        render={(props) => React.cloneElement(reactContainer, props)}
+                    />
+                );
+            },
+
+            getAppContainer: () => {
+                return store._connectWithStore(
+                    <Router history={history}>
+                        {getRoutes(store._finalStoreInstance)}
+                    </Router>
+                )
+            },
+
+            // eslint-disable-next-line react/display-name
+            _connectWithStore: (reactContainer) =>
+                <Provider store={store._finalStoreInstance}>
+                    {reactContainer}
+                </Provider>
+
+        }
+
+        return Object.assign(store, testStoreExtensions);
+    }
 }
 
-/**
- * A Redux store that is shared between subsequent tests,
- * intended to reduce the need for reloading metadata between every test
- */
-const {
-    history: globalBrowserHistory,
-    store: globalReduxStore
-} = createReduxStoreWithBrowserHistory()
-export { globalBrowserHistory, globalReduxStore }
+export const clickRouterLink = (linkEnzymeWrapper) =>
+    linkEnzymeWrapper.simulate('click', { button: 0 });
 
-jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
+// Commonly used question helpers that are temporarily here
+// TODO Atte Keinänen 6/27/17: Put all metabase-lib -related test helpers to one file
+export const createSavedQuestion = async (unsavedQuestion) => {
+    const savedCard = await CardApi.create(unsavedQuestion.card())
+    const savedQuestion = unsavedQuestion.setCard(savedCard);
+    savedQuestion._card = { ...savedQuestion._card, original_card_id: savedQuestion.id() }
+    return savedQuestion
+}
 
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
diff --git a/frontend/src/metabase/__support__/integrated_tests_mocks.js b/frontend/src/metabase/__support__/integrated_tests_mocks.js
index f8c5046d44bd20c779585cce7d647f96e1da9a43..9cb0446392261cfdd8580dc90d8430deb72bda97 100644
--- a/frontend/src/metabase/__support__/integrated_tests_mocks.js
+++ b/frontend/src/metabase/__support__/integrated_tests_mocks.js
@@ -25,3 +25,12 @@ jest.mock("ace/snippets/sqlserver", () => {}, {virtual: true});
 jest.mock("ace/snippets/json", () => {}, {virtual: true});
 jest.mock("ace/snippets/json", () => {}, {virtual: true});
 jest.mock("ace/ext-language_tools", () => {}, {virtual: true});
+
+import * as modal from "metabase/components/Modal";
+modal.default = modal.TestModal;
+
+import * as tooltip from "metabase/components/Tooltip";
+tooltip.default = tooltip.TestTooltip
+
+import * as popover from "metabase/components/Popover";
+popover.default = popover.TestPopover
diff --git a/frontend/src/metabase/__support__/sample_dataset_fixture.js b/frontend/src/metabase/__support__/sample_dataset_fixture.js
index 38c9a486104ddc6507a74ade743f20435c82b475..7e67ebd7519da37e7c8e7fbf00df30efb50533f7 100644
--- a/frontend/src/metabase/__support__/sample_dataset_fixture.js
+++ b/frontend/src/metabase/__support__/sample_dataset_fixture.js
@@ -1,6 +1,7 @@
 import Question from "metabase-lib/lib/Question";
 import { getMetadata } from "metabase/selectors/metadata";
 import { assocIn } from "icepick";
+import _ from "underscore";
 
 export const DATABASE_ID = 1;
 export const ANOTHER_DATABASE_ID = 2;
@@ -450,7 +451,7 @@ export const state = {
         values: []
       },
       '2': {
-        description: 'This is a unique ID for the product. It is also called the “Invoice number" or “Confirmation number" in customer facing emails and screens.',
+        description: 'This is a unique ID for the product. It is also called the “Invoice number” or “Confirmation number” in customer facing emails and screens.',
         table_id: 1,
         special_type: 'type/PK',
         name: 'ID',
@@ -1395,6 +1396,8 @@ export const state = {
 export const metadata = getMetadata(state);
 
 export const card = {
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "query",
         database: DATABASE_ID,
@@ -1405,6 +1408,8 @@ export const card = {
 };
 
 export const product_card = {
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "query",
         database: DATABASE_ID,
@@ -1417,6 +1422,8 @@ export const product_card = {
 export const orders_raw_card = {
     id: 1,
     name: "Raw orders data",
+    display: 'table',
+    visualization_settings: {},
     can_write: true,
     dataset_query: {
         type: "query",
@@ -1430,6 +1437,8 @@ export const orders_raw_card = {
 export const orders_count_card = {
     id: 2,
     name: "# orders data",
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "query",
         database: DATABASE_ID,
@@ -1443,6 +1452,8 @@ export const orders_count_card = {
 export const native_orders_count_card = {
     id: 2,
     name: "# orders data",
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "native",
         database: DATABASE_ID,
@@ -1455,6 +1466,8 @@ export const native_orders_count_card = {
 export const invalid_orders_count_card = {
     id: 2,
     name: "# orders data",
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "nosuchqueryprocessor",
         database: DATABASE_ID,
@@ -1468,6 +1481,8 @@ export const orders_count_by_id_card = {
     id: 2,
     name: "# orders data",
     can_write: false,
+    display: 'table',
+    visualization_settings: {},
     dataset_query: {
         type: "query",
         database: DATABASE_ID,
@@ -1525,6 +1540,37 @@ export function makeQuestion(fn = (card, state) => ({ card, state })) {
 }
 
 export const question = new Question(metadata, card);
+export const unsavedOrderCountQuestion = new Question(metadata, _.omit(orders_count_card, 'id'));
 export const productQuestion = new Question(metadata, product_card);
 const NoFieldsMetadata = getMetadata(assocIn(state, ["metadata", "tables", ORDERS_TABLE_ID, "fields"], []))
 export const questionNoFields = new Question(NoFieldsMetadata, card);
+
+export const orders_past_30_days_segment = {
+    "id": null,
+    "name": "Past 30 days",
+    "description": "Past 30 days created at",
+    "table_id": 1,
+    "definition": {
+        "source_table": 1,
+        "filter": ["time-interval", ["field-id", 1], -30, "day"]
+    }
+};
+
+export const vendor_count_metric = {
+    "id": null,
+    "name": "Vendor count",
+    "description": "Tells how many vendors we have",
+    "table_id": 3,
+    "definition": {
+        "aggregation": [
+            [
+                "distinct",
+                [
+                    "field-id",
+                    28
+                ]
+            ]
+        ],
+        "source_table": 3
+    }
+};
diff --git a/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx b/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
index 1498d90312e97eaae8acec2407b2ca8b070dd528..908c31e197275cbd7759b849d58b8f3c37f669bf 100644
--- a/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
+++ b/frontend/src/metabase/admin/databases/components/DeleteDatabaseModal.jsx
@@ -23,6 +23,8 @@ export default class DeleteDatabaseModal extends Component {
     async deleteDatabase() {
         try {
             this.props.onDelete(this.props.database);
+            // immediately call on close because database deletion should be non blocking
+            this.props.onClose()
         } catch (error) {
             this.setState({ error });
         }
diff --git a/frontend/src/metabase/admin/databases/containers/DatabaseListApp.integ.spec.js b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..9bff9910fcfc79f517f62d0408aa576bfd8122d4
--- /dev/null
+++ b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.integ.spec.js
@@ -0,0 +1,70 @@
+import {
+    login,
+    createTestStore,
+} from "metabase/__support__/integrated_tests";
+
+import { mount } from "enzyme";
+import { FETCH_DATABASES, DELETE_DATABASE } from "metabase/admin/databases/database"
+import DatabaseListApp from "metabase/admin/databases/containers/DatabaseListApp";
+import { delay } from "metabase/lib/promise"
+
+import { MetabaseApi } from 'metabase/services'
+
+describe('dashboard list', () => {
+
+    beforeAll(async () => {
+        await login()
+    })
+
+    it('should render', async () => {
+        const store = await createTestStore()
+        store.pushPath("/admin/databases");
+
+        const app = mount(store.getAppContainer())
+
+        await store.waitForActions([FETCH_DATABASES])
+
+        const wrapper = app.find(DatabaseListApp)
+        expect(wrapper.length).toEqual(1)
+
+    })
+
+    describe('deletes', () => {
+        it('should not block deletes', async () => {
+            // mock the db_delete method call to simulate a longer running delete
+            MetabaseApi.db_delete = () => delay(5000)
+
+            const store = await createTestStore()
+            store.pushPath("/admin/databases");
+
+            const app = mount(store.getAppContainer())
+            await store.waitForActions([FETCH_DATABASES])
+
+            const wrapper = app.find(DatabaseListApp)
+            const dbCount = wrapper.find('tr').length
+
+            const deleteButton = wrapper.find('.Button.Button--danger').first()
+
+            deleteButton.simulate('click')
+
+            const deleteModal = wrapper.find('.test-modal')
+            deleteModal.find('.Form-input').simulate('change', { target: { value: "DELETE" }})
+            deleteModal.find('.Button.Button--danger').simulate('click')
+
+            // test that the modal is gone
+            expect(wrapper.find('.test-modal').length).toEqual(0)
+
+            // we should now have a disabled db row during delete
+            expect(wrapper.find('tr.disabled').length).toEqual(1)
+
+            // db delete finishes
+            await store.waitForActions([DELETE_DATABASE])
+
+            // there should be no disabled db rows now
+            expect(wrapper.find('tr.disabled').length).toEqual(0)
+
+            // we should now have one less database in the list
+            expect(wrapper.find('tr').length).toEqual(dbCount - 1)
+        })
+    })
+})
diff --git a/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
index ab7241838a81395ecb91c0bcdb54cf1e90b276fd..c9ab23f2272ce899ad48c705bb6b801ea71d3f7b 100644
--- a/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
+++ b/frontend/src/metabase/admin/databases/containers/DatabaseListApp.jsx
@@ -23,7 +23,8 @@ const mapStateToProps = (state, props) => {
         created:              props.location.query.created,
         databases:            getDatabasesSorted(state),
         hasSampleDataset:     hasSampleDataset(state),
-        engines:              MetabaseSettings.get('engines')
+        engines:              MetabaseSettings.get('engines'),
+        deletes:              state.admin.databases.deletes
     }
 }
 
@@ -63,29 +64,41 @@ export default class DatabaseList extends Component {
                         </thead>
                         <tbody>
                             { databases ?
-                                databases.map(database =>
-                                    <tr key={database.id}>
-                                        <td>
-                                            <Link to={"/admin/databases/"+database.id} className="text-bold link">{database.name}</Link>
-                                        </td>
-                                        <td>
-                                            {engines && engines[database.engine] ? engines[database.engine]['driver-name'] : database.engine}
-                                        </td>
-                                        <td className="Table-actions">
-                                            <ModalWithTrigger
-                                                ref={"deleteDatabaseModal_"+database.id}
-                                                triggerClasses="Button Button--danger"
-                                                triggerElement="Delete"
-                                            >
-                                                <DeleteDatabaseModal
-                                                    database={database}
-                                                    onClose={() => this.refs["deleteDatabaseModal_"+database.id].close()}
-                                                    onDelete={() => this.props.deleteDatabase(database.id)}
-                                                />
-                                            </ModalWithTrigger>
-                                        </td>
-                                    </tr>
-                                )
+                                databases.map(database => {
+                                    const isDeleting = this.props.deletes.indexOf(database.id) !== -1
+                                    return (
+                                        <tr
+                                            key={database.id}
+                                            className={cx({'disabled': isDeleting })}
+                                        >
+                                            <td>
+                                                <Link to={"/admin/databases/"+database.id} className="text-bold link">
+                                                    {database.name}
+                                                </Link>
+                                            </td>
+                                            <td>
+                                                {engines && engines[database.engine] ? engines[database.engine]['driver-name'] : database.engine}
+                                            </td>
+                                            { isDeleting
+                                                ? (<td className="text-right">Deleting...</td>)
+                                                : (
+                                                    <td className="Table-actions">
+                                                        <ModalWithTrigger
+                                                            ref={"deleteDatabaseModal_"+database.id}
+                                                            triggerClasses="Button Button--danger"
+                                                            triggerElement="Delete"
+                                                        >
+                                                            <DeleteDatabaseModal
+                                                                database={database}
+                                                                onClose={() => this.refs["deleteDatabaseModal_"+database.id].close()}
+                                                                onDelete={() => this.props.deleteDatabase(database.id)}
+                                                            />
+                                                        </ModalWithTrigger>
+                                                    </td>
+                                                )
+                                            }
+                                        </tr>
+                                    )})
                             :
                                 <tr>
                                     <td colSpan={4}>
diff --git a/frontend/src/metabase/admin/databases/database.js b/frontend/src/metabase/admin/databases/database.js
index 62ee158324b822a483f2c65a47dce5a56e787d8a..84598f060221be8caf4df105798be651ea697ed2 100644
--- a/frontend/src/metabase/admin/databases/database.js
+++ b/frontend/src/metabase/admin/databases/database.js
@@ -11,11 +11,11 @@ import { MetabaseApi } from "metabase/services";
 
 const RESET = "metabase/admin/databases/RESET";
 const SELECT_ENGINE = "metabase/admin/databases/SELECT_ENGINE";
-const FETCH_DATABASES = "metabase/admin/databases/FETCH_DATABASES";
+export const FETCH_DATABASES = "metabase/admin/databases/FETCH_DATABASES";
 const INITIALIZE_DATABASE = "metabase/admin/databases/INITIALIZE_DATABASE";
 const ADD_SAMPLE_DATASET = "metabase/admin/databases/ADD_SAMPLE_DATASET";
 const SAVE_DATABASE = "metabase/admin/databases/SAVE_DATABASE";
-const DELETE_DATABASE = "metabase/admin/databases/DELETE_DATABASE";
+export const DELETE_DATABASE = "metabase/admin/databases/DELETE_DATABASE";
 const SYNC_DATABASE = "metabase/admin/databases/SYNC_DATABASE";
 
 export const reset = createAction(RESET);
@@ -110,15 +110,18 @@ export const saveDatabase = createThunkAction(SAVE_DATABASE, function(database,
     };
 });
 
+const START_DELETE = 'metabase/admin/databases/START_DELETE'
+const startDelete = createAction(START_DELETE)
+
+
 // deleteDatabase
-export const deleteDatabase = createThunkAction(DELETE_DATABASE, function(databaseId, redirect=false) {
+export const deleteDatabase = createThunkAction(DELETE_DATABASE, function(databaseId, redirect=true) {
     return async function(dispatch, getState) {
         try {
+            dispatch(startDelete(databaseId))
+            dispatch(push('/admin/databases/'));
             await MetabaseApi.db_delete({"dbId": databaseId});
             MetabaseAnalytics.trackEvent("Databases", "Delete", redirect ? "Using Detail" : "Using List");
-            if (redirect) {
-                dispatch(push('/admin/databases/'));
-            }
             return databaseId;
         } catch(error) {
             console.log('error deleting database', error);
@@ -156,6 +159,15 @@ const editingDatabase = handleActions({
     [SELECT_ENGINE]: { next: (state, { payload }) => ({...state, engine: payload }) }
 }, null);
 
+const deletes = handleActions({
+    [START_DELETE]: {
+        next: (state, { payload }) => state.concat([payload])
+    },
+    [DELETE_DATABASE]: {
+        next: (state, { payload }) => state.splice(state.indexOf(payload), 1)
+    }
+}, []);
+
 const DEFAULT_FORM_STATE = { formSuccess: null, formError: null };
 const formState = handleActions({
     [RESET]: { next: () => DEFAULT_FORM_STATE },
@@ -165,5 +177,6 @@ const formState = handleActions({
 export default combineReducers({
     databases,
     editingDatabase,
-    formState
+    formState,
+    deletes
 });
diff --git a/frontend/src/metabase/admin/people/components/GroupSelect.jsx b/frontend/src/metabase/admin/people/components/GroupSelect.jsx
index e92435ef8fdabb1962dd60072e1d38c5cdde7e36..60885db80c560b9ac28b322a846e07c3ae47caba 100644
--- a/frontend/src/metabase/admin/people/components/GroupSelect.jsx
+++ b/frontend/src/metabase/admin/people/components/GroupSelect.jsx
@@ -12,7 +12,10 @@ const GroupOption = ({ group, selectedGroups = {}, onGroupChange }) => {
     return (
         <div className={cx("GroupOption flex align-center p1 px2", { "cursor-pointer": !disabled })} onClick={() => !disabled && onGroupChange(group, !selected) }>
             <span className={cx("pr1", getGroupColor(group), { disabled })}>
-                <CheckBox checked={selected} borderColor="currentColor" size={18} />
+                <CheckBox
+                    checked={selected}
+                    size={18}
+                />
             </span>
             {group.name}
         </div>
diff --git a/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx b/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
index b8e835c5b9426b60a90a541d2ae380c7b2063d86..40c8e115b4442c3c59e1e1bd5ae87b3cd6ea76c0 100644
--- a/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
+++ b/frontend/src/metabase/admin/people/components/UserGroupSelect.jsx
@@ -14,7 +14,10 @@ import GroupSummary from "./GroupSummary.jsx";
 const GroupOption = ({ name, color, selected, disabled, onChange }) =>
     <div className={cx("flex align-center p1 px2", { "cursor-pointer": !disabled })} onClick={() => !disabled && onChange(!selected) }>
         <span className={cx("pr1", color, { disabled })}>
-            <CheckBox checked={selected} borderColor="currentColor" size={18} />
+            <CheckBox
+                checked={selected}
+                size={18}
+            />
         </span>
         {name}
     </div>
diff --git a/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx b/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
index 408f9c77a93b6fc7f8c1f0696d44813d9f1a327a..4d0a9af82e0b7026b8c1ade8d94ed592a74d0463 100644
--- a/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
+++ b/frontend/src/metabase/admin/people/containers/PeopleListingApp.jsx
@@ -386,6 +386,10 @@ export default class PeopleListingApp extends Component {
                                         <Tooltip tooltip="Signed up via Google">
                                             <Icon name='google' />
                                         </Tooltip> : null}
+                                      {user.ldap_auth ?
+                                        <Tooltip tooltip="Signed up via LDAP">
+                                            <Icon name='ldap' />
+                                        </Tooltip> : null }
                                     </td>
                                     <td>{user.email}</td>
                                     <td>
diff --git a/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.integ.spec.js b/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a89ee7d1823c94db14148394b383363142f899fa
--- /dev/null
+++ b/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.integ.spec.js
@@ -0,0 +1,48 @@
+import {
+    login,
+    createTestStore,
+    clickRouterLink,
+} from "metabase/__support__/integrated_tests";
+
+import { mount } from "enzyme";
+
+import SettingsEditorApp from "metabase/admin/settings/containers/SettingsEditorApp"
+import SettingsAuthenticationOptions from "metabase/admin/settings/components/SettingsAuthenticationOptions"
+import SettingsSingleSignOnForm from "../components/SettingsSingleSignOnForm.jsx";
+import SettingsLdapForm from "../components/SettingsLdapForm.jsx";
+
+import { INITIALIZE_SETTINGS } from "metabase/admin/settings/settings"
+
+describe('Admin Auth Options', () => {
+    beforeAll(async () => {
+        await login()
+    })
+
+    it('it should render the proper configuration form', async () => {
+        const store = await createTestStore()
+
+        store.pushPath("/admin/settings");
+
+        const app = mount(store.getAppContainer())
+        await store.waitForActions([INITIALIZE_SETTINGS])
+        const settingsWrapper = app.find(SettingsEditorApp)
+        const authListItem = settingsWrapper.find('span[children="Authentication"]')
+
+        clickRouterLink(authListItem)
+
+        expect(settingsWrapper.find(SettingsAuthenticationOptions).length).toBe(1)
+
+        // test google
+        const googleConfigButton = settingsWrapper.find('.Button').first()
+        clickRouterLink(googleConfigButton)
+
+        expect(settingsWrapper.find(SettingsSingleSignOnForm).length).toBe(1)
+
+        store.goBack()
+
+        // test ldap
+        const ldapConfigButton = settingsWrapper.find('.Button').last()
+        clickRouterLink(ldapConfigButton)
+        expect(settingsWrapper.find(SettingsLdapForm).length).toBe(1)
+    })
+})
diff --git a/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.jsx b/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..0a9e50735ed75670305daf44fb815db636927419
--- /dev/null
+++ b/frontend/src/metabase/admin/settings/components/SettingsAuthenticationOptions.jsx
@@ -0,0 +1,28 @@
+import React, { Component } from 'react'
+import { Link } from 'react-router'
+
+class SettingsAuthenticationOptions extends Component {
+    render () {
+        return (
+            <ul className="text-measure">
+                <li>
+                    <div className="bordered rounded shadowed bg-white p4">
+                        <h2>Sign in with Google</h2>
+                        <p>Allows users with existing Metabase accounts to login with a Google account that matches their email address in addition to their Metabase username and password.</p>
+                        <Link className="Button" to="/admin/settings/authentication/google">Configure</Link>
+                    </div>
+                </li>
+
+                <li className="mt2">
+                    <div className="bordered rounded shadowed bg-white p4">
+                        <h2>LDAP</h2>
+                        <p>Allows users within your LDAP directory to log in to Metabase with their LDAP credentials, and allows automatic mapping of LDAP groups to Metabase groups.</p>
+                        <Link className="Button" to="/admin/settings/authentication/ldap">Configure</Link>
+                    </div>
+                </li>
+            </ul>
+        )
+    }
+}
+
+export default SettingsAuthenticationOptions
diff --git a/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9a98e719c64a9be46b088a255e73668e7c1c1b8f
--- /dev/null
+++ b/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx
@@ -0,0 +1,258 @@
+import React, { Component, PropTypes } from "react";
+
+import _ from "underscore";
+import cx from "classnames";
+
+import Collapse from "react-collapse";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs";
+import DisclosureTriangle from "metabase/components/DisclosureTriangle";
+import MetabaseUtils from "metabase/lib/utils";
+import SettingsSetting from "./SettingsSetting";
+
+export default class SettingsLdapForm extends Component {
+    constructor(props, context) {
+        super(props, context);
+        this.state = {
+            formData: {},
+            showAttributes: false,
+            submitting: "default",
+            valid: false,
+            validationErrors: {}
+        }
+    }
+
+    static propTypes = {
+        elements: PropTypes.array.isRequired,
+        formErrors: PropTypes.object,
+        updateLdapSettings: PropTypes.func.isRequired
+    };
+
+    componentWillMount() {
+        // this gives us an opportunity to load up our formData with any existing values for elements
+        this.updateFormData(this.props);
+    }
+
+    componentWillReceiveProps(nextProps) {
+        this.updateFormData(nextProps);
+    }
+
+    updateFormData(props) {
+        let formData = {};
+        for (const element of props.elements) {
+            formData[element.key] = element.value;
+        }
+        this.setState({ formData });
+    }
+
+    componentDidMount() {
+        this.validateForm();
+    }
+
+    componentDidUpdate() {
+        this.validateForm();
+    }
+
+    setSubmitting(submitting) {
+        this.setState({submitting});
+    }
+
+    setFormErrors(formErrors) {
+        this.setState({formErrors});
+    }
+
+    // return null if element passes validation, otherwise return an error message
+    validateElement([validationType, validationMessage], value, element) {
+        if (MetabaseUtils.isEmpty(value)) return;
+
+        switch (validationType) {
+            case "email":
+                return !MetabaseUtils.validEmail(value) ? (validationMessage || "That's not a valid email address") : null;
+            case "integer":
+                return isNaN(parseInt(value)) ? (validationMessage || "That's not a valid integer") : null;
+            case "ldap_filter":
+                return (value.match(/\(/g) || []).length !== (value.match(/\)/g) || []).length ? (validationMessage || "Check your parentheses") : null;
+        }
+    }
+
+    validateForm() {
+        let { elements } = this.props;
+        let { formData } = this.state;
+
+        let valid = true,
+            validationErrors = {};
+
+        // Validate form only if LDAP is enabled
+        if (formData['ldap-enabled']) {
+            elements.forEach(function(element) {
+                // test for required elements
+                if (element.required && MetabaseUtils.isEmpty(formData[element.key])) {
+                    valid = false;
+                }
+
+                if (element.validations) {
+                    element.validations.forEach(function(validation) {
+                        validationErrors[element.key] = this.validateElement(validation, formData[element.key], element);
+                        if (validationErrors[element.key]) valid = false;
+                    }, this);
+                }
+            }, this);
+        }
+
+        if (this.state.valid !== valid || !_.isEqual(this.state.validationErrors, validationErrors)) {
+            this.setState({ valid, validationErrors });
+        }
+    }
+
+    handleChangeEvent(element, value, event) {
+        this.setState((previousState) => ({ formData: {
+            ...previousState.formData,
+            [element.key]: (MetabaseUtils.isEmpty(value)) ? null : value
+        } }));
+    }
+
+    handleFormErrors(error) {
+        // parse and format
+        let formErrors = {};
+        if (error.data && error.data.message) {
+            formErrors.message = error.data.message;
+        } else {
+            formErrors.message = "Looks like we ran into some problems";
+        }
+
+        if (error.data && error.data.errors) {
+            formErrors.elements = error.data.errors;
+        }
+
+        return formErrors;
+    }
+
+    handleAttributeToggle() {
+        this.setState((previousState) => ({ showAttributes: !previousState['showAttributes'] }));
+    }
+
+    updateLdapSettings(e) {
+        e.preventDefault();
+
+        let { formData, valid } = this.state;
+
+        if (valid) {
+            this.setState({
+                formErrors: null,
+                submitting: "working"
+            });
+
+            this.props.updateLdapSettings(formData).then(() => {
+                this.setState({ submitting: "success" });
+
+                // show a confirmation for 3 seconds, then return to normal
+                setTimeout(() => this.setState({ submitting: "default" }), 3000);
+            }, (error) => {
+                this.setState({
+                    submitting: "default",
+                    formErrors: this.handleFormErrors(error)
+                });
+            });
+        }
+    }
+
+    render() {
+        const { elements } = this.props;
+        const { formData, formErrors, showAttributes, submitting, valid, validationErrors } = this.state;
+
+        let sections = {
+            'ldap-enabled': 'server',
+            'ldap-host': 'server',
+            'ldap-port': 'server',
+            'ldap-security': 'server',
+            'ldap-bind-dn': 'server',
+            'ldap-password': 'server',
+            'ldap-user-base': 'user',
+            'ldap-user-filter': 'user',
+            'ldap-attribute-email': 'attribute',
+            'ldap-attribute-firstname': 'attribute',
+            'ldap-attribute-lastname': 'attribute',
+            'ldap-group-sync': 'group',
+            'ldap-group-base': 'group'
+        }
+
+        const toElement = (element) => {
+            // merge together data from a couple places to provide a complete view of the Element state
+            let errorMessage = (formErrors && formErrors.elements) ? formErrors.elements[element.key] : validationErrors[element.key];
+            let value = formData[element.key] == null ? element.defaultValue : formData[element.key];
+
+            if (element.key === 'ldap-group-sync') {
+                return (
+                    <SettingsSetting
+                        key={element.key}
+                        setting={{ ...element, value }}
+                        updateSetting={this.handleChangeEvent.bind(this, element)}
+                        mappings={formData['ldap-group-mappings']}
+                        updateMappings={this.handleChangeEvent.bind(this, { key: 'ldap-group-mappings' })}
+                        errorMessage={errorMessage}
+                    />
+                );
+            }
+
+            return (
+                <SettingsSetting
+                    key={element.key}
+                    setting={{ ...element, value }}
+                    updateSetting={this.handleChangeEvent.bind(this, element)}
+                    errorMessage={errorMessage}
+                />
+            );
+        };
+
+        let serverSettings = elements.filter(e => sections[e.key] === 'server').map(toElement);
+        let userSettings = elements.filter(e => sections[e.key] === 'user').map(toElement);
+        let attributeSettings = elements.filter(e => sections[e.key] === 'attribute').map(toElement);
+        let groupSettings = elements.filter(e => sections[e.key] === 'group').map(toElement);
+
+        let saveSettingsButtonStates = {
+            default: "Save changes",
+            working: "Saving...",
+            success: "Changes saved!"
+        };
+
+        let disabled = (!valid || submitting !== "default");
+        let saveButtonText = saveSettingsButtonStates[submitting];
+
+        return (
+            <form noValidate>
+                <Breadcrumbs
+                    crumbs={[
+                        ["Authentication", "/admin/settings/authentication"],
+                        ["LDAP"]
+                    ]}
+                    className="ml2 mb3"
+                />
+                <h2 className="mx2">Server Settings</h2>
+                <ul>{serverSettings}</ul>
+                <h2 className="mx2">User Schema</h2>
+                <ul>{userSettings}</ul>
+                <div className="mb4">
+                    <div className="inline-block ml1 cursor-pointer text-brand-hover" onClick={this.handleAttributeToggle.bind(this)}>
+                        <div className="flex align-center">
+                            <DisclosureTriangle open={showAttributes} />
+                            <h3>Attributes</h3>
+                        </div>
+                    </div>
+                    <Collapse isOpened={showAttributes} keepCollapsedContent>
+                        <ul>{attributeSettings}</ul>
+                    </Collapse>
+                </div>
+                <h2 className="mx2">Group Schema</h2>
+                <ul>{groupSettings}</ul>
+                <div className="m2 mb4">
+                    <button className={cx("Button mr2", {"Button--primary": !disabled}, {"Button--success-new": submitting === "success"})} disabled={disabled} onClick={this.updateLdapSettings.bind(this)}>
+                        {saveButtonText}
+                    </button>
+                    { (formErrors && formErrors.message) ? (
+                        <span className="pl2 text-error text-bold">{formErrors.message}</span>
+                    ) : null }
+                </div>
+            </form>
+        );
+    }
+}
diff --git a/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
index 722f5e81bc205c08ffaca4f30672101cae902c66..5203cf603db492d0db81e741f2ad708aeea6fa1b 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsSingleSignOnForm.jsx
@@ -4,6 +4,7 @@ import PropTypes from "prop-types";
 import cx from "classnames";
 import _ from "underscore";
 
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
 import Input from "metabase/components/Input.jsx";
 
 export default class SettingsSingleSignOnForm extends Component {
@@ -100,8 +101,17 @@ export default class SettingsSingleSignOnForm extends Component {
 
         return (
             <form noValidate>
-                <div className="px2"
-                     style={{maxWidth: "585px"}}>
+                <div
+                    className="px2"
+                    style={{maxWidth: "585px"}}
+                >
+                    <Breadcrumbs
+                        crumbs={[
+                            ["Authentication", "/admin/settings/authentication"],
+                            ["Google Sign-In"]
+                        ]}
+                        className="mb2"
+                    />
                     <h2>Sign in with Google</h2>
                     <p className="text-grey-4">
                         Allows users with existing Metabase accounts to login with a Google account that matches their email address in addition to their Metabase username and password.
diff --git a/frontend/src/metabase/admin/settings/components/widgets/LdapGroupMappingsWidget.jsx b/frontend/src/metabase/admin/settings/components/widgets/LdapGroupMappingsWidget.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..660cd988163f5024d59fe5e9816522a27bafc9f6
--- /dev/null
+++ b/frontend/src/metabase/admin/settings/components/widgets/LdapGroupMappingsWidget.jsx
@@ -0,0 +1,280 @@
+// @flow
+
+import React from "react";
+
+import { ModalFooter } from "metabase/components/ModalContent"
+import AdminContentTable from "metabase/components/AdminContentTable";
+import Button from "metabase/components/Button";
+import GroupSelect from "metabase/admin/people/components/GroupSelect";
+import GroupSummary from "metabase/admin/people/components/GroupSummary";
+import Icon from "metabase/components/Icon";
+import LoadingSpinner from "metabase/components/LoadingSpinner";
+import Modal from "metabase/components/Modal";
+import PopoverWithTrigger from "metabase/components/PopoverWithTrigger";
+
+import { PermissionsApi, SettingsApi } from "metabase/services";
+
+import _ from "underscore";
+
+import SettingToggle from './SettingToggle';
+
+type Props = {
+    setting: any,
+    updateSetting: (value: any) => void,
+    mappings: { [string]: number[] },
+    updateMappings: (value: { [string]: number[] }) => void
+};
+
+type State = {
+    showEditModal: boolean,
+    showAddRow: boolean,
+    groups: Object[],
+    mappings: { [string]: number[] }
+};
+
+export default class LdapGroupMappingsWidget extends React.Component {
+    props: Props;
+    state: State;
+
+    constructor(props: Props, context: any) {
+        super(props, context);
+        this.state = {
+            showEditModal: false,
+            showAddRow: false,
+            groups: [],
+            mappings: {}
+        };
+    }
+
+    _showEditModal = (e: Event) => {
+        e.preventDefault();
+        this.setState({ mappings: this.props.mappings || {}, showEditModal: true });
+        PermissionsApi.groups().then((groups) => this.setState({ groups }));
+    }
+
+    _showAddRow = (e: Event) => {
+        e.preventDefault();
+        this.setState({ showAddRow: true });
+    }
+
+    _hideAddRow = () => {
+        this.setState({ showAddRow: false });
+    }
+
+    _addMapping = (dn: string) => {
+        this.setState((prevState: State) => ({ mappings: { ...prevState.mappings, [dn]: [] }, showAddRow: false }));
+    }
+
+    _changeMapping = (dn: string) => (group: { id: number }, selected: boolean) => {
+        if (selected) {
+            this.setState((prevState: State) => ({
+                mappings: {
+                    ...prevState.mappings,
+                    [dn]: [...prevState.mappings[dn], group.id]
+                }
+            }));
+        } else {
+            this.setState((prevState: State) => ({
+                mappings: {
+                    ...prevState.mappings,
+                    [dn]: prevState.mappings[dn].filter(id => id !== group.id)
+                }
+            }));
+        }
+    }
+
+    _deleteMapping = (dn: string) => (e: Event) => {
+        e.preventDefault();
+        this.setState((prevState: State) => ({ mappings: _.omit(prevState.mappings, dn) }));
+    }
+
+    _cancelClick = (e: Event) => {
+        e.preventDefault();
+        this.setState({ showEditModal: false, showAddRow: false });
+    }
+
+    _saveClick = (e: Event) => {
+        e.preventDefault();
+        const { state: { mappings }, props: { updateMappings } } = this;
+        SettingsApi.put({ key: "ldap-group-mappings", value: mappings }).then(() => {
+            updateMappings && updateMappings(mappings);
+            this.setState({ showEditModal: false, showAddRow: false });
+        });
+    }
+
+    render() {
+        const { showEditModal, showAddRow, groups, mappings } = this.state;
+
+        return (
+            <div className="flex align-center">
+                <SettingToggle {...this.props} />
+                <div className="flex align-center pt1">
+                    <Button type="button" className="ml1" medium onClick={this._showEditModal}>Edit Mappings</Button>
+                </div>
+                { showEditModal ? (
+                    <Modal wide>
+                        <div>
+                            <div className="pt4 px4">
+                                <h2>Group Mappings</h2>
+                            </div>
+                            <div className="px4">
+                                <Button className="float-right" primary onClick={this._showAddRow}>Create a mapping</Button>
+                                <p className="text-measure">
+                                    Mappings allow Metabase to automatically add and remove users from groups based on the membership information provided by the
+                                    directory server. Membership to the Admin group can be granted through mappings, but will not be automatically removed as a
+                                    failsafe measure.
+                                </p>
+                                <AdminContentTable columnTitles={['Distinguished Name', 'Groups', '']}>
+                                    { showAddRow ? (
+                                        <AddMappingRow mappings={mappings} onCancel={this._hideAddRow} onAdd={this._addMapping} />
+                                    ) : null }
+                                    { ((Object.entries(mappings): any): Array<[string, number[]]>).map(([dn, ids]) =>
+                                        <MappingRow
+                                            key={dn}
+                                            dn={dn}
+                                            groups={groups}
+                                            selectedGroups={ids}
+                                            onChange={this._changeMapping(dn)}
+                                            onDelete={this._deleteMapping(dn)}
+                                        />
+                                    ) }
+                                </AdminContentTable>
+                            </div>
+                            <ModalFooter>
+                                <Button type="button" onClick={this._cancelClick}>Cancel</Button>
+                                <Button primary onClick={this._saveClick}>Save</Button>
+                            </ModalFooter>
+                        </div>
+                    </Modal>
+                ) : null }
+            </div>
+        );
+    }
+}
+
+type AddMappingRowProps = {
+    mappings: { [string]: number[] },
+    onAdd?: (dn: string) => void,
+    onCancel?: () => void
+};
+
+type AddMappingRowState = {
+    value: ''
+};
+
+class AddMappingRow extends React.Component {
+    props: AddMappingRowProps;
+    state: AddMappingRowState;
+
+    constructor(props: AddMappingRowProps, context: any) {
+        super(props, context);
+        this.state = {
+            value: ''
+        };
+    }
+
+    _handleCancelClick = (e: Event) => {
+        e.preventDefault();
+        const { onCancel } = this.props;
+        onCancel && onCancel();
+        this.setState({ value: '' });
+    }
+
+    _handleAddClick = (e: Event) => {
+        e.preventDefault();
+        const { onAdd } = this.props;
+        onAdd && onAdd(this.state.value);
+        this.setState({ value: '' });
+    }
+
+    render() {
+        const { value } = this.state;
+
+        const isValid = value && this.props.mappings[value] === undefined;
+
+        return (
+            <tr>
+                <td colSpan="3" style={{ padding: 0 }}>
+                    <div className="my2 pl1 p1 bordered border-brand rounded relative flex align-center">
+                        <input
+                            className="input--borderless h3 ml1 flex-full"
+                            type="text"
+                            value={value}
+                            placeholder="cn=People,ou=Groups,dc=metabase,dc=com"
+                            autoFocus
+                            onChange={(e) => this.setState({ value: e.target.value })}
+                        />
+                        <span className="link no-decoration cursor-pointer" onClick={this._handleCancelClick}>Cancel</span>
+                        <Button className="ml2" primary={!!isValid} disabled={!isValid} onClick={this._handleAddClick}>Add</Button>
+                    </div>
+                </td>
+            </tr>
+        );
+    }
+}
+
+class MappingGroupSelect extends React.Component {
+    props: {
+        groups: Array<{ id: number }>,
+        selectedGroups: number[],
+        onGroupChange?: (group: { id: number }, selected: boolean) => void
+    };
+
+    render() {
+        const { groups, selectedGroups, onGroupChange } = this.props;
+
+        if (!groups || groups.length === 0) {
+            return <LoadingSpinner />;
+        }
+
+        const selected = selectedGroups.reduce((g, id) => ({ ...g, [id]: true }), {});
+
+        return (
+            <PopoverWithTrigger
+                ref="popover"
+                triggerElement={
+                    <div className="flex align-center">
+                        <span className="mr1 text-grey-4">
+                            <GroupSummary groups={groups} selectedGroups={selected} />
+                        </span>
+                        <Icon className="text-grey-2" name="chevrondown"  size={10}/>
+                    </div>
+                }
+                triggerClasses="AdminSelectBorderless py1"
+                sizeToFit
+            >
+                <GroupSelect groups={groups} selectedGroups={selected} onGroupChange={onGroupChange} />
+            </PopoverWithTrigger>
+        );
+    }
+}
+
+class MappingRow extends React.Component {
+    props: {
+        dn: string,
+        groups: Array<{ id: number }>,
+        selectedGroups: number[],
+        onChange?: (group: { id: number }, selected: boolean) => void,
+        onDelete?: (e: Event) => void
+    };
+
+    render() {
+        const { dn, groups, selectedGroups, onChange, onDelete } = this.props;
+
+        return (
+            <tr>
+                <td>{dn}</td>
+                <td>
+                    <MappingGroupSelect
+                        groups={groups}
+                        selectedGroups={selectedGroups}
+                        onGroupChange={onChange}
+                    />
+                </td>
+                <td className="Table-actions">
+                    <Button warning onClick={onDelete}>Remove</Button>
+                </td>
+            </tr>
+        );
+    }
+}
diff --git a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
index e00c797bb5f1250185bc79cccdfdda4b67800b0e..1ca126d97073360adb479a6ba36f8f24f2e07e42 100644
--- a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
+++ b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
@@ -2,18 +2,20 @@ import React, { Component } from "react";
 import PropTypes from "prop-types";
 import { Link } from "react-router";
 import { connect } from "react-redux";
-
 import title from "metabase/hoc/Title";
 import MetabaseAnalytics from "metabase/lib/analytics";
+import { slugify } from "metabase/lib/formatting";
 
 import AdminLayout from "metabase/components/AdminLayout.jsx";
 
 import SettingsSetting from "../components/SettingsSetting.jsx";
 import SettingsEmailForm from "../components/SettingsEmailForm.jsx";
 import SettingsSlackForm from "../components/SettingsSlackForm.jsx";
+import SettingsLdapForm from "../components/SettingsLdapForm.jsx";
 import SettingsSetupList from "../components/SettingsSetupList.jsx";
 import SettingsUpdatesForm from "../components/SettingsUpdatesForm.jsx";
 import SettingsSingleSignOnForm from "../components/SettingsSingleSignOnForm.jsx";
+import SettingsAuthenticationOptions from "../components/SettingsAuthenticationOptions.jsx";
 
 import { prepareAnalyticsValue } from 'metabase/admin/settings/utils'
 
@@ -52,6 +54,7 @@ export default class SettingsEditorApp extends Component {
         updateSetting: PropTypes.func.isRequired,
         updateEmailSettings: PropTypes.func.isRequired,
         updateSlackSettings: PropTypes.func.isRequired,
+        updateLdapSettings: PropTypes.func.isRequired,
         sendTestEmail: PropTypes.func.isRequired
     };
 
@@ -138,15 +141,31 @@ export default class SettingsEditorApp extends Component {
                     updateSetting={this.updateSetting}
                 />
             );
-        } else if (activeSection.name === "Single Sign-On") {
-            return (
-                <SettingsSingleSignOnForm
-                    elements={activeSection.settings}
-                    updateSetting={this.updateSetting}
-                />
-            );
+        } else if (activeSection.name === "Authentication") {
+            // HACK - the presence of this param is a way for us to tell if
+            // a user is looking at a sub section of the autentication section
+            // since allowing for multi page settings more broadly would require
+            // a fairly significant refactor of how settings does its routing logic
+            if(this.props.params.authType) {
+                if(this.props.params.authType === 'ldap') {
+                    return (
+                        <SettingsLdapForm
+                            elements={_.findWhere(this.props.sections, { slug: 'ldap'}).settings}
+                            updateLdapSettings={this.props.updateLdapSettings}
+                        />
+                    )
+                } else if (this.props.params.authType === 'google') {
+                    return (
+                        <SettingsSingleSignOnForm
+                            elements={ _.findWhere(this.props.sections, { slug: slugify('Single Sign-On')}).settings}
+                            updateSetting={this.updateSetting}
+                        />
+                    )
+                }
+            } else {
+                return (<SettingsAuthenticationOptions />)
+            }
         } else {
-
             return (
                 <ul>
                     {activeSection.settings
@@ -172,6 +191,13 @@ export default class SettingsEditorApp extends Component {
         const { sections, activeSection, newVersionAvailable } = this.props;
 
         const renderedSections = _.map(sections, (section, idx) => {
+
+            // HACK - This is used to hide specific items in the sidebar and is currently
+            // only used as a way to fake the multi page auth settings pages without
+            // requiring a larger refactor.
+            if(section.sidebar === false) {
+                return false;
+            }
             const classes = cx("AdminList-item", "flex", "align-center", "justify-between", "no-decoration", {
                 "selected": activeSection && section.name === activeSection.name // this.state.currentSection === idx
             });
diff --git a/frontend/src/metabase/admin/settings/selectors.js b/frontend/src/metabase/admin/settings/selectors.js
index 0434679965a1356633557fbbc2c2da590b097b54..84c0957333d250f6961b4ed63804cfc888979d9b 100644
--- a/frontend/src/metabase/admin/settings/selectors.js
+++ b/frontend/src/metabase/admin/settings/selectors.js
@@ -12,6 +12,7 @@ import {
 } from "./components/widgets/PublicLinksListing.jsx";
 import SecretKeyWidget from "./components/widgets/SecretKeyWidget.jsx";
 import EmbeddingLegalese from "./components/widgets/EmbeddingLegalese";
+import LdapGroupMappingsWidget from "./components/widgets/LdapGroupMappingsWidget";
 
 import { UtilApi } from "metabase/services";
 
@@ -148,6 +149,7 @@ const SECTIONS = [
     },
     {
         name: "Single Sign-On",
+        sidebar: false,
         settings: [
             {
                 key: "google-auth-client-id"
@@ -157,6 +159,96 @@ const SECTIONS = [
             }
         ]
     },
+    {
+        name: "Authentication",
+        settings: []
+    },
+    {
+        name: "LDAP",
+        sidebar: false,
+        settings: [
+            {
+                key: "ldap-enabled",
+                display_name: "LDAP Authentication",
+                description: null,
+                type: "boolean"
+            },
+            {
+                key: "ldap-host",
+                display_name: "LDAP Host",
+                placeholder: "ldap.yourdomain.org",
+                type: "string",
+                required: true,
+                autoFocus: true
+            },
+            {
+                key: "ldap-port",
+                display_name: "LDAP Port",
+                placeholder: "389",
+                type: "string",
+                validations: [["integer", "That's not a valid port number"]]
+            },
+            {
+                key: "ldap-security",
+                display_name: "LDAP Security",
+                description: null,
+                type: "radio",
+                options: { none: "None", ssl: "SSL", starttls: "StartTLS" },
+                defaultValue: "none"
+            },
+            {
+                key: "ldap-bind-dn",
+                display_name: "Username or DN",
+                type: "string"
+            },
+            {
+                key: "ldap-password",
+                display_name: "Password",
+                type: "password"
+            },
+            {
+                key: "ldap-user-base",
+                display_name: "User search base",
+                type: "string",
+                required: true
+            },
+            {
+                key: "ldap-user-filter",
+                display_name: "User filter",
+                type: "string",
+                validations: [["ldap_filter", "Check your parentheses"]]
+            },
+            {
+                key: "ldap-attribute-email",
+                display_name: "Email attribute",
+                type: "string"
+            },
+            {
+                key: "ldap-attribute-firstname",
+                display_name: "First name attribute",
+                type: "string"
+            },
+            {
+                key: "ldap-attribute-lastname",
+                display_name: "Last name attribute",
+                type: "string"
+            },
+            {
+                key: "ldap-group-sync",
+                display_name: "Synchronize group memberships",
+                description: null,
+                widget: LdapGroupMappingsWidget
+            },
+            {
+                key: "ldap-group-base",
+                display_name: "Group search base",
+                type: "string"
+            },
+            {
+                key: "ldap-group-mappings"
+            }
+        ]
+    },
     {
         name: "Maps",
         settings: [
diff --git a/frontend/src/metabase/admin/settings/settings.js b/frontend/src/metabase/admin/settings/settings.js
index cc63d4829c5fc1a0545b1fe181c2c951900b4cc2..366c0879685f4e3e2b916171379803757587df8c 100644
--- a/frontend/src/metabase/admin/settings/settings.js
+++ b/frontend/src/metabase/admin/settings/settings.js
@@ -1,7 +1,7 @@
 
 import { createThunkAction, handleActions, combineReducers } from "metabase/lib/redux";
 
-import { SettingsApi, EmailApi, SlackApi } from "metabase/services";
+import { SettingsApi, EmailApi, SlackApi, LdapApi } from "metabase/services";
 
 import { refreshSiteSettings } from "metabase/redux/settings";
 
@@ -71,6 +71,19 @@ export const updateSlackSettings = createThunkAction(UPDATE_SLACK_SETTINGS, func
     };
 }, {});
 
+export const UPDATE_LDAP_SETTINGS = "metabase/admin/settings/UPDATE_LDAP_SETTINGS";
+export const updateLdapSettings = createThunkAction(UPDATE_LDAP_SETTINGS, function(settings) {
+    return async function(dispatch, getState) {
+        try {
+            await LdapApi.updateSettings(settings);
+            await dispatch(refreshSiteSettings());
+        } catch(error) {
+            console.log("error updating LDAP settings", settings, error);
+            throw error;
+        }
+    };
+});
+
 export const RELOAD_SETTINGS = "metabase/admin/settings/RELOAD_SETTINGS";
 export const reloadSettings = createThunkAction(RELOAD_SETTINGS, function() {
     return async function(dispatch, getState) {
diff --git a/frontend/src/metabase/auth/auth.js b/frontend/src/metabase/auth/auth.js
index b75b5db49a18de80cc2b5e3cf80e31f5d4ec263d..2e684474bf433ffb2642163c97b57e8c319adff2 100644
--- a/frontend/src/metabase/auth/auth.js
+++ b/frontend/src/metabase/auth/auth.js
@@ -6,6 +6,7 @@ import { push } from "react-router-redux";
 import MetabaseCookies from "metabase/lib/cookies";
 import MetabaseUtils from "metabase/lib/utils";
 import MetabaseAnalytics from "metabase/lib/analytics";
+import MetabaseSettings from "metabase/lib/settings";
 
 import { clearGoogleAuthCredentials } from "metabase/lib/auth";
 
@@ -19,7 +20,7 @@ export const LOGIN = "metabase/auth/LOGIN";
 export const login = createThunkAction(LOGIN, function(credentials, redirectUrl) {
     return async function(dispatch, getState) {
 
-        if (!MetabaseUtils.validEmail(credentials.email)) {
+        if (!MetabaseSettings.ldapEnabled() && !MetabaseUtils.validEmail(credentials.username)) {
             return {'data': {'errors': {'email': "Please enter a valid formatted email address."}}};
         }
 
diff --git a/frontend/src/metabase/auth/containers/LoginApp.jsx b/frontend/src/metabase/auth/containers/LoginApp.jsx
index 229febd771c0a21a04db540746c7fe5a041aeb16..a6c02e11903c620a4b85bb408f651459a839ff2b 100644
--- a/frontend/src/metabase/auth/containers/LoginApp.jsx
+++ b/frontend/src/metabase/auth/containers/LoginApp.jsx
@@ -11,7 +11,8 @@ import FormField from "metabase/components/form/FormField.jsx";
 import FormLabel from "metabase/components/form/FormLabel.jsx";
 import FormMessage from "metabase/components/form/FormMessage.jsx";
 import LogoIcon from "metabase/components/LogoIcon.jsx";
-import Settings from "metabase/lib/settings.js";
+import Settings from "metabase/lib/settings";
+import Utils from "metabase/lib/utils";
 
 
 import * as authActions from "../auth";
@@ -44,7 +45,7 @@ export default class LoginApp extends Component {
 
         let valid = true;
 
-        if (!credentials.email || !credentials.password) {
+        if (!credentials.username || !credentials.password) {
             valid = false;
         }
 
@@ -128,9 +129,9 @@ export default class LoginApp extends Component {
 
                             <FormMessage formError={loginError && loginError.data.message ? loginError : null} ></FormMessage>
 
-                            <FormField key="email" fieldName="email" formError={loginError}>
-                                <FormLabel title={"Email address"}  fieldName={"email"} formError={loginError} />
-                                <input className="Form-input Form-offset full py1" name="email" placeholder="youlooknicetoday@email.com" type="text" onChange={(e) => this.onChange("email", e.target.value)} autoFocus />
+                            <FormField key="username" fieldName="username" formError={loginError}>
+                                <FormLabel title={Settings.ldapEnabled() ? "Username or email address" : "Email address"} fieldName={"username"} formError={loginError} />
+                                <input className="Form-input Form-offset full py1" name="username" placeholder="youlooknicetoday@email.com" type="text" onChange={(e) => this.onChange("username", e.target.value)} autoFocus />
                                 <span className="Form-charm"></span>
                             </FormField>
 
@@ -150,7 +151,7 @@ export default class LoginApp extends Component {
                                 <button className={cx("Button Grid-cell", {'Button--primary': this.state.valid})} disabled={!this.state.valid}>
                                     Sign in
                                 </button>
-                                <Link to={"/auth/forgot_password"+(this.state.credentials.email ? "?email="+this.state.credentials.email : "")} className="Grid-cell py2 sm-py0 text-grey-3 md-text-right text-centered flex-full link" onClick={(e) => { window.OSX ? window.OSX.resetPassword() : null }}>I seem to have forgotten my password</Link>
+                                <Link to={"/auth/forgot_password"+(Utils.validEmail(this.state.credentials.username) ? "?email="+this.state.credentials.username : "")} className="Grid-cell py2 sm-py0 text-grey-3 md-text-right text-centered flex-full link" onClick={(e) => { window.OSX ? window.OSX.resetPassword() : null }}>I seem to have forgotten my password</Link>
                             </div>
                         </form>
                     </div>
diff --git a/frontend/src/metabase/components/AccordianList.jsx b/frontend/src/metabase/components/AccordianList.jsx
index e07a891c11a0a2eace9c23e0794ccf4bba21df25..bd3bc970c9726135e9972c08e2ba4b71e6f8d47c 100644
--- a/frontend/src/metabase/components/AccordianList.jsx
+++ b/frontend/src/metabase/components/AccordianList.jsx
@@ -65,7 +65,7 @@ export default class AccordianList extends Component {
     componentDidMount() {
         // when the component is mounted and an item is selected then scroll to it
         const element = this.refs.selected && ReactDOM.findDOMNode(this.refs.selected);
-        if (element && !elementIsInView(element)) {
+        if (element && !elementIsInView(element) && element.scrollIntoView) {
             element.scrollIntoView();
         }
     }
@@ -230,12 +230,11 @@ export default class AccordianList extends Component {
                                         className={cx("List-item flex", { 'List-item--selected': this.itemIsSelected(item, itemIndex), 'List-item--disabled': !this.itemIsClickable(item) }, this.getItemClasses(item, itemIndex))}
                                     >
                                         <a
-                                            className={cx("flex-full flex align-center px1", this.itemIsClickable(item) ? "cursor-pointer" : "cursor-default")}
-                                            style={{ paddingTop: "0.25rem", paddingBottom: "0.25rem" }}
+                                            className={cx("p1 flex-full flex align-center", this.itemIsClickable(item) ? "cursor-pointer" : "cursor-default")}
                                             onClick={this.itemIsClickable(item) && this.onChange.bind(this, item)}
                                         >
-                                            { this.renderItemIcon(item, itemIndex) }
-                                            <h4 className="List-item-title ml2">{item.name}</h4>
+                                            <span className="flex align-center">{ this.renderItemIcon(item, itemIndex) }</span>
+                                            <h4 className="List-item-title ml1">{item.name}</h4>
                                         </a>
                                         { this.renderItemExtra(item, itemIndex) }
                                         { showItemArrows &&
diff --git a/frontend/src/metabase/components/AdminAwareEmptyState.jsx b/frontend/src/metabase/components/AdminAwareEmptyState.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6567dbcc5f5a1e6fa0059f6e252a7ebeffa341a2
--- /dev/null
+++ b/frontend/src/metabase/components/AdminAwareEmptyState.jsx
@@ -0,0 +1,32 @@
+import React from "react";
+import EmptyState from "metabase/components/EmptyState.jsx";
+/*
+ * AdminAwareEmptyState is a component that can
+ *  1) Produce a custom message for admins in empty results
+ */
+
+const AdminAwareEmptyState = ({user, title, message, adminMessage, icon, image, imageHeight, imageClassName, action, adminAction, link, adminLink, onActionClick, smallDescription = false}) =>
+         <EmptyState 
+            title={title}
+            message={user && user.is_superuser ?
+                adminMessage || message :
+                message
+            }
+            icon={icon}
+            image={image}
+            action={user && user.is_superuser ?
+                adminAction || action :
+                action
+            }
+            link={user && user.is_superuser ?
+                adminLink || link :
+                link
+            }
+            imageHeight={imageHeight}
+            imageClassName={imageClassName}
+            onActionClick={onActionClick}
+            smallDescription={smallDescription}
+        />
+
+
+export default AdminAwareEmptyState;
\ No newline at end of file
diff --git a/frontend/src/metabase/components/CheckBox.info.js b/frontend/src/metabase/components/CheckBox.info.js
index be9711d551258d1266898a28feaf373b1c35899f..aaec2b7213dac14c16024de4ca6a95c77ad8c37a 100644
--- a/frontend/src/metabase/components/CheckBox.info.js
+++ b/frontend/src/metabase/components/CheckBox.info.js
@@ -8,7 +8,10 @@ A standard checkbox.
 `;
 
 export const examples = {
-    "off": <CheckBox />,
-    "on": <CheckBox checked />,
-    "on inverted": <CheckBox style={{ color: "#509EE3" }} invertChecked checked />
+    "Default - Off": <CheckBox />,
+    "On - Default blue": <CheckBox checked />,
+    "Purple": <CheckBox checked color='purple' />,
+    "Yellow": <CheckBox checked color='yellow' />,
+    "Red": <CheckBox checked color='red' />,
+    "Green": <CheckBox checked color='green' />,
 };
diff --git a/frontend/src/metabase/components/CheckBox.jsx b/frontend/src/metabase/components/CheckBox.jsx
index d215052027bd764feb8d3a3ab2b567a258e71330..fc225a8c640a135807b2a4bb3c94c7d34b8ad107 100644
--- a/frontend/src/metabase/components/CheckBox.jsx
+++ b/frontend/src/metabase/components/CheckBox.jsx
@@ -1,20 +1,22 @@
 import React, { Component } from "react";
 import PropTypes from "prop-types";
-import Icon from "metabase/components/Icon.jsx";
+import Icon from "metabase/components/Icon";
 
-import cx from "classnames";
+import { normal as defaultColors } from "metabase/lib/colors";
 
 export default class CheckBox extends Component {
     static propTypes = {
         checked: PropTypes.bool,
-        onChange: PropTypes.func
+        onChange: PropTypes.func.isRequired,
+        color: PropTypes.oneOf(defaultColors),
+        size: PropTypes.number,  // TODO - this should probably be a concrete set of options
+        padding: PropTypes.number// TODO - the component should pad itself properly based on the size
     };
 
     static defaultProps = {
         size: 16,
         padding: 2,
-        borderColor: "#ddd",
-        checkColor: "currentColor"
+        color: 'blue'
     };
 
     onClick() {
@@ -25,21 +27,31 @@ export default class CheckBox extends Component {
     }
 
     render() {
-        const { checked, size, padding, borderColor, checkColor, className, invertChecked, style } = this.props;
+        const {
+            checked,
+            color,
+            padding,
+            size,
+        } = this.props;
+
+        const themeColor = defaultColors[color];
+
         const checkboxStyle = {
             width:              size,
             height:             size,
-            backgroundColor:    (invertChecked && checked) ? checkColor : "white",
-            border:             (invertChecked && checked) ? ("2px solid " + checkColor) : ("2px solid " + borderColor),
-            borderRadius:       4,
-            display:            "flex",
-            alignItems:         "center",
-            justifyContent:     "center",
+            backgroundColor:    checked ? themeColor : "white",
+            border:             `2px solid ${ checked ? themeColor : '#ddd' }`,
         };
         return (
-            <div style={style} className={cx("cursor-pointer", className)} onClick={() => this.onClick()}>
-                <div style={checkboxStyle}>
-                    { checked ? <Icon style={{ color: invertChecked ? "white" : checkColor }} name="check"  size={size - padding * 2} /> : null }
+            <div className="cursor-pointer" onClick={() => this.onClick()}>
+                <div style={checkboxStyle} className="flex align-center justify-center rounded">
+                    { checked && (
+                        <Icon
+                            style={{ color: checked ? 'white' : themeColor }}
+                            name="check"
+                            size={size - padding * 2}
+                        />
+                    )}
                 </div>
             </div>
         )
diff --git a/frontend/src/metabase/components/Logs.jsx b/frontend/src/metabase/components/Logs.jsx
index c6acd12eec6228c4d9c8e3961f1cc27bd2304ab8..5bf86b55f272465fd7e4b6cb105cf1686cd768bb 100644
--- a/frontend/src/metabase/components/Logs.jsx
+++ b/frontend/src/metabase/components/Logs.jsx
@@ -11,8 +11,8 @@ import "react-ansi-style/inject-css";
 import _ from "underscore";
 
 export default class Logs extends Component {
-    constructor(props, context) {
-        super(props, context);
+    constructor() {
+        super();
         this.state = {
             logs: [],
             scrollToBottom: true
@@ -31,12 +31,13 @@ export default class Logs extends Component {
         }, 500);
     }
 
+    async fetchLogs() {
+        let logs = await UtilApi.logs();
+        this.setState({ logs: logs.reverse() })
+    }
+
     componentWillMount() {
-        this.timer = setInterval(async () => {
-            let response = await UtilApi.logs();
-            let logs = await response.json()
-            this.setState({ logs: logs.reverse() })
-        }, 1000);
+        this.timer = setInterval(this.fetchLogs.bind(this), 1000);
     }
 
     componentDidMount() {
diff --git a/frontend/src/metabase/components/Logs.spec.js b/frontend/src/metabase/components/Logs.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..cba46350cf55808192a6dcff933ff177768b18c8
--- /dev/null
+++ b/frontend/src/metabase/components/Logs.spec.js
@@ -0,0 +1,29 @@
+import React from 'react'
+import Logs from './Logs'
+import { mount } from 'enzyme'
+import sinon from 'sinon'
+
+import { UtilApi } from 'metabase/services'
+
+describe('Logs', () => {
+    describe('log fetching', () => {
+        let timer
+
+        beforeEach(() => {
+            timer = sinon.useFakeTimers()
+        })
+
+        afterEach(() => {
+            timer.restore()
+        })
+
+        it('should call UtilApi.logs after 1 second', () => {
+            const wrapper = mount(<Logs />)
+            const utilSpy = sinon.spy(UtilApi, "logs")
+
+            expect(wrapper.state().logs.length).toEqual(0)
+            timer.tick(1001)
+            expect(utilSpy.called).toEqual(true)
+        })
+    })
+})
diff --git a/frontend/src/metabase/components/Modal.jsx b/frontend/src/metabase/components/Modal.jsx
index 662fd9fdc37916194890f71a3d10edc2e42f0761..7aec15576b845b3a8ae74a51494c9a215a72d2aa 100644
--- a/frontend/src/metabase/components/Modal.jsx
+++ b/frontend/src/metabase/components/Modal.jsx
@@ -172,6 +172,27 @@ export class InlineModal extends Component {
     }
 }
 
+/**
+ * A modified version of Modal for Jest/Enzyme tests. Renders the modal content inline instead of document root.
+ */
+export class TestModal extends Component {
+    render() {
+        if (this.props.isOpen) {
+            return (
+                <div className="test-modal">
+                    { getModalContent({
+                        ...this.props,
+                        fullPageModal: true,
+                        formModal: !!this.props.form
+                    }) }
+                </div>
+            )
+        } else {
+            return null;
+        }
+    }
+}
+
 // the "routeless" version should only be used for non-inline modals
 const RoutelessFullPageModal = routeless(FullPageModal);
 
diff --git a/frontend/src/metabase/components/Popover.jsx b/frontend/src/metabase/components/Popover.jsx
index cb306a0e0b89e3d8436b150211c9bfbea7795a0d..a850e156b451c489db2ac39e297348985bc83dd9 100644
--- a/frontend/src/metabase/components/Popover.jsx
+++ b/frontend/src/metabase/components/Popover.jsx
@@ -104,7 +104,7 @@ export default class Popover extends Component {
                 >
                     { typeof this.props.children === "function" ?
                         this.props.children()
-                    :
+                        :
                         this.props.children
                     }
                 </div>
@@ -274,3 +274,22 @@ export default class Popover extends Component {
         return <span className="hide" />;
     }
 }
+
+/**
+ * A modified version of TestPopover for Jest/Enzyme tests.
+ * Simply renders the popover body inline instead of mutating DOM root.
+ */
+export const TestPopover = (props) =>
+    props.isOpen ?
+        <div
+            id={props.id}
+            className={cx("TestPopover TestPopoverBody", props.className)}
+            style={props.style}
+        >
+            { typeof props.children === "function" ?
+                props.children()
+                :
+                props.children
+            }
+        </div>
+        : null
diff --git a/frontend/src/metabase/components/SidebarItem.jsx b/frontend/src/metabase/components/SidebarItem.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..adfbc982612e11ddbaa9d24e1a95b5c4f2657c22
--- /dev/null
+++ b/frontend/src/metabase/components/SidebarItem.jsx
@@ -0,0 +1,27 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import { Link } from "react-router";
+import S from "./Sidebar.css";
+
+import LabelIcon from "./LabelIcon.jsx";
+
+import pure from "recompose/pure";
+
+
+const SidebarItem = ({ name, sidebar, icon, href }) =>
+    <li>
+        <Link to={href} className={S.item} activeClassName={S.selected}>
+            <LabelIcon className={S.icon} icon={icon}/>
+            <span className={S.name}>{sidebar || name}</span>
+        </Link>
+    </li>
+
+SidebarItem.propTypes = {
+    name:  PropTypes.string.isRequired,
+    sidebar:  PropTypes.string,
+    icon:  PropTypes.string.isRequired,
+    href:  PropTypes.string.isRequired,
+};
+
+export default pure(SidebarItem);
diff --git a/frontend/src/metabase/components/StackedCheckBox.info.js b/frontend/src/metabase/components/StackedCheckBox.info.js
index 69a97375d36ae330d907dc25c0ed6f90a39fa0ca..433c096e213c6d7dd417381b7a5201ad7c2430a5 100644
--- a/frontend/src/metabase/components/StackedCheckBox.info.js
+++ b/frontend/src/metabase/components/StackedCheckBox.info.js
@@ -8,7 +8,7 @@ A stacked checkbox, representing "all" items.
 `;
 
 export const examples = {
-    "off": <StackedCheckBox />,
-    "on": <StackedCheckBox checked />,
-    "on inverted": <StackedCheckBox style={{ color: "#509EE3" }} invertChecked checked />
+    "Off - Default": <StackedCheckBox />,
+    "Checked": <StackedCheckBox checked />,
+    "Checked with color": <StackedCheckBox checked color='purple' />,
 };
diff --git a/frontend/src/metabase/components/StackedCheckBox.jsx b/frontend/src/metabase/components/StackedCheckBox.jsx
index 0332500ed3045a0edf069d2f80b68b3d51d1fd82..1567dfd9e8ddc2504f97ad709083f78009b50336 100644
--- a/frontend/src/metabase/components/StackedCheckBox.jsx
+++ b/frontend/src/metabase/components/StackedCheckBox.jsx
@@ -1,11 +1,21 @@
 import React from "react";
-
 import CheckBox from "metabase/components/CheckBox.jsx";
 
+const OFFSET = 4;
+
 const StackedCheckBox = (props) =>
-    <span className={props.className} style={{ ...props.style, position: "relative" }}>
-        <CheckBox {...props} className={null} style={{ position: "absolute", top: -3, left: 3, zIndex: -1 }} />
-        <CheckBox {...props} className={null} style={{}} />
-    </span>
+    <div className="relative">
+        <span
+            className="absolute"
+            style={{
+                top: -OFFSET,
+                left: OFFSET,
+                zIndex: -1
+            }}
+        >
+            <CheckBox {...props} />
+        </span>
+        <CheckBox {...props} />
+    </div>
 
 export default StackedCheckBox;
diff --git a/frontend/src/metabase/components/Tooltip.jsx b/frontend/src/metabase/components/Tooltip.jsx
index 7b8d6f5fbb4c1adf7ba7f639195a044462f45704..86c0295a78675c0c4ee1e137c04e49312361b260 100644
--- a/frontend/src/metabase/components/Tooltip.jsx
+++ b/frontend/src/metabase/components/Tooltip.jsx
@@ -82,11 +82,79 @@ export default class Tooltip extends Component {
     _onMouseUp = (e) => {
         // This is in a timeout to ensure the component has a chance to fully unmount
         this.timer = setTimeout(() =>
-            this.setState({ isOpen: this.state.isHovered })
-        , 0);
+                this.setState({ isOpen: this.state.isHovered })
+            , 0);
     }
 
     render() {
         return React.Children.only(this.props.children);
     }
 }
+
+/**
+ * Modified version of Tooltip for Jest/Enzyme tests. Instead of manipulating the document root it
+ * renders the tooltip content (in TestTooltipContent) next to "children" / hover area (TestTooltipHoverArea).
+ *
+ * The test tooltip can only be toggled with `jestWrapper.simulate("mouseenter")` and `jestWrapper.simulate("mouseleave")`.
+ */
+export class TestTooltip extends Component {
+    constructor(props, context) {
+        super(props, context);
+
+        this.state = {
+            isOpen: false,
+            isHovered: false
+        };
+    }
+
+    static propTypes = {
+        tooltip: PropTypes.node,
+        children: PropTypes.element.isRequired,
+        isEnabled: PropTypes.bool,
+        verticalAttachments: PropTypes.array,
+        isOpen: PropTypes.bool
+    };
+
+    static defaultProps = {
+        isEnabled: true,
+        verticalAttachments: ["top", "bottom"]
+    };
+
+    _onMouseEnter = (e) => {
+        this.setState({ isOpen: true, isHovered: true });
+    }
+
+    _onMouseLeave = (e) => {
+        this.setState({ isOpen: false, isHovered: false });
+    }
+
+    render() {
+        const { isEnabled, tooltip } = this.props;
+        const isOpen = this.props.isOpen != null ? this.props.isOpen : this.state.isOpen;
+
+        return (
+            <div>
+                <TestTooltipTarget
+                    onMouseEnter={this._onMouseEnter}
+                    onMouseLeave={this._onMouseLeave}
+                >
+                    {this.props.children}
+                </TestTooltipTarget>
+
+                { tooltip && isEnabled && isOpen &&
+                    <TestTooltipContent>
+                        <TooltipPopover isOpen={true} target={this} {...this.props} children={this.props.tooltip} />
+                        {this.props.tooltip}
+                    </TestTooltipContent>
+                }
+            </div>
+        )
+    }
+}
+
+export const TestTooltipTarget = ({ children, onMouseEnter, onMouseLeave }) =>
+    <div className="test-tooltip-hover-area" onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
+        {children}
+    </div>
+
+export const TestTooltipContent = ({ children }) => <div className="test-tooltip-content">{children}</div>
diff --git a/frontend/src/metabase/css/components/list.css b/frontend/src/metabase/css/components/list.css
index be2a8a8b70b2ac67a1adfe2cfeae2ec351f89d1f..21b6f3d7b9d0b9416e1acbabc4f5b86814f96b6f 100644
--- a/frontend/src/metabase/css/components/list.css
+++ b/frontend/src/metabase/css/components/list.css
@@ -37,8 +37,7 @@
 
 .List-item {
     display: flex;
-    border-radius: 6px;
-    border: 2px solid transparent;
+    border-radius: 4px;
     margin-top: 2px;
     margin-bottom: 2px;
 }
diff --git a/frontend/src/metabase/css/core/base.css b/frontend/src/metabase/css/core/base.css
index 6ed9b2935a3893690157e4e8a137c034fb17492f..bc19008d1e96161ddebe4eb394d30987483a7059 100644
--- a/frontend/src/metabase/css/core/base.css
+++ b/frontend/src/metabase/css/core/base.css
@@ -17,8 +17,10 @@ body {
     height: 100%; /* ensure the entire page will fill the window */
     display: flex;
     flex-direction: column;
+
     text-rendering: optimizeLegibility;
     -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 
 /*
diff --git a/frontend/src/metabase/css/core/hide.css b/frontend/src/metabase/css/core/hide.css
index c3daca5b9b3a6d9d35621ad2bf917602514e158b..58ac6c1cdc5073c497ca5c53e55113b86fd78ace 100644
--- a/frontend/src/metabase/css/core/hide.css
+++ b/frontend/src/metabase/css/core/hide.css
@@ -1,5 +1,5 @@
 .hide { display: none !important; }
-.show { display: inheirt; }
+.show { display: inherit; }
 
 .hidden { visibility: hidden; }
 
diff --git a/frontend/src/metabase/css/query_builder.css b/frontend/src/metabase/css/query_builder.css
index e2cdcdbe8c773e0328f2f2d3eceed2569cc84988..7162c0e97cfb780683ab9775b41785436fdd00a5 100644
--- a/frontend/src/metabase/css/query_builder.css
+++ b/frontend/src/metabase/css/query_builder.css
@@ -243,25 +243,25 @@
 .QueryError-image--noRows {
   width: 120px;
   height: 120px;
-  background-image: url('../assets/img/no_results.svg');
+  background-image: url('../app/assets/img/no_results.svg');
 }
 
 .QueryError-image--queryError {
   width: 120px;
   height: 120px;
-  background-image: url('../assets/img/no_understand.svg');
+  background-image: url('../app/assets/img/no_understand.svg');
 }
 
 .QueryError-image--serverError {
   width: 120px;
   height: 148px;
-  background-image: url('../assets/img/blown_up.svg');
+  background-image: url('../app/assets/img/blown_up.svg');
 }
 
 .QueryError-image--timeout {
   width: 120px;
   height: 120px;
-  background-image: url('../assets/img/stopwatch.svg');
+  background-image: url('../app/assets/img/stopwatch.svg');
 }
 
 .QueryError-message {
diff --git a/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx b/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
index b6d7354131b79aed67036368801438b9b024362f..3e4312213afaa1cfaab6fc58cc88d00d733f01bf 100644
--- a/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashCardCardParameterMapper.jsx
@@ -69,6 +69,7 @@ export default class DashCardCardParameterMapper extends Component {
     componentDidMount() {
         const { card } = this.props;
         // Type check for Flow
+
         card.dataset_query instanceof AtomicQuery && this.props.fetchDatabaseMetadata(card.dataset_query.database);
     }
 
diff --git a/frontend/src/metabase/home/containers/HomepageApp.integ.spec.js b/frontend/src/metabase/home/containers/HomepageApp.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..4af645adef4f2564a1edda2bd7cb3b4b0d5d88fd
--- /dev/null
+++ b/frontend/src/metabase/home/containers/HomepageApp.integ.spec.js
@@ -0,0 +1,86 @@
+import {
+    login,
+    createTestStore, createSavedQuestion, clickRouterLink
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from "enzyme";
+import {
+    orders_past_30_days_segment,
+    unsavedOrderCountQuestion,
+    vendor_count_metric
+} from "metabase/__support__/sample_dataset_fixture";
+import { delay } from 'metabase/lib/promise';
+
+import HomepageApp from "metabase/home/containers/HomepageApp";
+import { createMetric, createSegment } from "metabase/admin/datamodel/datamodel";
+import { FETCH_ACTIVITY } from "metabase/home/actions";
+import { QUERY_COMPLETED } from "metabase/query_builder/actions";
+
+import Activity from "metabase/home/components/Activity";
+import ActivityItem from "metabase/home/components/ActivityItem";
+import ActivityStory from "metabase/home/components/ActivityStory";
+import Scalar from "metabase/visualizations/visualizations/Scalar";
+
+describe("HomepageApp", () => {
+    beforeAll(async () => {
+        await login()
+
+        // Create some entities that will show up in the top of activity feed
+        // This test doesn't care if there already are existing items in the feed or not
+        // Delays are required for having separable creation times for each entity
+        await createSavedQuestion(unsavedOrderCountQuestion)
+        await delay(100);
+        await createSegment(orders_past_30_days_segment);
+        await delay(100);
+        await createMetric(vendor_count_metric);
+        await delay(100);
+    })
+
+    describe("activity feed", async () => {
+        it("shows the expected list of activity", async () => {
+            const store = await createTestStore()
+
+            store.pushPath("/");
+            const homepageApp = mount(store.connectContainer(<HomepageApp />));
+            await store.waitForActions([FETCH_ACTIVITY])
+
+            const activityFeed = homepageApp.find(Activity);
+            const activityItems = activityFeed.find(ActivityItem);
+            const activityStories = activityFeed.find(ActivityStory);
+
+            expect(activityItems.length).toBeGreaterThanOrEqual(3);
+            expect(activityStories.length).toBeGreaterThanOrEqual(3);
+
+            expect(activityItems.at(0).text()).toMatch(/Vendor count/);
+            expect(activityStories.at(0).text()).toMatch(/Tells how many vendors we have/);
+
+            expect(activityItems.at(1).text()).toMatch(/Past 30 days/);
+            expect(activityStories.at(1).text()).toMatch(/Past 30 days created at/);
+
+            // eslint-disable-next-line no-irregular-whitespace
+            expect(activityItems.at(2).text()).toMatch(/You saved a question about Orders/);
+            expect(activityStories.at(2).text()).toMatch(new RegExp(unsavedOrderCountQuestion.displayName()));
+
+
+        });
+        it("shows successfully open QB for a metric when clicking the metric name", async () => {
+            const store = await createTestStore()
+
+            store.pushPath("/");
+
+            // In this test we have to render the whole app in order to get links work properly
+            const app = mount(store.getAppContainer())
+            await store.waitForActions([FETCH_ACTIVITY])
+            const homepageApp = app.find(HomepageApp);
+
+            const activityFeed = homepageApp.find(Activity);
+            const metricLink = activityFeed.find(ActivityItem).find('a[children="Vendor count"]').first();
+            clickRouterLink(metricLink)
+            
+            await store.waitForActions([QUERY_COMPLETED]);
+            expect(app.find(Scalar).text()).toBe("200");
+        })
+    });
+
+});
diff --git a/frontend/src/metabase/icon_paths.js b/frontend/src/metabase/icon_paths.js
index 1d090d3c0340d3360a15f4d847738337cd514761..9c658befe881179fca8f13b1917ae7c912cafcaa 100644
--- a/frontend/src/metabase/icon_paths.js
+++ b/frontend/src/metabase/icon_paths.js
@@ -126,6 +126,10 @@ export var ICON_PATHS = {
         attrs: { fillRule: "evenodd" }
     },
     label: 'M14.577 31.042a2.005 2.005 0 0 1-2.738-.733L1.707 12.759c-.277-.477-.298-1.265-.049-1.757L6.45 1.537C6.7 1.044 7.35.67 7.9.7l10.593.582c.551.03 1.22.44 1.498.921l10.132 17.55a2.002 2.002 0 0 1-.734 2.737l-14.812 8.552zm.215-22.763a3.016 3.016 0 1 0-5.224 3.016 3.016 3.016 0 0 0 5.224-3.016z',
+    ldap: {
+        path: 'M1.006 3h13.702c.554 0 1.178.41 1.39.915l.363.874c.21.504.827.915 1.376.915h13.169c.54 0 .994.448.994 1.001v20.952a.99.99 0 0 1-.992 1H1.002c-.54 0-.993-.45-.993-1.005l-.01-23.646C0 3.446.45 3 1.007 3zM16.5 19.164c1.944 0 3.52-1.828 3.52-4.082 0-2.254-1.576-4.082-3.52-4.082-1.945 0-3.52 1.828-3.52 4.082 0 2.254 1.575 4.082 3.52 4.082zm6.5 4.665c0-1.872-1.157-3.521-2.913-4.484-.927.97-2.192 1.568-3.587 1.568s-2.66-.597-3.587-1.568C11.157 20.308 10 21.957 10 23.83h13z',
+        attrs: { fillRule: 'evenodd' }
+    },
     left: "M21,0 L5,16 L21,32 L21,5.47117907e-13 L21,0 Z",
     link: "M12.56 17.04c-1.08 1.384-1.303 1.963 1.755 4.04 3.058 2.076 7.29.143 8.587-1.062 1.404-1.304 4.81-4.697 7.567-7.842 2.758-3.144 1.338-8.238-.715-9.987-5.531-4.71-9.5-.554-11.088.773-2.606 2.176-5.207 5.144-5.207 5.144s1.747-.36 2.784 0c1.036.36 2.102.926 2.102.926l4.003-3.969s2.367-1.907 4.575 0 .674 4.404 0 5.189c-.674.784-6.668 6.742-6.668 6.742s-1.52.811-2.37.811c-.85 0-2.582-.528-2.582-.932 0-.405-1.665-1.22-2.744.166zm7.88-2.08c1.08-1.384 1.303-1.963-1.755-4.04-3.058-2.076-7.29-.143-8.587 1.062-1.404 1.304-4.81 4.697-7.567 7.842-2.758 3.144-1.338 8.238.715 9.987 5.531 4.71 9.5.554 11.088-.773 2.606-2.176 5.207-5.144 5.207-5.144s-1.747.36-2.784 0a17.379 17.379 0 0 1-2.102-.926l-4.003 3.969s-2.367 1.907-4.575 0-.674-4.404 0-5.189c.674-.784 6.668-6.742 6.668-6.742s1.52-.811 2.37-.811c.85 0 2.582.528 2.582.932 0 .405 1.665 1.22 2.744-.166z",
     line: 'M18.867 16.377l-3.074-3.184-.08.077-.002-.002.01-.01-.53-.528-.066-.07-.001.002-2.071-2.072L-.002 23.645l2.668 2.668 10.377-10.377 3.074 3.183.08-.076.001.003-.008.008.5.501.094.097.002-.001 2.072 2.072L31.912 8.669 29.244 6 18.867 16.377z',
diff --git a/frontend/src/metabase/internal/__snapshots__/components.spec.js.snap b/frontend/src/metabase/internal/__snapshots__/components.spec.js.snap
index ecd542cc21ab2618366225fc7e38c539440603d6..a815f23cff41b4a3cdb6f87754c79987796a649e 100644
--- a/frontend/src/metabase/internal/__snapshots__/components.spec.js.snap
+++ b/frontend/src/metabase/internal/__snapshots__/components.spec.js.snap
@@ -55,22 +55,18 @@ exports[`Button should render "with an icon" correctly 1`] = `
 </button>
 `;
 
-exports[`CheckBox should render "off" correctly 1`] = `
+exports[`CheckBox should render "Default - Off" correctly 1`] = `
 <div
   className="cursor-pointer"
   onClick={[Function]}
-  style={undefined}
 >
   <div
+    className="flex align-center justify-center rounded"
     style={
       Object {
-        "alignItems": "center",
         "backgroundColor": "white",
         "border": "2px solid #ddd",
-        "borderRadius": 4,
-        "display": "flex",
         "height": 16,
-        "justifyContent": "center",
         "width": 16,
       }
     }
@@ -78,26 +74,18 @@ exports[`CheckBox should render "off" correctly 1`] = `
 </div>
 `;
 
-exports[`CheckBox should render "on inverted" correctly 1`] = `
+exports[`CheckBox should render "Green" correctly 1`] = `
 <div
   className="cursor-pointer"
   onClick={[Function]}
-  style={
-    Object {
-      "color": "#509EE3",
-    }
-  }
 >
   <div
+    className="flex align-center justify-center rounded"
     style={
       Object {
-        "alignItems": "center",
-        "backgroundColor": "currentColor",
-        "border": "2px solid currentColor",
-        "borderRadius": 4,
-        "display": "flex",
+        "backgroundColor": "#9CC177",
+        "border": "2px solid #9CC177",
         "height": 16,
-        "justifyContent": "center",
         "width": 16,
       }
     }
@@ -124,22 +112,18 @@ exports[`CheckBox should render "on inverted" correctly 1`] = `
 </div>
 `;
 
-exports[`CheckBox should render "on" correctly 1`] = `
+exports[`CheckBox should render "On - Default blue" correctly 1`] = `
 <div
   className="cursor-pointer"
   onClick={[Function]}
-  style={undefined}
 >
   <div
+    className="flex align-center justify-center rounded"
     style={
       Object {
-        "alignItems": "center",
-        "backgroundColor": "white",
-        "border": "2px solid #ddd",
-        "borderRadius": 4,
-        "display": "flex",
+        "backgroundColor": "#509EE3",
+        "border": "2px solid #509EE3",
         "height": 16,
-        "justifyContent": "center",
         "width": 16,
       }
     }
@@ -152,7 +136,7 @@ exports[`CheckBox should render "on" correctly 1`] = `
       size={12}
       style={
         Object {
-          "color": "currentColor",
+          "color": "white",
         }
       }
       viewBox="0 0 32 32"
@@ -166,136 +150,181 @@ exports[`CheckBox should render "on" correctly 1`] = `
 </div>
 `;
 
-exports[`StackedCheckBox should render "off" correctly 1`] = `
-<span
-  className={undefined}
-  style={
-    Object {
-      "position": "relative",
-    }
-  }
+exports[`CheckBox should render "Purple" correctly 1`] = `
+<div
+  className="cursor-pointer"
+  onClick={[Function]}
 >
   <div
-    className="cursor-pointer"
-    onClick={[Function]}
+    className="flex align-center justify-center rounded"
     style={
       Object {
-        "left": 3,
-        "position": "absolute",
-        "top": -3,
-        "zIndex": -1,
+        "backgroundColor": "#A989C5",
+        "border": "2px solid #A989C5",
+        "height": 16,
+        "width": 16,
       }
     }
   >
-    <div
+    <svg
+      className="Icon Icon-check"
+      fill="currentcolor"
+      height={12}
+      name="check"
+      size={12}
       style={
         Object {
-          "alignItems": "center",
-          "backgroundColor": "white",
-          "border": "2px solid #ddd",
-          "borderRadius": 4,
-          "display": "flex",
-          "height": 16,
-          "justifyContent": "center",
-          "width": 16,
+          "color": "white",
         }
       }
-    />
+      viewBox="0 0 32 32"
+      width={12}
+    >
+      <path
+        d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
+      />
+    </svg>
   </div>
+</div>
+`;
+
+exports[`CheckBox should render "Red" correctly 1`] = `
+<div
+  className="cursor-pointer"
+  onClick={[Function]}
+>
   <div
-    className="cursor-pointer"
-    onClick={[Function]}
-    style={Object {}}
+    className="flex align-center justify-center rounded"
+    style={
+      Object {
+        "backgroundColor": "#EF8C8C",
+        "border": "2px solid #EF8C8C",
+        "height": 16,
+        "width": 16,
+      }
+    }
   >
-    <div
+    <svg
+      className="Icon Icon-check"
+      fill="currentcolor"
+      height={12}
+      name="check"
+      size={12}
       style={
         Object {
-          "alignItems": "center",
-          "backgroundColor": "white",
-          "border": "2px solid #ddd",
-          "borderRadius": 4,
-          "display": "flex",
-          "height": 16,
-          "justifyContent": "center",
-          "width": 16,
+          "color": "white",
         }
       }
-    />
+      viewBox="0 0 32 32"
+      width={12}
+    >
+      <path
+        d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
+      />
+    </svg>
   </div>
-</span>
+</div>
 `;
 
-exports[`StackedCheckBox should render "on inverted" correctly 1`] = `
-<span
-  className={undefined}
-  style={
-    Object {
-      "color": "#509EE3",
-      "position": "relative",
-    }
-  }
+exports[`CheckBox should render "Yellow" correctly 1`] = `
+<div
+  className="cursor-pointer"
+  onClick={[Function]}
 >
   <div
-    className="cursor-pointer"
-    onClick={[Function]}
+    className="flex align-center justify-center rounded"
     style={
       Object {
-        "left": 3,
-        "position": "absolute",
-        "top": -3,
-        "zIndex": -1,
+        "backgroundColor": "#f9d45c",
+        "border": "2px solid #f9d45c",
+        "height": 16,
+        "width": 16,
       }
     }
   >
-    <div
+    <svg
+      className="Icon Icon-check"
+      fill="currentcolor"
+      height={12}
+      name="check"
+      size={12}
       style={
         Object {
-          "alignItems": "center",
-          "backgroundColor": "currentColor",
-          "border": "2px solid currentColor",
-          "borderRadius": 4,
-          "display": "flex",
-          "height": 16,
-          "justifyContent": "center",
-          "width": 16,
+          "color": "white",
         }
       }
+      viewBox="0 0 32 32"
+      width={12}
     >
-      <svg
-        className="Icon Icon-check"
-        fill="currentcolor"
-        height={12}
-        name="check"
-        size={12}
+      <path
+        d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
+      />
+    </svg>
+  </div>
+</div>
+`;
+
+exports[`StackedCheckBox should render "Checked with color" correctly 1`] = `
+<div
+  className="relative"
+>
+  <span
+    className="absolute"
+    style={
+      Object {
+        "left": 4,
+        "top": -4,
+        "zIndex": -1,
+      }
+    }
+  >
+    <div
+      className="cursor-pointer"
+      onClick={[Function]}
+    >
+      <div
+        className="flex align-center justify-center rounded"
         style={
           Object {
-            "color": "white",
+            "backgroundColor": "#A989C5",
+            "border": "2px solid #A989C5",
+            "height": 16,
+            "width": 16,
           }
         }
-        viewBox="0 0 32 32"
-        width={12}
       >
-        <path
-          d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
-        />
-      </svg>
+        <svg
+          className="Icon Icon-check"
+          fill="currentcolor"
+          height={12}
+          name="check"
+          size={12}
+          style={
+            Object {
+              "color": "white",
+            }
+          }
+          viewBox="0 0 32 32"
+          width={12}
+        >
+          <path
+            d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
+          />
+        </svg>
+      </div>
     </div>
-  </div>
+  </span>
   <div
     className="cursor-pointer"
     onClick={[Function]}
-    style={Object {}}
   >
     <div
+      className="flex align-center justify-center rounded"
       style={
         Object {
-          "alignItems": "center",
-          "backgroundColor": "currentColor",
-          "border": "2px solid currentColor",
-          "borderRadius": 4,
-          "display": "flex",
+          "backgroundColor": "#A989C5",
+          "border": "2px solid #A989C5",
           "height": 16,
-          "justifyContent": "center",
           "width": 16,
         }
       }
@@ -320,40 +349,70 @@ exports[`StackedCheckBox should render "on inverted" correctly 1`] = `
       </svg>
     </div>
   </div>
-</span>
+</div>
 `;
 
-exports[`StackedCheckBox should render "on" correctly 1`] = `
-<span
-  className={undefined}
-  style={
-    Object {
-      "position": "relative",
-    }
-  }
+exports[`StackedCheckBox should render "Checked" correctly 1`] = `
+<div
+  className="relative"
 >
-  <div
-    className="cursor-pointer"
-    onClick={[Function]}
+  <span
+    className="absolute"
     style={
       Object {
-        "left": 3,
-        "position": "absolute",
-        "top": -3,
+        "left": 4,
+        "top": -4,
         "zIndex": -1,
       }
     }
   >
     <div
+      className="cursor-pointer"
+      onClick={[Function]}
+    >
+      <div
+        className="flex align-center justify-center rounded"
+        style={
+          Object {
+            "backgroundColor": "#509EE3",
+            "border": "2px solid #509EE3",
+            "height": 16,
+            "width": 16,
+          }
+        }
+      >
+        <svg
+          className="Icon Icon-check"
+          fill="currentcolor"
+          height={12}
+          name="check"
+          size={12}
+          style={
+            Object {
+              "color": "white",
+            }
+          }
+          viewBox="0 0 32 32"
+          width={12}
+        >
+          <path
+            d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
+          />
+        </svg>
+      </div>
+    </div>
+  </span>
+  <div
+    className="cursor-pointer"
+    onClick={[Function]}
+  >
+    <div
+      className="flex align-center justify-center rounded"
       style={
         Object {
-          "alignItems": "center",
-          "backgroundColor": "white",
-          "border": "2px solid #ddd",
-          "borderRadius": 4,
-          "display": "flex",
+          "backgroundColor": "#509EE3",
+          "border": "2px solid #509EE3",
           "height": 16,
-          "justifyContent": "center",
           "width": 16,
         }
       }
@@ -366,7 +425,7 @@ exports[`StackedCheckBox should render "on" correctly 1`] = `
         size={12}
         style={
           Object {
-            "color": "currentColor",
+            "color": "white",
           }
         }
         viewBox="0 0 32 32"
@@ -378,46 +437,57 @@ exports[`StackedCheckBox should render "on" correctly 1`] = `
       </svg>
     </div>
   </div>
+</div>
+`;
+
+exports[`StackedCheckBox should render "Off - Default" correctly 1`] = `
+<div
+  className="relative"
+>
+  <span
+    className="absolute"
+    style={
+      Object {
+        "left": 4,
+        "top": -4,
+        "zIndex": -1,
+      }
+    }
+  >
+    <div
+      className="cursor-pointer"
+      onClick={[Function]}
+    >
+      <div
+        className="flex align-center justify-center rounded"
+        style={
+          Object {
+            "backgroundColor": "white",
+            "border": "2px solid #ddd",
+            "height": 16,
+            "width": 16,
+          }
+        }
+      />
+    </div>
+  </span>
   <div
     className="cursor-pointer"
     onClick={[Function]}
-    style={Object {}}
   >
     <div
+      className="flex align-center justify-center rounded"
       style={
         Object {
-          "alignItems": "center",
           "backgroundColor": "white",
           "border": "2px solid #ddd",
-          "borderRadius": 4,
-          "display": "flex",
           "height": 16,
-          "justifyContent": "center",
           "width": 16,
         }
       }
-    >
-      <svg
-        className="Icon Icon-check"
-        fill="currentcolor"
-        height={12}
-        name="check"
-        size={12}
-        style={
-          Object {
-            "color": "currentColor",
-          }
-        }
-        viewBox="0 0 32 32"
-        width={12}
-      >
-        <path
-          d="M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z "
-        />
-      </svg>
-    </div>
+    />
   </div>
-</span>
+</div>
 `;
 
 exports[`Toggle should render "off" correctly 1`] = `
diff --git a/frontend/src/metabase/lib/api.js b/frontend/src/metabase/lib/api.js
index 75b9941e936a7e89611989d4c80fd92d3faf3317..ea661c351c4dc4053ee553b15525db6c6fcca066 100644
--- a/frontend/src/metabase/lib/api.js
+++ b/frontend/src/metabase/lib/api.js
@@ -82,8 +82,10 @@ class Api extends EventEmitter {
         }
     }
 
+    // TODO Atte Keinänen 6/26/17: Replacing this with isomorphic-fetch could simplify the implementation
     _makeRequest(method, url, headers, body, data, options) {
         return new Promise((resolve, reject) => {
+            let isCancelled = false;
             let xhr = new XMLHttpRequest();
             xhr.open(method, this.basename + url);
             for (let headerName in headers) {
@@ -102,7 +104,8 @@ class Api extends EventEmitter {
                     } else {
                         reject({
                             status: xhr.status,
-                            data: body
+                            data: body,
+                            isCancelled: isCancelled
                         });
                     }
                     if (!options.noEvent) {
@@ -113,10 +116,13 @@ class Api extends EventEmitter {
             xhr.send(body);
 
             if (options.cancelled) {
-                options.cancelled.then(() => xhr.abort());
+                options.cancelled.then(() => {
+                    isCancelled = true;
+                    xhr.abort()
+                });
             }
         });
     }
 }
 
-export default new Api();
+export default new Api();
\ No newline at end of file
diff --git a/frontend/src/metabase/lib/dom.js b/frontend/src/metabase/lib/dom.js
index af5a76cbd5017d7a543328d49755f8bbe1e490a4..8ff4c73b2607438aa58ce70654fc3e7a544c8bf2 100644
--- a/frontend/src/metabase/lib/dom.js
+++ b/frontend/src/metabase/lib/dom.js
@@ -231,3 +231,13 @@ export function moveToFront(element) {
         element.parentNode.appendChild(element);
     }
 }
+
+/**
+ * @returns the clip-path CSS property referencing the clip path in the current document, taking into account the <base> tag.
+ */
+export function clipPathReference(id: string): string {
+    // add the current page URL (with fragment removed) to support pages with <base> tag.
+    // https://stackoverflow.com/questions/18259032/using-base-tag-on-a-page-that-contains-svg-marker-elements-fails-to-render-marke
+    const url = window.location.href.replace(/#.*$/, "") + "#" + id;
+    return `url(${url})`;
+}
diff --git a/frontend/src/metabase/lib/query.js b/frontend/src/metabase/lib/query.js
index 6aafc089eab7a8c8f8a72f79ef0909dc38b39a0e..b0d790c8618d8e3057c8043eff95eadc4d47a832 100644
--- a/frontend/src/metabase/lib/query.js
+++ b/frontend/src/metabase/lib/query.js
@@ -334,17 +334,25 @@ var Query = {
         return Array.isArray(field) && mbqlEq(field[0], "aggregation");
     },
 
+    // field literal has the formal ["field-literal", <field-name>, <field-base-type>]
+    isFieldLiteral(field) {
+        return Array.isArray(field) && field.length === 3 && mbqlEq(field[0], "field-literal") && _.isString(field[1]) && _.isString(field[2]);
+    },
+
     isValidField(field) {
         return (
             (Query.isRegularField(field)) ||
             (Query.isLocalField(field)) ||
             (Query.isForeignKeyField(field) && Query.isRegularField(field[1]) && Query.isRegularField(field[2])) ||
+            // datetime field can  be either 4-item (deprecated): ["datetime-field", <field>, "as", <unit>]
+            // or 3 item (preferred style): ["datetime-field", <field>, <unit>]
             (Query.isDatetimeField(field)   && Query.isValidField(field[1]) &&
                 (field.length === 4 ?
                     (field[2] === "as" && typeof field[3] === "string") : // deprecated
                     typeof field[2] === "string")) ||
             (Query.isExpressionField(field) && _.isString(field[1])) ||
-            (Query.isAggregateField(field)  && typeof field[1] === "number")
+            (Query.isAggregateField(field)  && typeof field[1] === "number") ||
+            Query.isFieldLiteral(field)
         );
     },
 
@@ -368,6 +376,8 @@ var Query = {
             return Query.getFieldTargetId(field[1]);
         } else if (Query.isBinningStrategy(field)) {
             return Query.getFieldTargetId(field[1]);
+        } else if (Query.isFieldLiteral(field)) {
+            return field;
         }
         console.warn("Unknown field type: ", field);
     },
@@ -413,7 +423,9 @@ var Query = {
                 table: tableDef,
                 field: fieldDef,
                 path: path
-            }
+            };
+        } else if (Query.isFieldLiteral(field)) {
+            return { table: tableDef, field: Table.getField(tableDef, field), path }; // just pretend it's a normal field
         }
 
         console.warn("Unknown field type: ", field);
diff --git a/frontend/src/metabase/lib/query/field.js b/frontend/src/metabase/lib/query/field.js
index 9ddfd7e1390c5936cbfbc53a4c0805a2d6079288..ed5d95ad35f1c41f407ebbff8d2e439328816f26 100644
--- a/frontend/src/metabase/lib/query/field.js
+++ b/frontend/src/metabase/lib/query/field.js
@@ -21,6 +21,8 @@ export function getFieldTargetId(field: FieldReference): ?FieldId {
     } else if (isBinningStrategy(field)) {
         // $FlowFixMe
         return getFieldTargetId(field[1]);
+    } else if (isFieldLiteral(field)) {
+        return field;
     }
     console.warn("Unknown field type: ", field);
 }
@@ -45,6 +47,10 @@ export function isBinningStrategy(field: FieldReference): boolean {
     return Array.isArray(field) && mbqlEq(field[0], "binning-strategy");
 }
 
+export function isFieldLiteral(field: FieldReference): boolean {
+    return Array.isArray(field) && field.length === 3 && mbqlEq(field[0], "field-literal");
+}
+
 export function isExpressionField(field: FieldReference): boolean {
     return Array.isArray(field) && field.length === 2 && mbqlEq(field[0], "expression");
 }
diff --git a/frontend/src/metabase/lib/query/util.js b/frontend/src/metabase/lib/query/util.js
index 5c80c8130875e8d011f871ad34a773eac309f93c..806b6d3423fd27397de91a5925516b7e4522e524 100644
--- a/frontend/src/metabase/lib/query/util.js
+++ b/frontend/src/metabase/lib/query/util.js
@@ -8,6 +8,27 @@ export const mbql = (a: string):string =>
 export const mbqlEq = (a: string, b: string): boolean =>
     mbql(a) === mbql(b);
 
+// determines whether 2 field IDs are equal. This is needed rather than
+// doing a simple comparison because field IDs are not guaranteed to be numeric:
+// the might be FieldLiterals, e.g. [field-literal <name> <unit>], instead.
+export const fieldIdsEq = (a: any, b: any): boolean => {
+    if (typeof a !== typeof b) return false;
+
+    if (typeof a === "number") return a === b;
+
+    if (a == null && b == null) return true;
+
+    // field literals
+    if (Array.isArray(a) && Array.isArray(b) &&
+        a.length === 3 && b.length === 3 &&
+        a[0] === "field-literal" && b[0] === "field-literal") {
+        return a[1] === b[1];
+    }
+
+    console.warn("Don't know how to compare these IDs:", a, b);
+    return false;
+}
+
 export const noNullValues = (clause: any[]): boolean =>
     _.all(clause, c => c != null);
 
diff --git a/frontend/src/metabase/lib/query_time.js b/frontend/src/metabase/lib/query_time.js
index 9a56774d3ab4839d91c6f4ad20d288f67583cb15..335d9ab79fe9a2f96045fc18598de373e44fe9ba 100644
--- a/frontend/src/metabase/lib/query_time.js
+++ b/frontend/src/metabase/lib/query_time.js
@@ -183,14 +183,18 @@ export function parseFieldBucketing(field, defaultUnit = null) {
     if (Array.isArray(field)) {
         if (mbqlEq(field[0], "datetime-field")) {
             if (field.length === 4) {
-                // Deprecated legacy format, see DatetimeFieldDimension
+                // Deprecated legacy format [datetime-field field "as" unit], see DatetimeFieldDimension for more info
                 return field[3];
             } else {
+                // Current format [datetime-field field unit]
                 return field[2]
             }
         } if (mbqlEq(field[0], "fk->") || mbqlEq(field[0], "field-id")) {
             return defaultUnit;
-        } else {
+        } if (mbqlEq(field[0], "field-literal")) {
+            return defaultUnit;
+        }
+        else {
             console.warn("Unknown field format", field);
         }
     }
@@ -213,6 +217,7 @@ export function parseFieldTargetId(field) {
         if (mbqlEq(field[0], "field-id"))       return field[1];
         if (mbqlEq(field[0], "fk->"))           return field[1];
         if (mbqlEq(field[0], "datetime-field")) return parseFieldTargetId(field[1]);
+        if (mbqlEq(field[0], "field-literal"))  return field;
     }
 
     console.warn("Unknown field format", field);
diff --git a/frontend/src/metabase/lib/settings.js b/frontend/src/metabase/lib/settings.js
index 5460a7b95681cf17c26a8c03735ade94d01ef0f2..4c0fdfaefbcdeaa6d6d91ebc95a184cc27127efe 100644
--- a/frontend/src/metabase/lib/settings.js
+++ b/frontend/src/metabase/lib/settings.js
@@ -51,6 +51,10 @@ const MetabaseSettings = {
         return mb_settings.google_auth_client_id != null;
     },
 
+    ldapEnabled: function() {
+        return mb_settings.ldap_configured;
+    },
+
     newVersionAvailable: function(settings) {
         let versionInfo = _.findWhere(settings, {key: "version-info"}),
             currentVersion = MetabaseSettings.get("version").tag;
diff --git a/frontend/src/metabase/lib/urls.js b/frontend/src/metabase/lib/urls.js
index 3a83c230e064af2ca68e7209d85f102577e56c48..f60668536a4b224d0e8bb414c3845b2d0465e0fc 100644
--- a/frontend/src/metabase/lib/urls.js
+++ b/frontend/src/metabase/lib/urls.js
@@ -70,12 +70,12 @@ export function label(label) {
 }
 
 export function publicCard(uuid, type = null) {
-    const siteUrl = MetabaseSettings.get("site-url");
+    const siteUrl = MetabaseSettings.get("site_url");
     return `${siteUrl}/public/question/${uuid}` + (type ? `.${type}` : ``);
 }
 
 export function publicDashboard(uuid) {
-    const siteUrl = MetabaseSettings.get("site-url");
+    const siteUrl = MetabaseSettings.get("site_url");
     return `${siteUrl}/public/dashboard/${uuid}`;
 }
 
diff --git a/frontend/src/metabase/meta/Card.js b/frontend/src/metabase/meta/Card.js
index 54d3c6c7024daf6c59b08ea74f26e4e892dd85a8..3d73996f46bc47c99fce3d573156704a1e4d11d0 100644
--- a/frontend/src/metabase/meta/Card.js
+++ b/frontend/src/metabase/meta/Card.js
@@ -116,6 +116,8 @@ export function getParametersWithExtras(card: Card, parameterValues?: ParameterV
     })
 }
 
+// NOTE Atte Keinänen 7/5/17: Still used in dashboards and public questions.
+// Query builder uses `Question.getResults` which contains similar logic.
 export function applyParameters(
     card: Card,
     parameters: Parameter[],
diff --git a/frontend/src/metabase/meta/Dashboard.js b/frontend/src/metabase/meta/Dashboard.js
index eb4ebf035246e75a8fcde2b273559839b3af6a9e..6488d80f852e94c92770b5ca1fdcb529c255e15b 100644
--- a/frontend/src/metabase/meta/Dashboard.js
+++ b/frontend/src/metabase/meta/Dashboard.js
@@ -218,6 +218,7 @@ export function fieldFilterForParameterType(parameterType: ParameterType): Field
         case "id":          return (field: Field) => field.isID();
         case "category":    return (field: Field) => field.isCategory();
     }
+
     switch (parameterType) {
         case "location/city":     return (field: Field) => isa(field.special_type, TYPE.City);
         case "location/state":    return (field: Field) => isa(field.special_type, TYPE.State);
diff --git a/frontend/src/metabase/meta/types/Query.js b/frontend/src/metabase/meta/types/Query.js
index 831fceeba01a3955b281c1536efe850452c886a0..7be2639c27d0100bf081b69f12add8ce9ac05966 100644
--- a/frontend/src/metabase/meta/types/Query.js
+++ b/frontend/src/metabase/meta/types/Query.js
@@ -1,7 +1,7 @@
 /* @flow */
 
 import type { TableId } from "./Table";
-import type { FieldId } from "./Field";
+import type { FieldId, BaseType } from "./Field";
 import type { SegmentId } from "./Segment";
 import type { MetricId } from "./Metric";
 import type { ParameterType } from "./Parameter";
@@ -156,6 +156,9 @@ export type ForeignFieldReference =
 export type ExpressionReference =
     ["expression", ExpressionName];
 
+export type FieldLiteral =
+    ["field-literal", string, BaseType]; // ["field-literal", name, base-type]
+
 export type DatetimeField =
     ["datetime-field", LocalFieldReference | ForeignFieldReference, DatetimeUnit] |
     ["datetime-field", LocalFieldReference | ForeignFieldReference, "as", DatetimeUnit]; // @deprecated: don't include the "as" element
diff --git a/frontend/src/metabase/meta/types/Visualization.js b/frontend/src/metabase/meta/types/Visualization.js
index 3f302805054f249795d92f085434957056acf410..3e939d2de50bad825997db8f681bfb3d8e166647 100644
--- a/frontend/src/metabase/meta/types/Visualization.js
+++ b/frontend/src/metabase/meta/types/Visualization.js
@@ -51,8 +51,10 @@ export type ClickActionProps = {
     clicked?: ClickObject
 }
 
+export type OnChangeCardAndRun = ({ nextCard: Card, previousCard?: ?Card }) => void
+
 export type ClickActionPopoverProps = {
-    onChangeCardAndRun: (Object) => void,
+    onChangeCardAndRun: OnChangeCardAndRun,
     onClose: () => void,
 }
 
@@ -76,11 +78,16 @@ export type VisualizationProps = {
     isEditing: boolean,
     actionButtons: Node,
 
+    onRender: ({
+        yAxisSplit?: number[][],
+        warnings?: string[]
+    }) => void,
+
     hovered: ?HoverObject,
     onHoverChange: (?HoverObject) => void,
     onVisualizationClick: (?ClickObject) => void,
     visualizationIsClickable: (?ClickObject) => boolean,
-    onChangeCardAndRun: (Object) => void,
+    onChangeCardAndRun: OnChangeCardAndRun,
 
     onUpdateVisualizationSettings: ({ [key: string]: any }) => void
 }
diff --git a/frontend/src/metabase/nav/components/ProfileLink.jsx b/frontend/src/metabase/nav/components/ProfileLink.jsx
index d9b3ad48a7087e8c4656980fdad314394150a644..6c8c4694e7259871be97917a661e8a2bd25084eb 100644
--- a/frontend/src/metabase/nav/components/ProfileLink.jsx
+++ b/frontend/src/metabase/nav/components/ProfileLink.jsx
@@ -77,11 +77,13 @@ export default class ProfileLink extends Component {
                     <OnClickOutsideWrapper handleDismissal={this.closeDropdown}>
                         <div className="NavDropdown-content right">
                             <ul className="NavDropdown-content-layer">
-                                <li>
-                                    <Link to="/user/edit_current" data-metabase-event={"Navbar;Profile Dropdown;Edit Profile"} onClick={this.closeDropdown} className="Dropdown-item block text-white no-decoration">
-                                        Account Settings
-                                    </Link>
-                                </li>
+                                { !user.google_auth && !user.ldap_auth ?
+                                    <li>
+                                        <Link to="/user/edit_current" data-metabase-event={"Navbar;Profile Dropdown;Edit Profile"} onClick={this.closeDropdown} className="Dropdown-item block text-white no-decoration">
+                                            Account Settings
+                                        </Link>
+                                    </li>
+                                : null }
 
                                 { user.is_superuser && context !== 'admin' ?
                                     <li>
diff --git a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
index ed6e0296717c99c73e7c8a1404778a1522441df9..90b248396a23e3934b75a74567585b336d947c41 100644
--- a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
+++ b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
@@ -106,6 +106,10 @@ export default class TimeseriesFilterWidget extends Component {
                 currentDescription = "After " + currentDescription;
             } else if (currentFilter[0] === "<") {
                 currentDescription = "Before " + currentDescription;
+            } else if (currentFilter[0] === "IS_NULL") {
+                currentDescription = "Is Empty";
+            } else if (currentFilter[0] === "NOT_NULL") {
+                currentDescription = "Not Empty";
             }
         } else {
             currentDescription = "All Time";
diff --git a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.spec.jsx b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.spec.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f5856207278b16434a743a0de6f42a2131bbeafa
--- /dev/null
+++ b/frontend/src/metabase/qb/components/TimeseriesFilterWidget.spec.jsx
@@ -0,0 +1,64 @@
+/* eslint-disable flowtype/require-valid-file-annotation */
+import React from "react";
+import TimeseriesFilterWidget from "./TimeseriesFilterWidget";
+import { mount } from "enzyme";
+
+import Question from "metabase-lib/lib/Question";
+import {
+    DATABASE_ID,
+    ORDERS_TABLE_ID,
+    metadata
+} from "metabase/__support__/sample_dataset_fixture";
+
+const getTimeseriesFilterWidget = question => (
+    <TimeseriesFilterWidget
+        card={question.card()}
+        tableMetadata={question.tableMetadata()}
+        datasetQuery={question.query().datasetQuery()}
+        setDatasetQuery={() => {}}
+    />
+);
+
+describe("TimeseriesFilterWidget", () => {
+    const questionWithoutFilter = Question.create({
+        databaseId: DATABASE_ID,
+        tableId: ORDERS_TABLE_ID,
+        metadata
+    })
+        .query()
+        .addAggregation(["count"])
+        .addBreakout(["datetime-field", ["field-id", 1], "day"])
+        .question();
+
+    it("should display 'All Time' text if no filter is selected", () => {
+        const widget = mount(getTimeseriesFilterWidget(questionWithoutFilter));
+        expect(widget.find(".AdminSelect-content").text()).toBe("All Time");
+    });
+    it("should display 'Past 30 Days' text if that filter is selected", () => {
+        const questionWithFilter = questionWithoutFilter
+            .query()
+            .addFilter(["time-interval", ["field-id", 1], -30, "day"])
+            .question();
+
+        const widget = mount(getTimeseriesFilterWidget(questionWithFilter));
+        expect(widget.find(".AdminSelect-content").text()).toBe("Past 30 Days");
+    });
+    it("should display 'Is Empty' text if that filter is selected", () => {
+        const questionWithFilter = questionWithoutFilter
+            .query()
+            .addFilter(["IS_NULL", ["field-id", 1]])
+            .question();
+
+        const widget = mount(getTimeseriesFilterWidget(questionWithFilter));
+        expect(widget.find(".AdminSelect-content").text()).toBe("Is Empty");
+    });
+    it("should display 'Not Empty' text if that filter is selected", () => {
+        const questionWithFilter = questionWithoutFilter
+            .query()
+            .addFilter(["NOT_NULL", ["field-id", 1]])
+            .question();
+
+        const widget = mount(getTimeseriesFilterWidget(questionWithFilter));
+        expect(widget.find(".AdminSelect-content").text()).toBe("Not Empty");
+    });
+});
diff --git a/frontend/src/metabase/qb/components/actions/PivotByAction.jsx b/frontend/src/metabase/qb/components/actions/PivotByAction.jsx
index 5a1e852671e375ae99a58aef0e921325314fed35..20f3d8e7b2c14efba23b59a5a6a2a6861c4b0d49 100644
--- a/frontend/src/metabase/qb/components/actions/PivotByAction.jsx
+++ b/frontend/src/metabase/qb/components/actions/PivotByAction.jsx
@@ -65,11 +65,13 @@ export default (name: string, icon: string, fieldFilter: FieldFilter) =>
                         tableMetadata={tableMetadata}
                         fieldOptions={breakoutOptions}
                         onCommitBreakout={breakout => {
-                            onChangeCardAndRun({
-                                nextCard: question
-                                    .pivot([breakout], dimensions)
-                                    .card()
-                            });
+                            const nextCard = question
+                                .pivot([breakout], dimensions)
+                                .card();
+
+                            if (nextCard) {
+                                onChangeCardAndRun({ nextCard });
+                            }
                         }}
                         onClose={onClose}
                     />
diff --git a/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.unit.spec.js b/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
index 7521ce53cb482d69cbc09afe5f07471165dd157c..d8489c8b28e882a873b926f3457824e8fcf3b90f 100644
--- a/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
+++ b/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
@@ -52,7 +52,6 @@ describe("SummarizeBySegmentMetricAction", () => {
                 component
                     .find('.List-item-title[children="Sum of ..."]')
                     .simulate("click");
-                console.log(component.debug());
 
                 component
                     .find('.List-item-title[children="Subtotal"]')
diff --git a/frontend/src/metabase/qb/components/drill/ObjectDetailDrill.unit.spec.js b/frontend/src/metabase/qb/components/drill/ObjectDetailDrill.unit.spec.js
index 784d0d321069ced14f16bf3552df15936830330b..d7daec03df3e855c84a36efd170f65cec555248d 100644
--- a/frontend/src/metabase/qb/components/drill/ObjectDetailDrill.unit.spec.js
+++ b/frontend/src/metabase/qb/components/drill/ObjectDetailDrill.unit.spec.js
@@ -33,7 +33,6 @@ describe("ObjectDetailDrill", () => {
             source_table: ORDERS_TABLE_ID,
             filter: ["=", ["field-id", ORDERS_PK_FIELD_ID], 42]
         });
-        expect(newCard.display).toEqual(undefined);
     });
     it("should be return correct new card for FKs", () => {
         const actions = ObjectDetailDrill({
@@ -46,6 +45,5 @@ describe("ObjectDetailDrill", () => {
             source_table: PRODUCT_TABLE_ID,
             filter: ["=", ["field-id", PRODUCT_PK_FIELD_ID], 43]
         });
-        expect(newCard.display).toEqual(undefined);
     });
 });
diff --git a/frontend/src/metabase/qb/components/drill/TimeseriesPivotDrill.integ.spec.js b/frontend/src/metabase/qb/components/drill/TimeseriesPivotDrill.integ.spec.js
index d1fa3ccd7a8f00ba557bc105b16715781ede2019..374ff7274f87011938759e3a9f9ed3e37c1e7b10 100644
--- a/frontend/src/metabase/qb/components/drill/TimeseriesPivotDrill.integ.spec.js
+++ b/frontend/src/metabase/qb/components/drill/TimeseriesPivotDrill.integ.spec.js
@@ -4,4 +4,9 @@ describe("TimeseriesPivotDrill", () => {
         // Would be nice to run an integration test here to make sure that the resulting MBQL is valid and runnable
         pending();
     });
+    it("should accept the dimension value as a year string as in table visualization", () => {
+        // Intented to test that "Zoom In" for a table cell when you have broken out by year works correctly
+        // Could also be part of more comprehensive QB integrated test where the table cell is actually clicked
+        pending();
+    });
 });
diff --git a/frontend/src/metabase/qb/lib/actions.js b/frontend/src/metabase/qb/lib/actions.js
index 091026fc75df155b426d8440ba524e434f95f7ca..eef6b34227a46fc81df42748dcc888f5a87f3e81 100644
--- a/frontend/src/metabase/qb/lib/actions.js
+++ b/frontend/src/metabase/qb/lib/actions.js
@@ -4,6 +4,7 @@ import moment from "moment";
 import _ from "underscore";
 
 import Q from "metabase/lib/query"; // legacy query lib
+import { fieldIdsEq } from "metabase/lib/query/util";
 import * as Card from "metabase/meta/Card";
 import * as Query from "metabase/lib/query/query";
 import * as Field from "metabase/lib/query/field";
@@ -17,6 +18,7 @@ import type Table from "metabase-lib/lib/metadata/Table";
 import type { Card as CardObject } from "metabase/meta/types/Card";
 import type { StructuredQuery, FieldFilter } from "metabase/meta/types/Query";
 import type { DimensionValue } from "metabase/meta/types/Visualization";
+import { parseTimestamp } from "metabase/lib/time";
 
 // TODO: use icepick instead of mutation, make they handle frozen cards
 
@@ -94,7 +96,7 @@ const drillFilter = (card, value, column) => {
                 "as",
                 column.unit
             ],
-            moment(value).toISOString()
+            parseTimestamp(value, column.unit).toISOString()
         ];
     } else {
         const range = rangeForValue(value, column);
@@ -141,8 +143,10 @@ export const addOrUpdateBreakout = (card, breakout) => {
     let breakouts = Query.getBreakouts(newCard.dataset_query.query);
     for (let index = 0; index < breakouts.length; index++) {
         if (
-            Field.getFieldTargetId(breakouts[index]) ===
-            Field.getFieldTargetId(breakout)
+            fieldIdsEq(
+                Field.getFieldTargetId(breakouts[index]),
+                Field.getFieldTargetId(breakout)
+            )
         ) {
             newCard.dataset_query.query = Query.updateBreakout(
                 newCard.dataset_query.query,
@@ -217,7 +221,7 @@ export const breakout = (card, breakout, tableMetadata) => {
 // min number of points when switching units
 const MIN_INTERVALS = 4;
 
-export const updateDateTimeFilter = (card, column, start, end) => {
+export const updateDateTimeFilter = (card, column, start, end): CardObject => {
     let newCard = clone(card);
 
     let fieldRef = getFieldRefFromColumn(column);
@@ -312,7 +316,7 @@ export const pivot = (
             tableMetadata
         );
         for (const [index, field] of breakoutFields.entries()) {
-            if (field && field.id === dimension.column.id) {
+            if (field && fieldIdsEq(field.id, dimension.column.id)) {
                 newCard.dataset_query.query = Query.removeBreakout(
                     newCard.dataset_query.query,
                     index
diff --git a/frontend/src/metabase/query_builder/actions.integ.spec.js b/frontend/src/metabase/query_builder/actions.integ.spec.js
index 1eca38457c505bf08b5f8d8e0abe29d81585846d..81e9592d563e8e4b8a453eebbf429065665d28da 100644
--- a/frontend/src/metabase/query_builder/actions.integ.spec.js
+++ b/frontend/src/metabase/query_builder/actions.integ.spec.js
@@ -1,64 +1,50 @@
 import {
-    DATABASE_ID, ORDERS_TABLE_ID, metadata,
-    ORDERS_TOTAL_FIELD_ID
+    ORDERS_TOTAL_FIELD_ID,
+    unsavedOrderCountQuestion
 } from "metabase/__support__/sample_dataset_fixture";
 import Question from "metabase-lib/lib/Question";
 import { parse as urlParse } from "url";
 import {
-    login,
-    globalReduxStore as store,
-    globalBrowserHistory as history
+    createSavedQuestion,
+    createTestStore,
+    login
 } from "metabase/__support__/integrated_tests";
 import { initializeQB } from "./actions";
 import { getCard, getOriginalCard, getQueryResults } from "./selectors";
-import { CardApi } from "metabase/services";
-import { refreshSiteSettings } from "metabase/redux/settings";
+import _ from "underscore";
 
 jest.mock('metabase/lib/analytics');
 
+// TODO: Convert completely to modern style
 
 describe("QueryBuilder", () => {
-    let unsavedQuestion: Question = null;
     let savedCleanQuestion: Question = null;
     let dirtyQuestion: Question = null;
+    let store = null;
 
     beforeAll(async () => {
         await login();
+        store = await createTestStore()
     })
 
     describe("initializeQb", () => {
         beforeAll(async () => {
-            // Question initialization has to be in beforeAll block due to the CardApi.create api call
-            await store.dispatch(refreshSiteSettings());
-
-            unsavedQuestion = Question.create({databaseId: DATABASE_ID, tableId: ORDERS_TABLE_ID, metadata})
-                .query()
-                .addAggregation(["count"])
-                .question()
-
-            unsavedQuestion._card = { ...unsavedQuestion._card, name: "Order count" }
-
-            const savedCleanQuestionCard = await CardApi.create(unsavedQuestion.card())
-            savedCleanQuestion = unsavedQuestion.setCard({
-                ...savedCleanQuestionCard
-            });
+            savedCleanQuestion = await createSavedQuestion(unsavedOrderCountQuestion)
 
             dirtyQuestion = savedCleanQuestion
                 .query()
                 .addBreakout(["field-id", ORDERS_TOTAL_FIELD_ID])
                 .question()
-
-            dirtyQuestion._card = { ...dirtyQuestion._card, original_card_id: dirtyQuestion.id() }
         })
 
         describe("for unsaved questions", () => {
             it("completes successfully", async () => {
-                const location = urlParse(unsavedQuestion.getUrl())
+                const location = urlParse(unsavedOrderCountQuestion.getUrl())
                 await store.dispatch(initializeQB(location, {}))
             });
 
             it("results in the correct card object in redux state", async () => {
-                expect(getCard(store.getState())).toMatchObject(unsavedQuestion.card())
+                expect(getCard(store.getState())).toMatchObject(unsavedOrderCountQuestion.card())
             })
 
             it("results in an empty original_card object in redux state", async () => {
@@ -66,11 +52,7 @@ describe("QueryBuilder", () => {
             })
 
             it("keeps the url same after initialization is finished", async () => {
-                const location = urlParse(unsavedQuestion.getUrl())
-
-                // can't get the location from Redux state for some reason so just query the emulated history object directly
-                expect(history.getCurrentLocation().pathname).toBe(location.pathname)
-                expect(history.getCurrentLocation().hash).toBe(location.hash)
+                expect(store.getPath()).toBe(unsavedOrderCountQuestion.getUrl())
             })
 
             // TODO: setTimeout for
@@ -87,18 +69,14 @@ describe("QueryBuilder", () => {
                 });
 
                 it("results in the correct card object in redux state", async () => {
-                    expect(getCard(store.getState())).toMatchObject(savedCleanQuestion.card())
+                    expect(getCard(store.getState())).toMatchObject(_.omit(savedCleanQuestion.card(), "original_card_id"))
                 })
 
                 it("results in the correct original_card object in redux state", async () => {
-                    expect(getOriginalCard(store.getState())).toMatchObject(savedCleanQuestion.card())
+                    expect(getOriginalCard(store.getState())).toMatchObject(_.omit(savedCleanQuestion.card(), "original_card_id"))
                 })
                 it("keeps the url same after initialization is finished", async () => {
-                    const location = urlParse(savedCleanQuestion.getUrl(savedCleanQuestion))
-
-                    // can't get the location from Redux state for some reason so just query the emulated history object directly
-                    expect(history.getCurrentLocation().pathname).toBe(location.pathname)
-                    expect(history.getCurrentLocation().hash).toBe(location.hash || "")
+                    expect(store.getPath()).toBe(savedCleanQuestion.getUrl(savedCleanQuestion))
                 })
             })
             describe("with dirty state", () => {
@@ -112,14 +90,10 @@ describe("QueryBuilder", () => {
                 })
 
                 it("results in the correct original_card object in redux state", async () => {
-                    expect(getOriginalCard(store.getState())).toMatchObject(savedCleanQuestion.card())
+                    expect(getOriginalCard(store.getState())).toMatchObject(_.omit(savedCleanQuestion.card(), "original_card_id"))
                 })
                 it("keeps the url same after initialization is finished", async () => {
-                    const location = urlParse(dirtyQuestion.getUrl(savedCleanQuestion))
-
-                    // can't get the location from Redux state for some reason so just query the emulated history object directly
-                    expect(history.getCurrentLocation().pathname).toBe(location.pathname)
-                    expect(history.getCurrentLocation().hash).toBe(location.hash || "")
+                    expect(store.getPath()).toBe(dirtyQuestion.getUrl())
                 })
             })
         })
diff --git a/frontend/src/metabase/query_builder/actions.js b/frontend/src/metabase/query_builder/actions.js
index d90341fd78da9f59dffc38960b3be58fdba9e2b9..a8867412db9b7e3b42dfafcff32bcd7990348cb3 100644
--- a/frontend/src/metabase/query_builder/actions.js
+++ b/frontend/src/metabase/query_builder/actions.js
@@ -29,7 +29,8 @@ import {
     getQuestion,
     getOriginalQuestion,
     getOriginalCard,
-    getIsEditing
+    getIsEditing,
+    getIsShowingDataReference
 } from "./selectors";
 
 import { getDatabases, getTables, getDatabasesList, getMetadata } from "metabase/selectors/metadata";
@@ -236,7 +237,7 @@ export const initializeQB = (location, params) => {
 
                 preserveParameters = true;
             } catch(error) {
-                console.warn(error);
+                console.warn('initializeQb failed because of an error:', error);
                 card = null;
                 dispatch(setErrorPage(error));
             }
@@ -250,8 +251,8 @@ export const initializeQB = (location, params) => {
 
         } else {
             // we are starting a new/empty card
-
-            card = startNewCard("query");
+            const databaseId = (options.db) ? parseInt(options.db) : undefined;
+            card = startNewCard("query", databaseId);
 
             // initialize parts of the query based on optional parameters supplied
             if (options.table != undefined && card.dataset_query.query) {
@@ -279,7 +280,7 @@ export const initializeQB = (location, params) => {
         });
 
         // Fetch the question metadata
-        dispatch(loadMetadataForCard(card));
+        card && dispatch(loadMetadataForCard(card));
 
         const question = card && new Question(getMetadata(getState()), card);
 
@@ -368,18 +369,18 @@ export const loadMetadataForCard = createThunkAction(LOAD_METADATA_FOR_CARD, (ca
 
         const query = card && new Question(getMetadata(getState()), card).query();
 
-        function loadMetadataForAtomicQuery(singleQuery) {
+        async function loadMetadataForAtomicQuery(singleQuery) {
             if (singleQuery instanceof StructuredQuery && singleQuery.tableId() != null) {
-                dispatch(loadTableMetadata(singleQuery.tableId()));
+                await dispatch(loadTableMetadata(singleQuery.tableId()));
             }
 
             if (singleQuery instanceof NativeQuery && singleQuery.databaseId() != null) {
-                dispatch(loadDatabaseFields(singleQuery.databaseId()));
+                await dispatch(loadDatabaseFields(singleQuery.databaseId()));
             }
         }
 
         if (query) {
-            loadMetadataForAtomicQuery(query);
+            await loadMetadataForAtomicQuery(query);
         }
     }
 });
@@ -399,6 +400,7 @@ export const loadTableMetadata = createThunkAction(LOAD_TABLE_METADATA, (tableId
     };
 });
 
+// TODO Atte Keinänen 7/5/17: Move the API call to redux/metadata for being able to see the db fields in the new metadata object
 export const LOAD_DATABASE_FIELDS = "metabase/qb/LOAD_DATABASE_FIELDS";
 export const loadDatabaseFields = createThunkAction(LOAD_DATABASE_FIELDS, (dbId) => {
     return async (dispatch, getState) => {
@@ -618,14 +620,13 @@ export const updateQuestion = (newQuestion) => {
         dispatch.action(UPDATE_QUESTION, { card: newQuestion.card() });
 
         // See if the template tags editor should be shown/hidden
-
         const oldQuestion = getQuestion(getState());
         const oldTagCount = getTemplateTagCount(oldQuestion);
         const newTagCount = getTemplateTagCount(newQuestion);
 
         if (newTagCount > oldTagCount) {
             dispatch(setIsShowingTemplateTagsEditor(true));
-        } else if (newTagCount === 0) {
+        } else if (newTagCount === 0 && !getIsShowingDataReference(getState())) {
             dispatch(setIsShowingTemplateTagsEditor(false));
         }
     };
@@ -1018,7 +1019,7 @@ export const queryCompleted = createThunkAction(QUERY_COMPLETED, (card, queryRes
 export const QUERY_ERRORED = "metabase/qb/QUERY_ERRORED";
 export const queryErrored = createThunkAction(QUERY_ERRORED, (startTime, error) => {
     return async (dispatch, getState) => {
-        if (error && error.status === 0) {
+        if (error && error.isCancelled) {
             // cancelled, do nothing
             return null;
         } else {
@@ -1031,10 +1032,10 @@ export const queryErrored = createThunkAction(QUERY_ERRORED, (startTime, error)
 export const CANCEL_QUERY = "metabase/qb/CANCEL_QUERY";
 export const cancelQuery = createThunkAction(CANCEL_QUERY, () => {
     return async (dispatch, getState) => {
-        const { qb: { uiControls, queryExecutionPromise } } = getState();
+        const { qb: { uiControls, cancelQueryDeferred } } = getState();
 
-        if (uiControls.isRunning && queryExecutionPromise) {
-            queryExecutionPromise.resolve();
+        if (uiControls.isRunning && cancelQueryDeferred) {
+            cancelQueryDeferred.resolve();
         }
     };
 });
diff --git a/frontend/src/metabase/query_builder/components/DataSelector.jsx b/frontend/src/metabase/query_builder/components/DataSelector.jsx
index 1b8a48983a2c2636121fdced07ad8a41abc90b8d..2e30b09fe27874bbc1f821b301d8122ced7a111a 100644
--- a/frontend/src/metabase/query_builder/components/DataSelector.jsx
+++ b/frontend/src/metabase/query_builder/components/DataSelector.jsx
@@ -12,17 +12,15 @@ import _ from "underscore";
 import cx from "classnames";
 
 export default class DataSelector extends Component {
-    constructor(props, context) {
-        super(props, context);
 
+    constructor(props) {
+        super()
         this.state = {
             databases: null,
             selectedSchema: null,
             showTablePicker: true,
             showSegmentPicker: props.segments && props.segments.length > 0
         }
-
-        _.bindAll(this, "onChangeDatabase", "onChangeSchema", "onChangeTable", "onChangeSegment", "onBack");
     }
 
     static propTypes = {
@@ -84,7 +82,7 @@ export default class DataSelector extends Component {
         }
     }
 
-    onChangeTable(item) {
+    onChangeTable = (item) => {
         if (item.table != null) {
             this.props.setSourceTableFn(item.table.id);
         } else if (item.database != null) {
@@ -93,7 +91,7 @@ export default class DataSelector extends Component {
         this.refs.popover.toggle();
     }
 
-    onChangeSegment(item) {
+    onChangeSegment = (item) => {
         if (item.segment != null) {
             this.props.setSourceSegmentFn(item.segment.id);
         }
@@ -101,27 +99,27 @@ export default class DataSelector extends Component {
         this.refs.popover.toggle();
     }
 
-    onChangeSchema(schema) {
+    onChangeSchema = (schema) => {
         this.setState({
             selectedSchema: schema,
             showTablePicker: true
         });
     }
 
-    onChangeSegmentSection() {
+    onChangeSegmentSection = () => {
         this.setState({
             showSegmentPicker: true
         });
     }
 
-    onBack() {
+    onBack = () => {
         this.setState({
             showTablePicker: false,
             showSegmentPicker: false
         });
     }
 
-    onChangeDatabase(index) {
+    onChangeDatabase = (index) => {
         let database = this.state.databases[index];
         let schema = database && (database.schemas.length > 1 ? null : database.schemas[0]);
         if (database && database.tables.length === 0) {
@@ -172,35 +170,59 @@ export default class DataSelector extends Component {
     }
 
     renderDatabaseSchemaPicker() {
-        const { selectedSchema } = this.state;
-
-        let sections = this.state.databases.map(database => {
-            return {
+        const { databases, selectedSchema } = this.state;
+
+        let sections = databases
+            .filter(database =>
+                // filter out the saved questions "db" so we can present it
+                // differently
+                !database.is_saved_questions
+            )
+            .map(database => ({
                 name: database.name,
                 items: database.schemas.length > 1 ? database.schemas : []
-            };
-        });
+            }));
+
+        // do the opposite of what we just did and get a reference to the saved question "db"
+        // there will only ever be one of these hence [0]
+        const savedQuestionSection = databases.filter(db => db.is_saved_questions)[0]
+
+        // some of the change functions need the index in the databases array
+        const savedQuestionSectionIndex = databases.indexOf(savedQuestionSection)
 
-        let openSection = selectedSchema && _.findIndex(this.state.databases, (db) => _.find(db.schemas, selectedSchema));
-        if (openSection >= 0 && this.state.databases[openSection] && this.state.databases[openSection].schemas.length === 1) {
+        let openSection = selectedSchema && _.findIndex(databases, (db) => _.find(db.schemas, selectedSchema));
+        if (openSection >= 0 && databases[openSection] && databases[openSection].schemas.length === 1) {
             openSection = -1;
         }
 
         return (
-            <AccordianList
-                id="DatabaseSchemaPicker"
-                key="schemaPicker"
-                className="text-brand"
-                sections={sections}
-                onChange={this.onChangeSchema}
-                onChangeSection={this.onChangeDatabase}
-                itemIsSelected={(schema) => this.state.selectedSchema === schema}
-                renderSectionIcon={() => <Icon className="Icon text-default" name="database" size={18} />}
-                renderItemIcon={() => <Icon name="folder" size={16} />}
-                initiallyOpenSection={openSection}
-                showItemArrows={true}
-                alwaysTogglable={true}
-            />
+            <div>
+                <AccordianList
+                    id="DatabaseSchemaPicker"
+                    key="schemaPicker"
+                    className="text-brand"
+                    sections={sections}
+                    onChange={this.onChangeSchema}
+                    onChangeSection={this.onChangeDatabase}
+                    itemIsSelected={(schema) => this.state.selectedSchema === schema}
+                    renderSectionIcon={() => <Icon className="Icon text-default" name="database" size={18} />}
+                    renderItemIcon={() => <Icon name="folder" size={16} />}
+                    initiallyOpenSection={openSection}
+                    showItemArrows={true}
+                    alwaysTogglable={true}
+                />
+                { savedQuestionSection && (
+                    <div
+                        className="List-section p2 cursor-pointer text-brand-hover bg-slate-extra-light"
+                        onClick={() => this.onChangeDatabase(savedQuestionSectionIndex)}
+                    >
+                        <div className="List-section-header flex align-center">
+                            <Icon className="Icon text-default mr2" size={18} name="all" />
+                            <h3 className="List-section-title">Saved questions</h3>
+                        </div>
+                    </div>
+                )}
+            </div>
         );
     }
 
@@ -245,6 +267,8 @@ export default class DataSelector extends Component {
     renderTablePicker() {
         const schema = this.state.selectedSchema;
 
+        const isSavedQuestionList = schema.database.is_saved_questions;
+
         const hasMultipleDatabases = this.props.databases.length > 1;
         const hasMultipleSchemas = schema && schema.database && _.uniq(schema.database.tables, (t) => t.schema).length > 1;
         const hasSegments = !!this.props.segments;
@@ -252,7 +276,7 @@ export default class DataSelector extends Component {
 
         let header = (
             <span className="flex align-center">
-                <span className={cx("flex align-center text-slate", { "cursor-pointer": hasMultipleSources })} onClick={hasMultipleSources && this.onBack}>
+                <span className={cx("flex align-center text-brand-hover text-slate", { "cursor-pointer": hasMultipleSources })} onClick={hasMultipleSources && this.onBack}>
                     { hasMultipleSources && <Icon name="chevronleft" size={18} /> }
                     <span className="ml1">{schema.database.name}</span>
                 </span>
@@ -265,7 +289,7 @@ export default class DataSelector extends Component {
         if (schema.tables.length === 0) {
             // this is a database with no tables!
             return (
-                <section className="List-section List-section--open" style={{width: '300px'}}>
+                <section className="List-section List-section--open" style={{width: 300}}>
                     <div className="p1 border-bottom">
                         <div className="px1 py1 flex align-center">
                             <h3 className="text-default">{header}</h3>
@@ -286,18 +310,26 @@ export default class DataSelector extends Component {
                     }))
             }];
             return (
-                <AccordianList
-                    id="TablePicker"
-                    key="tablePicker"
-                    className="text-brand"
-                    sections={sections}
-                    searchable={true}
-                    onChange={this.onChangeTable}
-                    itemIsSelected={(item) => item.table ? item.table.id === this.getTableId() : false}
-                    itemIsClickable={(item) => item.table && !item.disabled}
-                    renderItemIcon={(item) => item.table ? <Icon name="table2" size={18} /> : null}
-                    hideSingleSectionTitle={true}
-                />
+                <div style={{ width: 300 }}>
+                    <AccordianList
+                        id="TablePicker"
+                        key="tablePicker"
+                        className="text-brand"
+                        sections={sections}
+                        searchable={true}
+                        onChange={this.onChangeTable}
+                        itemIsSelected={(item) => item.table ? item.table.id === this.getTableId() : false}
+                        itemIsClickable={(item) => item.table && !item.disabled}
+                        renderItemIcon={(item) => item.table ? <Icon name="table2" size={18} /> : null}
+                        hideSingleSectionTitle={true}
+                    />
+                    { isSavedQuestionList && (
+                        <div className="bg-slate-extra-light p2 text-centered">
+                            Is a question missing?
+                            <a href="http://metabase.com/docs/latest/users-guide/04-asking-questions.html#source-data" className="block link">Learn more about nested queries</a>
+                        </div>
+                    )}
+                </div>
             );
         }
     }
diff --git a/frontend/src/metabase/query_builder/components/FieldList.integ.spec.js b/frontend/src/metabase/query_builder/components/FieldList.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c82ffaee9251f7103f6c6ed3abd851a902d4c87a
--- /dev/null
+++ b/frontend/src/metabase/query_builder/components/FieldList.integ.spec.js
@@ -0,0 +1,85 @@
+// Important: import of integrated_tests always comes first in tests because of mocked modules
+import { createTestStore, login } from "metabase/__support__/integrated_tests";
+
+import React from 'react'
+import { mount } from 'enzyme'
+
+import FieldList from './FieldList';
+import Question from "metabase-lib/lib/Question";
+import {
+    DATABASE_ID,
+    ORDERS_TABLE_ID,
+    orders_past_30_days_segment
+} from "metabase/__support__/sample_dataset_fixture";
+
+import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
+import { createSegment } from "metabase/admin/datamodel/datamodel";
+import { getMetadata } from "metabase/selectors/metadata";
+import { fetchDatabases, fetchSegments, fetchTableMetadata } from "metabase/redux/metadata";
+import { TestTooltip, TestTooltipContent } from "metabase/components/Tooltip";
+import FilterWidget from "metabase/query_builder/components/filters/FilterWidget";
+
+const getFieldList = (query, fieldOptions, segmentOptions) =>
+    <FieldList
+        tableMetadata={query.tableMetadata()}
+        fieldOptions={fieldOptions}
+        segmentOptions={segmentOptions}
+        customFieldOptions={query.expressions()}
+        onFieldChange={() => {}}
+        enableSubDimensions={false}
+    />;
+
+describe('FieldList', () => {
+    beforeAll(async () => {
+        await login();
+    })
+
+    it("should allow using expression as aggregation dimension", async () => {
+        const store = await createTestStore()
+        await store.dispatch(fetchDatabases());
+        await store.dispatch(fetchTableMetadata(ORDERS_TABLE_ID));
+
+        const expressionName = "70% of subtotal";
+        const metadata = getMetadata(store.getState())
+
+        const query: StructuredQuery = Question.create({ databaseId: DATABASE_ID, tableId: ORDERS_TABLE_ID, metadata })
+            .query()
+            .updateExpression(expressionName, ["*", ["field-id", 4], 0.7])
+
+        // Use the count aggregation as an example case (this is equally valid for filters and groupings)
+        const fieldOptions = query.aggregationFieldOptions("sum");
+        const component = mount(getFieldList(query, fieldOptions));
+
+        expect(component.find(`.List-item-title[children="${expressionName}"]`).length).toBe(1);
+    });
+
+    it("should show the query definition tooltip correctly for a segment", async () => {
+        // TODO Atte Keinänen 6/27/17: Check why the result is wrapped in a promise that needs to be resolved manually
+        const segment = await (await createSegment(orders_past_30_days_segment)).payload;
+
+        const store = await createTestStore()
+        await store.dispatch(fetchDatabases());
+        await store.dispatch(fetchTableMetadata(ORDERS_TABLE_ID));
+        await store.dispatch(fetchSegments());
+        const metadata = getMetadata(store.getState())
+
+        const query: StructuredQuery = Question.create({ databaseId: DATABASE_ID, tableId: ORDERS_TABLE_ID, metadata }).query();
+        const component = mount(getFieldList(query, query.filterFieldOptions(), query.filterSegmentOptions()));
+
+        // TODO: This is pretty awkward – each list item could have its own React component for easier traversal
+        // Maybe also TestTooltip should provide an interface (like `tooltipWrapper.instance().show()`) for toggling it?
+        const tooltipTarget = component.find(`.List-item-title[children="${segment.name}"]`)
+            .first()
+            .closest('li')
+            .find(".QuestionTooltipTarget")
+            .parent();
+
+        tooltipTarget.simulate("mouseenter");
+        
+        const tooltipContent = tooltipTarget.closest(TestTooltip).find(TestTooltipContent);
+        expect(tooltipContent.length).toBe(1)
+
+        // eslint-disable-next-line no-irregular-whitespace
+        expect(tooltipContent.find(FilterWidget).last().text()).toMatch(/Created At -30day/);
+    })
+});
\ No newline at end of file
diff --git a/frontend/src/metabase/query_builder/components/FieldList.jsx b/frontend/src/metabase/query_builder/components/FieldList.jsx
index 35f983047a0fbca76f6951026e71bd29332c9338..857cc7ae52ac6167451cb3a5674c36ed4abdafad 100644
--- a/frontend/src/metabase/query_builder/components/FieldList.jsx
+++ b/frontend/src/metabase/query_builder/components/FieldList.jsx
@@ -4,7 +4,7 @@ import React, { Component } from "react";
 
 import AccordianList from "metabase/components/AccordianList.jsx";
 import Icon from "metabase/components/Icon.jsx";
-import Tooltip from "metabase/components/Tooltip.jsx";
+import Tooltip from "metabase/components/Tooltip";
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger.jsx";
 import QueryDefinitionTooltip from "./QueryDefinitionTooltip.jsx";
 
diff --git a/frontend/src/metabase/query_builder/components/FieldList.spec.jsx b/frontend/src/metabase/query_builder/components/FieldList.spec.jsx
deleted file mode 100644
index 9960b58e7d97689e66a7511a1dcfcf119bd0798d..0000000000000000000000000000000000000000
--- a/frontend/src/metabase/query_builder/components/FieldList.spec.jsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react'
-import { mount } from 'enzyme'
-
-import FieldList from './FieldList';
-import Question from "metabase-lib/lib/Question";
-import {
-    DATABASE_ID,
-    ORDERS_TABLE_ID,
-    metadata
-} from "metabase/__support__/sample_dataset_fixture";
-
-import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
-
-const getFieldList = (query, fieldOptions) =>
-    <FieldList
-        tableMetadata={query.tableMetadata()}
-        fieldOptions={fieldOptions}
-        customFieldOptions={query.expressions()}
-        onFieldChange={() => {}}
-        enableSubDimensions={false}
-    />
-
-describe('FieldList', () => {
-    it("should allow using expression as aggregation dimension", () => {
-        const expressionName = "70% of subtotal";
-        const query: StructuredQuery = Question.create({databaseId: DATABASE_ID, tableId: ORDERS_TABLE_ID, metadata})
-            .query()
-            .updateExpression(expressionName, ["*", ["field-id", 4], 0.7])
-
-        // Use the count aggregation as an example case (this is equally valid for filters and groupings)
-        const fieldOptions = query.aggregationFieldOptions("sum");
-        const component = mount(getFieldList(query, fieldOptions));
-        expect(component.find(`.List-item-title[children="${expressionName}"]`).length).toBe(1);
-    });
-});
\ No newline at end of file
diff --git a/frontend/src/metabase/query_builder/components/FieldName.jsx b/frontend/src/metabase/query_builder/components/FieldName.jsx
index f9887affef05735b8ffa7b87e63a28d8599276cf..52cfac407576f4a6b3ab6a15d9c60b4c676c136a 100644
--- a/frontend/src/metabase/query_builder/components/FieldName.jsx
+++ b/frontend/src/metabase/query_builder/components/FieldName.jsx
@@ -7,6 +7,7 @@ import Query from "metabase/lib/query";
 
 import Dimension from "metabase-lib/lib/Dimension";
 
+import _ from "underscore";
 import cx from "classnames";
 
 export default class FieldName extends Component {
@@ -21,6 +22,13 @@ export default class FieldName extends Component {
         className: ""
     };
 
+    displayNameForFieldLiteral(tableMetadata, fieldLiteral) {
+        // see if we can find an entry in the table metadata that matches the field literal
+        let matchingField = _.find(tableMetadata.fields, (field) => Query.isFieldLiteral(field.id) && field.id[1] === fieldLiteral[1]); // check whether names of field literals match
+
+        return (matchingField && matchingField.display_name) || fieldLiteral[1];
+    }
+
     render() {
         let { field, tableMetadata, className } = this.props;
 
@@ -30,6 +38,16 @@ export default class FieldName extends Component {
             const dimension = Dimension.parseMBQL(field, tableMetadata && tableMetadata.metadata);
             if (dimension) {
                 parts = dimension.render();
+            }
+            // TODO Atte Keinänen 6/23/17: Move nested queries logic to Dimension subclasses
+            // if the Field in question is a field literal, e.g. ["field-literal", <name>, <type>] just use name as-is
+            else if (Query.isFieldLiteral(field)) {
+                parts.push(<span key="field">{this.displayNameForFieldLiteral(tableMetadata, field)}</span>);
+            }
+            // otherwise if for some weird reason we wound up with a Field Literal inside a field ID,
+            // e.g. ["field-id", ["field-literal", <name>, <type>], still just use the name as-is
+            else if (Query.isLocalField(field) && Query.isFieldLiteral(field[1])) {
+                parts.push(<span key="field">{this.displayNameForFieldLiteral(tableMetadata, field[1])}</span>);
             } else {
                 parts.push(<span key="field">Unknown Field</span>);
             }
diff --git a/frontend/src/metabase/query_builder/components/NativeQueryEditor.integ.spec.jsx b/frontend/src/metabase/query_builder/components/NativeQueryEditor.integ.spec.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9f34d328d9f63a94442591841ee752c9b73638aa
--- /dev/null
+++ b/frontend/src/metabase/query_builder/components/NativeQueryEditor.integ.spec.jsx
@@ -0,0 +1,5 @@
+describe("NativeQueryEditor", () => {
+    it("lets you create a SQL question with a field filter variable", () => {
+        pending();
+    })
+})
\ No newline at end of file
diff --git a/frontend/src/metabase/query_builder/components/QueryHeader.jsx b/frontend/src/metabase/query_builder/components/QueryHeader.jsx
index 2c64dbea8040275560954994be4bf4c43e2fc528..ad62ff03d5edbda925383e8fef1a3861542a8229 100644
--- a/frontend/src/metabase/query_builder/components/QueryHeader.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryHeader.jsx
@@ -1,6 +1,7 @@
 import React, { Component } from "react";
 import PropTypes from "prop-types";
 import { Link } from "react-router";
+import { connect } from "react-redux";
 
 import QueryModeButton from "./QueryModeButton.jsx";
 
@@ -19,6 +20,8 @@ import ArchiveQuestionModal from "metabase/query_builder/containers/ArchiveQuest
 
 import SaveQuestionModal from 'metabase/containers/SaveQuestionModal.jsx';
 
+import { clearRequestState } from "metabase/redux/requests";
+
 import { CardApi, RevisionApi } from "metabase/services";
 
 import MetabaseAnalytics from "metabase/lib/analytics";
@@ -31,7 +34,11 @@ import _ from "underscore";
 import NativeQuery from "metabase-lib/lib/queries/NativeQuery";
 import Utils from "metabase/lib/utils";
 
+const mapDispatchToProps = {
+    clearRequestState
+};
 
+@connect(null, mapDispatchToProps)
 export default class QueryHeader extends Component {
     constructor(props, context) {
         super(props, context);
@@ -92,6 +99,25 @@ export default class QueryHeader extends Component {
             return card
         }
     }
+
+    /// Add result_metadata and metadata_checksum columns to card as expected by the endpoints used for saving
+    /// and updating Cards. These values are returned as part of Query Processor results and fetched from there
+    addResultMetadata(card) {
+        let metadata = this.props.result && this.props.result.data && this.props.result.data.results_metadata;
+        let metadataChecksum = metadata && metadata.checksum;
+        let metadataColumns = metadata && metadata.columns;
+
+        card.result_metadata = metadataColumns;
+        card.metadata_checksum = metadataChecksum;
+    }
+
+    /// remove the databases in the store that are used to populate the QB databases list.
+    /// This is done when saving a Card because the newly saved card will be elligable for use as a source query
+    /// so we want the databases list to be re-fetched next time we hit "New Question" so it shows up
+    clearQBDatabases() {
+        this.props.clearRequestState({ statePath: ["metadata", "databases"] });
+    }
+
     onCreate(card, addToDash) {
         // MBQL->NATIVE
         // if we are a native query with an MBQL query definition, remove the old MBQL stuff (happens when going from mbql -> native)
@@ -102,9 +128,13 @@ export default class QueryHeader extends Component {
         // }
 
         const cleanedCard = this._getCleanedCard(card);
+        this.addResultMetadata(cleanedCard);
+
         // TODO: reduxify
         this.requestPromise = cancelable(CardApi.create(cleanedCard));
         return this.requestPromise.then(newCard => {
+            this.clearQBDatabases();
+
             this.props.notifyCardCreatedFn(newCard);
 
             this.setState({
@@ -124,9 +154,13 @@ export default class QueryHeader extends Component {
         // }
 
         const cleanedCard = this._getCleanedCard(card);
+        this.addResultMetadata(cleanedCard);
+
         // TODO: reduxify
         this.requestPromise = cancelable(CardApi.update(cleanedCard));
         return this.requestPromise.then(updatedCard => {
+            this.clearQBDatabases();
+
             if (this.props.fromUrl) {
                 this.onGoBack();
                 return;
diff --git a/frontend/src/metabase/query_builder/components/QueryVisualization.jsx b/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
index 546af0bff19d1f94b3602e5376fceed6d9f3a910..ef5edfc86d474da4b684c1dc83b1dac128f70826 100644
--- a/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
+++ b/frontend/src/metabase/query_builder/components/QueryVisualization.jsx
@@ -242,7 +242,7 @@ export default class QueryVisualization extends Component {
     }
 }
 
-const VisualizationEmptyState = ({showTutorialLink}) =>
+export const VisualizationEmptyState = ({showTutorialLink}) =>
     <div className="flex full layout-centered text-grey-1 flex-column">
         <h1>If you give me some data I can show you something cool. Run a Query!</h1>
         { showTutorialLink && <Link to={Urls.question(null, "?tutorial")} className="link cursor-pointer my2">How do I use this thing?</Link> }
diff --git a/frontend/src/metabase/query_builder/components/VisualizationError.jsx b/frontend/src/metabase/query_builder/components/VisualizationError.jsx
index 80b795c90fe77b0a274bedb252da92363cd94ca8..587ca14eee21cdbf8e8e831d1d9551b09d29c230 100644
--- a/frontend/src/metabase/query_builder/components/VisualizationError.jsx
+++ b/frontend/src/metabase/query_builder/components/VisualizationError.jsx
@@ -33,7 +33,8 @@ class VisualizationError extends Component {
 
   render () {
       const { card, duration, error } = this.props
-      if (typeof error.status === "number") {
+
+      if (error && typeof error.status === "number") {
           // Assume if the request took more than 15 seconds it was due to a timeout
           // Some platforms like Heroku return a 503 for numerous types of errors so we can't use the status code to distinguish between timeouts and other failures.
           if (duration > 15*1000) {
@@ -51,7 +52,7 @@ class VisualizationError extends Component {
                         action={<EmailAdmin />}
                     />
           }
-      } else if (card.dataset_query && card.dataset_query.type === 'native') {
+      } else if (card && card.dataset_query && card.dataset_query.type === 'native') {
           // always show errors for native queries
           return (
               <div className="QueryError flex full align-center text-error">
@@ -66,7 +67,7 @@ class VisualizationError extends Component {
       } else {
           return (
               <div className="QueryError2 flex full justify-center">
-                  <div className="QueryError-image QueryError-image--queryError mr4"></div>
+                  <div className="QueryError-image QueryError-image--queryError mr4" />
                   <div className="QueryError2-details">
                       <h1 className="text-bold">There was a problem with your question</h1>
                       <p className="QueryError-messageText">Most of the time this is caused by an invalid selection or bad input value.  Double check your inputs and retry your query.</p>
diff --git a/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx b/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
index cd8203745c1096b91d0e0537ad6453e916822f29..6ebc166666bf52eb0fb1ba1d885313227a8c587a 100644
--- a/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/DetailPane.jsx
@@ -4,7 +4,7 @@ import PropTypes from "prop-types";
 
 import cx from "classnames";
 
-const DetailPane = ({ name, description, error, usefulQuestions, useForCurrentQuestion, extra }) =>
+const DetailPane = ({ name, description, usefulQuestions, useForCurrentQuestion, extra }) =>
     <div>
         <h1>{name}</h1>
         <p className={cx({ "text-grey-3": !description })}>
@@ -35,7 +35,6 @@ const DetailPane = ({ name, description, error, usefulQuestions, useForCurrentQu
             </div>
         : null }
         {extra}
-        <div>{error}</div>
     </div>
 
 DetailPane.propTypes = {
diff --git a/frontend/src/metabase/query_builder/components/dataref/FieldPane.integ.spec.js b/frontend/src/metabase/query_builder/components/dataref/FieldPane.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea6024926baed3d1daabefad3deafdb806bbbc90
--- /dev/null
+++ b/frontend/src/metabase/query_builder/components/dataref/FieldPane.integ.spec.js
@@ -0,0 +1,90 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from "enzyme";
+
+import {
+    INITIALIZE_QB, QUERY_COMPLETED, setQuerySourceTable,
+    TOGGLE_DATA_REFERENCE
+} from "metabase/query_builder/actions";
+import { delay } from "metabase/lib/promise"
+
+import QueryBuilder from "metabase/query_builder/containers/QueryBuilder";
+import DataReference from "metabase/query_builder/components/dataref/DataReference";
+import { FETCH_TABLE_METADATA } from "metabase/redux/metadata";
+import QueryButton from "metabase/components/QueryButton";
+import Table from "metabase/visualizations/visualizations/Table";
+import UseForButton from "metabase/query_builder/components/dataref/UseForButton";
+
+// Currently a lot of duplication with FieldPane tests
+describe("FieldPane", () => {
+    let store = null;
+    let queryBuilder = null;
+
+    beforeAll(async () => {
+        await login();
+        store = await createTestStore()
+
+        store.pushPath("/question");
+        queryBuilder = mount(store.connectContainer(<QueryBuilder />));
+        await store.waitForActions([INITIALIZE_QB]);
+    })
+
+    // NOTE: These test cases are intentionally stateful
+    // (doing the whole app rendering thing in every single test case would probably slow things down)
+
+    it("opens properly from QB", async () => {
+        // open data reference sidebar by clicking button
+        queryBuilder.find(".Icon-reference").simulate("click");
+        await store.waitForActions([TOGGLE_DATA_REFERENCE]);
+
+        const dataReference = queryBuilder.find(DataReference);
+        expect(dataReference.length).toBe(1);
+
+        dataReference.find('a[children="Orders"]').simulate("click");
+
+        // TODO: Refactor TablePane so that it uses redux/metadata actions instead of doing inlined API calls
+        // then we can replace this with `store.waitForActions([FETCH_TABLE_FOREIGN_KEYS])` or similar
+        await delay(3000)
+
+        dataReference.find(`a[children="Created At"]`).first().simulate("click")
+
+        await store.waitForActions([FETCH_TABLE_METADATA]);
+    });
+
+    it("lets you group by Created At", async () => {
+        const getUseForButton = () => queryBuilder.find(DataReference).find(UseForButton);
+
+        expect(getUseForButton().length).toBe(0);
+
+        await store.dispatch(setQuerySourceTable(1))
+        // eslint-disable-line react/no-irregular-whitespace
+        expect(getUseForButton().text()).toMatch(/Group by/);
+
+        getUseForButton().simulate('click');
+        await store.waitForActions([QUERY_COMPLETED]);
+        store.resetDispatchedActions()
+
+        // after the breakout has been applied, the button shouldn't be visible anymore
+        expect(getUseForButton().length).toBe(0);
+    })
+
+    it("lets you see all distinct values of Created At", async () => {
+        const distinctValuesButton = queryBuilder.find(DataReference).find(QueryButton).at(0);
+
+        try {
+            distinctValuesButton.children().first().simulate("click");
+        } catch(e) {
+            // QueryButton uses react-router Link which always throws an error if it's called without a parent Router object
+            // Now we are just using the onClick handler of Link so we don't have to care about that
+        }
+
+        await store.waitForActions([QUERY_COMPLETED]);
+        store.resetDispatchedActions()
+
+        expect(queryBuilder.find(Table).length).toBe(1)
+    });
+});
diff --git a/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx b/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
index 4e8141f50f3f506f300d0bec8ae1f624fdbc16da..f8b045b0f5aceb165459f11b072aca9424ec3368 100644
--- a/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/FieldPane.jsx
@@ -6,23 +6,30 @@ import DetailPane from "./DetailPane.jsx";
 import QueryButton from "metabase/components/QueryButton.jsx";
 import UseForButton from "./UseForButton.jsx";
 
+import { fetchTableMetadata } from "metabase/redux/metadata";
+import { getMetadata } from "metabase/selectors/metadata";
 import { createCard } from "metabase/lib/card";
 import Query, { createQuery } from "metabase/lib/query";
 import { isDimension, isSummable } from "metabase/lib/schema_metadata";
 import inflection from 'inflection';
 
 import _ from "underscore";
+import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
+import { connect } from "react-redux";
+import Dimension from "metabase-lib/lib/Dimension";
 
+const mapDispatchToProps = {
+    fetchTableMetadata,
+};
+
+const mapStateToProps = (state, props) => ({
+    metadata: getMetadata(state, props)
+})
+
+@connect(mapStateToProps, mapDispatchToProps)
 export default class FieldPane extends Component {
     constructor(props, context) {
         super(props, context);
-
-        this.state = {
-            table: undefined,
-            tableForeignKeys: undefined
-        };
-
-        _.bindAll(this, "filterBy", "groupBy", "setQuerySum", "setQueryDistinct", "setQueryCountGroupedBy");
     }
 
     static propTypes = {
@@ -30,96 +37,116 @@ export default class FieldPane extends Component {
         datasetQuery: PropTypes.object,
         question: PropTypes.object,
         originalQuestion: PropTypes.object,
-        loadTableAndForeignKeysFn: PropTypes.func.isRequired,
+        metadata: PropTypes.object,
+        fetchTableMetadata: PropTypes.func.isRequired,
         runQuestionQuery: PropTypes.func.isRequired,
         setDatasetQuery: PropTypes.func.isRequired,
-        setCardAndRun: PropTypes.func.isRequired
+        setCardAndRun: PropTypes.func.isRequired,
+        updateQuestion: PropTypes.func.isRequired
     };
 
     componentWillMount() {
-        this.props.loadTableAndForeignKeysFn(this.props.field.table_id).then((result) => {
-            this.setState({
-                table: result.table,
-                tableForeignKeys: result.foreignKeys
-            });
-        }).catch((error) => {
-            this.setState({
-                error: "An error occurred loading the table"
-            });
-        });
+        this.props.fetchTableMetadata(this.props.field.table_id);
     }
 
-    filterBy() {
-        var datasetQuery = this.setDatabaseAndTable();
-        // Add an aggregation so both aggregation and filter popovers aren't visible
-        if (!Query.hasValidAggregation(datasetQuery.query)) {
-            Query.clearAggregations(datasetQuery.query);
-        }
-        Query.addFilter(datasetQuery.query, [null, this.props.field.id, null]);
-        this.props.setDatasetQuery(datasetQuery);
-    }
+    // See the note in render() method about filterBy
+    // filterBy() {
+    //     var datasetQuery = this.setDatabaseAndTable();
+    //     // Add an aggregation so both aggregation and filter popovers aren't visible
+    //     if (!Query.hasValidAggregation(datasetQuery.query)) {
+    //         Query.clearAggregations(datasetQuery.query);
+    //     }
+    //     Query.addFilter(datasetQuery.query, [null, this.props.field.id, null]);
+    //     this.props.setDatasetQuery(datasetQuery);
+    // }
+
+    groupBy = () => {
+
+        let { question, metadata, field } = this.props;
+        let query = question.query();
+
+        if (query instanceof StructuredQuery) {
+            // Add an aggregation so both aggregation and filter popovers aren't visible
+            if (!Query.hasValidAggregation(query.datasetQuery().query)) {
+                query = query.clearAggregations()
+            }
 
-    groupBy() {
-        let { datasetQuery, question } = this.props;
-        if (!Query.hasValidAggregation(datasetQuery.query)) {
-            Query.clearAggregations(datasetQuery.query);
+            const defaultBreakout = metadata.fields[field.id].getDefaultBreakout();
+            query = query.addBreakout(defaultBreakout);
+
+            this.props.updateQuestion(query.question())
+            this.props.runQuestionQuery();
         }
-        Query.addBreakout(datasetQuery.query, this.props.field.id);
-        this.props.setDatasetQuery(datasetQuery);
-        this.props.runQuestionQuery({ overrideWithCard: question.card() });
     }
 
-    newCard() {
+    newCard = () => {
+        const { metadata, field } = this.props;
+        const tableId = field.table_id;
+        const dbId = metadata.tables[tableId].database.id;
+
         let card = createCard();
-        card.dataset_query = createQuery("query", this.state.table.db_id, this.state.table.id);
+        card.dataset_query = createQuery("query", dbId, tableId);
         return card;
     }
 
-    setQuerySum() {
+    setQuerySum = () => {
         let card = this.newCard();
         card.dataset_query.query.aggregation = ["sum", this.props.field.id];
         this.props.setCardAndRun(card);
     }
 
-    setQueryDistinct() {
+    setQueryDistinct = () => {
+        const { metadata, field } = this.props;
+        const defaultBreakout = metadata.fields[field.id].getDefaultBreakout();
+
         let card = this.newCard();
         card.dataset_query.query.aggregation = ["rows"];
-        card.dataset_query.query.breakout = [this.props.field.id];
+        card.dataset_query.query.breakout = [defaultBreakout];
         this.props.setCardAndRun(card);
     }
 
-    setQueryCountGroupedBy(chartType) {
+    setQueryCountGroupedBy = (chartType) => {
+        const { metadata, field } = this.props;
+        const defaultBreakout = metadata.fields[field.id].getDefaultBreakout();
+
         let card = this.newCard();
         card.dataset_query.query.aggregation = ["count"];
-        card.dataset_query.query.breakout = [this.props.field.id];
+        card.dataset_query.query.breakout = [defaultBreakout];
         card.display = chartType;
         this.props.setCardAndRun(card);
     }
 
+    isBreakoutWithCurrentField = (breakout) => {
+        const { field, metadata } = this.props;
+        const dimension = Dimension.parseMBQL(breakout, metadata);
+        return dimension && dimension.field().id === field.id;
+    }
+
     render() {
-        let { field, datasetQuery } = this.props;
-        let { table, error } = this.state;
+        let { field, question } = this.props;
+
+        const query = question.query();
 
         let fieldName = field.display_name;
-        let tableName = table ? table.display_name : "";
+        let tableName = query.table() ? query.table().display_name : "";
 
         let useForCurrentQuestion = [],
             usefulQuestions = [];
 
         // determine if the selected field is a valid dimension on this table
         let validBreakout = false;
-        if (this.state.table) {
-            const validDimensions = _.filter(table.fields, isDimension);
+        if (query.table()) {
+            const validDimensions = _.filter(query.table().fields, isDimension);
             validBreakout = _.some(validDimensions, f => f.id === field.id);
         }
 
         // TODO: allow for filters/grouping via foreign keys
-        if (!datasetQuery.query || datasetQuery.query.source_table == undefined || datasetQuery.query.source_table === field.table_id) {
+        if (query instanceof StructuredQuery && query.tableId() === field.table_id) {
             // NOTE: disabled this for now because we need a way to capture the completed filter before adding it to the query, or to pop open the filter widget here?
             // useForCurrentQuestion.push(<UseForButton title={"Filter by " + name} onClick={this.filterBy} />);
 
             // current field must be a valid breakout option for this table AND cannot already be in the breakout clause of our query
-            if (validBreakout && this.state.table.id === datasetQuery.query.source_table && (datasetQuery.query.breakout && !_.contains(datasetQuery.query.breakout, field.id))) {
+            if (validBreakout && !_.some(query.breakouts(), this.isBreakoutWithCurrentField)) {
                 useForCurrentQuestion.push(<UseForButton title={"Group by " + name} onClick={this.groupBy} />);
             }
         }
@@ -140,7 +167,6 @@ export default class FieldPane extends Component {
                 description={field.description}
                 useForCurrentQuestion={useForCurrentQuestion}
                 usefulQuestions={usefulQuestions}
-                error={error}
             />
         );
     }
diff --git a/frontend/src/metabase/query_builder/components/dataref/MetricPane.integ.spec.js b/frontend/src/metabase/query_builder/components/dataref/MetricPane.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e8f00e3caf16c754947e3c9d27e5b6815f310a4
--- /dev/null
+++ b/frontend/src/metabase/query_builder/components/dataref/MetricPane.integ.spec.js
@@ -0,0 +1,77 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from "enzyme";
+
+import { INITIALIZE_QB, QUERY_COMPLETED, TOGGLE_DATA_REFERENCE } from "metabase/query_builder/actions";
+import { delay } from "metabase/lib/promise"
+
+import QueryBuilder from "metabase/query_builder/containers/QueryBuilder";
+import DataReference from "metabase/query_builder/components/dataref/DataReference";
+import { vendor_count_metric } from "metabase/__support__/sample_dataset_fixture";
+import { createMetric } from "metabase/admin/datamodel/datamodel";
+import { FETCH_TABLE_METADATA } from "metabase/redux/metadata";
+import QueryDefinition from "metabase/query_builder/components/dataref/QueryDefinition";
+import QueryButton from "metabase/components/QueryButton";
+import Scalar from "metabase/visualizations/visualizations/Scalar";
+
+describe("MetricPane", () => {
+    let store = null;
+    let queryBuilder = null;
+
+    beforeAll(async () => {
+        await login();
+        await createMetric(vendor_count_metric);
+        store = await createTestStore()
+
+        store.pushPath("/question");
+        queryBuilder = mount(store.connectContainer(<QueryBuilder />));
+        await store.waitForActions([INITIALIZE_QB]);
+    })
+
+    // NOTE: These test cases are intentionally stateful
+    // (doing the whole app rendering thing in every single test case would probably slow things down)
+
+    it("opens properly from QB", async () => {
+        // open data reference sidebar by clicking button
+        queryBuilder.find(".Icon-reference").simulate("click");
+        await store.waitForActions([TOGGLE_DATA_REFERENCE]);
+
+        const dataReference = queryBuilder.find(DataReference);
+        expect(dataReference.length).toBe(1);
+
+        dataReference.find('a[children="Products"]').simulate("click");
+
+        // TODO: Refactor TablePane so that it uses redux/metadata actions instead of doing inlined API calls
+        // then we can replace this with `store.waitForActions([FETCH_TABLE_FOREIGN_KEYS])` or similar
+        await delay(3000)
+
+        store.resetDispatchedActions() // make sure that we wait for the newest actions
+        dataReference.find(`a[children="${vendor_count_metric.name}"]`).first().simulate("click")
+
+        await store.waitForActions([FETCH_TABLE_METADATA]);
+    });
+
+    it("shows you the correct definition", () => {
+        const queryDefinition = queryBuilder.find(DataReference).find(QueryDefinition);
+        expect(queryDefinition.text()).toMatch(/Number of distinct valuesofVendor/);
+    })
+
+    it("lets you see the vendor count", async () => {
+        const queryButton = queryBuilder.find(DataReference).find(QueryButton);
+
+        try {
+            queryButton.children().first().simulate("click");
+        } catch(e) {
+            // QueryButton uses react-router Link which always throws an error if it's called without a parent Router object
+            // Now we are just using the onClick handler of Link so we don't have to care about that
+        }
+
+        await store.waitForActions([QUERY_COMPLETED]);
+
+        expect(queryBuilder.find(Scalar).text()).toBe("200")
+    });
+});
diff --git a/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx b/frontend/src/metabase/query_builder/components/dataref/MetricPane.jsx
index 97ef33458abf8e696bd3e9911f99dbbb04f176ca..8c90c9edf7b790b4c7a874e60635ab4577ee3479 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 } from "react";
+import { connect } from "react-redux";
 import PropTypes from "prop-types";
 
 import DetailPane from "./DetailPane.jsx";
@@ -10,45 +11,51 @@ import { createCard } from "metabase/lib/card";
 import { createQuery } from "metabase/lib/query";
 
 import _ from "underscore";
+import { fetchTableMetadata } from "metabase/redux/metadata";
 
+import { getMetadata } from "metabase/selectors/metadata";
+
+const mapDispatchToProps = {
+    fetchTableMetadata,
+};
+
+const mapStateToProps = (state, props) => ({
+    metadata: getMetadata(state, props)
+})
+
+@connect(mapStateToProps, mapDispatchToProps)
 export default class MetricPane extends Component {
     constructor(props, context) {
         super(props, context);
 
-        this.state = {
-            table: undefined,
-            tableForeignKeys: undefined
-        };
-
         _.bindAll(this, "setQueryMetric");
     }
 
     static propTypes = {
         metric: PropTypes.object.isRequired,
         query: PropTypes.object,
-        loadTableAndForeignKeysFn: PropTypes.func.isRequired,
+        fetchTableMetadata: PropTypes.func.isRequired,
         runQuestionQuery: PropTypes.func.isRequired,
         setDatasetQuery: PropTypes.func.isRequired,
-        setCardAndRun: PropTypes.func.isRequired
+        setCardAndRun: PropTypes.func.isRequired,
+        metadata: PropTypes.object
     };
 
     componentWillMount() {
-        this.props.loadTableAndForeignKeysFn(this.props.metric.table_id).then((result) => {
-            this.setState({
-                table: result.table,
-                tableForeignKeys: result.foreignKeys
-            });
-        }).catch((error) => {
-            this.setState({
-                error: "An error occurred loading the table"
-            });
-        });
+        this.props.fetchTableMetadata(this.props.metric.table_id);
     }
 
     newCard() {
-        let card = createCard();
-        card.dataset_query = createQuery("query", this.state.table.db_id, this.state.table.id);
-        return card;
+        const { metric, metadata } = this.props;
+        const table = metadata && metadata.tables[metric.table_id];
+
+        if (table) {
+            let card = createCard();
+            card.dataset_query = createQuery("query", table.db_id, table.id);
+            return card;
+        } else {
+            throw new Error("Could not find the table metadata prior to creating a new question")
+        }
     }
 
     setQueryMetric() {
@@ -58,8 +65,7 @@ export default class MetricPane extends Component {
     }
 
     render() {
-        let { metric } = this.props;
-        let { table, error } = this.state;
+        let { metric, metadata } = this.props;
 
         let metricName = metric.name;
 
@@ -74,11 +80,10 @@ export default class MetricPane extends Component {
                 description={metric.description}
                 useForCurrentQuestion={useForCurrentQuestion}
                 usefulQuestions={usefulQuestions}
-                error={error}
-                extra={table &&
+                extra={metadata &&
                     <div>
                         <p className="text-bold">Metric Definition</p>
-                        <QueryDefinition object={metric} tableMetadata={table} />
+                        <QueryDefinition object={metric} tableMetadata={metadata.tables[metric.table_id]} />
                     </div>
                 }
             />
diff --git a/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx b/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
index 3cc284aa23362feba9ac66eeb4f56a16c261c9af..00e289dda749f79720311dba93aa9f63619e73ac 100644
--- a/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/QueryDefinition.jsx
@@ -11,7 +11,7 @@ const QueryDefinition = ({ className, object, tableMetadata }) => {
         <div className={className} style={{ pointerEvents: "none" }}>
             { object.definition.aggregation &&
                 <AggregationWidget
-                    aggregation={object.definition.aggregation}
+                    aggregation={object.definition.aggregation[0]}
                     tableMetadata={tableMetadata}
                 />
             }
diff --git a/frontend/src/metabase/query_builder/components/dataref/SegmentPane.integ.spec.js b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..90601a81d81b26da3527087029cb15ad77cd2c88
--- /dev/null
+++ b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.integ.spec.js
@@ -0,0 +1,124 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from "enzyme";
+
+import {
+    INITIALIZE_QB, LOAD_TABLE_METADATA, QUERY_COMPLETED, setQuerySourceTable,
+    TOGGLE_DATA_REFERENCE
+} from "metabase/query_builder/actions";
+import { delay } from "metabase/lib/promise"
+
+import QueryBuilder from "metabase/query_builder/containers/QueryBuilder";
+import DataReference from "metabase/query_builder/components/dataref/DataReference";
+import { orders_past_30_days_segment } from "metabase/__support__/sample_dataset_fixture";
+import { FETCH_TABLE_METADATA } from "metabase/redux/metadata";
+import QueryDefinition from "metabase/query_builder/components/dataref/QueryDefinition";
+import QueryButton from "metabase/components/QueryButton";
+import Scalar from "metabase/visualizations/visualizations/Scalar";
+import Table from "metabase/visualizations/visualizations/Table";
+import UseForButton from "metabase/query_builder/components/dataref/UseForButton";
+import { SegmentApi } from "metabase/services";
+
+// Currently a lot of duplication with SegmentPane tests
+describe("SegmentPane", () => {
+    let store = null;
+    let queryBuilder = null;
+    let segment = null;
+
+    beforeAll(async () => {
+        await login();
+        segment = await SegmentApi.create(orders_past_30_days_segment);
+        store = await createTestStore()
+
+        store.pushPath("/question");
+        queryBuilder = mount(store.connectContainer(<QueryBuilder />));
+        await store.waitForActions([INITIALIZE_QB]);
+    })
+
+    afterAll(async() => {
+        await SegmentApi.delete({
+            segmentId: segment.id,
+            revision_message: "Please"
+        });
+    })
+
+    // NOTE: These test cases are intentionally stateful
+    // (doing the whole app rendering thing in every single test case would probably slow things down)
+
+    it("opens properly from QB", async () => {
+        // open data reference sidebar by clicking button
+        queryBuilder.find(".Icon-reference").simulate("click");
+        await store.waitForActions([TOGGLE_DATA_REFERENCE]);
+
+        const dataReference = queryBuilder.find(DataReference);
+        expect(dataReference.length).toBe(1);
+
+        dataReference.find('a[children="Orders"]').simulate("click");
+
+        // TODO: Refactor TablePane so that it uses redux/metadata actions instead of doing inlined API calls
+        // then we can replace this with `store.waitForActions([FETCH_TABLE_FOREIGN_KEYS])` or similar
+        await delay(3000)
+
+        store.resetDispatchedActions() // make sure that we wait for the newest actions
+        dataReference.find(`a[children="${orders_past_30_days_segment.name}"]`).first().simulate("click")
+
+        await store.waitForActions([FETCH_TABLE_METADATA]);
+    });
+
+    it("shows you the correct segment definition", () => {
+        const queryDefinition = queryBuilder.find(DataReference).find(QueryDefinition);
+        // eslint-disable-next-line no-irregular-whitespace
+        expect(queryDefinition.text()).toMatch(/Created At -30day/);
+    })
+
+    it("lets you apply the filter to your current query", async () => {
+        await store.dispatch(setQuerySourceTable(1))
+        await store.waitForActions(LOAD_TABLE_METADATA);
+
+        const filterByButton = queryBuilder.find(DataReference).find(UseForButton).first();
+        filterByButton.children().first().simulate("click");
+
+        await store.waitForActions([QUERY_COMPLETED]);
+        store.resetDispatchedActions()
+
+        expect(queryBuilder.find(DataReference).find(UseForButton).length).toBe(0);
+    });
+
+    it("lets you see count of rows for past 30 days", async () => {
+        const numberQueryButton = queryBuilder.find(DataReference).find(QueryButton).at(0);
+
+        try {
+            numberQueryButton.children().first().simulate("click");
+        } catch(e) {
+            // QueryButton uses react-router Link which always throws an error if it's called without a parent Router object
+            // Now we are just using the onClick handler of Link so we don't have to care about that
+        }
+
+        await store.waitForActions([QUERY_COMPLETED]);
+        store.resetDispatchedActions()
+
+        // The value changes daily which wasn't originally taken into account
+        // expect(queryBuilder.find(Scalar).text()).toBe("1,236")
+        expect(queryBuilder.find(Scalar).text().length).toBe(5)
+    });
+
+    it("lets you see raw data for past 30 days", async () => {
+        const allQueryButton = queryBuilder.find(DataReference).find(QueryButton).at(1);
+
+        try {
+            allQueryButton.children().first().simulate("click");
+        } catch(e) {
+            // QueryButton uses react-router Link which always throws an error if it's called without a parent Router object
+            // Now we are just using the onClick handler of Link so we don't have to care about that
+        }
+
+        await store.waitForActions([QUERY_COMPLETED]);
+        store.resetDispatchedActions()
+
+        expect(queryBuilder.find(Table).length).toBe(1)
+    });
+});
diff --git a/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
index a1747d336a1646c0d5c2664008c2ec5616d1291f..cc2c21af640cf089c7f9d9cd80646a99ce8c8480 100644
--- a/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/SegmentPane.jsx
@@ -1,6 +1,10 @@
 /* eslint "react/prop-types": "warn" */
 import React, { Component } from "react";
 import PropTypes from "prop-types";
+import { connect } from "react-redux";
+
+import { fetchTableMetadata } from "metabase/redux/metadata";
+import { getMetadata } from "metabase/selectors/metadata";
 
 import DetailPane from "./DetailPane.jsx";
 import QueryButton from "metabase/components/QueryButton.jsx";
@@ -11,60 +15,69 @@ import { createCard } from "metabase/lib/card";
 import Query, { createQuery } from "metabase/lib/query";
 
 import _ from "underscore";
+import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
+
+const mapDispatchToProps = {
+    fetchTableMetadata,
+};
+
+const mapStateToProps = (state, props) => ({
+    metadata: getMetadata(state, props)
+})
 
+@connect(mapStateToProps, mapDispatchToProps)
 export default class SegmentPane extends Component {
     constructor(props, context) {
         super(props, context);
 
-        this.state = {
-            table: undefined,
-            tableForeignKeys: undefined
-        };
-
         _.bindAll(this, "filterBy", "setQueryFilteredBy", "setQueryCountFilteredBy");
     }
 
     static propTypes = {
         segment: PropTypes.object.isRequired,
         datasetQuery: PropTypes.object,
-        loadTableAndForeignKeysFn: PropTypes.func.isRequired,
+        fetchTableMetadata: PropTypes.func.isRequired,
         runQuestionQuery: PropTypes.func.isRequired,
-        setDatasetQuery: PropTypes.func.isRequired,
+        updateQuestion: PropTypes.func.isRequired,
         setCardAndRun: PropTypes.func.isRequired,
         question: PropTypes.object.isRequired,
-        originalQuestion: PropTypes.object.isRequired
+        originalQuestion: PropTypes.object.isRequired,
+        metadata: PropTypes.object.isRequired
     };
 
     componentWillMount() {
-        this.props.loadTableAndForeignKeysFn(this.props.segment.table_id).then((result) => {
-            this.setState({
-                table: result.table,
-                tableForeignKeys: result.foreignKeys
-            });
-        }).catch((error) => {
-            this.setState({
-                error: "An error occurred loading the table"
-            });
-        });
+        this.props.fetchTableMetadata(this.props.segment.table_id);
     }
 
     filterBy() {
-        let { datasetQuery } = this.props;
-        // Add an aggregation so both aggregation and filter popovers aren't visible
-        if (!Query.hasValidAggregation(datasetQuery.query)) {
-            Query.clearAggregations(datasetQuery.query);
+        const { question } = this.props;
+        let query = question.query();
+
+        if (query instanceof StructuredQuery) {
+            // Add an aggregation so both aggregation and filter popovers aren't visible
+            if (!Query.hasValidAggregation(query.datasetQuery().query)) {
+                query = query.clearAggregations()
+            }
+
+            query = query.addFilter(["SEGMENT", this.props.segment.id]);
+
+            this.props.updateQuestion(query.question())
+            this.props.runQuestionQuery();
         }
-        Query.addFilter(datasetQuery.query, ["SEGMENT", this.props.segment.id]);
-        this.props.setDatasetQuery(datasetQuery);
-        this.props.runQuestionQuery();
     }
 
     newCard() {
-        let card = createCard();
-        card.dataset_query = createQuery("query", this.state.table.db_id, this.state.table.id);
-        return card;
+        const { segment, metadata } = this.props;
+        const table = metadata && metadata.tables[segment.table_id];
+
+        if (table) {
+            let card = createCard();
+            card.dataset_query = createQuery("query", table.db_id, table.id);
+            return card;
+        } else {
+            throw new Error("Could not find the table metadata prior to creating a new question")
+        }
     }
-
     setQueryFilteredBy() {
         let card = this.newCard();
         card.dataset_query.query.aggregation = ["rows"];
@@ -80,15 +93,19 @@ export default class SegmentPane extends Component {
     }
 
     render() {
-        let { segment, datasetQuery } = this.props;
-        let { error, table } = this.state;
+        let { segment, metadata, question } = this.props;
+        const query = question.query();
 
         let segmentName = segment.name;
 
         let useForCurrentQuestion = [];
         let usefulQuestions = [];
 
-        if (datasetQuery.query && datasetQuery.query.source_table === segment.table_id && !_.findWhere(Query.getFilters(datasetQuery.query), { [0]: "SEGMENT", [1]: segment.id })) {
+
+        if (query instanceof StructuredQuery &&
+            query.tableId() === segment.table_id &&
+            !_.findWhere(query.filters(), {[0]: "SEGMENT", [1]: segment.id})) {
+
             useForCurrentQuestion.push(<UseForButton title={"Filter by " + segmentName} onClick={this.filterBy} />);
         }
 
@@ -101,12 +118,11 @@ export default class SegmentPane extends Component {
                 description={segment.description}
                 useForCurrentQuestion={useForCurrentQuestion}
                 usefulQuestions={usefulQuestions}
-                error={error}
-                extra={table &&
-                    <div>
-                        <p className="text-bold">Segment Definition</p>
-                        <QueryDefinition object={segment} tableMetadata={table} />
-                    </div>
+                extra={metadata &&
+                <div>
+                    <p className="text-bold">Segment Definition</p>
+                    <QueryDefinition object={segment} tableMetadata={metadata.tables[segment.table_id]} />
+                </div>
                 }
             />
         );
diff --git a/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx b/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
index e1d0104a659f21941b58590f0e2ae63fdfff238b..16104b9997b4f15f81d946675026aba56a0b56b1 100644
--- a/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
+++ b/frontend/src/metabase/query_builder/components/dataref/TablePane.jsx
@@ -120,7 +120,7 @@ export default class TablePane extends Component {
                             name="Metrics"
                             type="metrics"
                             show={this.props.show.bind(null, "metric")}
-                            items={table.metrics}
+                            items={table.metrics.filter((metric) => metric.is_active === true)}
                         />
                     }
                     { table.segments && (table.segments.length > 0) &&
@@ -128,7 +128,7 @@ export default class TablePane extends Component {
                             name="Segments"
                             type="segments"
                             show={this.props.show.bind(null, "segment")}
-                            items={table.segments}
+                            items={table.segments.filter((segment) => segment.is_active === true)}
                         />
                     }
                     <div className="Button-group Button-group--brand text-uppercase">
diff --git a/frontend/src/metabase/query_builder/components/filters/FilterList.jsx b/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
index ffeee79882181b31b0d060e118e714466e7254fc..e09fda0b303597d6e9c2b476ae96bcfac0e5ded1 100644
--- a/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
+++ b/frontend/src/metabase/query_builder/components/filters/FilterList.jsx
@@ -7,13 +7,17 @@ import FilterWidget from './FilterWidget.jsx';
 
 import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
 import type { Filter } from "metabase/meta/types/Query";
+import Dimension from "metabase-lib/lib/Dimension";
+
+import type { TableMetadata } from "metabase/meta/types/Metadata";
 
 type Props = {
     query: StructuredQuery,
     filters: Array<Filter>,
     removeFilter?: (index: number) => void,
     updateFilter?: (index: number, filter: Filter) => void,
-    maxDisplayValues?: number
+    maxDisplayValues?: number,
+    tableMetadata?: TableMetadata // legacy parameter
 };
 
 type State = {
@@ -49,15 +53,18 @@ export default class FilterList extends Component {
     }
 
     render() {
-        const { query, filters } = this.props;
+        const { query, filters, tableMetadata } = this.props;
         return (
             <div className="Query-filterList scroll-x scroll-show scroll-show--horizontal">
                 {filters.map((filter, index) =>
                     <FilterWidget
                         key={index}
                         placeholder="Item"
-                        // $FlowFixMe: update widgets that are still passing tableMetadata instead of query
-                        query={query || { table: () => this.props.tableMetadata }}
+                        // TODO: update widgets that are still passing tableMetadata instead of query
+                        query={query || {
+                            table: () => tableMetadata,
+                            parseFieldReference: (fieldRef) => Dimension.parseMBQL(fieldRef, tableMetadata)
+                        }}
                         filter={filter}
                         index={index}
                         removeFilter={this.props.removeFilter}
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 e29bbd553dbc646226339cc83eebcc1e5f7ffdd1..b622cd89104bdee359e6c6a0b6b2514c4e37a4f9 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParam.jsx
@@ -62,7 +62,7 @@ export default class TagEditorParam extends Component {
             if (!field) {
                 return;
             }
-            const options = parameterOptionsForField(field);
+            const options = parameterOptionsForField(new Field(field));
             let widget_type;
             if (tag.widget_type && _.findWhere(options, { type: tag.widget_type })) {
                 widget_type = tag.widget_type;
@@ -90,7 +90,7 @@ export default class TagEditorParam extends Component {
         if (tag.type === "dimension" && Array.isArray(tag.dimension)) {
             const field = _.findWhere(databaseFields, { id: tag.dimension[1] });
             if (field) {
-                widgetOptions = parameterOptionsForField(field);
+                widgetOptions = parameterOptionsForField(new Field(field));
             }
         }
 
diff --git a/frontend/src/metabase/query_builder/containers/QueryBuilder.integ.spec.js b/frontend/src/metabase/query_builder/containers/QueryBuilder.integ.spec.js
index 6d33dec5c7d4dbaadb13cad646ba3a0cf726831b..50b396b53165b9df73d39277865de9a862ccda46 100644
--- a/frontend/src/metabase/query_builder/containers/QueryBuilder.integ.spec.js
+++ b/frontend/src/metabase/query_builder/containers/QueryBuilder.integ.spec.js
@@ -1,75 +1,162 @@
 import {
     login,
-    globalReduxStore as store,
-    linkContainerToGlobalReduxStore
+    whenOffline,
+    createSavedQuestion,
+    createTestStore,
 } from "metabase/__support__/integrated_tests";
 
 import React from 'react';
-import { parse as urlParse } from "url";
-import { initializeQB } from "../actions";
-import { refreshSiteSettings } from "metabase/redux/settings";
 import QueryBuilder from "metabase/query_builder/containers/QueryBuilder";
 import { mount } from "enzyme";
-import { DATABASE_ID, ORDERS_TABLE_ID, metadata } from "metabase/__support__/sample_dataset_fixture";
-import Question from "metabase-lib/lib/Question";
-import { CardApi } from "metabase/services";
-
-// TODO Atte Keinänen 6/22/17: Write functional mock implementations of Modal and Tooltip
-// We can't use the original classes because they do DOM mutation
-
-jest.mock("metabase/components/Modal", () => {
-    const MockedModal = () => <div className="mocked-modal" />
-    return MockedModal
-});
-
-jest.mock("metabase/components/Tooltip", () => {
-    const MockedTooltip = () => <div className="mocked-tooltip" />
-    return MockedTooltip
-});
-
-const getQBContainer = (cardId) =>
-    linkContainerToGlobalReduxStore(<QueryBuilder params={cardId ? { cardId } : {}} location={{ query: {} }}/>)
-
-const createSavedQuestion = async () => {
-    let unsavedQuestion = Question.create({databaseId: DATABASE_ID, tableId: ORDERS_TABLE_ID, metadata})
-        .query()
-        .addAggregation(["count"])
-        .question()
-
-    unsavedQuestion._card = { ...unsavedQuestion._card, name: "Order count" }
+import {
+    ORDERS_TOTAL_FIELD_ID,
+    unsavedOrderCountQuestion
+} from "metabase/__support__/sample_dataset_fixture";
+import { CANCEL_QUERY, INITIALIZE_QB, QUERY_COMPLETED, QUERY_ERRORED, RUN_QUERY } from "metabase/query_builder/actions";
+import VisualizationError from "metabase/query_builder/components/VisualizationError";
 
-    const savedCard = await CardApi.create(unsavedQuestion.card())
-    return unsavedQuestion.setCard(savedCard);
-}
+import { VisualizationEmptyState } from "metabase/query_builder/components/QueryVisualization";
+import Visualization from "metabase/visualizations/components/Visualization";
+import RunButton from "metabase/query_builder/components/RunButton";
+import { SET_ERROR_PAGE } from "metabase/redux/app";
+import QueryHeader from "metabase/query_builder/components/QueryHeader";
 
 describe("QueryBuilder", () => {
     beforeAll(async () => {
-        await login();
+        await login()
     })
 
     /**
      * Simple tests for seeing if the query builder renders without errors
      */
-
     describe("for new questions", async () => {
-        it("should render normally on page load", async () => {
-            const location = urlParse("/question")
-            await store.dispatch(refreshSiteSettings());
-            await store.dispatch(initializeQB(location, {}))
+        it("renders normally on page load", async () => {
+            const store = await createTestStore()
 
-            // If mount completes without errors, the test will pass
-            mount(getQBContainer());
+            store.pushPath("/question");
+            const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+            await store.waitForActions([INITIALIZE_QB]);
+
+            expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe("New question")
+            expect(qbWrapper.find(VisualizationEmptyState).length).toBe(1)
         });
     });
 
     describe("for saved questions", async () => {
-        it("should render normally on page load", async () => {
-            const question = await createSavedQuestion()
-            const location = urlParse(`/question/${question.id()}`)
-            await store.dispatch(initializeQB(location, {cardId: question.id()}))
+        let savedQuestion = null;
+        beforeAll(async () => {
+            savedQuestion = await createSavedQuestion(unsavedOrderCountQuestion)
+        })
+
+        it("renders normally on page load", async () => {
+            const store = await createTestStore()
+            store.pushPath(savedQuestion.getUrl(savedQuestion));
+            const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+
+            await store.waitForActions([INITIALIZE_QB, QUERY_COMPLETED]);
+            expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe(savedQuestion.displayName())
+        });
+        it("shows an error page if the server is offline", async () => {
+            const store = await createTestStore()
+
+            await whenOffline(async () => {
+                store.pushPath(savedQuestion.getUrl());
+                mount(store.connectContainer(<QueryBuilder />));
+                // only test here that the error page action is dispatched
+                // (it is set on the root level of application React tree)
+                await store.waitForActions([INITIALIZE_QB, SET_ERROR_PAGE]);
+            })
+        })
+        it("doesn't execute the query if user cancels it", async () => {
+            const store = await createTestStore()
+            store.pushPath(savedQuestion.getUrl());
+            const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+            await store.waitForActions([INITIALIZE_QB, RUN_QUERY]);
+
+            const runButton = qbWrapper.find(RunButton);
+            expect(runButton.text()).toBe("Cancel");
+            expect(runButton.simulate("click"));
+
+            await store.waitForActions([CANCEL_QUERY, QUERY_ERRORED]);
+            expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe(savedQuestion.displayName())
+            expect(qbWrapper.find(VisualizationEmptyState).length).toBe(1)
+        })
+    });
+
+
+    describe("for dirty questions", async () => {
+        describe("without original saved question", () => {
+            it("renders normally on page load", async () => {
+                const store = await createTestStore()
+                store.pushPath(unsavedOrderCountQuestion.getUrl());
+                const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+                await store.waitForActions([INITIALIZE_QB, QUERY_COMPLETED]);
+
+                expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe("New question")
+                expect(qbWrapper.find(Visualization).length).toBe(1)
+            });
+            it("fails with a proper error message if the query is invalid", async () => {
+                const invalidQuestion = unsavedOrderCountQuestion.query()
+                    .addBreakout(["datetime-field", ["field-id", 12345], "day"])
+                    .question();
+
+                const store = await createTestStore()
+                store.pushPath(invalidQuestion.getUrl());
+                const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+                await store.waitForActions([INITIALIZE_QB, QUERY_COMPLETED]);
+
+                // TODO: How to get rid of the delay? There is asynchronous initialization in some of VisualizationError parent components
+                // Making the delay shorter causes Jest test runner to crash, see https://stackoverflow.com/a/44075568
+                expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe("New question")
+                expect(qbWrapper.find(VisualizationError).length).toBe(1)
+                expect(qbWrapper.find(VisualizationError).text().includes("There was a problem with your question")).toBe(true)
+            });
+            it("fails with a proper error message if the server is offline", async () => {
+                const store = await createTestStore()
+
+                await whenOffline(async () => {
+                    store.pushPath(unsavedOrderCountQuestion.getUrl());
+                    const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+                    await store.waitForActions([INITIALIZE_QB, QUERY_ERRORED]);
+
+                    expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe("New question")
+                    expect(qbWrapper.find(VisualizationError).length).toBe(1)
+                    expect(qbWrapper.find(VisualizationError).text().includes("We're experiencing server issues")).toBe(true)
+                })
+            })
+            it("doesn't execute the query if user cancels it", async () => {
+                const store = await createTestStore()
+                store.pushPath(unsavedOrderCountQuestion.getUrl());
+                const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+                await store.waitForActions([INITIALIZE_QB, RUN_QUERY]);
+
+                const runButton = qbWrapper.find(RunButton);
+                expect(runButton.text()).toBe("Cancel");
+                expect(runButton.simulate("click"));
+
+                await store.waitForActions([CANCEL_QUERY, QUERY_ERRORED]);
+                expect(qbWrapper.find(QueryHeader).find("h1").text()).toBe("New question")
+                expect(qbWrapper.find(VisualizationEmptyState).length).toBe(1)
+            })
+        })
+        describe("with original saved question", () => {
+            it("should render normally on page load", async () => {
+                const store = await createTestStore()
+                const savedQuestion = await createSavedQuestion(unsavedOrderCountQuestion);
+
+                const dirtyQuestion = savedQuestion
+                    .query()
+                    .addBreakout(["field-id", ORDERS_TOTAL_FIELD_ID])
+                    .question()
+
+                store.pushPath(dirtyQuestion.getUrl(savedQuestion));
+                const qbWrapper = mount(store.connectContainer(<QueryBuilder />));
+                await store.waitForActions([INITIALIZE_QB, QUERY_COMPLETED]);
 
-            // If mount completes without errors, the test will pass
-            mount(getQBContainer(question.id()));
+                const title = qbWrapper.find(QueryHeader).find("h1")
+                expect(title.text()).toBe("New question")
+                expect(title.parent().children().at(1).text()).toBe(`started from ${savedQuestion.displayName()}`)
+            });
         });
     });
 });
diff --git a/frontend/src/metabase/query_builder/reducers.js b/frontend/src/metabase/query_builder/reducers.js
index 854f485a648a035c228f218b03e9cb25dfc408f2..0365d2801a01375ab0a9bf3075fbc4b4c244f893 100644
--- a/frontend/src/metabase/query_builder/reducers.js
+++ b/frontend/src/metabase/query_builder/reducers.js
@@ -154,8 +154,8 @@ export const queryResults = handleActions({
 }, null);
 
 // promise used for tracking a query execution in progress.  when a query is started we capture this.
-export const queryExecutionPromise = handleActions({
-    [RUN_QUERY]: { next: (state, { cancelQueryDeferred }) => cancelQueryDeferred},
+export const cancelQueryDeferred = handleActions({
+    [RUN_QUERY]: { next: (state, { payload: { cancelQueryDeferred } }) => cancelQueryDeferred},
     [CANCEL_QUERY]: { next: (state, { payload }) => null},
     [QUERY_COMPLETED]: { next: (state, { payload }) => null},
     [QUERY_ERRORED]: { next: (state, { payload }) => null},
diff --git a/frontend/src/metabase/questions/collections.js b/frontend/src/metabase/questions/collections.js
index 592417105a325b7ba5ad1890a68ff19bc568216d..faa4142886464e036789768f8888776325b583b6 100644
--- a/frontend/src/metabase/questions/collections.js
+++ b/frontend/src/metabase/questions/collections.js
@@ -2,7 +2,6 @@
 import { createAction, createThunkAction, handleActions, combineReducers } from "metabase/lib/redux";
 import { reset } from 'redux-form';
 import { replace } from "react-router-redux";
-import * as Urls from "metabase/lib/urls";
 
 import _ from "underscore";
 
@@ -36,9 +35,9 @@ export const saveCollection = createThunkAction(SAVE_COLLECTION, (collection) =>
             }
             if (response.id != null) {
                 dispatch(reset("collection"));
+                // use `replace` so form url doesn't appear in history
+                dispatch(replace('/questions/'));
             }
-            // use `replace` so form url doesn't appear in history
-            dispatch(replace(Urls.collection(response)));
             return response;
         } catch (e) {
             // redux-form expects an object with either { field: error } or { _error: error }
diff --git a/frontend/src/metabase/questions/components/ActionHeader.jsx b/frontend/src/metabase/questions/components/ActionHeader.jsx
index a0eb0cea3e13c5b3c2f265158ebbaab2374e0411..ad1c6ea6e22d1860b20fda498867c40a959da470 100644
--- a/frontend/src/metabase/questions/components/ActionHeader.jsx
+++ b/frontend/src/metabase/questions/components/ActionHeader.jsx
@@ -14,13 +14,14 @@ import LabelPopover from "../containers/LabelPopover.jsx";
 const ActionHeader = ({ visibleCount, selectedCount, allAreSelected, sectionIsArchive, setAllSelected, setArchived, labels }) =>
     <div className={S.actionHeader}>
         <Tooltip tooltip={"Select all " + visibleCount} isEnabled={!allAreSelected}>
-            <StackedCheckBox
-                checked={allAreSelected}
-                className="ml1"
-                onChange={(e) => setAllSelected(e.target.checked)}
-                size={20} padding={3} borderColor="currentColor"
-                invertChecked
-            />
+            <span className="ml1">
+                <StackedCheckBox
+                    checked={allAreSelected}
+                    onChange={e => setAllSelected(e.target.checked)}
+                    size={20}
+                    padding={3}
+                />
+            </span>
         </Tooltip>
         <span className={S.selectedCount}>
             {selectedCount} selected
diff --git a/frontend/src/metabase/questions/components/Item.jsx b/frontend/src/metabase/questions/components/Item.jsx
index 93e4450e306d2101a5215889dfa9962e17ac1d4e..28266b96e969c28aba247a1c0a91e4aaf7081fd7 100644
--- a/frontend/src/metabase/questions/components/Item.jsx
+++ b/frontend/src/metabase/questions/components/Item.jsx
@@ -36,19 +36,18 @@ const Item = ({
                     />
                 }
                 { setItemSelected &&
-                    <CheckBox
-                        className={cx(
-                            "cursor-pointer absolute top left",
-                            { "visible text-brand": selected },
-                            { "hover-child text-brand-hover text-light-blue transition-color": !selected }
-                        )}
-                        checked={selected}
-                        onChange={(e) => setItemSelected({ [id]: e.target.checked })}
-                        size={ITEM_ICON_SIZE}
-                        padding={3}
-                        borderColor="currentColor"
-                        invertChecked
-                    />
+                    <span className={cx(
+                        "absolute top left",
+                        { "visible": selected },
+                        { "hover-child": !selected }
+                    )}>
+                        <CheckBox
+                            checked={selected}
+                            onChange={e => setItemSelected({ [id]: e.target.checked })}
+                            size={ITEM_ICON_SIZE}
+                            padding={3}
+                        />
+                    </span>
                 }
             </div>
             <ItemBody
diff --git a/frontend/src/metabase/questions/questions.js b/frontend/src/metabase/questions/questions.js
index 02d4924030df1b86d66269c3a158cad335a3a3b5..b09640bddec913bc42bef782203b8f23f0accb47 100644
--- a/frontend/src/metabase/questions/questions.js
+++ b/frontend/src/metabase/questions/questions.js
@@ -26,7 +26,7 @@ const card = new schema.Entity('cards', {
 
 import { CardApi, CollectionsApi } from "metabase/services";
 
-const LOAD_ENTITIES = 'metabase/questions/LOAD_ENTITIES';
+export const LOAD_ENTITIES = 'metabase/questions/LOAD_ENTITIES';
 const SET_SEARCH_TEXT = 'metabase/questions/SET_SEARCH_TEXT';
 const SET_ITEM_SELECTED = 'metabase/questions/SET_ITEM_SELECTED';
 const SET_ALL_SELECTED = 'metabase/questions/SET_ALL_SELECTED';
diff --git a/frontend/src/metabase/redux/metadata.integ.spec.js b/frontend/src/metabase/redux/metadata.integ.spec.js
index 6ea3d7aa00640440ad617b048beb24326d869dbb..b27bb610441eb00b2b53ddf3a20cbf41073f46ae 100644
--- a/frontend/src/metabase/redux/metadata.integ.spec.js
+++ b/frontend/src/metabase/redux/metadata.integ.spec.js
@@ -6,7 +6,7 @@
  */
 import { getMetadata } from "metabase/selectors/metadata"
 import {
-    createReduxStore,
+    createTestStore,
     login,
 } from "metabase/__support__/integrated_tests";
 import {
@@ -23,9 +23,11 @@ describe("metadata/redux", () => {
     });
 
     describe("METRIC ACTIONS", () => {
+        // TODO Atte Keinänen 6/23/17: Remove metrics after their creation in other tests
         describe("fetchMetrics()", () => {
+            pending();
             it("fetches no metrics in empty db", async () => {
-                const store = createReduxStore();
+                const store = createTestStore();
                 await store.dispatch(fetchMetrics());
                 expect(metadata(store).metricsList().length).toBe(0)
             })
@@ -55,8 +57,11 @@ describe("metadata/redux", () => {
 
     describe("DATABASE ACTIONS", () => {
         describe("fetchDatabases()", () => {
+            // TODO Atte Keinänen 6/23/17: Figure out why on CI two databases show up but locally only one
+            pending();
             it("fetches the sample dataset", async () => {
-                const store = createReduxStore();
+
+                const store = createTestStore();
                 expect(metadata(store).tablesList().length).toBe(0);
                 expect(metadata(store).databasesList().length).toBe(0);
 
@@ -76,9 +81,11 @@ describe("metadata/redux", () => {
 
     describe("TABLE ACTIONS", () => {
         describe("fetchTables()", () => {
+            // TODO Atte Keinänen 6/23/17: Figure out why on CI two databases show up but locally only one
+            pending();
             it("fetches the sample dataset tables", async () => {
                 // what is the difference between fetchDatabases and fetchTables?
-                const store = createReduxStore();
+                const store = createTestStore();
                 expect(metadata(store).tablesList().length).toBe(0);
                 expect(metadata(store).databasesList().length).toBe(0);
 
diff --git a/frontend/src/metabase/redux/metadata.js b/frontend/src/metabase/redux/metadata.js
index 0e7de82de78ac3e077062285fda5af476d02e08a..ff2532bac0e9f81084e4a9068d575ddf2b4ed280 100644
--- a/frontend/src/metabase/redux/metadata.js
+++ b/frontend/src/metabase/redux/metadata.js
@@ -17,7 +17,7 @@ import _ from "underscore";
 
 import { MetabaseApi, MetricApi, SegmentApi, RevisionsApi } from "metabase/services";
 
-const FETCH_METRICS = "metabase/metadata/FETCH_METRICS";
+export const FETCH_METRICS = "metabase/metadata/FETCH_METRICS";
 export const fetchMetrics = createThunkAction(FETCH_METRICS, (reload = false) => {
     return async (dispatch, getState) => {
         const requestStatePath = ["metadata", "metrics"];
@@ -82,7 +82,7 @@ export const updateMetricImportantFields = createThunkAction(UPDATE_METRIC_IMPOR
 });
 
 
-const FETCH_SEGMENTS = "metabase/metadata/FETCH_SEGMENTS";
+export const FETCH_SEGMENTS = "metabase/metadata/FETCH_SEGMENTS";
 export const fetchSegments = createThunkAction(FETCH_SEGMENTS, (reload = false) => {
     return async (dispatch, getState) => {
         const requestStatePath = ["metadata", "segments"];
@@ -125,7 +125,7 @@ export const updateSegment = createThunkAction(UPDATE_SEGMENT, function(segment)
     };
 });
 
-const FETCH_DATABASES = "metabase/metadata/FETCH_DATABASES";
+export const FETCH_DATABASES = "metabase/metadata/FETCH_DATABASES";
 export const fetchDatabases = createThunkAction(FETCH_DATABASES, (reload = false) => {
     return async (dispatch, getState) => {
         const requestStatePath = ["metadata", "databases"];
@@ -146,7 +146,7 @@ export const fetchDatabases = createThunkAction(FETCH_DATABASES, (reload = false
     };
 });
 
-const FETCH_DATABASE_METADATA = "metabase/metadata/FETCH_DATABASE_METADATA";
+export const FETCH_DATABASE_METADATA = "metabase/metadata/FETCH_DATABASE_METADATA";
 export const fetchDatabaseMetadata = createThunkAction(FETCH_DATABASE_METADATA, function(dbId, reload = false) {
     return async function(dispatch, getState) {
         const requestStatePath = ["metadata", "databases", dbId];
@@ -234,7 +234,7 @@ export const fetchTables = createThunkAction(FETCH_TABLES, (reload = false) => {
     };
 });
 
-const FETCH_TABLE_METADATA = "metabase/metadata/FETCH_TABLE_METADATA";
+export const FETCH_TABLE_METADATA = "metabase/metadata/FETCH_TABLE_METADATA";
 export const fetchTableMetadata = createThunkAction(FETCH_TABLE_METADATA, function(tableId, reload = false) {
     return async function(dispatch, getState) {
         const requestStatePath = ["metadata", "tables", tableId];
@@ -302,7 +302,7 @@ export const updateField = createThunkAction(UPDATE_FIELD, function(field) {
     };
 });
 
-const FETCH_REVISIONS = "metabase/metadata/FETCH_REVISIONS";
+export const FETCH_REVISIONS = "metabase/metadata/FETCH_REVISIONS";
 export const fetchRevisions = createThunkAction(FETCH_REVISIONS, (type, id, reload = false) => {
     return async (dispatch, getState) => {
         const requestStatePath = ["metadata", "revisions", type, id];
@@ -327,7 +327,7 @@ export const fetchRevisions = createThunkAction(FETCH_REVISIONS, (type, id, relo
 });
 
 // for fetches with data dependencies in /reference
-const FETCH_METRIC_TABLE = "metabase/metadata/FETCH_METRIC_TABLE";
+export const FETCH_METRIC_TABLE = "metabase/metadata/FETCH_METRIC_TABLE";
 export const fetchMetricTable = createThunkAction(FETCH_METRIC_TABLE, (metricId, reload = false) => {
     return async (dispatch, getState) => {
         await dispatch(fetchMetrics()); // FIXME: fetchMetric?
@@ -337,7 +337,7 @@ export const fetchMetricTable = createThunkAction(FETCH_METRIC_TABLE, (metricId,
     };
 });
 
-const FETCH_METRIC_REVISIONS = "metabase/metadata/FETCH_METRIC_REVISIONS";
+export const FETCH_METRIC_REVISIONS = "metabase/metadata/FETCH_METRIC_REVISIONS";
 export const fetchMetricRevisions = createThunkAction(FETCH_METRIC_REVISIONS, (metricId, reload = false) => {
     return async (dispatch, getState) => {
         await Promise.all([
@@ -350,7 +350,7 @@ export const fetchMetricRevisions = createThunkAction(FETCH_METRIC_REVISIONS, (m
     };
 });
 
-const FETCH_SEGMENT_FIELDS = "metabase/metadata/FETCH_SEGMENT_FIELDS";
+export const FETCH_SEGMENT_FIELDS = "metabase/metadata/FETCH_SEGMENT_FIELDS";
 export const fetchSegmentFields = createThunkAction(FETCH_SEGMENT_FIELDS, (segmentId, reload = false) => {
     return async (dispatch, getState) => {
         await dispatch(fetchSegments()); // FIXME: fetchSegment?
@@ -363,7 +363,7 @@ export const fetchSegmentFields = createThunkAction(FETCH_SEGMENT_FIELDS, (segme
     };
 });
 
-const FETCH_SEGMENT_TABLE = "metabase/metadata/FETCH_SEGMENT_TABLE";
+export const FETCH_SEGMENT_TABLE = "metabase/metadata/FETCH_SEGMENT_TABLE";
 export const fetchSegmentTable = createThunkAction(FETCH_SEGMENT_TABLE, (segmentId, reload = false) => {
     return async (dispatch, getState) => {
         await dispatch(fetchSegments()); // FIXME: fetchSegment?
@@ -373,7 +373,7 @@ export const fetchSegmentTable = createThunkAction(FETCH_SEGMENT_TABLE, (segment
     };
 });
 
-const FETCH_SEGMENT_REVISIONS = "metabase/metadata/FETCH_SEGMENT_REVISIONS";
+export const FETCH_SEGMENT_REVISIONS = "metabase/metadata/FETCH_SEGMENT_REVISIONS";
 export const fetchSegmentRevisions = createThunkAction(FETCH_SEGMENT_REVISIONS, (segmentId, reload = false) => {
     return async (dispatch, getState) => {
         await Promise.all([
diff --git a/frontend/src/metabase/reference/components/EditableReferenceHeader.jsx b/frontend/src/metabase/reference/components/EditableReferenceHeader.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4e7cbb0e52d9e226ed70ead35deed2d3ee1443e0
--- /dev/null
+++ b/frontend/src/metabase/reference/components/EditableReferenceHeader.jsx
@@ -0,0 +1,134 @@
+import React from "react";
+import PropTypes from "prop-types";
+import { Link } from "react-router";
+import cx from "classnames";
+import pure from "recompose/pure";
+
+import S from "./ReferenceHeader.css";
+import L from "metabase/components/List.css";
+import E from "metabase/reference/components/EditButton.css";
+
+import IconBorder from "metabase/components/IconBorder.jsx";
+import Icon from "metabase/components/Icon.jsx";
+import Ellipsified from "metabase/components/Ellipsified.jsx";
+import EditButton from "metabase/reference/components/EditButton.jsx";
+
+
+const EditableReferenceHeader = ({
+    entity = {},
+    table,
+    type,
+    headerIcon,
+    headerLink,
+    name,
+    user,
+    isEditing,
+    hasSingleSchema,
+    hasDisplayName,
+    startEditing,
+    displayNameFormField,
+    nameFormField
+}) =>
+    <div className="wrapper wrapper--trim">
+        <div className={cx("relative", L.header)} style={type === 'segment' ? {marginBottom: 0} : {}}>
+            <div className={L.leftIcons}>
+                { headerIcon &&
+                    <IconBorder
+                        borderWidth="0"
+                        style={{backgroundColor: "#E9F4F8"}}
+                    >
+                        <Icon
+                            className="text-brand"
+                            name={headerIcon}
+                            width={24}
+                            height={24}
+                        />
+                    </IconBorder>
+                }
+            </div>
+            { type === 'table' && !hasSingleSchema && !isEditing &&
+                <div className={S.headerSchema}>{entity.schema}</div>
+            }
+            <div
+                className={S.headerBody}
+                style={isEditing && name === 'Details' ? {alignItems: "flex-start"} : {}}
+            >
+                { isEditing && name === 'Details' ?
+                    hasDisplayName ?
+                        <input
+                            className={S.headerTextInput}
+                            type="text"
+                            placeholder={entity.name}
+                            {...displayNameFormField}
+                            defaultValue={entity.display_name}
+                        /> :
+                        <input
+                            className={S.headerTextInput}
+                            type="text"
+                            placeholder={entity.name}
+                            {...nameFormField}
+                            defaultValue={entity.name}
+                        /> :
+                    [
+                        <Ellipsified
+                            key="1"
+                            className={!headerLink && "flex-full"}
+                            tooltipMaxWidth="100%"
+                        >
+                            { name === 'Details' ?
+                                hasDisplayName ?
+                                    entity.display_name || entity.name :
+                                    entity.name :
+                                name
+                            }
+                        </Ellipsified>,
+                        headerLink &&
+                            <div key="2" className={cx("flex-full", S.headerButton)}>
+                                <Link
+                                    to={headerLink}
+                                    className={cx("Button", "Button--borderless", "ml3", E.editButton)}
+                                    data-metabase-event={`Data Reference;Entity -> QB click;${type}`}
+                                >
+                                    <div className="flex align-center relative">
+                                        <span className="mr1 flex-no-shrink">See this {type}</span>
+                                        <Icon name="chevronright" size={16} />
+                                    </div>
+                                </Link>
+                            </div>
+                    ]
+                }
+                { user && user.is_superuser && !isEditing &&
+                    <EditButton className="ml1" startEditing={startEditing} />
+                }
+            </div>
+        </div>
+        { type === 'segment' && table &&
+            <div className={S.subheader}>
+                <div className={cx(S.subheaderBody)}>
+                    A subset of <Link
+                        className={S.subheaderLink}
+                        to={`/reference/databases/${table.db_id}/tables/${table.id}`}
+                    >
+                        {table.display_name}
+                    </Link>
+                </div>
+            </div>
+        }
+    </div>;
+EditableReferenceHeader.propTypes = {
+    entity: PropTypes.object,
+    table: PropTypes.object,
+    type: PropTypes.string,
+    headerIcon: PropTypes.string,
+    headerLink: PropTypes.string,
+    name: PropTypes.string,
+    user: PropTypes.object,
+    isEditing: PropTypes.bool,
+    hasSingleSchema: PropTypes.bool,
+    hasDisplayName: PropTypes.bool,
+    startEditing: PropTypes.func,
+    displayNameFormField: PropTypes.object,
+    nameFormField: PropTypes.object
+};
+
+export default pure(EditableReferenceHeader);
diff --git a/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx b/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
index 48cd1535bfbd2e533b04ade920f101820355a8f3..7781be696a1135925e3337dce4973c19835d4ace 100644
--- a/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
+++ b/frontend/src/metabase/reference/components/FieldsToGroupBy.jsx
@@ -1,7 +1,6 @@
-import React from "react";
-import PropTypes from "prop-types";
+import React, { Component } from "react";
 import cx from "classnames";
-import pure from "recompose/pure";
+import { connect } from "react-redux";
 
 import S from "./UsefulQuestions.css";
 import D from "metabase/reference/components/Detail.css";
@@ -13,49 +12,64 @@ import {
 
 import FieldToGroupBy from "metabase/reference/components/FieldToGroupBy.jsx";
 
-const FieldsToGroupBy = ({
-    fields,
-    databaseId,
-    metric,
-    title,
-    onChangeLocation
-}) =>
-    <div className={cx(D.detail)}>
-        <div className={D.detailBody}>
-            <div className={D.detailTitle}>
-                <span className={D.detailName}>{title}</span>
-            </div>
-            <div className={S.usefulQuestions}>
-                { fields && Object.values(fields)
-                        .map((field, index, fields) =>
-                            <FieldToGroupBy
-                                key={field.id}
-                                className={cx("border-bottom", "pt1", "pb1")}
-                                iconClass={L.icon}
-                                field={field}
-                                metric={metric}
-                                onClick={() => onChangeLocation(getQuestionUrl({
+import { fetchTableMetadata } from "metabase/redux/metadata";
+import { getMetadata } from "metabase/selectors/metadata";
+import Metadata from "metabase-lib/lib/metadata/Metadata";
+
+const mapDispatchToProps = {
+    fetchTableMetadata,
+};
+
+const mapStateToProps = (state, props) => ({
+    metadata: getMetadata(state, props)
+})
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class FieldsToGroupBy extends Component {
+    props: {
+        fields: Object,
+        databaseId: number,
+        metric: Object,
+        title: string,
+        onChangeLocation: (string) => void,
+        metadata: Metadata
+    }
+
+    render() {
+        const { fields, databaseId, metric, title, onChangeLocation, metadata } = this.props;
+
+        return (
+            <div className={cx(D.detail)}>
+                <div className={D.detailBody}>
+                    <div className={D.detailTitle}>
+                        <span className={D.detailName}>{title}</span>
+                    </div>
+                    <div className={S.usefulQuestions}>
+                        { fields && Object.values(fields)
+                            .map((field, index, fields) =>
+                                <FieldToGroupBy
+                                    key={field.id}
+                                    className={cx("border-bottom", "pt1", "pb1")}
+                                    iconClass={L.icon}
+                                    field={field}
+                                    metric={metric}
+                                    onClick={() => onChangeLocation(getQuestionUrl({
                                         dbId: databaseId,
                                         tableId: field.table_id,
                                         fieldId: field.id,
-                                        metricId: metric.id
+                                        metricId: metric.id,
+                                        metadata
                                     }))}
-                                secondaryOnClick={(event) => {
-                                    event.stopPropagation();
-                                    onChangeLocation(`/reference/databases/${databaseId}/tables/${field.table_id}/fields/${field.id}`);
-                                }}
-                            />
-                        )
-                }
+                                    secondaryOnClick={(event) => {
+                                        event.stopPropagation();
+                                        onChangeLocation(`/reference/databases/${databaseId}/tables/${field.table_id}/fields/${field.id}`);
+                                    }}
+                                />
+                            )
+                        }
+                    </div>
+                </div>
             </div>
-        </div>
-    </div>;
-FieldsToGroupBy.propTypes = {
-    fields: PropTypes.object.isRequired,
-    databaseId: PropTypes.number.isRequired,
-    metric: PropTypes.object.isRequired,
-    title: PropTypes.string.isRequired,
-    onChangeLocation: PropTypes.func.isRequired
-};
-
-export default pure(FieldsToGroupBy);
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/components/Formula.jsx b/frontend/src/metabase/reference/components/Formula.jsx
index 4882a4d1b741312af2c100be4e5c21803db372f2..fad946d8f147dc5f10be18c2c3c487a7aba25a4a 100644
--- a/frontend/src/metabase/reference/components/Formula.jsx
+++ b/frontend/src/metabase/reference/components/Formula.jsx
@@ -1,7 +1,6 @@
-import React from "react";
-import PropTypes from "prop-types";
-import pure from "recompose/pure";
+import React, { Component } from "react";
 import cx from "classnames";
+import { connect } from "react-redux";
 
 import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 
@@ -10,46 +9,58 @@ import S from "./Formula.css";
 import Icon from "metabase/components/Icon.jsx";
 
 import QueryDefinition from "metabase/query_builder/components/dataref/QueryDefinition.jsx";
+import { fetchTableMetadata } from "metabase/redux/metadata";
+import { getMetadata } from "metabase/selectors/metadata";
 
-const Formula = ({
-    type,
-    entity,
-    table,
-    isExpanded,
-    expandFormula,
-    collapseFormula
-}) =>
-    <div
-        className={cx(S.formula)}
-        onClick={isExpanded ? collapseFormula : expandFormula}
-    >
-        <div className={S.formulaHeader}>
-            <Icon name="beaker" size={24} />
-            <span className={S.formulaTitle}>View the {type} formula</span>
-        </div>
-        <ReactCSSTransitionGroup
-            transitionName="formulaDefinition"
-            transitionEnterTimeout={300}
-            transitionLeaveTimeout={300}
-        >
-            { isExpanded &&
-                <div key="formulaDefinition" className="formulaDefinition">
-                    <QueryDefinition
-                        className={S.formulaDefinitionInner}
-                        object={entity}
-                        tableMetadata={table}
-                    />
-                </div>
-            }
-        </ReactCSSTransitionGroup>
-    </div>
-
-Formula.propTypes = {
-    type: PropTypes.string.isRequired,
-    entity: PropTypes.object.isRequired,
-    table: PropTypes.object.isRequired,
-    isExpanded: PropTypes.bool.isRequired,
-    expandFormula: PropTypes.func.isRequired
+import type Metadata from "metabase-lib/lib/metadata/Metadata";
+
+const mapDispatchToProps = {
+    fetchTableMetadata,
 };
 
-export default pure(Formula);
+const mapStateToProps = (state, props) => ({
+    metadata: getMetadata(state, props)
+})
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class Formula extends Component {
+    props: {
+        type: string,
+        entity: Object,
+        isExpanded: boolean,
+        expandFormula: any,
+        collapseFormula: any,
+        metadata: Metadata
+    }
+
+    render() {
+        const { type, entity, isExpanded, expandFormula, collapseFormula, metadata } = this.props;
+
+        return (
+            <div
+                className={cx(S.formula)}
+                onClick={isExpanded ? collapseFormula : expandFormula}
+            >
+                <div className={S.formulaHeader}>
+                    <Icon name="beaker" size={24}/>
+                    <span className={S.formulaTitle}>View the {type} formula</span>
+                </div>
+                <ReactCSSTransitionGroup
+                    transitionName="formulaDefinition"
+                    transitionEnterTimeout={300}
+                    transitionLeaveTimeout={300}
+                >
+                    { isExpanded &&
+                    <div key="formulaDefinition" className="formulaDefinition">
+                        <QueryDefinition
+                            className={S.formulaDefinitionInner}
+                            object={entity}
+                            tableMetadata={metadata.tables[entity.table_id]}
+                        />
+                    </div>
+                    }
+                </ReactCSSTransitionGroup>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/components/ReferenceHeader.jsx b/frontend/src/metabase/reference/components/ReferenceHeader.jsx
index 9a5fcfedde558e2b70d27cc1fa772aa510297e15..fe467edba01f61786c34486a014e17088bdf68d4 100644
--- a/frontend/src/metabase/reference/components/ReferenceHeader.jsx
+++ b/frontend/src/metabase/reference/components/ReferenceHeader.jsx
@@ -11,118 +11,68 @@ import E from "metabase/reference/components/EditButton.css";
 import IconBorder from "metabase/components/IconBorder.jsx";
 import Icon from "metabase/components/Icon.jsx";
 import Ellipsified from "metabase/components/Ellipsified.jsx";
-import EditButton from "metabase/reference/components/EditButton.jsx";
 
 
 const ReferenceHeader = ({
-    entity = {},
-    table,
-    section,
-    user,
-    isEditing,
-    hasSingleSchema,
-    hasDisplayName,
-    startEditing,
-    displayNameFormField,
-    nameFormField
+    name,
+    type,
+    headerIcon,
+    headerBody,
+    headerLink
 }) =>
     <div className="wrapper wrapper--trim">
-        <div className={cx("relative", L.header)} style={section.type === 'segment' ? {marginBottom: 0} : {}}>
+        <div className={cx("relative", L.header)}>
             <div className={L.leftIcons}>
-                { section.headerIcon &&
+                { headerIcon &&
                     <IconBorder
                         borderWidth="0"
                         style={{backgroundColor: "#E9F4F8"}}
                     >
                         <Icon
                             className="text-brand"
-                            name={section.headerIcon}
+                            name={headerIcon}
                             width={24}
                             height={24}
                         />
                     </IconBorder>
                 }
             </div>
-            { section.type === 'table' && !hasSingleSchema && !isEditing &&
-                <div className={S.headerSchema}>{entity.schema}</div>
-            }
             <div
                 className={S.headerBody}
-                style={isEditing && section.name === 'Details' ? {alignItems: "flex-start"} : {}}
             >
-                { isEditing && section.name === 'Details' ?
-                    hasDisplayName ?
-                        <input
-                            className={S.headerTextInput}
-                            type="text"
-                            placeholder={entity.name}
-                            {...displayNameFormField}
-                            defaultValue={entity.display_name}
-                        /> :
-                        <input
-                            className={S.headerTextInput}
-                            type="text"
-                            placeholder={entity.name}
-                            {...nameFormField}
-                            defaultValue={entity.name}
-                        /> :
-                    [
-                        <Ellipsified
-                            key="1"
-                            className={!section.headerLink && "flex-full"}
-                            tooltipMaxWidth="100%"
+                <Ellipsified
+                    key="1"
+                    className={!headerLink && "flex-full"}
+                    tooltipMaxWidth="100%"
+                >
+                    { name }
+                </Ellipsified>
+                
+                {headerLink &&
+                    <div key="2" className={cx("flex-full", S.headerButton)}>
+                        <Link
+                            to={headerLink}
+                            className={cx("Button", "Button--borderless", "ml3", E.editButton)}
+                            data-metabase-event={`Data Reference;Entity -> QB click;${type}`}
                         >
-                            { section.name === 'Details' ?
-                                hasDisplayName ?
-                                    entity.display_name || entity.name :
-                                    entity.name :
-                                section.name
-                            }
-                        </Ellipsified>,
-                        section.headerLink &&
-                            <div key="2" className={cx("flex-full", S.headerButton)}>
-                                <Link
-                                    to={section.headerLink}
-                                    className={cx("Button", "Button--borderless", "ml3", E.editButton)}
-                                    data-metabase-event={`Data Reference;Entity -> QB click;${section.type}`}
-                                >
-                                    <div className="flex align-center relative">
-                                        <span className="mr1 flex-no-shrink">See this {section.type}</span>
-                                        <Icon name="chevronright" size={16} />
-                                    </div>
-                                </Link>
+                            <div className="flex align-center relative">
+                                <span className="mr1 flex-no-shrink">See this {type}</span>
+                                <Icon name="chevronright" size={16} />
                             </div>
-                    ]
-                }
-                { user && user.is_superuser && !isEditing &&
-                    <EditButton className="ml1" startEditing={startEditing} />
+                        </Link>
+                    </div>
                 }
             </div>
         </div>
-        { section.type === 'segment' && table &&
-            <div className={S.subheader}>
-                <div className={cx(S.subheaderBody)}>
-                    A subset of <Link
-                        className={S.subheaderLink}
-                        to={`/reference/databases/${table.db_id}/tables/${table.id}`}
-                    >
-                        {table.display_name}
-                    </Link>
-                </div>
-            </div>
-        }
     </div>;
+
 ReferenceHeader.propTypes = {
-    entity: PropTypes.object,
-    table: PropTypes.object,
-    section: PropTypes.object.isRequired,
-    user: PropTypes.object,
-    isEditing: PropTypes.bool,
-    hasSingleSchema: PropTypes.bool,
-    hasDisplayName: PropTypes.bool,
-    startEditing: PropTypes.func,
-    displayNameFormField: PropTypes.object,
-    nameFormField: PropTypes.object
+    name: PropTypes.string.isRequired,
+    type: PropTypes.string,
+    headerIcon: PropTypes.string,
+    headerBody: PropTypes.string,
+    headerLink: PropTypes.string
+
 };
 
 export default pure(ReferenceHeader);
diff --git a/frontend/src/metabase/reference/databases/DatabaseDetail.jsx b/frontend/src/metabase/reference/databases/DatabaseDetail.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..00d42fcc9d4ef7148dabe0fc6e34b7edf7d3c99d
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/DatabaseDetail.jsx
@@ -0,0 +1,176 @@
+/* eslint "react/prop-types": "warn" */
+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";
+
+import List from "metabase/components/List.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+import Detail from "metabase/reference/components/Detail.jsx";
+
+import {
+    getDatabase,
+    getTable,
+    getFields,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getIsFormulaExpanded,
+    getForeignKeys
+} from "../selectors";
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+
+const mapStateToProps = (state, props) => {
+    const entity = getDatabase(state, props) || {};
+    const fields = getFields(state, props);
+
+    return {
+        entity,
+        table: getTable(state, props),
+        metadataFields: fields,
+        loading: getLoading(state, props),
+        // naming this 'error' will conflict with redux form
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        foreignKeys: getForeignKeys(state, props),
+        isEditing: getIsEditing(state, props),
+        isFormulaExpanded: getIsFormulaExpanded(state, props),
+    }
+};
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions,
+    onChangeLocation: push
+};
+
+const validate = (values, props) => {
+    return {};
+}
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'details',
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats'],
+    validate
+})
+export default class DatabaseDetail extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entity: PropTypes.object.isRequired,
+        table: PropTypes.object,
+        user: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        resetForm: PropTypes.func.isRequired,
+        fields: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool
+    };
+
+    render() {
+        const {
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats },
+            style,
+            entity,
+            table,
+            loadingError,
+            loading,
+            user,
+            isEditing,
+            startEditing,
+            endEditing,
+            handleSubmit,
+            resetForm,
+            submitting
+        } = this.props;
+
+        const onSubmit = handleSubmit(async (fields) =>
+            await actions.rUpdateDatabaseDetail(fields, this.props)
+        );
+
+        return (
+            <form style={style} className="full"
+                onSubmit={onSubmit}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={false}
+                        onSubmit={onSubmit}
+                        endEditing={endEditing}
+                        reinitializeForm={resetForm}
+                        submitting={submitting}
+                        revisionMessageFormField={revision_message}
+                    />
+                }
+                <EditableReferenceHeader
+                    entity={entity}
+                    table={table}
+                    type="database"
+                    headerIcon="database"
+                    name="Details"
+                    user={user}
+                    isEditing={isEditing}
+                    hasSingleSchema={false}
+                    hasDisplayName={false}
+                    startEditing={startEditing}
+                    displayNameFormField={display_name}
+                    nameFormField={name}
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () =>
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            <li className="relative">
+                                <Detail
+                                    id="description"
+                                    name="Description"
+                                    description={entity.description}
+                                    placeholder="No description yet"
+                                    isEditing={isEditing}
+                                    field={description}
+                                />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="points_of_interest"
+                                    name={`Why this database is interesting`}
+                                    description={entity.points_of_interest}
+                                    placeholder="Nothing interesting yet"
+                                    isEditing={isEditing}
+                                    field={points_of_interest}
+                                    />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="caveats"
+                                    name={`Things to be aware of about this database`}
+                                    description={entity.caveats}
+                                    placeholder="Nothing to be aware of yet"
+                                    isEditing={isEditing}
+                                    field={caveats}
+                                />
+                            </li>
+                        </List>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/DatabaseDetailContainer.jsx b/frontend/src/metabase/reference/databases/DatabaseDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..340f8cd57b9bfb97c3fd4ac2f9cf255597d9bce8
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/DatabaseDetailContainer.jsx
@@ -0,0 +1,74 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import DatabaseSidebar from './DatabaseSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import DatabaseDetail from "metabase/reference/databases/DatabaseDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabase,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    database: getDatabase(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class DatabaseDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabaseMetadata(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            database,
+            isEditing
+        } = this.props;
+
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<DatabaseSidebar database={database} />}
+            >
+                <DatabaseDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/DatabaseList.jsx b/frontend/src/metabase/reference/databases/DatabaseList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1aa94382027e87d23bcddc92e4da7e7fae13a868
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/DatabaseList.jsx
@@ -0,0 +1,98 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+
+import { isQueryable } from "metabase/lib/table";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getDatabases,
+    getError,
+    getLoading
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+const emptyStateData = {
+    title: "Metabase is no fun without any data",
+    adminMessage: "Your databases will appear here once you connect one",
+    message: "Databases will appear here once your admins have added some",
+    image: "app/assets/img/databases-list",
+    adminAction: "Connect a database",
+    adminLink: "/admin/databases/create"
+}
+
+const mapStateToProps = (state, props) => ({
+    entities: getDatabases(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class DatabaseList extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name="Databases and tables"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            { 
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                          <li className="relative" key={entity.id}>
+                                            <ListItem
+                                                id={entity.id}
+                                                index={index}
+                                                name={entity.display_name || entity.name}
+                                                description={ entity.description }
+                                                url={ `/reference/databases/${entity.id}` }
+                                                icon="database"
+                                            />
+                                        </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/DatabaseListContainer.jsx b/frontend/src/metabase/reference/databases/DatabaseListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c74fbefbc9970444ed919adaff5a82aa54ae0fa9
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/DatabaseListContainer.jsx
@@ -0,0 +1,69 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import BaseSidebar from 'metabase/reference/guide/BaseSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import DatabaseList from "metabase/reference/databases/DatabaseList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+const mapStateToProps = (state, props) => ({
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class DatabaseListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        location: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabases(this.props);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+
+    }
+
+    render() {
+        const {
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<BaseSidebar/>}
+            >
+                <DatabaseList {...this.props}/>
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/DatabaseSidebar.jsx b/frontend/src/metabase/reference/databases/DatabaseSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9ef1dd1adba36db281bb6f96000c2fb22f399d65
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/DatabaseSidebar.jsx
@@ -0,0 +1,45 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const DatabaseSidebar = ({
+    database,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <ul>
+            <div className={S.breadcrumbs}>
+                <Breadcrumbs
+                    className="py4"
+                    crumbs={[["Databases","/reference/databases"],
+                             [database.name]]}
+                    inSidebar={true}
+                    placeholder="Data Reference"
+                />
+            </div>
+                <SidebarItem key={`/reference/databases/${database.id}`} 
+                             href={`/reference/databases/${database.id}`} 
+                             icon="document" 
+                             name="Details" />
+                <SidebarItem key={`/reference/databases/${database.id}/tables`} 
+                             href={`/reference/databases/${database.id}/tables`} 
+                             icon="table2" 
+                             name={`Tables in ${database.name}`} />
+        </ul>
+    </div>
+DatabaseSidebar.propTypes = {
+    database:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(DatabaseSidebar);
+
diff --git a/frontend/src/metabase/reference/databases/FieldDetail.jsx b/frontend/src/metabase/reference/databases/FieldDetail.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..940193202323b717a3b2d52f9fa541953eb92968
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/FieldDetail.jsx
@@ -0,0 +1,261 @@
+/* eslint "react/prop-types": "warn" */
+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";
+
+import S from "metabase/reference/Reference.css";
+
+import List from "metabase/components/List.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+import Detail from "metabase/reference/components/Detail.jsx";
+import FieldTypeDetail from "metabase/reference/components/FieldTypeDetail.jsx";
+import UsefulQuestions from "metabase/reference/components/UsefulQuestions.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+import {
+    getField,
+    getTable,
+    getDatabase,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getIsFormulaExpanded,
+    getForeignKeys
+} from "../selectors";
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+
+const interestingQuestions = (database, table, field) => {
+    return [
+        {
+            text: `Number of ${table.display_name} grouped by ${field.display_name}`,
+            icon: { name: "bar", scale: 1, viewBox: "8 8 16 16" },
+            link: getQuestionUrl({
+                dbId: database.id,
+                tableId: table.id,
+                fieldId: field.id,
+                getCount: true,
+                visualization: 'bar'
+            })
+        },
+        {
+            text: `Number of ${table.display_name} grouped by ${field.display_name}`,
+            icon: { name: "pie", scale: 1, viewBox: "8 8 16 16" },
+            link: getQuestionUrl({
+                dbId: database.id,
+                tableId: table.id,
+                fieldId: field.id,
+                getCount: true,
+                visualization: 'pie'
+            })
+        },
+        {
+            text: `All distinct values of ${field.display_name}`,
+            icon: "table2",
+            link: getQuestionUrl({
+                dbId: database.id,
+                tableId: table.id,
+                fieldId: field.id
+            })
+        }
+    ]
+}
+
+const mapStateToProps = (state, props) => {
+    const entity = getField(state, props) || {};
+
+    return {
+        entity,
+        field: entity,
+        table: getTable(state, props),
+        database: getDatabase(state, props),
+        loading: getLoading(state, props),
+        // naming this 'error' will conflict with redux form
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        foreignKeys: getForeignKeys(state, props),
+        isEditing: getIsEditing(state, props),
+        isFormulaExpanded: getIsFormulaExpanded(state, props),
+    }
+};
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions,
+    onChangeLocation: push
+};
+
+const validate = (values, props) => {
+    return {};
+}
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'details',
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats', 'special_type', 'fk_target_field_id'],
+    validate
+})
+export default class FieldDetail extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entity: PropTypes.object.isRequired,
+        field:  PropTypes.object.isRequired,
+        table: PropTypes.object,
+        user: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        foreignKeys: PropTypes.object,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        resetForm: PropTypes.func.isRequired,
+        fields: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool,
+    };
+
+    render() {
+        const {
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats, special_type, fk_target_field_id },
+            style,
+            entity,
+            table,
+            loadingError,
+            loading,
+            user,
+            foreignKeys,
+            isEditing,
+            startEditing,
+            endEditing,
+            handleSubmit,
+            resetForm,
+            submitting,
+        } = this.props;
+
+        const onSubmit = handleSubmit(async (fields) =>
+            await actions.rUpdateFieldDetail(fields, this.props)
+        );
+
+        return (
+            <form style={style} className="full"
+                onSubmit={onSubmit}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={false}
+                        onSubmit={onSubmit}
+                        endEditing={endEditing}
+                        reinitializeForm={resetForm}
+                        submitting={submitting}
+                        revisionMessageFormField={revision_message}
+                    />
+                }
+                <EditableReferenceHeader
+                    entity={entity}
+                    table={table}
+                    type="field"
+                    headerIcon="field"
+                    name="Details"
+                    user={user}
+                    isEditing={isEditing}
+                    hasSingleSchema={false}
+                    hasDisplayName={true}
+                    startEditing={startEditing}
+                    displayNameFormField={display_name}
+                    nameFormField={name}
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () =>
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            <li className="relative">
+                                <Detail
+                                    id="description"
+                                    name="Description"
+                                    description={entity.description}
+                                    placeholder="No description yet"
+                                    isEditing={isEditing}
+                                    field={description}
+                                />
+                            </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <Detail
+                                        id="name"
+                                        name="Actual name in database"
+                                        description={entity.name}
+                                        subtitleClass={S.tableActualName}
+                                    />
+                                </li>
+                            }
+                            <li className="relative">
+                                <Detail
+                                    id="points_of_interest"
+                                    name={`Why this field is interesting`}
+                                    description={entity.points_of_interest}
+                                    placeholder="Nothing interesting yet"
+                                    isEditing={isEditing}
+                                    field={points_of_interest}
+                                    />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="caveats"
+                                    name={`Things to be aware of about this field`}
+                                    description={entity.caveats}
+                                    placeholder="Nothing to be aware of yet"
+                                    isEditing={isEditing}
+                                    field={caveats}
+                                />
+                            </li>
+
+
+                            { !isEditing && 
+                                <li className="relative">
+                                    <Detail
+                                        id="base_type"
+                                        name={`Data type`}
+                                        description={entity.base_type}
+                                    />
+                                </li>
+                            }
+                                <li className="relative">
+                                    <FieldTypeDetail
+                                        field={entity}
+                                        foreignKeys={foreignKeys}
+                                        fieldTypeFormField={special_type}
+                                        foreignKeyFormField={fk_target_field_id}
+                                        isEditing={isEditing}
+                                    />
+                                </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <UsefulQuestions questions={interestingQuestions(this.props.database, this.props.table, this.props.field)} />
+                                </li>
+                            }
+
+
+                        </List>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/FieldDetailContainer.jsx b/frontend/src/metabase/reference/databases/FieldDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..37d5fabcb9802dbb305f04db060b2c0bbf3ab576
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/FieldDetailContainer.jsx
@@ -0,0 +1,81 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import FieldSidebar from './FieldSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import FieldDetail from "metabase/reference/databases/FieldDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabase,
+    getTable,
+    getField,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+const mapStateToProps = (state, props) => ({
+    database: getDatabase(state, props),    
+    table: getTable(state, props),    
+    field: getField(state, props),    
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class FieldDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        table: PropTypes.object.isRequired,
+        field: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabaseMetadata(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            database,
+            table,
+            field,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<FieldSidebar database={database} table={table} field={field}/>}
+            >
+                <FieldDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx b/frontend/src/metabase/reference/databases/FieldList.jsx
similarity index 73%
rename from frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx
rename to frontend/src/metabase/reference/databases/FieldList.jsx
index a5aebda8df7c32abe0e925d300af48dd7f7493f4..5f68fb113e336b4a264b64bc0c280ccbaff77dd3 100644
--- a/frontend/src/metabase/reference/containers/ReferenceFieldsList.jsx
+++ b/frontend/src/metabase/reference/databases/FieldList.jsx
@@ -14,23 +14,21 @@ import EmptyState from "metabase/components/EmptyState.jsx";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 
 import EditHeader from "metabase/reference/components/EditHeader.jsx";
-import ReferenceHeader from "metabase/reference/components/ReferenceHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
 
 import cx from "classnames";
 
 import {
-    getSection,
-    getData,
+    getTable,
+    getFieldsByTable,
     getForeignKeys,
     getError,
     getLoading,
     getUser,
     getIsEditing,
-    getHasRevisionHistory,
 } from "../selectors";
 
 import {
-    tryUpdateFields,
     fieldsToFormFields
 } from '../utils';
 
@@ -39,17 +37,23 @@ import { getIconForField } from "metabase/lib/schema_metadata";
 import * as metadataActions from "metabase/redux/metadata";
 import * as actions from 'metabase/reference/reference';
 
+
+const emptyStateData = {
+    message: `Fields in this table will appear here as they're added`,
+    icon: "fields"
+}
+
+
 const mapStateToProps = (state, props) => {
-    const data = getData(state, props);
+    const data = getFieldsByTable(state, props);
     return {
-        section: getSection(state, props),
+        table: getTable(state, props),
         entities: data,
         foreignKeys: getForeignKeys(state, props),
         loading: getLoading(state, props),
         loadingError: getError(state, props),
         user: getUser(state, props),
         isEditing: getIsEditing(state, props),
-        hasRevisionHistory: getHasRevisionHistory(state, props),
         fields: fieldsToFormFields(data)
     };
 }
@@ -68,13 +72,12 @@ const validate = (values, props) => {
     form: 'fields',
     validate
 })
-export default class ReferenceEntityList extends Component {
+export default class FieldList extends Component {
     static propTypes = {
         style: PropTypes.object.isRequired,
         entities: PropTypes.object.isRequired,
         foreignKeys: PropTypes.object.isRequired,
         isEditing: PropTypes.bool,
-        hasRevisionHistory: PropTypes.bool,
         startEditing: PropTypes.func.isRequired,
         endEditing: PropTypes.func.isRequired,
         startLoading: PropTypes.func.isRequired,
@@ -84,7 +87,7 @@ export default class ReferenceEntityList extends Component {
         handleSubmit: PropTypes.func.isRequired,
         user: PropTypes.object.isRequired,
         fields: PropTypes.object.isRequired,
-        section: PropTypes.object.isRequired,
+        table: PropTypes.object.isRequired,
         loading: PropTypes.bool,
         loadingError: PropTypes.object,
         submitting: PropTypes.bool,
@@ -97,12 +100,11 @@ export default class ReferenceEntityList extends Component {
             entities,
             fields,
             foreignKeys,
-            section,
+            table,
             loadingError,
             loading,
             user,
             isEditing,
-            hasRevisionHistory,
             startEditing,
             endEditing,
             resetForm,
@@ -113,18 +115,24 @@ export default class ReferenceEntityList extends Component {
         return (
             <form style={style} className="full"
                 onSubmit={handleSubmit(async (formFields) =>
-                    await tryUpdateFields(formFields, this.props)
+                    await actions.rUpdateFields(this.props.entities, formFields, this.props)
                 )}
             >
                 { isEditing &&
                     <EditHeader
-                        hasRevisionHistory={hasRevisionHistory}
+                        hasRevisionHistory={false}
                         reinitializeForm={resetForm}
                         endEditing={endEditing}
                         submitting={submitting}
                     />
                 }
-                <ReferenceHeader section={section} user={user} isEditing={isEditing} startEditing={startEditing} />
+                <EditableReferenceHeader 
+                    headerIcon="table2"
+                    name={`Fields in ${table.display_name}`}
+                    user={user} 
+                    isEditing={isEditing} 
+                    startEditing={startEditing} 
+                />
                 <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
                 { () => Object.keys(entities).length > 0 ?
                     <div className="wrapper wrapper--trim">
@@ -148,7 +156,7 @@ export default class ReferenceEntityList extends Component {
                                         <Field
                                             field={entity}
                                             foreignKeys={foreignKeys}
-                                            url={`${section.id}/${entity.id}`}
+                                            url={`/reference/databases/${table.db_id}/tables/${table.id}/fields/${entity.id}`}
                                             icon={getIconForField(entity)}
                                             isEditing={isEditing}
                                             formField={fields[entity.id]}
@@ -159,25 +167,7 @@ export default class ReferenceEntityList extends Component {
                     </div>
                     :
                     <div className={S.empty}>
-                        { section.empty &&
-                            <EmptyState
-                                title={section.empty.title}
-                                message={user.is_superuser ?
-                                    section.empty.adminMessage || section.empty.message :
-                                    section.empty.message
-                                }
-                                icon={section.empty.icon}
-                                image={section.empty.image}
-                                action={user.is_superuser ?
-                                    section.empty.adminAction || section.empty.action :
-                                    section.empty.action
-                                }
-                                link={user.is_superuser ?
-                                    section.empty.adminLink || section.empty.link :
-                                    section.empty.link
-                                }
-                            />
-                        }
+                        <EmptyState {...emptyStateData} />
                     </div>
                 }
                 </LoadingAndErrorWrapper>
diff --git a/frontend/src/metabase/reference/databases/FieldListContainer.jsx b/frontend/src/metabase/reference/databases/FieldListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..30d9d97c727dff3714c6ef1889519358a3ebb561
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/FieldListContainer.jsx
@@ -0,0 +1,78 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import TableSidebar from './TableSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import FieldList from "metabase/reference/databases/FieldList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabase,
+    getTable,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    database: getDatabase(state, props),    
+    table: getTable(state, props),    
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class FieldListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        table: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabaseMetadata(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            database,
+            table,
+            isEditing
+        } = this.props;
+
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<TableSidebar database={database} table={table}/>}
+            >
+                <FieldList {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/FieldSidebar.jsx b/frontend/src/metabase/reference/databases/FieldSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..171ee257214ed2c526c9209ad9cf78fc9759ed7e
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/FieldSidebar.jsx
@@ -0,0 +1,47 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const FieldSidebar =({
+    database,
+    table,
+    field,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <ul>
+            <div className={S.breadcrumbs}>
+                <Breadcrumbs
+                    className="py4"
+                    crumbs={[[database.name, `/reference/databases/${database.id}`],
+                             [table.name,`/reference/databases/${database.id}/tables/${table.id}`],
+                             [field.name]]}
+                    inSidebar={true}
+                    placeholder="Data Reference"
+                />
+            </div>
+                <SidebarItem key={`/reference/databases/${database.id}/tables/${table.id}/fields/${field.id}`} 
+                             href={`/reference/databases/${database.id}/tables/${table.id}/fields/${field.id}`} 
+                             icon="document" 
+                             name="Details" />
+        </ul>
+    </div>
+
+FieldSidebar.propTypes = {
+    database:          PropTypes.object,
+    table:          PropTypes.object,
+    field:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(FieldSidebar);
+
diff --git a/frontend/src/metabase/reference/databases/TableDetail.jsx b/frontend/src/metabase/reference/databases/TableDetail.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4af371e7455c1a6814ec1a75bc36959a10e98207
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/TableDetail.jsx
@@ -0,0 +1,223 @@
+/* eslint "react/prop-types": "warn" */
+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";
+
+import S from "metabase/reference/Reference.css";
+
+import List from "metabase/components/List.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+import Detail from "metabase/reference/components/Detail.jsx";
+import UsefulQuestions from "metabase/reference/components/UsefulQuestions.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+import {
+    getTable,
+    getFields,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getHasSingleSchema,
+    getIsFormulaExpanded,
+    getForeignKeys
+} from "../selectors";
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+
+const interestingQuestions = (table) => {
+    return [
+        {
+            text: `Count of ${table.display_name}`,
+            icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
+            link: getQuestionUrl({
+                dbId: table.db_id,
+                tableId: table.id,
+                getCount: true
+            })
+        },
+        {
+            text: `See raw data for ${table.display_name}`,
+            icon: "table2",
+            link: getQuestionUrl({
+                dbId: table.db_id,
+                tableId: table.id,
+            })
+        }
+    ]
+}
+const mapStateToProps = (state, props) => {
+    const entity = getTable(state, props) || {};
+    const fields = getFields(state, props);
+
+    return {
+        entity,
+        table: getTable(state, props),
+        metadataFields: fields,
+        loading: getLoading(state, props),
+        // naming this 'error' will conflict with redux form
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        foreignKeys: getForeignKeys(state, props),
+        isEditing: getIsEditing(state, props),
+        hasSingleSchema: getHasSingleSchema(state, props),
+        isFormulaExpanded: getIsFormulaExpanded(state, props),
+    }
+};
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions,
+    onChangeLocation: push
+};
+
+const validate = (values, props) => {
+    return {};
+}
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'details',
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats'],
+    validate
+})
+export default class TableDetail extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entity: PropTypes.object.isRequired,
+        table: PropTypes.object,
+        user: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        resetForm: PropTypes.func.isRequired,
+        fields: PropTypes.object.isRequired,
+        hasSingleSchema: PropTypes.bool,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool,
+    };
+
+    render() {
+        const {
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats },
+            style,
+            entity,
+            table,
+            loadingError,
+            loading,
+            user,
+            isEditing,
+            startEditing,
+            endEditing,
+            hasSingleSchema,
+            handleSubmit,
+            resetForm,
+            submitting,
+        } = this.props;
+
+        const onSubmit = handleSubmit(async (fields) =>
+            await actions.rUpdateTableDetail(fields, this.props)
+        );
+
+        return (
+            <form style={style} className="full"
+                onSubmit={onSubmit}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={false}
+                        onSubmit={onSubmit}
+                        endEditing={endEditing}
+                        reinitializeForm={resetForm}
+                        submitting={submitting}
+                        revisionMessageFormField={revision_message}
+                    />
+                }
+                <EditableReferenceHeader
+                    entity={entity}
+                    table={table}
+                    type="table"
+                    headerIcon="table2"
+                    headerLink={getQuestionUrl({ dbId: entity.db_id, tableId: entity.id})}
+                    name="Details"
+                    user={user}
+                    isEditing={isEditing}
+                    hasSingleSchema={hasSingleSchema}
+                    hasDisplayName={true}
+                    startEditing={startEditing}
+                    displayNameFormField={display_name}
+                    nameFormField={name}
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () =>
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            <li className="relative">
+                                <Detail
+                                    id="description"
+                                    name="Description"
+                                    description={entity.description}
+                                    placeholder="No description yet"
+                                    isEditing={isEditing}
+                                    field={description}
+                                />
+                            </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <Detail
+                                        id="name"
+                                        name="Actual name in database"
+                                        description={entity.name}
+                                        subtitleClass={S.tableActualName}
+                                    />
+                                </li>
+                            }
+                            <li className="relative">
+                                <Detail
+                                    id="points_of_interest"
+                                    name={`Why this table is interesting`}
+                                    description={entity.points_of_interest}
+                                    placeholder="Nothing interesting yet"
+                                    isEditing={isEditing}
+                                    field={points_of_interest}
+                                    />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="caveats"
+                                    name={`Things to be aware of about this table`}
+                                    description={entity.caveats}
+                                    placeholder="Nothing to be aware of yet"
+                                    isEditing={isEditing}
+                                    field={caveats}
+                                />
+                            </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <UsefulQuestions questions={interestingQuestions(this.props.table)} />
+                                </li>
+                            }
+                        </List>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/TableDetailContainer.jsx b/frontend/src/metabase/reference/databases/TableDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e20d0c95c0de80e030f16d3fd4c1cccfc19a9ed3
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/TableDetailContainer.jsx
@@ -0,0 +1,78 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import TableSidebar from './TableSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import TableDetail from "metabase/reference/databases/TableDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabase,
+    getTable,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    database: getDatabase(state, props),    
+    table: getTable(state, props),    
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class TableDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        table: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabaseMetadata(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            database,
+            table,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<TableSidebar database={database} table={table}/>}
+            >
+                <TableDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx b/frontend/src/metabase/reference/databases/TableList.jsx
similarity index 55%
rename from frontend/src/metabase/reference/containers/ReferenceEntityList.jsx
rename to frontend/src/metabase/reference/databases/TableList.jsx
index 3773c59cf77c34e39bcdaf1bda60ddd36d2ec68e..2fbe9254fc84e6142f766f909536fa2a9da559b0 100644
--- a/frontend/src/metabase/reference/containers/ReferenceEntityList.jsx
+++ b/frontend/src/metabase/reference/databases/TableList.jsx
@@ -2,11 +2,8 @@
 import React, { Component } from "react";
 import PropTypes from "prop-types";
 import { connect } from "react-redux";
-import moment from "moment";
 
-import visualizations from "metabase/visualizations";
 import { isQueryable } from "metabase/lib/table";
-import * as Urls from "metabase/lib/urls";
 
 import S from "metabase/components/List.css";
 import R from "metabase/reference/Reference.css";
@@ -15,18 +12,14 @@ import List from "metabase/components/List.jsx";
 import ListItem from "metabase/components/ListItem.jsx";
 import EmptyState from "metabase/components/EmptyState.jsx";
 
+
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 
 import ReferenceHeader from "../components/ReferenceHeader.jsx";
 
 import {
-    separateTablesBySchema
-} from '../utils';
-
-import {
-    getSection,
-    getData,
-    getUser,
+    getDatabase,
+    getTablesByDatabase,
     getHasSingleSchema,
     getError,
     getLoading
@@ -34,10 +27,15 @@ import {
 
 import * as metadataActions from "metabase/redux/metadata";
 
+
+const emptyStateData = {
+    message: `Tables in this database will appear here as they're added`,
+    icon: "table2"
+}
+
 const mapStateToProps = (state, props) => ({
-    section: getSection(state, props),
-    entities: getData(state, props),
-    user: getUser(state, props),
+    database: getDatabase(state, props),
+    entities: getTablesByDatabase(state, props),
     hasSingleSchema: getHasSingleSchema(state, props),
     loading: getLoading(state, props),
     loadingError: getError(state, props)
@@ -47,37 +45,53 @@ const mapDispatchToProps = {
     ...metadataActions
 };
 
-const createListItem = (entity, index, section) =>
+const createListItem = (entity, index) =>
     <li className="relative" key={entity.id}>
         <ListItem
             id={entity.id}
             index={index}
             name={entity.display_name || entity.name}
-            description={section.type !== 'questions' ?
-                entity.description :
-                `Created ${moment(entity.created_at).fromNow()} by ${entity.creator.common_name}`
-            }
-            url={section.type !== 'questions' ?
-                `${section.id}/${entity.id}` :
-                Urls.question(entity.id)
-            }
-            icon={section.type === 'questions' ?
-                visualizations.get(entity.display).iconName :
-                section.icon
-            }
+            description={ entity.description }
+            url={ `/reference/databases/${entity.db_id}/tables/${entity.id}` }
+            icon="table2"
         />
     </li>;
 
+
 const createSchemaSeparator = (entity) =>
     <li className={R.schemaSeparator}>{entity.schema}</li>;
 
+
+export const separateTablesBySchema = (
+    tables,
+    createSchemaSeparator,
+    createListItem
+) => Object.values(tables)
+    .sort((table1, table2) => table1.schema > table2.schema ? 1 :
+        table1.schema === table2.schema ? 0 : -1
+    )
+    .map((table, index, sortedTables) => {
+        if (!table || !table.id || !table.name) {
+            return;
+        }
+        // add schema header for first element and if schema is different from previous
+        const previousTableId = Object.keys(sortedTables)[index - 1];
+        return index === 0 ||
+            sortedTables[previousTableId].schema !== table.schema ?
+                [
+                    createSchemaSeparator(table),
+                    createListItem(table, index)
+                ] :
+                createListItem(table, index);
+    });
+
+
 @connect(mapStateToProps, mapDispatchToProps)
-export default class ReferenceEntityList extends Component {
+export default class TableList extends Component {
     static propTypes = {
         style: PropTypes.object.isRequired,
         entities: PropTypes.object.isRequired,
-        user: PropTypes.object.isRequired,
-        section: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
         hasSingleSchema: PropTypes.bool,
         loading: PropTypes.bool,
         loadingError: PropTypes.object
@@ -86,9 +100,8 @@ export default class ReferenceEntityList extends Component {
     render() {
         const {
             entities,
-            user,
             style,
-            section,
+            database,
             hasSingleSchema,
             loadingError,
             loading
@@ -96,46 +109,31 @@ export default class ReferenceEntityList extends Component {
 
         return (
             <div style={style} className="full">
-                <ReferenceHeader section={section} />
+                <ReferenceHeader 
+                    name={`Tables in ${database.name}`}
+                    type="tables"
+                    headerIcon="database"
+                />
                 <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
                 { () => Object.keys(entities).length > 0 ?
                     <div className="wrapper wrapper--trim">
                         <List>
-                            { section.type === "tables" && !hasSingleSchema ?
+                            { !hasSingleSchema ?
                                 separateTablesBySchema(
                                     entities,
-                                    section,
                                     createSchemaSeparator,
                                     createListItem
                                 ) :
                                 Object.values(entities).filter(isQueryable).map((entity, index) =>
                                     entity && entity.id && entity.name &&
-                                        createListItem(entity, index, section)
+                                        createListItem(entity, index)
                                 )
                             }
                         </List>
                     </div>
                     :
                     <div className={S.empty}>
-                        { section.empty &&
-                            <EmptyState
-                                title={section.empty.title}
-                                message={user.is_superuser ?
-                                    section.empty.adminMessage || section.empty.message :
-                                    section.empty.message
-                                }
-                                icon={section.empty.icon}
-                                image={section.empty.image}
-                                action={user.is_superuser ?
-                                    section.empty.adminAction || section.empty.action :
-                                    section.empty.action
-                                }
-                                link={user.is_superuser ?
-                                    section.empty.adminLink || section.empty.link :
-                                    section.empty.link
-                                }
-                            />
-                        }
+                        <EmptyState {...emptyStateData}/>
                     </div>
                 }
                 </LoadingAndErrorWrapper>
diff --git a/frontend/src/metabase/reference/databases/TableListContainer.jsx b/frontend/src/metabase/reference/databases/TableListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7eb48ef50aed613061f6100c3c0199b1508c8c58
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/TableListContainer.jsx
@@ -0,0 +1,74 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import DatabaseSidebar from './DatabaseSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import TableList from "metabase/reference/databases/TableList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabase,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    database: getDatabase(state, props),    
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class TableListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchDatabaseMetadata(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+
+    }
+
+    render() {
+        const {
+            database,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<DatabaseSidebar database={database} />}
+            >
+                <TableList {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/databases/TableQuestions.jsx b/frontend/src/metabase/reference/databases/TableQuestions.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..fe94f2292a9005ee42012c3c1dd084b56087031e
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/TableQuestions.jsx
@@ -0,0 +1,115 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import moment from "moment";
+
+import visualizations from "metabase/visualizations";
+import { isQueryable } from "metabase/lib/table";
+import * as Urls from "metabase/lib/urls";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+
+import {
+    getTableQuestions,
+    getError,
+    getLoading,
+    getTable
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+const emptyStateData = (table) =>  {
+    return {
+        message: "Questions about this table will appear here as they're added",
+        icon: "all",
+        action: "Ask a question",
+        link: getQuestionUrl({
+            dbId: table.db_id,
+            tableId: table.id,
+        })
+    }
+}
+
+
+const mapStateToProps = (state, props) => ({
+    table: getTable(state, props),
+    entities: getTableQuestions(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class TableQuestions extends Component {
+    static propTypes = {
+        table: PropTypes.object.isRequired,
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name={`Questions about ${this.props.table.display_name}`}
+                    type="questions"
+                    headerIcon="table2"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            { 
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                            <li className="relative" key={entity.id}>
+                                                <ListItem
+                                                    id={entity.id}
+                                                    index={index}
+                                                    name={entity.display_name || entity.name}
+                                                    description={ `Created ${moment(entity.created_at).fromNow()} by ${entity.creator.common_name}` }
+                                                    url={ Urls.question(entity.id) }
+                                                    icon={ visualizations.get(entity.display).iconName }
+                                                />
+                                            </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData(this.props.table)}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/containers/ReferenceApp.jsx b/frontend/src/metabase/reference/databases/TableQuestionsContainer.jsx
similarity index 50%
rename from frontend/src/metabase/reference/containers/ReferenceApp.jsx
rename to frontend/src/metabase/reference/databases/TableQuestionsContainer.jsx
index de4bec50e79ccc36883d2c535ba6366c50e8aac8..33f9893606133562223507b65a8aee7dc2fcff4f 100644
--- a/frontend/src/metabase/reference/containers/ReferenceApp.jsx
+++ b/frontend/src/metabase/reference/databases/TableQuestionsContainer.jsx
@@ -3,98 +3,79 @@ import React, { Component } from 'react';
 import PropTypes from "prop-types";
 import { connect } from 'react-redux';
 
-import Sidebar from 'metabase/components/Sidebar.jsx';
+import TableSidebar from './TableSidebar.jsx';
 import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
 
+import TableQuestions from "metabase/reference/databases/TableQuestions.jsx"
 import * as metadataActions from 'metabase/redux/metadata';
 import * as actions from 'metabase/reference/reference';
 
 import {
+    getDatabase,
+    getTable,
     getDatabaseId,
-    getSectionId,
-    getSections,
-    getSection,
-    getBreadcrumbs,
     getIsEditing
 } from '../selectors';
 
-import {
-    tryFetchData
-} from '../utils';
-
 import {
     loadEntities
 } from 'metabase/questions/questions';
 
-import {
-    fetchDashboards
-} from 'metabase/dashboards/dashboards';
 
 const mapStateToProps = (state, props) => ({
-    sectionId: getSectionId(state, props),
+    database: getDatabase(state, props),    
+    table: getTable(state, props),    
     databaseId: getDatabaseId(state, props),
-    sections: getSections(state, props),
-    section: getSection(state, props),
-    breadcrumbs: getBreadcrumbs(state, props),
     isEditing: getIsEditing(state, props)
 });
 
 const mapDispatchToProps = {
-    fetchQuestions: () => loadEntities("card", {}),
-    fetchDashboards,
+    fetchQuestions: () => loadEntities("cards", {}),
     ...metadataActions,
     ...actions
 };
 
 @connect(mapStateToProps, mapDispatchToProps)
-export default class ReferenceApp extends Component {
+export default class TableQuestionsContainer extends Component {
     static propTypes = {
         params: PropTypes.object.isRequired,
-        breadcrumbs: PropTypes.array,
         location: PropTypes.object.isRequired,
-        children: PropTypes.any.isRequired,
-        sections: PropTypes.object.isRequired,
-        section: PropTypes.object.isRequired,
+        database: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        table: PropTypes.object.isRequired,
         isEditing: PropTypes.bool
     };
 
-    async componentWillMount() {
-        await tryFetchData(this.props);
+    async fetchContainerData() {
+        await actions.wrappedFetchDatabaseMetadataAndQuestion(this.props, this.props.databaseId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
     }
 
-    async componentWillReceiveProps(newProps) {
+    componentWillReceiveProps(newProps) {
         if (this.props.location.pathname === newProps.location.pathname) {
             return;
         }
 
-        newProps.endEditing();
-        newProps.endLoading();
-        newProps.clearError();
-        newProps.collapseFormula();
-
-        await tryFetchData(newProps);
+        actions.clearState(newProps)
     }
 
     render() {
         const {
-            children,
-            section,
-            sections,
-            breadcrumbs,
+            database,
+            table,
             isEditing
         } = this.props;
 
-        if (section.sidebar === false) {
-            return children;
-        }
-
         return (
             <SidebarLayout
                 className="flex-full relative"
                 style={ isEditing ? { paddingTop: '43px' } : {}}
-                sidebar={<Sidebar sections={sections} breadcrumbs={breadcrumbs} />}
+                sidebar={<TableSidebar database={database} table={table}/>}
             >
-                {children}
+                <TableQuestions {...this.props} />
             </SidebarLayout>
         );
     }
diff --git a/frontend/src/metabase/reference/databases/TableSidebar.jsx b/frontend/src/metabase/reference/databases/TableSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c221a3d3ed06c4b1b282764e05ffbd60b09c9650
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/TableSidebar.jsx
@@ -0,0 +1,53 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const TableSidebar = ({
+    database,
+    table,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <div className={S.breadcrumbs}>
+            <Breadcrumbs
+                className="py4"
+                crumbs={[["Databases","/reference/databases"],
+                         [database.name, `/reference/databases/${database.id}`],
+                         [table.name]]}
+                inSidebar={true}
+                placeholder="Data Reference"
+            />
+        </div>
+        <ol>
+            <SidebarItem key={`/reference/databases/${database.id}/tables/${table.id}`} 
+                         href={`/reference/databases/${database.id}/tables/${table.id}`} 
+                         icon="document" 
+                         name="Details" />
+            <SidebarItem key={`/reference/databases/${database.id}/tables/${table.id}/fields`} 
+                         href={`/reference/databases/${database.id}/tables/${table.id}/fields`} 
+                         icon="fields" 
+                         name="Fields in this table" />
+            <SidebarItem key={`/reference/databases/${database.id}/tables/${table.id}/questions`} 
+                         href={`/reference/databases/${database.id}/tables/${table.id}/questions`} 
+                         icon="all" 
+                         name="Questions about this table" />
+        </ol>
+    </div>
+
+TableSidebar.propTypes = {
+    database:          PropTypes.object,
+    table:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(TableSidebar);
+
diff --git a/frontend/src/metabase/reference/databases/databases.integ.spec.js b/frontend/src/metabase/reference/databases/databases.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e49c1db58e129b8a167cf7c09eb871756dd7785
--- /dev/null
+++ b/frontend/src/metabase/reference/databases/databases.integ.spec.js
@@ -0,0 +1,144 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from 'enzyme';
+
+import { CardApi } from 'metabase/services'
+
+import { 
+    FETCH_DATABASE_METADATA,
+    FETCH_DATABASES
+} from "metabase/redux/metadata";
+
+import { END_LOADING } from "metabase/reference/reference"
+
+import DatabaseListContainer from "metabase/reference/databases/DatabaseListContainer";
+import DatabaseDetailContainer from "metabase/reference/databases/DatabaseDetailContainer";
+import TableListContainer from "metabase/reference/databases/TableListContainer";
+import TableDetailContainer from "metabase/reference/databases/TableDetailContainer";
+import TableQuestionsContainer from "metabase/reference/databases/TableQuestionsContainer";
+import FieldListContainer from "metabase/reference/databases/FieldListContainer";
+import FieldDetailContainer from "metabase/reference/databases/FieldDetailContainer";
+
+import DatabaseList from "metabase/reference/databases/DatabaseList";
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+describe("The Reference Section", () => {
+    // Test data
+    const cardDef = { name :"A card", display: "scalar", 
+                      dataset_query: {database: 1, table_id: 1, type: "query", query: {source_table: 1, "aggregation": ["count"]}},
+                      visualization_settings: {}}
+
+    // Scaffolding
+    beforeAll(async () => {
+        await login();
+
+    })
+
+    describe("The Data Reference for the Sample Database", async () => {
+        
+        // database list
+        it("should see databases", async () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/");
+            var container = mount(store.connectContainer(<DatabaseListContainer />));
+            await store.waitForActions([FETCH_DATABASES, END_LOADING])
+            
+            expect(container.find(ReferenceHeader).length).toBe(1)
+            expect(container.find(DatabaseList).length).toBe(1)            
+            expect(container.find(AdminAwareEmptyState).length).toBe(0)
+            
+            expect(container.find(List).length).toBe(1)
+            expect(container.find(ListItem).length).toBeGreaterThanOrEqual(1)
+        })
+        
+        // database detail
+        it("should see a the detail view for the sample database", async ()=>{
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1");
+            mount(store.connectContainer(<DatabaseDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+
+        })
+        
+        // table list
+       it("should see the 4 tables in the sample database",async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables");
+            mount(store.connectContainer(<TableListContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+        // table detail
+
+       it("should see the Orders table", async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/1");
+            mount(store.connectContainer(<TableDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+
+       it("should see the Reviews table", async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/2");
+            mount(store.connectContainer(<TableDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+       it("should see the Products table", async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/3");
+            mount(store.connectContainer(<TableDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+       it("should see the People table", async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/4");
+            mount(store.connectContainer(<TableDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+        // field list
+       it("should see the fields for the orders table", async  () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/1/fields");
+            mount(store.connectContainer(<FieldListContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+
+        })
+       it("should see the questions for the orders tables", async  () => {
+
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/1/questions");
+            mount(store.connectContainer(<TableQuestionsContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+            
+            var card = await CardApi.create(cardDef)
+
+            expect(card.name).toBe(cardDef.name);
+            
+            await CardApi.delete({cardId: card.id})
+        })
+
+        // field detail
+
+       it("should see the orders created_at timestamp field", async () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/1/fields/1");
+            mount(store.connectContainer(<FieldDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+
+       it("should see the orders id field", async () => {
+            const store = await createTestStore()
+            store.pushPath("/reference/databases/1/tables/1/fields/25");
+            mount(store.connectContainer(<FieldDetailContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA])
+        })
+    });
+
+
+});
\ No newline at end of file
diff --git a/frontend/src/metabase/reference/guide/BaseSidebar.jsx b/frontend/src/metabase/reference/guide/BaseSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e52cd9f9ac9d0533f6e2b494812b173e0d6ffbb0
--- /dev/null
+++ b/frontend/src/metabase/reference/guide/BaseSidebar.jsx
@@ -0,0 +1,51 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const BaseSidebar = ({
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <div className={S.breadcrumbs}>
+            <Breadcrumbs
+                className="py4"
+                crumbs={[["Data Reference"]]}
+                inSidebar={true}
+                placeholder="Data Reference"
+            />
+        </div>
+        <ol>
+            <SidebarItem key="/reference/guide" 
+                         href="/reference/guide" 
+                         icon="reference" 
+                         name="Start here" />
+            <SidebarItem key="/reference/metrics" 
+                         href="/reference/metrics" 
+                         icon="ruler" 
+                         name="Metrics" />
+            <SidebarItem key="/reference/segments" 
+                         href="/reference/segments" 
+                         icon="segment" 
+                         name="Segments" />
+            <SidebarItem key="/reference/databases" 
+                         href="/reference/databases" 
+                         icon="database" 
+                         name="Databases and tables" />
+        </ol>
+    </div>
+
+BaseSidebar.propTypes = {
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(BaseSidebar);
+
diff --git a/frontend/src/metabase/reference/guide/GettingStartedGuideContainer.jsx b/frontend/src/metabase/reference/guide/GettingStartedGuideContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..54f40a982b0296c7426ad83f4cd3c0ce5cd31ca1
--- /dev/null
+++ b/frontend/src/metabase/reference/guide/GettingStartedGuideContainer.jsx
@@ -0,0 +1,63 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import ReferenceGettingStartedGuide from "metabase/reference/guide/ReferenceGettingStartedGuide.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+import {
+    fetchDashboards
+} from 'metabase/dashboards/dashboards';
+
+const mapStateToProps = (state, props) => ({
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    fetchDashboards,
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class GettingStartedGuideContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData() {
+        await actions.wrappedFetchGuide(this.props);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+
+        return (
+                <ReferenceGettingStartedGuide {...this.props} />
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx b/frontend/src/metabase/reference/guide/ReferenceGettingStartedGuide.jsx
similarity index 98%
rename from frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx
rename to frontend/src/metabase/reference/guide/ReferenceGettingStartedGuide.jsx
index d0a637dcb108746d81f88279a5188131d8cfd869..e572ebb59b3935ee9ebec44a617e0c316a9b5c89 100644
--- a/frontend/src/metabase/reference/containers/ReferenceGettingStartedGuide.jsx
+++ b/frontend/src/metabase/reference/guide/ReferenceGettingStartedGuide.jsx
@@ -45,11 +45,25 @@ import {
 
 import {
     getQuestionUrl,
-    has,
-    isGuideEmpty,
-    tryUpdateGuide
+    has
 } from '../utils';
 
+const isGuideEmpty = ({
+    things_to_know,
+    contact,
+    most_important_dashboard,
+    important_metrics,
+    important_segments,
+    important_tables
+} = {}) => things_to_know ? false :
+    contact && contact.name ? false :
+    contact && contact.email ? false :
+    most_important_dashboard ? false :
+    important_metrics && important_metrics.length !== 0 ? false :
+    important_segments && important_segments.length !== 0 ? false :
+    important_tables && important_tables.length !== 0 ? false :
+    true;
+
 const mapStateToProps = (state, props) => {
     const guide = getGuide(state, props);
     const dashboards = getDashboards(state, props);
@@ -200,7 +214,7 @@ export default class ReferenceGettingStartedGuide extends Component {
         } = this.props;
 
         const onSubmit = handleSubmit(async (fields) =>
-            await tryUpdateGuide(fields, this.props)
+            await actions.tryUpdateGuide(fields, this.props)
         );
 
         const getSelectedIds = fields => fields
diff --git a/frontend/src/metabase/reference/guide/guide.integ.spec.js b/frontend/src/metabase/reference/guide/guide.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..59896027a17ec04a73c600349aa0db8fc2e893e5
--- /dev/null
+++ b/frontend/src/metabase/reference/guide/guide.integ.spec.js
@@ -0,0 +1,86 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from 'enzyme';
+
+import { SegmentApi, MetricApi } from 'metabase/services'
+
+import { 
+    FETCH_DATABASE_METADATA,
+    FETCH_METRICS,
+    FETCH_SEGMENTS
+} from "metabase/redux/metadata";
+
+import GettingStartedGuideContainer from "metabase/reference/guide/GettingStartedGuideContainer";
+
+
+
+describe("The Reference Section", () => {
+    // Test data
+    const segmentDef = {name: "A Segment", description: "I did it!", table_id: 1, show_in_getting_started: true,
+                        definition: {database: 1, query: {filter: ["abc"]}}}
+
+    const anotherSegmentDef = {name: "Another Segment", description: "I did it again!", table_id: 1, show_in_getting_started: true,
+                               definition:{database: 1, query: {filter: ["def"]}}}
+    const metricDef = {name: "A Metric", description: "I did it!", table_id: 1,show_in_getting_started: true,
+                        definition: {database: 1, query: {aggregation: ["count"]}}}
+
+    const anotherMetricDef = {name: "Another Metric", description: "I did it again!", table_id: 1,show_in_getting_started: true,
+                        definition: {database: 1, query: {aggregation: ["count"]}}}
+    
+    // Scaffolding
+    beforeAll(async () => {
+        await login();
+
+    })
+
+
+    describe("The Getting Started Guide", async ()=>{
+        
+        
+        it("Should show an empty guide for non-admin users", async () => {
+            const store = await createTestStore()    
+            store.pushPath("/reference/");
+            mount(store.connectContainer(<GettingStartedGuideContainer />));
+            await store.waitForActions([FETCH_DATABASE_METADATA, FETCH_SEGMENTS, FETCH_METRICS])
+        })
+        
+        xit("Should show an empty guide with a creation CTA for admin users", async () => {
+        })
+
+        xit("A non-admin attempting to edit the guide should get an error", async () => {
+        })
+
+        it("Adding metrics should to the guide should make them appear", async () => {
+            
+            expect(0).toBe(0)
+            var metric = await MetricApi.create(metricDef);
+            expect(1).toBe(1)
+            var metric2 = await MetricApi.create(anotherMetricDef);
+            expect(2).toBe(2)
+            await MetricApi.delete({metricId: metric.id, revision_message: "Please"})
+            expect(1).toBe(1)
+            await MetricApi.delete({metricId: metric2.id, revision_message: "Please"})
+            expect(0).toBe(0)
+        })
+
+        it("Adding segments should to the guide should make them appear", async () => {
+            expect(0).toBe(0)
+            var segment = await SegmentApi.create(segmentDef);
+            expect(1).toBe(1)
+            var anotherSegment = await SegmentApi.create(anotherSegmentDef);
+            expect(2).toBe(2)
+            await SegmentApi.delete({segmentId: segment.id, revision_message: "Please"})
+            expect(1).toBe(1)
+            await SegmentApi.delete({segmentId: anotherSegment.id, revision_message: "Please"})
+            expect(0).toBe(0)
+        })
+        
+    })
+
+
+
+});
\ No newline at end of file
diff --git a/frontend/src/metabase/reference/containers/ReferenceEntity.jsx b/frontend/src/metabase/reference/metrics/MetricDetail.jsx
similarity index 57%
rename from frontend/src/metabase/reference/containers/ReferenceEntity.jsx
rename to frontend/src/metabase/reference/metrics/MetricDetail.jsx
index 45a0b6ec4ac7f76d968d2fa79cae07b745639607..e72f971cf43086e2e72a5682a91dac6756b7c4fd 100644
--- a/frontend/src/metabase/reference/containers/ReferenceEntity.jsx
+++ b/frontend/src/metabase/reference/metrics/MetricDetail.jsx
@@ -5,38 +5,29 @@ import { connect } from "react-redux";
 import { reduxForm } from "redux-form";
 import { push } from "react-router-redux";
 
-import S from "metabase/reference/Reference.css";
-
 import List from "metabase/components/List.jsx";
 import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
 
 import EditHeader from "metabase/reference/components/EditHeader.jsx";
-import ReferenceHeader from "metabase/reference/components/ReferenceHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
 import Detail from "metabase/reference/components/Detail.jsx";
-import FieldTypeDetail from "metabase/reference/components/FieldTypeDetail.jsx";
-import UsefulQuestions from "metabase/reference/components/UsefulQuestions.jsx";
 import FieldsToGroupBy from "metabase/reference/components/FieldsToGroupBy.jsx";
 import Formula from "metabase/reference/components/Formula.jsx";
 import MetricImportantFieldsDetail from "metabase/reference/components/MetricImportantFieldsDetail.jsx";
 
 import {
-    tryUpdateData
+    getQuestionUrl
 } from '../utils';
 
 import {
-    getSection,
-    getData,
+    getMetric,
     getTable,
     getFields,
     getGuide,
     getError,
     getLoading,
     getUser,
-    getHasQuestions,
     getIsEditing,
-    getHasDisplayName,
-    getHasRevisionHistory,
-    getHasSingleSchema,
     getIsFormulaExpanded,
     getForeignKeys
 } from "../selectors";
@@ -44,8 +35,9 @@ import {
 import * as metadataActions from 'metabase/redux/metadata';
 import * as actions from 'metabase/reference/reference';
 
+
 const mapStateToProps = (state, props) => {
-    const entity = getData(state, props) || {};
+    const entity = getMetric(state, props) || {};
     const guide = getGuide(state, props);
     const fields = getFields(state, props);
 
@@ -58,7 +50,6 @@ const mapStateToProps = (state, props) => {
     };
 
     return {
-        section: getSection(state, props),
         entity,
         table: getTable(state, props),
         metadataFields: fields,
@@ -69,11 +60,7 @@ const mapStateToProps = (state, props) => {
         user: getUser(state, props),
         foreignKeys: getForeignKeys(state, props),
         isEditing: getIsEditing(state, props),
-        hasSingleSchema: getHasSingleSchema(state, props),
-        hasQuestions: getHasQuestions(state, props),
-        hasDisplayName: getHasDisplayName(state, props),
         isFormulaExpanded: getIsFormulaExpanded(state, props),
-        hasRevisionHistory: getHasRevisionHistory(state, props),
         initialValues,
     }
 };
@@ -84,18 +71,16 @@ const mapDispatchToProps = {
     onChangeLocation: push
 };
 
-const validate = (values, props) => props.hasRevisionHistory ?
-    !values.revision_message ?
-        { revision_message: "Please enter a revision message" } : {} :
-    {};
+const validate = (values, props) =>  !values.revision_message ? 
+    { revision_message: "Please enter a revision message" } : {} 
 
 @connect(mapStateToProps, mapDispatchToProps)
 @reduxForm({
     form: 'details',
-    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats', 'how_is_this_calculated', 'special_type', 'fk_target_field_id', 'important_fields'],
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats', 'how_is_this_calculated', 'important_fields'],
     validate
 })
-export default class ReferenceEntity extends Component {
+export default class MetricDetail extends Component {
     static propTypes = {
         style: PropTypes.object.isRequired,
         entity: PropTypes.object.isRequired,
@@ -103,9 +88,7 @@ export default class ReferenceEntity extends Component {
         metadataFields: PropTypes.object,
         guide: PropTypes.object,
         user: PropTypes.object.isRequired,
-        foreignKeys: PropTypes.object,
         isEditing: PropTypes.bool,
-        hasQuestions: PropTypes.bool,
         startEditing: PropTypes.func.isRequired,
         endEditing: PropTypes.func.isRequired,
         startLoading: PropTypes.func.isRequired,
@@ -117,11 +100,7 @@ export default class ReferenceEntity extends Component {
         handleSubmit: PropTypes.func.isRequired,
         resetForm: PropTypes.func.isRequired,
         fields: PropTypes.object.isRequired,
-        section: PropTypes.object.isRequired,
-        hasSingleSchema: PropTypes.bool,
-        hasDisplayName: PropTypes.bool,
         isFormulaExpanded: PropTypes.bool,
-        hasRevisionHistory: PropTypes.bool,
         loading: PropTypes.bool,
         loadingError: PropTypes.object,
         submitting: PropTypes.bool,
@@ -130,9 +109,8 @@ export default class ReferenceEntity extends Component {
 
     render() {
         const {
-            fields: { name, display_name, description, revision_message, points_of_interest, caveats, how_is_this_calculated, special_type, fk_target_field_id, important_fields },
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats, how_is_this_calculated, important_fields },
             style,
-            section,
             entity,
             table,
             metadataFields,
@@ -140,17 +118,12 @@ export default class ReferenceEntity extends Component {
             loadingError,
             loading,
             user,
-            foreignKeys,
             isEditing,
-            hasQuestions,
             startEditing,
             endEditing,
             expandFormula,
             collapseFormula,
-            hasSingleSchema,
-            hasDisplayName,
             isFormulaExpanded,
-            hasRevisionHistory,
             handleSubmit,
             resetForm,
             submitting,
@@ -158,7 +131,7 @@ export default class ReferenceEntity extends Component {
         } = this.props;
 
         const onSubmit = handleSubmit(async (fields) =>
-            await tryUpdateData(fields, this.props)
+            await actions.rUpdateMetricDetail(this.props.entity, this.props.guide, fields, this.props)
         );
 
         return (
@@ -167,7 +140,7 @@ export default class ReferenceEntity extends Component {
             >
                 { isEditing &&
                     <EditHeader
-                        hasRevisionHistory={hasRevisionHistory}
+                        hasRevisionHistory={true}
                         onSubmit={onSubmit}
                         endEditing={endEditing}
                         reinitializeForm={resetForm}
@@ -175,14 +148,17 @@ export default class ReferenceEntity extends Component {
                         revisionMessageFormField={revision_message}
                     />
                 }
-                <ReferenceHeader
+                <EditableReferenceHeader
                     entity={entity}
                     table={table}
-                    section={section}
+                    type="metric"
+                    headerIcon="ruler"
+                    headerLink={getQuestionUrl({ dbId: table && table.db_id, tableId: entity.table_id, metricId: entity.id})}
+                    name="Details"
                     user={user}
                     isEditing={isEditing}
-                    hasSingleSchema={hasSingleSchema}
-                    hasDisplayName={hasDisplayName}
+                    hasSingleSchema={false}
+                    hasDisplayName={false}
                     startEditing={startEditing}
                     displayNameFormField={display_name}
                     nameFormField={name}
@@ -201,20 +177,10 @@ export default class ReferenceEntity extends Component {
                                     field={description}
                                 />
                             </li>
-                            { hasDisplayName && !isEditing &&
-                                <li className="relative">
-                                    <Detail
-                                        id="name"
-                                        name="Actual name in database"
-                                        description={entity.name}
-                                        subtitleClass={S.tableActualName}
-                                    />
-                                </li>
-                            }
                             <li className="relative">
                                 <Detail
                                     id="points_of_interest"
-                                    name={`Why this ${section.type} is interesting`}
+                                    name="Why this Metric is interesting"
                                     description={entity.points_of_interest}
                                     placeholder="Nothing interesting yet"
                                     isEditing={isEditing}
@@ -224,81 +190,50 @@ export default class ReferenceEntity extends Component {
                             <li className="relative">
                                 <Detail
                                     id="caveats"
-                                    name={`Things to be aware of about this ${section.type}`}
+                                    name="Things to be aware of about this Metric"
                                     description={entity.caveats}
                                     placeholder="Nothing to be aware of yet"
                                     isEditing={isEditing}
                                     field={caveats}
                                 />
                             </li>
-                            { section.type === 'metric' &&
-                                <li className="relative">
-                                    <Detail
-                                        id="how_is_this_calculated"
-                                        name={`How this ${section.type} is calculated`}
-                                        description={entity.how_is_this_calculated}
-                                        placeholder="Nothing on how it's calculated yet"
-                                        isEditing={isEditing}
-                                        field={how_is_this_calculated}
-                                    />
-                                </li>
-                            }
-                            { (section.type === 'metric' || section.type === 'segment') &&
-                                table && !isEditing &&
+                            <li className="relative">
+                                <Detail
+                                    id="how_is_this_calculated"
+                                    name="How this Metric is calculated"
+                                    description={entity.how_is_this_calculated}
+                                    placeholder="Nothing on how it's calculated yet"
+                                    isEditing={isEditing}
+                                    field={how_is_this_calculated}
+                                />
+                            </li>
+                            {   table && !isEditing &&
                                 <li className="relative">
                                     <Formula
-                                        type={section.type}
+                                        type="metric"
                                         entity={entity}
-                                        table={table}
                                         isExpanded={isFormulaExpanded}
                                         expandFormula={expandFormula}
                                         collapseFormula={collapseFormula}
                                     />
                                 </li>
                             }
-                            { !isEditing && section.type === 'field' &&
-                                <li className="relative">
-                                    <Detail
-                                        id="base_type"
-                                        name={`Data type`}
-                                        description={entity.base_type}
-                                    />
-                                </li>
-                            }
-                            { section.type === 'field' &&
-                                <li className="relative">
-                                    <FieldTypeDetail
-                                        field={entity}
-                                        foreignKeys={foreignKeys}
-                                        fieldTypeFormField={special_type}
-                                        foreignKeyFormField={fk_target_field_id}
-                                        isEditing={isEditing}
-                                    />
-                                </li>
-                            }
-                            { hasQuestions && !isEditing &&
-                                <li className="relative">
-                                    <UsefulQuestions questions={section.questions} />
-                                </li>
-                            }
-                            { section.type === 'metric' &&
-                                <li className="relative">
-                                    <MetricImportantFieldsDetail
-                                        fields={guide && guide.metric_important_fields[entity.id] &&
-                                            Object.values(guide.metric_important_fields[entity.id])
-                                                .map(fieldId => metadataFields[fieldId])
-                                                .reduce((map, field) => ({ ...map, [field.id]: field }), {})
-                                        }
-                                        table={table}
-                                        allFields={metadataFields}
-                                        metric={entity}
-                                        onChangeLocation={onChangeLocation}
-                                        isEditing={isEditing}
-                                        formField={important_fields}
-                                    />
-                                </li>
-                            }
-                            { section.type === 'metric' && !isEditing &&
+                            <li className="relative">
+                                <MetricImportantFieldsDetail
+                                    fields={guide && guide.metric_important_fields[entity.id] &&
+                                        Object.values(guide.metric_important_fields[entity.id])
+                                            .map(fieldId => metadataFields[fieldId])
+                                            .reduce((map, field) => ({ ...map, [field.id]: field }), {})
+                                    }
+                                    table={table}
+                                    allFields={metadataFields}
+                                    metric={entity}
+                                    onChangeLocation={onChangeLocation}
+                                    isEditing={isEditing}
+                                    formField={important_fields}
+                                />
+                            </li>
+                            { !isEditing &&
                                 <li className="relative">
                                     <FieldsToGroupBy
                                         fields={table.fields
@@ -308,7 +243,7 @@ export default class ReferenceEntity extends Component {
                                             .map(fieldId => metadataFields[fieldId])
                                             .reduce((map, field) => ({ ...map, [field.id]: field }), {})
                                         }
-                                        databaseId={table.db_id}
+                                        databaseId={table && table.db_id}
                                         metric={entity}
                                         title={ guide && guide.metric_important_fields[entity.id] ?
                                             "Other fields you can group this metric by" :
diff --git a/frontend/src/metabase/reference/metrics/MetricDetailContainer.jsx b/frontend/src/metabase/reference/metrics/MetricDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3592e969be44b7d221e31e72559ad93b2ed06ef7
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricDetailContainer.jsx
@@ -0,0 +1,80 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import MetricSidebar from './MetricSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import MetricDetail from "metabase/reference/metrics/MetricDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getMetric,
+    getMetricId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    metric: getMetric(state, props),
+    metricId: getMetricId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        user: PropTypes.object.isRequired,
+        metric: PropTypes.object.isRequired,
+        metricId: PropTypes.number.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchMetricDetail(this.props, this.props.metricId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            isEditing,
+            user,
+            metric
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<MetricSidebar metric={metric} user={user}/>}
+            >
+                <MetricDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/metrics/MetricList.jsx b/frontend/src/metabase/reference/metrics/MetricList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c19a6ecbcd3536de35eda2946b3f8dd6dbef13b3
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricList.jsx
@@ -0,0 +1,99 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+
+import { isQueryable } from "metabase/lib/table";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getMetrics,
+    getError,
+    getLoading
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+
+const emptyStateData = {
+    title: "Metrics are the official numbers that your team cares about",
+    adminMessage: "Defining common metrics for your team makes it even easier to ask questions",
+    message: "Metrics will appear here once your admins have created some",
+    image: "app/assets/img/metrics-list",
+    adminAction: "Learn how to create metrics",
+    adminLink: "http://www.metabase.com/docs/latest/administration-guide/06-segments-and-metrics.html"
+}
+
+const mapStateToProps = (state, props) => ({
+    entities: getMetrics(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricList extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name="Metrics"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            {
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                          <li className="relative" key={entity.id}>
+                                                <ListItem
+                                                    id={entity.id}
+                                                    index={index}
+                                                    name={entity.display_name || entity.name}
+                                                    description={ entity.description }
+                                                    url={ `/reference/metrics/${entity.id}` }
+                                                    icon="ruler"
+                                                />
+                                            </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/metrics/MetricListContainer.jsx b/frontend/src/metabase/reference/metrics/MetricListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5a566c44d1402be76165bd625f088a6da3eecb8b
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricListContainer.jsx
@@ -0,0 +1,70 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import BaseSidebar from 'metabase/reference/guide/BaseSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import MetricList from "metabase/reference/metrics/MetricList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+const mapStateToProps = (state, props) => ({
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+
+    async fetchContainerData(){
+        await actions.wrappedFetchMetrics(this.props);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<BaseSidebar/>}
+            >
+                <MetricList {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/metrics/MetricQuestions.jsx b/frontend/src/metabase/reference/metrics/MetricQuestions.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..759abf19695807d4ab15594a7a55f754538b5ed8
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricQuestions.jsx
@@ -0,0 +1,118 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import moment from "moment";
+
+import visualizations from "metabase/visualizations";
+import { isQueryable } from "metabase/lib/table";
+import * as Urls from "metabase/lib/urls";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+import {
+    getMetricQuestions,
+    getError,
+    getLoading,
+    getTable,
+    getMetric
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+const emptyStateData = (table, metric) => {
+    return {
+        message: "Questions about this metric will appear here as they're added",
+        icon: "all",
+        action: "Ask a question",
+        link: getQuestionUrl({
+            dbId: table && table.db_id,
+            tableId: metric.table_id,
+            metricId: metric.id
+        })
+    };
+    }
+
+
+const mapStateToProps = (state, props) => ({
+    metric: getMetric(state, props),
+    table: getTable(state, props),
+    entities: getMetricQuestions(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricQuestions extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        metric: PropTypes.object,
+        table: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name={`Questions about ${this.props.metric.name}`}
+                    type="questions"
+                    headerIcon="ruler"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            { 
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                        <li className="relative" key={entity.id}>
+                                            <ListItem
+                                                id={entity.id}
+                                                index={index}
+                                                name={entity.display_name || entity.name}
+                                                description={ `Created ${moment(entity.created_at).fromNow()} by ${entity.creator.common_name}` }
+                                                url={ Urls.question(entity.id) }
+                                                icon={ visualizations.get(entity.display).iconName }
+                                            />
+                                        </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData(this.props.table, this.props.metric)}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/metrics/MetricQuestionsContainer.jsx b/frontend/src/metabase/reference/metrics/MetricQuestionsContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6c00b2b626ef5d7619731d7a9983cc81c16ca1e4
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricQuestionsContainer.jsx
@@ -0,0 +1,84 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import MetricSidebar from './MetricSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import MetricQuestions from "metabase/reference/metrics/MetricQuestions.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getMetric,
+    getMetricId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+import {
+    loadEntities
+} from 'metabase/questions/questions';
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    metric: getMetric(state, props),
+    metricId: getMetricId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    fetchQuestions: () => loadEntities("cards", {}),
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricQuestionsContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        user: PropTypes.object.isRequired,
+        metric: PropTypes.object.isRequired,
+        metricId: PropTypes.number.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchMetricQuestions(this.props, this.props.metricId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            metric,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<MetricSidebar metric={metric} user={user}/>}
+            >
+                <MetricQuestions {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx b/frontend/src/metabase/reference/metrics/MetricRevisions.jsx
similarity index 87%
rename from frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx
rename to frontend/src/metabase/reference/metrics/MetricRevisions.jsx
index 05465289ba7289c2adf13f311541b27a6c790217..f9dcbf7af14725e4b5d3bcaabac14b3485720fce 100644
--- a/frontend/src/metabase/reference/containers/ReferenceRevisionsList.jsx
+++ b/frontend/src/metabase/reference/metrics/MetricRevisions.jsx
@@ -11,8 +11,7 @@ import * as metadataActions from "metabase/redux/metadata";
 import { assignUserColors } from "metabase/lib/formatting";
 
 import {
-    getSection,
-    getData,
+    getMetricRevisions,
     getMetric,
     getSegment,
     getTables,
@@ -26,10 +25,14 @@ import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.j
 import EmptyState from "metabase/components/EmptyState.jsx";
 import ReferenceHeader from "../components/ReferenceHeader.jsx";
 
+
+const emptyStateData =  {
+    message: "There are no revisions for this metric"
+}
+
 const mapStateToProps = (state, props) => {
     return {
-        section: getSection(state, props),
-        revisions: getData(state, props),
+        revisions: getMetricRevisions(state, props),
         metric: getMetric(state, props),
         segment: getSegment(state, props),
         tables: getTables(state, props),
@@ -44,10 +47,9 @@ const mapDispatchToProps = {
 };
 
 @connect(mapStateToProps, mapDispatchToProps)
-export default class RevisionHistoryApp extends Component {
+export default class MetricRevisions extends Component {
     static propTypes = {
         style: PropTypes.object.isRequired,
-        section: PropTypes.object.isRequired,
         revisions: PropTypes.object.isRequired,
         metric: PropTypes.object.isRequired,
         segment: PropTypes.object.isRequired,
@@ -60,7 +62,6 @@ export default class RevisionHistoryApp extends Component {
     render() {
         const {
             style,
-            section,
             revisions,
             metric,
             segment,
@@ -72,11 +73,6 @@ export default class RevisionHistoryApp extends Component {
 
         const entity = metric.id ? metric : segment;
 
-        const empty = {
-            icon: 'mine',
-            message: 'You haven\'t added any databases yet.'
-        };
-
         const userColorAssignments = user && Object.keys(revisions).length > 0 ?
             assignUserColors(
                 Object.values(revisions)
@@ -86,7 +82,10 @@ export default class RevisionHistoryApp extends Component {
 
         return (
             <div style={style} className="full">
-                <ReferenceHeader section={section} />
+                <ReferenceHeader 
+                    name={`Revision history for ${this.props.metric.name}`}
+                    headerIcon="ruler"
+                />
                 <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
                     { () => Object.keys(revisions).length > 0 && tables[entity.table_id] ?
                         <div className="wrapper wrapper--trim">
@@ -109,7 +108,7 @@ export default class RevisionHistoryApp extends Component {
                         </div>
                         :
                         <div className={S.empty}>
-                          <EmptyState message={empty.message} icon={empty.icon} />
+                          <EmptyState {...emptyStateData}/>
                         </div>
                     }
                 </LoadingAndErrorWrapper>
diff --git a/frontend/src/metabase/reference/metrics/MetricRevisionsContainer.jsx b/frontend/src/metabase/reference/metrics/MetricRevisionsContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2c858ae51c2756450f9acda0395e72d7d4e7dfc0
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricRevisionsContainer.jsx
@@ -0,0 +1,82 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import MetricSidebar from './MetricSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import MetricRevisions from "metabase/reference/metrics/MetricRevisions.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getMetric,
+    getMetricId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    metric: getMetric(state, props),
+    metricId: getMetricId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class MetricRevisionsContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        user: PropTypes.object.isRequired,
+        metric: PropTypes.object.isRequired,
+        metricId: PropTypes.number.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+
+    async fetchContainerData(){
+        await actions.wrappedFetchMetricRevisions(this.props, this.props.metricId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            metric,
+            isEditing
+        } = this.props;
+
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<MetricSidebar metric={metric} user={user}/>}
+            >
+                <MetricRevisions {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/metrics/MetricSidebar.jsx b/frontend/src/metabase/reference/metrics/MetricSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3803507470966b3e83b3aa63cd84480f4f467be6
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/MetricSidebar.jsx
@@ -0,0 +1,55 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const MetricSidebar = ({
+    metric,
+    user,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <ul>
+            <div className={S.breadcrumbs}>
+                <Breadcrumbs
+                    className="py4"
+                    crumbs={[["Metrics","/reference/metrics"],
+                             [metric.name]]}
+                    inSidebar={true}
+                    placeholder="Data Reference"
+                />
+            </div>
+                <SidebarItem key={`/reference/metrics/${metric.id}`} 
+                             href={`/reference/metrics/${metric.id}`} 
+                             icon="document" 
+                             name="Details" />
+                <SidebarItem key={`/reference/metrics/${metric.id}/questions`} 
+                             href={`/reference/metrics/${metric.id}/questions`} 
+                             icon="all" 
+                             name={`Questions about ${metric.name}`} />
+             { user && user.is_superuser &&
+
+                <SidebarItem key={`/reference/metrics/${metric.id}/revisions`}
+                             href={`/reference/metrics/${metric.id}/revisions`}
+                             icon="history" 
+                             name={`Revision history for ${metric.name}`} />
+             }
+        </ul>
+    </div>
+
+MetricSidebar.propTypes = {
+    metric:          PropTypes.object,
+    user:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(MetricSidebar);
+
diff --git a/frontend/src/metabase/reference/metrics/metrics.integ.spec.js b/frontend/src/metabase/reference/metrics/metrics.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..65f5d2da158fd32f9e532bcf0edd37c97d746f06
--- /dev/null
+++ b/frontend/src/metabase/reference/metrics/metrics.integ.spec.js
@@ -0,0 +1,127 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from 'enzyme';
+
+import { CardApi, MetricApi } from 'metabase/services'
+
+import { 
+    FETCH_METRICS,
+    FETCH_METRIC_TABLE,
+    FETCH_METRIC_REVISIONS
+} from "metabase/redux/metadata";
+
+import { FETCH_GUIDE } from "metabase/reference/reference"
+
+import MetricListContainer from "metabase/reference/metrics/MetricListContainer";
+import MetricDetailContainer from "metabase/reference/metrics/MetricDetailContainer";
+import MetricQuestionsContainer from "metabase/reference/metrics/MetricQuestionsContainer";
+import MetricRevisionsContainer from "metabase/reference/metrics/MetricRevisionsContainer";
+
+
+describe("The Reference Section", () => {
+    // Test data
+    const metricDef = {name: "A Metric", description: "I did it!", table_id: 1,show_in_getting_started: true,
+                        definition: {database: 1, query: {aggregation: ["count"]}}}
+
+    const anotherMetricDef = {name: "Another Metric", description: "I did it again!", table_id: 1,show_in_getting_started: true,
+                        definition: {database: 1, query: {aggregation: ["count"]}}}
+
+    const metricCardDef = { name :"A card", display: "scalar", 
+                      dataset_query: {database: 1, table_id: 1, type: "query", query: {source_table: 1, "aggregation": ["metric", 1]}},
+                      visualization_settings: {}}
+
+    // Scaffolding
+    beforeAll(async () => {
+        await login();
+
+    })
+
+
+    
+    describe("The Metrics section of the Data Reference", async ()=>{
+        describe("Empty State", async () => {
+
+            it("Should show no metrics in the list", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/metrics");
+                mount(store.connectContainer(<MetricListContainer />));
+                await store.waitForActions([FETCH_METRICS])
+            })
+
+        });
+
+        describe("With Metrics State", async () => {
+            var metricIds = []
+
+            beforeAll(async () => {            
+                // Create some metrics to have something to look at
+                var metric = await MetricApi.create(metricDef);
+                var metric2 = await MetricApi.create(anotherMetricDef);
+                
+                metricIds.push(metric.id)
+                metricIds.push(metric2.id)
+                console.log(metricIds)
+                })
+
+            afterAll(async () => {
+                // Delete the guide we created
+                // remove the metrics we created   
+                // This is a bit messy as technically these are just archived
+                for (const id of metricIds){
+                    await MetricApi.delete({metricId: id, revision_message: "Please"})
+                }
+            })
+            // metrics list
+            it("Should show no metrics in the list", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/metrics");
+                mount(store.connectContainer(<MetricListContainer />));
+                await store.waitForActions([FETCH_METRICS])
+            })
+            // metric detail
+            it("Should show the metric detail view for a specific id", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/metrics/"+metricIds[0]);
+                mount(store.connectContainer(<MetricDetailContainer />));
+                await store.waitForActions([FETCH_METRIC_TABLE, FETCH_GUIDE])
+            })
+            // metrics questions 
+            it("Should show no questions based on a new metric", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/metrics/"+metricIds[0]+'/questions');
+                mount(store.connectContainer(<MetricQuestionsContainer />));
+                await store.waitForActions([FETCH_METRICS, FETCH_METRIC_TABLE])
+            })
+            // metrics revisions
+            it("Should show revisions", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/metrics/"+metricIds[0]+'/revisions');
+                mount(store.connectContainer(<MetricRevisionsContainer />));
+                await store.waitForActions([FETCH_METRICS, FETCH_METRIC_REVISIONS])
+            })
+
+            it("Should see a newly asked question in its questions list", async () => {
+                    var card = await CardApi.create(metricCardDef)
+
+                    expect(card.name).toBe(metricCardDef.name);
+                    // see that there is a new question on the metric's questions page
+                    const store = await createTestStore()    
+                    store.pushPath("/reference/metrics/"+metricIds[0]+'/questions');
+                    mount(store.connectContainer(<MetricQuestionsContainer />));
+                    await store.waitForActions([FETCH_METRICS, FETCH_METRIC_TABLE])
+                    
+                    await CardApi.delete({cardId: card.id})
+            })
+
+                       
+        });
+    });
+    
+
+
+
+});
\ No newline at end of file
diff --git a/frontend/src/metabase/reference/reference.js b/frontend/src/metabase/reference/reference.js
index 13269160cf62a1ab736d77fad7a4f4aa65f5590a..8c44378cb7ba8692a0b77ab746c3a9d451ed5cf3 100644
--- a/frontend/src/metabase/reference/reference.js
+++ b/frontend/src/metabase/reference/reference.js
@@ -1,4 +1,5 @@
 import { assoc } from 'icepick';
+import _ from "underscore";
 
 import {
     handleActions,
@@ -11,7 +12,24 @@ import MetabaseAnalytics from 'metabase/lib/analytics';
 
 import { GettingStartedApi } from "metabase/services";
 
-const FETCH_GUIDE = "metabase/reference/FETCH_GUIDE";
+import { 
+    filterUntouchedFields, 
+    isEmptyObject 
+} from "./utils.js"
+
+export const FETCH_GUIDE = "metabase/reference/FETCH_GUIDE";
+export const SET_ERROR = "metabase/reference/SET_ERROR";
+export const CLEAR_ERROR = "metabase/reference/CLEAR_ERROR";
+export const START_LOADING = "metabase/reference/START_LOADING";
+export const END_LOADING = "metabase/reference/END_LOADING";
+export const START_EDITING = "metabase/reference/START_EDITING";
+export const END_EDITING = "metabase/reference/END_EDITING";
+export const EXPAND_FORMULA = "metabase/reference/EXPAND_FORMULA";
+export const COLLAPSE_FORMULA = "metabase/reference/COLLAPSE_FORMULA";
+export const SHOW_DASHBOARD_MODAL = "metabase/reference/SHOW_DASHBOARD_MODAL";
+export const HIDE_DASHBOARD_MODAL = "metabase/reference/HIDE_DASHBOARD_MODAL";
+
+
 export const fetchGuide = createThunkAction(FETCH_GUIDE, (reload = false) => {
     return async (dispatch, getState) => {
         const requestStatePath = ["reference", 'guide'];
@@ -31,42 +49,499 @@ export const fetchGuide = createThunkAction(FETCH_GUIDE, (reload = false) => {
     };
 });
 
-const SET_ERROR = "metabase/reference/SET_ERROR";
 export const setError = createAction(SET_ERROR);
 
-const CLEAR_ERROR = "metabase/reference/CLEAR_ERROR";
 export const clearError = createAction(CLEAR_ERROR);
 
-const START_LOADING = "metabase/reference/START_LOADING";
 export const startLoading = createAction(START_LOADING);
 
-const END_LOADING = "metabase/reference/END_LOADING";
 export const endLoading = createAction(END_LOADING);
 
-const START_EDITING = "metabase/reference/START_EDITING";
 export const startEditing = createAction(START_EDITING, () => {
     MetabaseAnalytics.trackEvent('Data Reference', 'Started Editing');
 });
 
-const END_EDITING = "metabase/reference/END_EDITING";
 export const endEditing = createAction(END_EDITING, () => {
     MetabaseAnalytics.trackEvent('Data Reference', 'Ended Editing');
 });
 
-const EXPAND_FORMULA = "metabase/reference/EXPAND_FORMULA";
 export const expandFormula = createAction(EXPAND_FORMULA);
 
-const COLLAPSE_FORMULA = "metabase/reference/COLLAPSE_FORMULA";
 export const collapseFormula = createAction(COLLAPSE_FORMULA);
 
 //TODO: consider making an app-wide modal state reducer and related actions
-const SHOW_DASHBOARD_MODAL = "metabase/reference/SHOW_DASHBOARD_MODAL";
 export const showDashboardModal = createAction(SHOW_DASHBOARD_MODAL);
 
-const HIDE_DASHBOARD_MODAL = "metabase/reference/HIDE_DASHBOARD_MODAL";
 export const hideDashboardModal = createAction(HIDE_DASHBOARD_MODAL);
 
 
+// Helper functions. This is meant to be a transitional state to get things out of tryFetchData() and friends
+
+const fetchDataWrapper = (props, fn) => {
+
+    return async (argument) => {
+        props.clearError();
+        props.startLoading();
+        try {
+            await fn(argument)
+        }
+        catch(error) {
+            console.error(error);
+            props.setError(error);
+        }
+
+        props.endLoading();
+    }
+}
+export const wrappedFetchGuide = async (props) => {
+
+    fetchDataWrapper(
+        props, 
+        async () => { 
+                await Promise.all(
+                    [props.fetchGuide(),
+                     props.fetchDashboards(),
+                     props.fetchMetrics(),
+                     props.fetchSegments(),
+                     props.fetchDatabasesWithMetadata()]
+                )}
+        )()
+}
+export const wrappedFetchDatabaseMetadata = (props, databaseID) => {
+    fetchDataWrapper(props, props.fetchDatabaseMetadata)(databaseID)
+}
+
+export const wrappedFetchDatabaseMetadataAndQuestion = async (props, databaseID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (dbID) => { 
+                await Promise.all(
+                    [props.fetchDatabaseMetadata(dbID),
+                     props.fetchQuestions()]
+                )}
+        )(databaseID)
+}
+export const wrappedFetchMetricDetail = async (props, metricID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (mID) => { 
+                await Promise.all(
+                    [props.fetchMetricTable(mID),
+                     props.fetchMetrics(), 
+                     props.fetchGuide()]
+                )}
+        )(metricID)
+}
+export const wrappedFetchMetricQuestions = async (props, metricID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (mID) => { 
+                await Promise.all(
+                    [props.fetchMetricTable(mID),
+                     props.fetchMetrics(), 
+                     props.fetchQuestions()]
+                )}
+        )(metricID)
+}
+export const wrappedFetchMetricRevisions = async (props, metricID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (mID) => { 
+                await Promise.all(
+                    [props.fetchMetricRevisions(mID),
+                     props.fetchMetrics()]
+                )}
+        )(metricID)
+}
+
+// export const wrappedFetchDatabaseMetadataAndQuestion = async (props, databaseID) => {
+//         clearError();
+//         startLoading();
+//         try {
+//             await Promise.all(
+//                     [props.fetchDatabaseMetadata(databaseID),
+//                      props.fetchQuestions()]
+//                 )
+//         }
+//         catch(error) {
+//             console.error(error);
+//             setError(error);
+//         }
+
+//         endLoading();
+// }
+
+export const wrappedFetchDatabases = (props) => {
+    fetchDataWrapper(props, props.fetchDatabases)({})
+}
+export const wrappedFetchMetrics = (props) => {
+    fetchDataWrapper(props, props.fetchMetrics)({})
+}
+
+export const wrappedFetchSegments = (props) => {
+    fetchDataWrapper(props, props.fetchSegments)({})
+}
+
+
+export const wrappedFetchSegmentDetail = (props, segmentID) => {
+    fetchDataWrapper(props, props.fetchSegmentTable)(segmentID)
+}
+
+export const wrappedFetchSegmentQuestions = async (props, segmentID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (sID) => { 
+                await props.fetchSegments(sID);
+                await Promise.all(
+                    [props.fetchSegmentTable(sID),
+                     props.fetchQuestions()]
+                )}
+        )(segmentID)
+}
+export const wrappedFetchSegmentRevisions = async (props, segmentID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (sID) => { 
+                await props.fetchSegments(sID);
+                await Promise.all(
+                    [props.fetchSegmentRevisions(sID),
+                     props.fetchSegmentTable(sID)]
+                )}
+        )(segmentID)
+}
+export const wrappedFetchSegmentFields = async (props, segmentID) => {
+
+    fetchDataWrapper(
+        props, 
+        async (sID) => { 
+                await props.fetchSegments(sID);
+                await Promise.all(
+                    [props.fetchSegmentFields(sID),
+                     props.fetchSegmentTable(sID)]
+                )}
+        )(segmentID)
+}
+
+// This is called when a component gets a new set of props.
+// I *think* this is un-necessary in all cases as we're using multiple 
+// components where the old code re-used the same component
+export const clearState = props => {
+    props.endEditing();
+    props.endLoading();
+    props.clearError();
+    props.collapseFormula();
+}
+
+
+// This is called on the success or failure of a form triggered update
+const resetForm = (props) => {
+    props.resetForm();
+    props.endLoading();
+    props.endEditing();
+}
+
+// Update actions
+// these use the "fetchDataWrapper" for now. It should probably be renamed. 
+// Using props to fire off actions, which imo should be refactored to 
+// dispatch directly, since there is no actual dependence with the props 
+// of that component
+
+const updateDataWrapper = (props, fn) => {
+
+    return async (fields) => {
+        props.clearError();
+        props.startLoading();
+        try {
+            const editedFields = filterUntouchedFields(fields, props.entity);
+            if (!isEmptyObject(editedFields)) {
+                const newEntity = {...props.entity, ...editedFields};
+                await fn(newEntity);
+            }
+        }
+        catch(error) {
+            console.error(error);
+            props.setError(error);
+        }
+        resetForm(props)
+    }
+}
+
+export const rUpdateSegmentDetail = (formFields, props) => {
+    updateDataWrapper(props, props.updateSegment)(formFields)
+}
+export const rUpdateSegmentFieldDetail = (formFields, props) => {
+    updateDataWrapper(props, props.updateField)(formFields)
+}
+export const rUpdateDatabaseDetail = (formFields, props) => {
+    updateDataWrapper(props, props.updateDatabase)(formFields)
+}
+export const rUpdateTableDetail = (formFields, props) => {
+    updateDataWrapper(props, props.updateTable)(formFields)
+}
+export const rUpdateFieldDetail = (formFields, props) => {
+    updateDataWrapper(props, props.updateField)(formFields)
+}
+
+export const rUpdateMetricDetail = async (metric, guide, formFields, props) => {
+    props.startLoading();
+    try {
+        const editedFields = filterUntouchedFields(formFields, metric);
+        if (!isEmptyObject(editedFields)) {
+            const newMetric = {...metric, ...editedFields};
+            await props.updateMetric(newMetric);
+
+            const importantFieldIds = formFields.important_fields.map(field => field.id);
+            const existingImportantFieldIds = guide.metric_important_fields && guide.metric_important_fields[metric.id];
+
+            const areFieldIdsIdentitical = existingImportantFieldIds &&
+                existingImportantFieldIds.length === importantFieldIds.length &&
+                existingImportantFieldIds.every(id => importantFieldIds.includes(id));
+
+            if (!areFieldIdsIdentitical) {
+                await props.updateMetricImportantFields(metric.id, importantFieldIds);
+                wrappedFetchMetricDetail(props, metric.id);
+            }
+        }
+    }
+    catch(error) {
+        props.setError(error);
+        console.error(error);
+    }
+
+    resetForm(props)
+}
+
+export const rUpdateFields = async (fields, formFields, props) => {
+    props.startLoading();
+    try {
+        const updatedFields = Object.keys(formFields)
+            .map(fieldId => ({
+                field: fields[fieldId],
+                formField: filterUntouchedFields(formFields[fieldId], fields[fieldId])
+            }))
+            .filter(({field, formField}) => !isEmptyObject(formField))
+            .map(({field, formField}) => ({...field, ...formField}));
+
+        await Promise.all(updatedFields.map(props.updateField));
+    }
+    catch(error) {
+        props.setError(error);
+        console.error(error);
+    }
+
+    resetForm(props)
+}
+
+
+export const tryUpdateGuide = async (formFields, props) => {
+    const {
+        guide,
+        dashboards,
+        metrics,
+        segments,
+        tables,
+        startLoading,
+        endLoading,
+        endEditing,
+        setError,
+        resetForm,
+        updateDashboard,
+        updateMetric,
+        updateSegment,
+        updateTable,
+        updateMetricImportantFields,
+        updateSetting,
+        fetchGuide,
+        clearRequestState
+    } = props;
+
+    startLoading();
+    try {
+        const updateNewEntities = ({
+            entities,
+            formFields,
+            updateEntity
+        }) => formFields.map(formField => {
+            if (!formField.id) {
+                return [];
+            }
+
+            const editedEntity = filterUntouchedFields(
+                assoc(formField, 'show_in_getting_started', true),
+                entities[formField.id]
+            );
+
+            if (isEmptyObject(editedEntity)) {
+                return [];
+            }
+
+            const newEntity = entities[formField.id];
+            const updatedNewEntity = {
+                ...newEntity,
+                ...editedEntity
+            };
+
+            const updatingNewEntity = updateEntity(updatedNewEntity);
+
+            return [updatingNewEntity];
+        });
+
+        const updateOldEntities = ({
+            newEntityIds,
+            oldEntityIds,
+            entities,
+            updateEntity
+        }) => oldEntityIds
+            .filter(oldEntityId => !newEntityIds.includes(oldEntityId))
+            .map(oldEntityId => {
+                const oldEntity = entities[oldEntityId];
+
+                const updatedOldEntity = assoc(
+                    oldEntity,
+                    'show_in_getting_started',
+                    false
+                );
+
+                const updatingOldEntity = updateEntity(updatedOldEntity);
+
+                return [updatingOldEntity];
+            });
+        //FIXME: necessary because revision_message is a mandatory field
+        // even though we don't actually keep track of changes to caveats/points_of_interest yet
+        const updateWithRevisionMessage = updateEntity => entity => updateEntity(assoc(
+            entity,
+            'revision_message',
+            'Updated in Getting Started guide.'
+        ));
+
+        const updatingDashboards = updateNewEntities({
+                entities: dashboards,
+                formFields: [formFields.most_important_dashboard],
+                updateEntity: updateDashboard
+            })
+            .concat(updateOldEntities({
+                newEntityIds: formFields.most_important_dashboard ?
+                    [formFields.most_important_dashboard.id] : [],
+                oldEntityIds: guide.most_important_dashboard ?
+                    [guide.most_important_dashboard] :
+                    [],
+                entities: dashboards,
+                updateEntity: updateDashboard
+            }));
+
+        const updatingMetrics = updateNewEntities({
+                entities: metrics,
+                formFields: formFields.important_metrics,
+                updateEntity: updateWithRevisionMessage(updateMetric)
+            })
+            .concat(updateOldEntities({
+                newEntityIds: formFields.important_metrics
+                    .map(formField => formField.id),
+                oldEntityIds: guide.important_metrics,
+                entities: metrics,
+                updateEntity: updateWithRevisionMessage(updateMetric)
+            }));
+
+        const updatingMetricImportantFields = formFields.important_metrics
+            .map(metricFormField => {
+                if (!metricFormField.id || !metricFormField.important_fields) {
+                    return [];
+                }
+                const importantFieldIds = metricFormField.important_fields
+                    .map(field => field.id);
+                const existingImportantFieldIds = guide.metric_important_fields[metricFormField.id];
+
+                const areFieldIdsIdentitical = existingImportantFieldIds &&
+                    existingImportantFieldIds.length === importantFieldIds.length &&
+                    existingImportantFieldIds.every(id => importantFieldIds.includes(id));
+                if (areFieldIdsIdentitical) {
+                    return [];
+                }
+
+                return [updateMetricImportantFields(metricFormField.id, importantFieldIds)];
+            });
+
+        const segmentFields = formFields.important_segments_and_tables
+            .filter(field => field.type === 'segment');
+
+        const updatingSegments = updateNewEntities({
+                entities: segments,
+                formFields: segmentFields,
+                updateEntity: updateWithRevisionMessage(updateSegment)
+            })
+            .concat(updateOldEntities({
+                newEntityIds: segmentFields
+                    .map(formField => formField.id),
+                oldEntityIds: guide.important_segments,
+                entities: segments,
+                updateEntity: updateWithRevisionMessage(updateSegment)
+            }));
+
+        const tableFields = formFields.important_segments_and_tables
+            .filter(field => field.type === 'table');
+
+        const updatingTables = updateNewEntities({
+                entities: tables,
+                formFields: tableFields,
+                updateEntity: updateTable
+            })
+            .concat(updateOldEntities({
+                newEntityIds: tableFields
+                    .map(formField => formField.id),
+                oldEntityIds: guide.important_tables,
+                entities: tables,
+                updateEntity: updateTable
+            }));
+
+        const updatingThingsToKnow = guide.things_to_know !== formFields.things_to_know ?
+            [updateSetting({key: 'getting-started-things-to-know', value: formFields.things_to_know })] :
+            [];
+
+        const updatingContactName = guide.contact && formFields.contact &&
+            guide.contact.name !== formFields.contact.name ?
+                [updateSetting({key: 'getting-started-contact-name', value: formFields.contact.name })] :
+                [];
+
+        const updatingContactEmail = guide.contact && formFields.contact &&
+            guide.contact.email !== formFields.contact.email ?
+                [updateSetting({key: 'getting-started-contact-email', value: formFields.contact.email })] :
+                [];
+
+        const updatingData = _.flatten([
+            updatingDashboards,
+            updatingMetrics,
+            updatingMetricImportantFields,
+            updatingSegments,
+            updatingTables,
+            updatingThingsToKnow,
+            updatingContactName,
+            updatingContactEmail
+        ]);
+
+        if (updatingData.length > 0) {
+            await Promise.all(updatingData);
+
+            clearRequestState({statePath: ['reference', 'guide']});
+
+            await fetchGuide();
+        }
+    }
+    catch(error) {
+        setError(error);
+        console.error(error);
+    }
+
+    resetForm();
+    endLoading();
+    endEditing();
+};
+
 const initialState = {
     error: null,
     isLoading: false,
diff --git a/frontend/src/metabase/reference/segments/SegmentDetail.jsx b/frontend/src/metabase/reference/segments/SegmentDetail.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4bce042b45f24f8363818a644ec17e41d5a680e9
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentDetail.jsx
@@ -0,0 +1,237 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import { reduxForm } from "redux-form";
+
+import List from "metabase/components/List.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+import Detail from "metabase/reference/components/Detail.jsx";
+import UsefulQuestions from "metabase/reference/components/UsefulQuestions.jsx";
+import Formula from "metabase/reference/components/Formula.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+import {
+    getSegment,
+    getTable,
+    getFields,
+    getGuide,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getIsFormulaExpanded,
+} from "../selectors";
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+const interestingQuestions = (table, segment) => {
+    return [
+        {
+            text: `Number of ${segment.name}`,
+            icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
+            link: getQuestionUrl({
+                dbId: table && table.db_id,
+                tableId: table.id,
+                segmentId: segment.id,
+                getCount: true
+            })
+        },
+        {
+            text: `See all ${segment.name}`,
+            icon: "table2",
+            link: getQuestionUrl({
+                dbId: table && table.db_id,
+                tableId: table.id,
+                segmentId: segment.id
+            })
+        }
+    ]
+}
+
+const mapStateToProps = (state, props) => {
+    const entity = getSegment(state, props) || {};
+    const guide = getGuide(state, props);
+    const fields = getFields(state, props);
+
+    const initialValues = {
+        important_fields: guide && guide.metric_important_fields &&
+            guide.metric_important_fields[entity.id] &&
+            guide.metric_important_fields[entity.id]
+                .map(fieldId => fields[fieldId]) ||
+                []
+    };
+
+    return {
+        entity,
+        table: getTable(state, props),
+        metadataFields: fields,
+        guide,
+        loading: getLoading(state, props),
+        // naming this 'error' will conflict with redux form
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        isEditing: getIsEditing(state, props),
+        isFormulaExpanded: getIsFormulaExpanded(state, props),
+        initialValues,
+    }
+};
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions,
+};
+
+const validate = (values, props) =>  !values.revision_message ? 
+    { revision_message: "Please enter a revision message" } : {} 
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'details',
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats'],
+    validate
+})
+export default class SegmentDetail extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entity: PropTypes.object.isRequired,
+        table: PropTypes.object,
+        user: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        expandFormula: PropTypes.func.isRequired,
+        collapseFormula: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        resetForm: PropTypes.func.isRequired,
+        fields: PropTypes.object.isRequired,
+        isFormulaExpanded: PropTypes.bool,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool,
+    };
+
+    render() {
+        const {
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats },
+            style,
+            entity,
+            table,
+            loadingError,
+            loading,
+            user,
+            isEditing,
+            startEditing,
+            endEditing,
+            expandFormula,
+            collapseFormula,
+            isFormulaExpanded,
+            handleSubmit,
+            resetForm,
+            submitting,
+        } = this.props;
+
+        const onSubmit = handleSubmit(async (fields) =>
+            await actions.rUpdateSegmentDetail(fields, this.props)
+        );
+
+        return (
+            <form style={style} className="full"
+                onSubmit={onSubmit}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={true}
+                        onSubmit={onSubmit}
+                        endEditing={endEditing}
+                        reinitializeForm={resetForm}
+                        submitting={submitting}
+                        revisionMessageFormField={revision_message}
+                    />
+                }
+                <EditableReferenceHeader
+                    entity={entity}
+                    table={table}
+                    type="segment"
+                    headerIcon="segment"
+                    headerLink={getQuestionUrl({ dbId: table&&table.db_id, tableId: entity.table_id, segmentId: entity.id})}
+                    name="Details"
+                    user={user}
+                    isEditing={isEditing}
+                    hasSingleSchema={false}
+                    hasDisplayName={false}
+                    startEditing={startEditing}
+                    displayNameFormField={display_name}
+                    nameFormField={name}
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () =>
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            <li className="relative">
+                                <Detail
+                                    id="description"
+                                    name="Description"
+                                    description={entity.description}
+                                    placeholder="No description yet"
+                                    isEditing={isEditing}
+                                    field={description}
+                                />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="points_of_interest"
+                                    name={`Why this Segment is interesting`}
+                                    description={entity.points_of_interest}
+                                    placeholder="Nothing interesting yet"
+                                    isEditing={isEditing}
+                                    field={points_of_interest}
+                                    />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="caveats"
+                                    name={`Things to be aware of about this Segment`}
+                                    description={entity.caveats}
+                                    placeholder="Nothing to be aware of yet"
+                                    isEditing={isEditing}
+                                    field={caveats}
+                                />
+                            </li>
+                            { table && !isEditing &&
+                                <li className="relative">
+                                    <Formula
+                                        type="segment"
+                                        entity={entity}
+                                        table={table}
+                                        isExpanded={isFormulaExpanded}
+                                        expandFormula={expandFormula}
+                                        collapseFormula={collapseFormula}
+                                    />
+                                </li>
+                            }
+                            { !isEditing &&
+                                <li className="relative">
+                                    <UsefulQuestions questions={interestingQuestions(this.props.table, this.props.entity)} />
+                                </li>
+                            }
+                        </List>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentDetailContainer.jsx b/frontend/src/metabase/reference/segments/SegmentDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1bb72f4b2d831aff28006a34c5760878ccc065c7
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentDetailContainer.jsx
@@ -0,0 +1,80 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import SegmentSidebar from './SegmentSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentDetail from "metabase/reference/segments/SegmentDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getSegment,
+    getSegmentId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    segment: getSegment(state, props),
+    segmentId: getSegmentId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        user: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        segmentId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegmentDetail(this.props, this.props.segmentId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            segment,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<SegmentSidebar segment={segment} user={user}/>}
+            >
+                <SegmentDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentFieldDetail.jsx b/frontend/src/metabase/reference/segments/SegmentFieldDetail.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..bfc652b22a2b1de0817640a35a3aa8ec3b693610
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentFieldDetail.jsx
@@ -0,0 +1,256 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import { reduxForm } from "redux-form";
+
+import S from "metabase/reference/Reference.css";
+
+import List from "metabase/components/List.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+import Detail from "metabase/reference/components/Detail.jsx";
+import FieldTypeDetail from "metabase/reference/components/FieldTypeDetail.jsx";
+import UsefulQuestions from "metabase/reference/components/UsefulQuestions.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+import {
+    getFieldBySegment,
+    getTable,
+    getFields,
+    getGuide,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getForeignKeys,
+    getIsFormulaExpanded
+} from "../selectors";
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+const interestingQuestions = (table, field) => {
+    return [
+        {
+            text: `Number of ${table && table.display_name} grouped by ${field.display_name}`,
+            icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
+            link: getQuestionUrl({
+                dbId: table && table.db_id,
+                tableId: table.id,
+                fieldId: field.id,
+                getCount: true
+            })
+        },
+        {
+            text: `All distinct values of ${field.display_name}`,
+            icon: "table2",
+            link: getQuestionUrl({
+                dbId: table && table.db_id,
+                tableId: table.id,
+                fieldId: field.id
+            })
+        }
+    ]
+}
+
+const mapStateToProps = (state, props) => {
+    const entity = getFieldBySegment(state, props) || {};
+    const guide = getGuide(state, props);
+    const fields = getFields(state, props);
+
+    const initialValues = {
+        important_fields: guide && guide.metric_important_fields &&
+            guide.metric_important_fields[entity.id] &&
+            guide.metric_important_fields[entity.id]
+                .map(fieldId => fields[fieldId]) ||
+                []
+    };
+
+    return {
+        entity,
+        table: getTable(state, props),
+        guide,
+        loading: getLoading(state, props),
+        // naming this 'error' will conflict with redux form
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        foreignKeys: getForeignKeys(state, props),
+        isEditing: getIsEditing(state, props),
+        isFormulaExpanded: getIsFormulaExpanded(state, props),
+        initialValues,
+    }
+};
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+
+const validate = (values, props) => {
+    return {};
+}
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'details',
+    fields: ['name', 'display_name', 'description', 'revision_message', 'points_of_interest', 'caveats',  'special_type', 'fk_target_field_id'],
+    validate
+})
+export default class SegmentFieldDetail extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entity: PropTypes.object.isRequired,
+        table: PropTypes.object,
+        user: PropTypes.object.isRequired,
+        foreignKeys: PropTypes.object,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        resetForm: PropTypes.func.isRequired,
+        fields: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool,
+    };
+
+    render() {
+        const {
+            fields: { name, display_name, description, revision_message, points_of_interest, caveats, special_type, fk_target_field_id },
+            style,
+            entity,
+            table,
+            loadingError,
+            loading,
+            user,
+            foreignKeys,
+            isEditing,
+            startEditing,
+            endEditing,
+            handleSubmit,
+            resetForm,
+            submitting,
+        } = this.props;
+
+        const onSubmit = handleSubmit(async (fields) =>
+            await actions.rUpdateSegmentFieldDetail(fields, this.props)
+        );
+
+        return (
+            <form style={style} className="full"
+                onSubmit={onSubmit}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={false}
+                        onSubmit={onSubmit}
+                        endEditing={endEditing}
+                        reinitializeForm={resetForm}
+                        submitting={submitting}
+                        revisionMessageFormField={revision_message}
+                    />
+                }
+                <EditableReferenceHeader
+                    entity={entity}
+                    table={table}
+                    headerIcon="field"
+                    name="Details"
+                    type="field"
+                    user={user}
+                    isEditing={isEditing}
+                    hasSingleSchema={false}
+                    hasDisplayName={true}
+                    startEditing={startEditing}
+                    displayNameFormField={display_name}
+                    nameFormField={name}
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () =>
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            <li className="relative">
+                                <Detail
+                                    id="description"
+                                    name="Description"
+                                    description={entity.description}
+                                    placeholder="No description yet"
+                                    isEditing={isEditing}
+                                    field={description}
+                                />
+                            </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <Detail
+                                        id="name"
+                                        name="Actual name in database"
+                                        description={entity.name}
+                                        subtitleClass={S.tableActualName}
+                                    />
+                                </li>
+                            }
+                            <li className="relative">
+                                <Detail
+                                    id="points_of_interest"
+                                    name={`Why this field is interesting`}
+                                    description={entity.points_of_interest}
+                                    placeholder="Nothing interesting yet"
+                                    isEditing={isEditing}
+                                    field={points_of_interest}
+                                    />
+                            </li>
+                            <li className="relative">
+                                <Detail
+                                    id="caveats"
+                                    name={`Things to be aware of about this field`}
+                                    description={entity.caveats}
+                                    placeholder="Nothing to be aware of yet"
+                                    isEditing={isEditing}
+                                    field={caveats}
+                                />
+                            </li>
+
+
+                            { !isEditing && 
+                                <li className="relative">
+                                    <Detail
+                                        id="base_type"
+                                        name={`Data type`}
+                                        description={entity.base_type}
+                                    />
+                                </li>
+                            }
+                                <li className="relative">
+                                    <FieldTypeDetail
+                                        field={entity}
+                                        foreignKeys={foreignKeys}
+                                        fieldTypeFormField={special_type}
+                                        foreignKeyFormField={fk_target_field_id}
+                                        isEditing={isEditing}
+                                    />
+                                </li>
+                            { !isEditing &&
+                                <li className="relative">
+                                    <UsefulQuestions questions={interestingQuestions(this.props.table, this.props.entity)} />
+                                </li>
+                            }
+
+
+                        </List>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentFieldDetailContainer.jsx b/frontend/src/metabase/reference/segments/SegmentFieldDetailContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f0379db76a481da43144ad55d5521c5a2bb71aff
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentFieldDetailContainer.jsx
@@ -0,0 +1,80 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import SegmentFieldSidebar from './SegmentFieldSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentFieldDetail from "metabase/reference/segments/SegmentFieldDetail.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getSegment,
+    getSegmentId,
+    getField,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    segment: getSegment(state, props),    
+    segmentId: getSegmentId(state, props),
+    field: getField(state, props),    
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentFieldDetailContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        segment: PropTypes.object.isRequired,
+        segmentId: PropTypes.number.isRequired,
+        field: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegmentFields(this.props, this.props.segmentId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            segment,
+            field,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<SegmentFieldSidebar segment={segment} field={field}/>}
+            >
+                <SegmentFieldDetail {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentFieldList.jsx b/frontend/src/metabase/reference/segments/SegmentFieldList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..b2c25f9308f521b6326d8cdb8478394032213d93
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentFieldList.jsx
@@ -0,0 +1,178 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import { reduxForm } from "redux-form";
+
+import S from "metabase/components/List.css";
+import R from "metabase/reference/Reference.css";
+import F from "metabase/reference/components/Field.css"
+
+import Field from "metabase/reference/components/Field.jsx";
+import List from "metabase/components/List.jsx";
+import EmptyState from "metabase/components/EmptyState.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import EditHeader from "metabase/reference/components/EditHeader.jsx";
+import EditableReferenceHeader from "metabase/reference/components/EditableReferenceHeader.jsx";
+
+import cx from "classnames";
+
+import {
+    getFieldsBySegment,
+    getForeignKeys,
+    getError,
+    getLoading,
+    getUser,
+    getIsEditing,
+    getSegment
+} from "../selectors";
+
+import {
+    fieldsToFormFields
+} from '../utils';
+
+import { getIconForField } from "metabase/lib/schema_metadata";
+
+import * as metadataActions from "metabase/redux/metadata";
+import * as actions from 'metabase/reference/reference';
+
+
+const emptyStateData = {
+    message: `Fields in this table will appear here as they're added`,
+    icon: "fields"
+}
+
+
+const mapStateToProps = (state, props) => {
+    const data = getFieldsBySegment(state, props);
+    return {
+        segment: getSegment(state,props),
+        entities: data,
+        foreignKeys: getForeignKeys(state, props),
+        loading: getLoading(state, props),
+        loadingError: getError(state, props),
+        user: getUser(state, props),
+        isEditing: getIsEditing(state, props),
+        fields: fieldsToFormFields(data)
+    };
+}
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+const validate = (values, props) => {
+    return {};
+}
+
+@connect(mapStateToProps, mapDispatchToProps)
+@reduxForm({
+    form: 'fields',
+    validate
+})
+export default class SegmentFieldList extends Component {
+    static propTypes = {
+        segment: PropTypes.object.isRequired,
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        foreignKeys: PropTypes.object.isRequired,
+        isEditing: PropTypes.bool,
+        startEditing: PropTypes.func.isRequired,
+        endEditing: PropTypes.func.isRequired,
+        startLoading: PropTypes.func.isRequired,
+        endLoading: PropTypes.func.isRequired,
+        setError: PropTypes.func.isRequired,
+        updateField: PropTypes.func.isRequired,
+        handleSubmit: PropTypes.func.isRequired,
+        user: PropTypes.object.isRequired,
+        fields: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object,
+        submitting: PropTypes.bool,
+        resetForm: PropTypes.func
+    };
+
+    render() {
+        const {
+            segment,
+            style,
+            entities,
+            fields,
+            foreignKeys,
+            loadingError,
+            loading,
+            user,
+            isEditing,
+            startEditing,
+            endEditing,
+            resetForm,
+            handleSubmit,
+            submitting
+        } = this.props;
+
+        return (
+            <form style={style} className="full"
+                onSubmit={handleSubmit(async (formFields) =>
+                    await actions.rUpdateFields(this.props.entities, formFields, this.props)
+                )}
+            >
+                { isEditing &&
+                    <EditHeader
+                        hasRevisionHistory={false}
+                        reinitializeForm={resetForm}
+                        endEditing={endEditing}
+                        submitting={submitting}
+                    />
+                }
+                <EditableReferenceHeader 
+                    type="segment"
+                    headerIcon="segment"
+                    name={`Fields in ${segment.name}`}
+                    user={user} 
+                    isEditing={isEditing} 
+                    startEditing={startEditing} 
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <div className={S.item}>
+                            <div className={R.columnHeader}>
+                                <div className={cx(S.itemTitle, F.fieldNameTitle)}>
+                                    Field name
+                                </div>
+                                <div className={cx(S.itemTitle, F.fieldType)}>
+                                    Field type
+                                </div>
+                                <div className={cx(S.itemTitle, F.fieldDataType)}>
+                                    Data type
+                                </div>
+                            </div>
+                        </div>
+                        <List>
+                            { Object.values(entities).map(entity =>
+                                entity && entity.id && entity.name &&
+                                    <li className="relative" key={entity.id}>
+                                        <Field
+                                            field={entity}
+                                            foreignKeys={foreignKeys}
+                                            url={`/reference/segments/${segment.id}/fields/${entity.id}`}
+                                            icon={getIconForField(entity)}
+                                            isEditing={isEditing}
+                                            formField={fields[entity.id]}
+                                        />
+                                    </li>
+                            )}
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <EmptyState {...emptyStateData}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </form>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentFieldListContainer.jsx b/frontend/src/metabase/reference/segments/SegmentFieldListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5834d67c564e4f071dfc6553ed459c6cc77cfaa1
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentFieldListContainer.jsx
@@ -0,0 +1,79 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import SegmentSidebar from './SegmentSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentFieldList from "metabase/reference/segments/SegmentFieldList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getSegment,
+    getSegmentId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    segment: getSegment(state, props),
+    segmentId: getSegmentId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentFieldListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        user: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        segmentId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegmentFields(this.props, this.props.segmentId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            segment,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<SegmentSidebar segment={segment} user={user}/>}
+            >
+                <SegmentFieldList {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentFieldSidebar.jsx b/frontend/src/metabase/reference/segments/SegmentFieldSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3a4788f09428752a5dfb9965a0464073c1f19684
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentFieldSidebar.jsx
@@ -0,0 +1,45 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const SegmentFieldSidebar = ({
+    segment,
+    field,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <ul>
+            <div className={S.breadcrumbs}>
+                <Breadcrumbs
+                    className="py4"
+                    crumbs={[["Segments","/reference/segments"],
+                             [segment.name, `/reference/segments/${segment.id}`],
+                             [field.name]]}
+                    inSidebar={true}
+                    placeholder="Data Reference"
+                />
+            </div>
+                <SidebarItem key={`/reference/segments/${segment.id}/fields/${field.id}`} 
+                             href={`/reference/segments/${segment.id}/fields/${field.id}`} 
+                             icon="document" 
+                             name="Details" />
+        </ul>
+    </div>
+
+SegmentFieldSidebar.propTypes = {
+    segment:          PropTypes.object,
+    field:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(SegmentFieldSidebar);
+
diff --git a/frontend/src/metabase/reference/segments/SegmentList.jsx b/frontend/src/metabase/reference/segments/SegmentList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..66ff03ffa4b3af1e8150fbce4bbaff9088716666
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentList.jsx
@@ -0,0 +1,99 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+
+import { isQueryable } from "metabase/lib/table";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getSegments,
+    getError,
+    getLoading
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+const emptyStateData = {
+            title: "Segments are interesting subsets of tables",
+            adminMessage: "Defining common segments for your team makes it even easier to ask questions",
+            message: "Segments will appear here once your admins have created some",
+            image: "app/assets/img/segments-list",
+            adminAction: "Learn how to create segments",
+            adminLink: "http://www.metabase.com/docs/latest/administration-guide/06-segments-and-metrics.html"
+        }
+
+const mapStateToProps = (state, props) => ({
+    entities: getSegments(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentList extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name="Segments"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            {
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                         <li className="relative" key={entity.id}>
+                                            <ListItem
+                                                id={entity.id}
+                                                index={index}
+                                                name={entity.display_name || entity.name}
+                                                description={ entity.description }
+                                                url={ `/reference/segments/${entity.id}` }
+                                                icon="segment"
+                                            />
+                                        </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData}/>
+                        }
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentListContainer.jsx b/frontend/src/metabase/reference/segments/SegmentListContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2516af6d97256bf95ef266ccc5093a9b7e1caf2a
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentListContainer.jsx
@@ -0,0 +1,70 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import BaseSidebar from 'metabase/reference/guide/BaseSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentList from "metabase/reference/segments/SegmentList.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentListContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegments(this.props);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<BaseSidebar/>}
+            >
+                <SegmentList {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentQuestions.jsx b/frontend/src/metabase/reference/segments/SegmentQuestions.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ffef951c2565956d76af291d8121f4d247c6019b
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentQuestions.jsx
@@ -0,0 +1,116 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+import moment from "moment";
+
+import visualizations from "metabase/visualizations";
+import { isQueryable } from "metabase/lib/table";
+import * as Urls from "metabase/lib/urls";
+
+import S from "metabase/components/List.css";
+
+import List from "metabase/components/List.jsx";
+import ListItem from "metabase/components/ListItem.jsx";
+import AdminAwareEmptyState from "metabase/components/AdminAwareEmptyState.jsx";
+
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+import {
+    getQuestionUrl
+} from '../utils';
+
+
+import {
+    getSegmentQuestions,
+    getError,
+    getLoading,
+    getTableBySegment,
+    getSegment
+} from "../selectors";
+
+import * as metadataActions from "metabase/redux/metadata";
+
+const emptyStateData = (table, segment) =>{  
+    return {
+        message: "Questions about this segment will appear here as they're added",
+        icon: "all",
+        action: "Ask a question",
+        link: getQuestionUrl({
+            dbId: table && table.db_id,
+            tableId: segment.table_id,
+            segmentId: segment.id
+        })
+    };
+}
+const mapStateToProps = (state, props) => ({
+    segment: getSegment(state,props),
+    table: getTableBySegment(state,props),
+    entities: getSegmentQuestions(state, props),
+    loading: getLoading(state, props),
+    loadingError: getError(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentQuestions extends Component {
+    static propTypes = {
+        table: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        style: PropTypes.object.isRequired,
+        entities: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            entities,
+            style,
+            loadingError,
+            loading
+        } = this.props;
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name={`Questions about ${this.props.segment.name}`}
+                    type='questions'
+                    headerIcon="segment"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                { () => Object.keys(entities).length > 0 ?
+                    <div className="wrapper wrapper--trim">
+                        <List>
+                            { 
+                                Object.values(entities).filter(isQueryable).map((entity, index) =>
+                                    entity && entity.id && entity.name &&
+                                            <li className="relative" key={entity.id}>
+                                                <ListItem
+                                                    id={entity.id}
+                                                    index={index}
+                                                    name={entity.display_name || entity.name}
+                                                    description={ `Created ${moment(entity.created_at).fromNow()} by ${entity.creator.common_name}` }
+                                                    url={ Urls.question(entity.id) }
+                                                    icon={ visualizations.get(entity.display).iconName }
+                                                />
+                                            </li>
+                                )
+                            }
+                        </List>
+                    </div>
+                    :
+                    <div className={S.empty}>
+                        <AdminAwareEmptyState {...emptyStateData(this.props.table, this.props.segment)}/>
+                    </div>
+                }
+                </LoadingAndErrorWrapper>
+            </div>
+        )
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentQuestionsContainer.jsx b/frontend/src/metabase/reference/segments/SegmentQuestionsContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..db68e6558414fddcced0f552199be5cdb2824a18
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentQuestionsContainer.jsx
@@ -0,0 +1,85 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import SegmentSidebar from './SegmentSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentQuestions from "metabase/reference/segments/SegmentQuestions.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getSegment,
+    getSegmentId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+import {
+    loadEntities
+} from 'metabase/questions/questions';
+
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    segment: getSegment(state, props),
+    segmentId: getSegmentId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    fetchQuestions: () => loadEntities("cards", {}),
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentQuestionsContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        user: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        segmentId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegmentQuestions(this.props, this.props.segmentId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            segment,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<SegmentSidebar segment={segment} user={user}/>}
+            >
+                <SegmentQuestions {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentRevisions.jsx b/frontend/src/metabase/reference/segments/SegmentRevisions.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..b4a8d396e415d02f7a3438ac0a1f04b125f987c1
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentRevisions.jsx
@@ -0,0 +1,117 @@
+import React, { Component } from "react";
+import PropTypes from "prop-types";
+import { connect } from "react-redux";
+
+import { getIn } from "icepick";
+
+import S from "metabase/components/List.css";
+import R from "metabase/reference/Reference.css";
+
+import * as metadataActions from "metabase/redux/metadata";
+import { assignUserColors } from "metabase/lib/formatting";
+
+import {
+    getSegmentRevisions,
+    getMetric,
+    getSegment,
+    getTables,
+    getUser,
+    getLoading,
+    getError
+} from "../selectors";
+
+import Revision from "metabase/admin/datamodel/components/revisions/Revision.jsx";
+import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx";
+import EmptyState from "metabase/components/EmptyState.jsx";
+import ReferenceHeader from "../components/ReferenceHeader.jsx";
+
+const emptyStateData =  {
+    message: "There are no revisions for this segment"
+}
+
+const mapStateToProps = (state, props) => {
+    return {
+        revisions: getSegmentRevisions(state, props),
+        metric: getMetric(state, props),
+        segment: getSegment(state, props),
+        tables: getTables(state, props),
+        user: getUser(state, props),
+        loading: getLoading(state, props),
+        loadingError: getError(state, props)
+    }
+}
+
+const mapDispatchToProps = {
+    ...metadataActions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentRevisions extends Component {
+    static propTypes = {
+        style: PropTypes.object.isRequired,
+        revisions: PropTypes.object.isRequired,
+        metric: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        tables: PropTypes.object.isRequired,
+        user: PropTypes.object.isRequired,
+        loading: PropTypes.bool,
+        loadingError: PropTypes.object
+    };
+
+    render() {
+        const {
+            style,
+            revisions,
+            metric,
+            segment,
+            tables,
+            user,
+            loading,
+            loadingError
+        } = this.props;
+
+        const entity = metric.id ? metric : segment;
+
+        const userColorAssignments = user && Object.keys(revisions).length > 0 ?
+            assignUserColors(
+                Object.values(revisions)
+                    .map(revision => getIn(revision, ['user', 'id'])),
+                user.id
+            ) : {};
+
+        return (
+            <div style={style} className="full">
+                <ReferenceHeader 
+                    name={`Revision history for ${this.props.segment.name}`}
+                    headerIcon="segment"
+                />
+                <LoadingAndErrorWrapper loading={!loadingError && loading} error={loadingError}>
+                    { () => Object.keys(revisions).length > 0 && tables[entity.table_id] ?
+                        <div className="wrapper wrapper--trim">
+                            <div className={R.revisionsWrapper}>
+                                {Object.values(revisions)
+                                    .map(revision => revision && revision.diff ?
+                                        <Revision
+                                            key={revision.id}
+                                            revision={revision || {}}
+                                            tableMetadata={tables[entity.table_id] || {}}
+                                            objectName={entity.name}
+                                            currentUser={user || {}}
+                                            userColor={userColorAssignments[getIn(revision, ['user', 'id'])]}
+                                        /> :
+                                        null
+                                    )
+                                    .reverse()
+                                }
+                            </div>
+                        </div>
+                        :
+                        <div className={S.empty}>
+                          <EmptyState {...emptyStateData}/>
+                        </div>
+                    }
+                </LoadingAndErrorWrapper>
+            </div>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentRevisionsContainer.jsx b/frontend/src/metabase/reference/segments/SegmentRevisionsContainer.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..a74062fab583a13eef478d13356d2866f3d04045
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentRevisionsContainer.jsx
@@ -0,0 +1,81 @@
+/* eslint "react/prop-types": "warn" */
+import React, { Component } from 'react';
+import PropTypes from "prop-types";
+import { connect } from 'react-redux';
+
+import SegmentSidebar from './SegmentSidebar.jsx';
+import SidebarLayout from 'metabase/components/SidebarLayout.jsx';
+import SegmentRevisions from "metabase/reference/segments/SegmentRevisions.jsx"
+
+import * as metadataActions from 'metabase/redux/metadata';
+import * as actions from 'metabase/reference/reference';
+
+import {
+    getUser,
+    getSegment,
+    getSegmentId,
+    getDatabaseId,
+    getIsEditing
+} from '../selectors';
+
+
+const mapStateToProps = (state, props) => ({
+    user: getUser(state, props),
+    segment: getSegment(state, props),
+    segmentId: getSegmentId(state, props),
+    databaseId: getDatabaseId(state, props),
+    isEditing: getIsEditing(state, props)
+});
+
+const mapDispatchToProps = {
+    ...metadataActions,
+    ...actions
+};
+
+@connect(mapStateToProps, mapDispatchToProps)
+export default class SegmentRevisionsContainer extends Component {
+    static propTypes = {
+        params: PropTypes.object.isRequired,
+        location: PropTypes.object.isRequired,
+        databaseId: PropTypes.number.isRequired,
+        user: PropTypes.object.isRequired,
+        segment: PropTypes.object.isRequired,
+        segmentId: PropTypes.number.isRequired,
+        isEditing: PropTypes.bool
+    };
+
+    async fetchContainerData(){
+        await actions.wrappedFetchSegmentRevisions(this.props, this.props.segmentId);
+    }
+
+    componentWillMount() {
+        this.fetchContainerData()
+    }
+
+
+    componentWillReceiveProps(newProps) {
+        if (this.props.location.pathname === newProps.location.pathname) {
+            return;
+        }
+
+        actions.clearState(newProps)
+    }
+
+    render() {
+        const {
+            user,
+            segment,
+            isEditing
+        } = this.props;
+
+        return (
+            <SidebarLayout
+                className="flex-full relative"
+                style={ isEditing ? { paddingTop: '43px' } : {}}
+                sidebar={<SegmentSidebar segment={segment} user={user}/>}
+            >
+                <SegmentRevisions {...this.props} />
+            </SidebarLayout>
+        );
+    }
+}
diff --git a/frontend/src/metabase/reference/segments/SegmentSidebar.jsx b/frontend/src/metabase/reference/segments/SegmentSidebar.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..fc955e1a6a0045fd57ffcd8af3a97a5037556d9b
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/SegmentSidebar.jsx
@@ -0,0 +1,59 @@
+/* eslint "react/prop-types": "warn" */
+import React from "react";
+import PropTypes from "prop-types";
+import S from "metabase/components/Sidebar.css";
+
+import Breadcrumbs from "metabase/components/Breadcrumbs.jsx";
+import SidebarItem from "metabase/components/SidebarItem.jsx"
+
+import cx from 'classnames';
+import pure from "recompose/pure";
+
+const SegmentSidebar = ({
+    segment,
+    user,
+    style,
+    className
+}) =>
+    <div className={cx(S.sidebar, className)} style={style}>
+        <ul>
+            <div className={S.breadcrumbs}>
+                <Breadcrumbs
+                    className="py4"
+                    crumbs={[["Segments","/reference/segments"],
+                             [segment.name]]}
+                    inSidebar={true}
+                    placeholder="Data Reference"
+                />
+            </div>
+                <SidebarItem key={`/reference/segments/${segment.id}`} 
+                             href={`/reference/segments/${segment.id}`} 
+                             icon="document" 
+                             name="Details" />
+                <SidebarItem key={`/reference/segments/${segment.id}/fields`} 
+                             href={`/reference/segments/${segment.id}/fields`} 
+                             icon="fields" 
+                             name="Fields in this segment" />
+                <SidebarItem key={`/reference/segments/${segment.id}/questions`} 
+                             href={`/reference/segments/${segment.id}/questions`} 
+                             icon="all" 
+                             name={`Questions about this segment`} />
+             { user && user.is_superuser &&
+
+                <SidebarItem key={`/reference/segments/${segment.id}/revisions`}
+                             href={`/reference/segments/${segment.id}/revisions`}
+                             icon="history" 
+                             name={`Revision history`} />
+             }
+        </ul>
+    </div>
+
+SegmentSidebar.propTypes = {
+    segment:          PropTypes.object,
+    user:          PropTypes.object,
+    className:      PropTypes.string,
+    style:          PropTypes.object,
+};
+
+export default pure(SegmentSidebar);
+
diff --git a/frontend/src/metabase/reference/segments/segments.integ.spec.js b/frontend/src/metabase/reference/segments/segments.integ.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba3435adb0df42b6f6c86bcd5f634ccefc5d4a3f
--- /dev/null
+++ b/frontend/src/metabase/reference/segments/segments.integ.spec.js
@@ -0,0 +1,148 @@
+import {
+    login,
+    createTestStore
+} from "metabase/__support__/integrated_tests";
+
+import React from 'react';
+import { mount } from 'enzyme';
+
+import { CardApi, SegmentApi } from 'metabase/services'
+
+import { 
+    FETCH_SEGMENTS,
+    FETCH_SEGMENT_TABLE,
+    FETCH_SEGMENT_FIELDS,
+    FETCH_SEGMENT_REVISIONS
+} from "metabase/redux/metadata";
+
+import { LOAD_ENTITIES } from "metabase/questions/questions"
+
+
+import SegmentListContainer from "metabase/reference/segments/SegmentListContainer";
+import SegmentDetailContainer from "metabase/reference/segments/SegmentDetailContainer";
+import SegmentQuestionsContainer from "metabase/reference/segments/SegmentQuestionsContainer";
+import SegmentRevisionsContainer from "metabase/reference/segments/SegmentRevisionsContainer";
+import SegmentFieldListContainer from "metabase/reference/segments/SegmentFieldListContainer";
+import SegmentFieldDetailContainer from "metabase/reference/segments/SegmentFieldDetailContainer";
+
+describe("The Reference Section", () => {
+    // Test data
+    const segmentDef = {name: "A Segment", description: "I did it!", table_id: 1, show_in_getting_started: true,
+                        definition: {database: 1, query: {filter: ["abc"]}}}
+
+    const anotherSegmentDef = {name: "Another Segment", description: "I did it again!", table_id: 1, show_in_getting_started: true,
+                               definition:{database: 1, query: {filter: ["def"]}}}
+    
+    const segmentCardDef = { name :"A card", display: "scalar", 
+                      dataset_query: {database: 1, table_id: 1, type: "query", query: {source_table: 1, "aggregation": ["count"], "filter": ["segment", 1]}},
+                      visualization_settings: {}}
+
+    // Scaffolding
+    beforeAll(async () => {
+        await login();
+
+    })
+
+
+
+    
+    describe("The Segments section of the Data Reference", async ()=>{
+
+        describe("Empty State", async () => {
+                it("Should show no segments in the list", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments");
+                mount(store.connectContainer(<SegmentListContainer />));
+                await store.waitForActions([FETCH_SEGMENTS])
+            })
+
+        });
+
+        describe("With Segments State", async () => {
+            var segmentIds = []
+
+            beforeAll(async () => {            
+                // Create some segments to have something to look at
+                var segment = await SegmentApi.create(segmentDef);
+                var anotherSegment = await SegmentApi.create(anotherSegmentDef);
+                segmentIds.push(segment.id)
+                segmentIds.push(anotherSegment.id)
+
+                })
+
+            afterAll(async () => {
+                // Delete the guide we created
+                // remove the metrics  we created   
+                // This is a bit messy as technically these are just archived
+                for (const id of segmentIds){
+                    await SegmentApi.delete({segmentId: id, revision_message: "Please"})
+                }
+            })
+
+
+            // segments list
+            it("Should show the segments in the list", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments");
+                mount(store.connectContainer(<SegmentListContainer />));
+                await store.waitForActions([FETCH_SEGMENTS])
+            })
+            // segment detail
+            it("Should show the segment detail view for a specific id", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]);
+                mount(store.connectContainer(<SegmentDetailContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE])
+            })
+
+            // segments field list
+            it("Should show the segment fields list", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]+"/fields");
+                mount(store.connectContainer(<SegmentFieldListContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE, FETCH_SEGMENT_FIELDS])
+            })
+            // segment detail
+            it("Should show the segment field detail view for a specific id", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]+"/fields/" + 1);
+                mount(store.connectContainer(<SegmentFieldDetailContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE, FETCH_SEGMENT_FIELDS])
+            })
+
+            // segment questions 
+            it("Should show no questions based on a new segment", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]+'/questions');
+                mount(store.connectContainer(<SegmentQuestionsContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE, LOAD_ENTITIES])
+            })
+            // segment revisions
+            it("Should show revisions", async () => {
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]+'/revisions');
+                mount(store.connectContainer(<SegmentRevisionsContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE, FETCH_SEGMENT_REVISIONS])
+            })
+
+
+
+            it("Should see a newly asked question in its questions list", async () => {
+                var card = await CardApi.create(segmentCardDef)
+
+                expect(card.name).toBe(segmentCardDef.name);
+                
+                await CardApi.delete({cardId: card.id})
+
+                const store = await createTestStore()    
+                store.pushPath("/reference/segments/"+segmentIds[0]+'/questions');
+                mount(store.connectContainer(<SegmentQuestionsContainer />));
+                await store.waitForActions([FETCH_SEGMENT_TABLE, LOAD_ENTITIES])
+            })
+                      
+        });
+    });
+
+
+
+});
\ No newline at end of file
diff --git a/frontend/src/metabase/reference/selectors.js b/frontend/src/metabase/reference/selectors.js
index e8bc19961dbdf7191258f23e9e654afc8cdedcad..7539d3c7ae23e80b5921010c47d26491e331b600 100644
--- a/frontend/src/metabase/reference/selectors.js
+++ b/frontend/src/metabase/reference/selectors.js
@@ -9,473 +9,21 @@ import {
 
 import {
     idsToObjectMap,
-    buildBreadcrumbs,
-    databaseToForeignKeys,
-    getQuestionUrl
+    databaseToForeignKeys
 } from "./utils";
 
 // import { getDatabases, getTables, getFields, getMetrics, getSegments } from "metabase/selectors/metadata";
 
-import { getShallowDatabases as getDatabases, getShallowTables as getTables, getShallowFields as getFields, getShallowMetrics as getMetrics, getShallowSegments as getSegments } from "metabase/selectors/metadata";
+import {
+    getShallowDatabases as getDatabases, getShallowTables as getTables, getShallowFields as getFields,
+    getShallowMetrics as getMetrics, getShallowSegments as getSegments
+} from "metabase/selectors/metadata";
 export { getShallowDatabases as getDatabases, getShallowTables as getTables, getShallowFields as getFields, getShallowMetrics as getMetrics, getShallowSegments as getSegments } from "metabase/selectors/metadata";
 
 import _ from "underscore";
 
-
-// there might be a better way to organize sections
-// it feels like I'm duplicating a lot of routing logic here
-//TODO: refactor to use different container components for each section
-// initialize section metadata in there
-// may not be worthwhile due to the extra boilerplate required
-// try using a higher-order component to reduce boilerplate?
-const referenceSections = {
-    [`/reference/guide`]: {
-        id: `/reference/guide`,
-        name: "Start here",
-        breadcrumb: "Guide",
-        fetch: {
-            fetchGuide: [],
-            fetchDashboards: [],
-            fetchMetrics: [],
-            fetchSegments: [],
-            fetchDatabasesWithMetadata: []
-        },
-        icon: "reference",
-        sidebar: false
-    },
-    [`/reference/metrics`]: {
-        id: `/reference/metrics`,
-        name: "Metrics",
-        empty: {
-            title: "Metrics are the official numbers that your team cares about",
-            adminMessage: "Defining common metrics for your team makes it even easier to ask questions",
-            message: "Metrics will appear here once your admins have created some",
-            image: "app/assets/img/metrics-list",
-            adminAction: "Learn how to create metrics",
-            adminLink: "http://www.metabase.com/docs/latest/administration-guide/06-segments-and-metrics.html"
-        },
-        breadcrumb: "Metrics",
-        // mapping of propname to args of dispatch function
-        fetch: {
-            fetchMetrics: [],
-            fetchSegments: []
-        },
-        get: 'getMetrics',
-        icon: "ruler"
-    },
-    [`/reference/segments`]: {
-        id: `/reference/segments`,
-        name: "Segments",
-        empty: {
-            title: "Segments are interesting subsets of tables",
-            adminMessage: "Defining common segments for your team makes it even easier to ask questions",
-            message: "Segments will appear here once your admins have created some",
-            image: "app/assets/img/segments-list",
-            adminAction: "Learn how to create segments",
-            adminLink: "http://www.metabase.com/docs/latest/administration-guide/06-segments-and-metrics.html"
-        },
-        breadcrumb: "Segments",
-        fetch: {
-            fetchMetrics: [],
-            fetchSegments: []
-        },
-        get: 'getSegments',
-        icon: "segment"
-    },
-    [`/reference/databases`]: {
-        id: `/reference/databases`,
-        name: "Databases and tables",
-        empty: {
-            title: "Metabase is no fun without any data",
-            adminMessage: "Your databses will appear here once you connect one",
-            message: "Databases will appear here once your admins have added some",
-            image: "app/assets/img/databases-list",
-            adminAction: "Connect a database",
-            adminLink: "/admin/databases/create"
-        },
-        breadcrumb: "Databases",
-        fetch: {
-            fetchMetrics: [],
-            fetchSegments: [],
-            fetchDatabases: []
-        },
-        get: 'getDatabases',
-        icon: "database",
-        itemIcon: "database"
-    }
-};
-
-const getReferenceSections = (state, props) => referenceSections;
-
-const getMetricSections = (metric, table, user) => metric ? {
-    [`/reference/metrics/${metric.id}`]: {
-        id: `/reference/metrics/${metric.id}`,
-        name: 'Details',
-        update: 'updateMetric',
-        type: 'metric',
-        breadcrumb: `${metric.name}`,
-        fetch: {
-            fetchMetricTable: [metric.id],
-            // currently the only way to fetch metrics important fields
-            fetchGuide: []
-        },
-        get: 'getMetric',
-        icon: "document",
-        headerIcon: "ruler",
-        headerLink: getQuestionUrl({
-            dbId: table && table.db_id,
-            tableId: metric.table_id,
-            metricId: metric.id
-        }),
-        parent: referenceSections[`/reference/metrics`]
-    },
-    [`/reference/metrics/${metric.id}/questions`]: {
-        id: `/reference/metrics/${metric.id}/questions`,
-        name: `Questions about ${metric.name}`,
-        empty: {
-            message: `Questions about this metric will appear here as they're added`,
-            icon: "all",
-            action: "Ask a question",
-            link: getQuestionUrl({
-                dbId: table && table.db_id,
-                tableId: metric.table_id,
-                metricId: metric.id
-            })
-        },
-        type: 'questions',
-        sidebar: 'Questions about this metric',
-        breadcrumb: `${metric.name}`,
-        fetch: {
-            fetchMetricTable: [metric.id],
-            fetchQuestions: []
-        },
-        get: 'getMetricQuestions',
-        icon: "all",
-        headerIcon: "ruler",
-        parent: referenceSections[`/reference/metrics`]
-    },
-    [`/reference/metrics/${metric.id}/revisions`]: {
-        id: `/reference/metrics/${metric.id}/revisions`,
-        name: `Revision history for ${metric.name}`,
-        sidebar: 'Revision history',
-        breadcrumb: `${metric.name}`,
-        hidden: user && !user.is_superuser,
-        fetch: {
-            fetchMetricRevisions: [metric.id]
-        },
-        get: 'getMetricRevisions',
-        icon: "history",
-        headerIcon: "ruler",
-        parent: referenceSections[`/reference/metrics`]
-    }
-} : {};
-
-const getSegmentSections = (segment, table, user) => segment ? {
-    [`/reference/segments/${segment.id}`]: {
-        id: `/reference/segments/${segment.id}`,
-        name: 'Details',
-        update: 'updateSegment',
-        type: 'segment',
-        questions: [
-            {
-                text: `Number of ${segment.name}`,
-                icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
-                link: getQuestionUrl({
-                    dbId: table && table.db_id,
-                    tableId: segment.table_id,
-                    segmentId: segment.id,
-                    getCount: true
-                })
-            },
-            {
-                text: `See all ${segment.name}`,
-                icon: "table2",
-                link: getQuestionUrl({
-                    dbId: table && table.db_id,
-                    tableId: segment.table_id,
-                    segmentId: segment.id
-                })
-            }
-        ],
-        breadcrumb: `${segment.name}`,
-        fetch: {
-            fetchSegmentTable: [segment.id]
-        },
-        get: 'getSegment',
-        icon: "document",
-        headerIcon: "segment",
-        headerLink: getQuestionUrl({
-            dbId: table && table.db_id,
-            tableId: segment.table_id,
-            segmentId: segment.id
-        }),
-        parent: referenceSections[`/reference/segments`]
-    },
-    [`/reference/segments/${segment.id}/fields`]: {
-        id: `/reference/segments/${segment.id}/fields`,
-        name: `Fields in ${segment.name}`,
-        empty: {
-            message: `Fields in this segment will appear here as they're added`,
-            icon: "fields"
-        },
-        sidebar: 'Fields in this segment',
-        fetch: {
-            fetchSegmentFields: [segment.id]
-        },
-        get: "getFieldsBySegment",
-        breadcrumb: `${segment.name}`,
-        icon: "fields",
-        headerIcon: "segment",
-        parent: referenceSections[`/reference/segments`]
-    },
-    [`/reference/segments/${segment.id}/questions`]: {
-        id: `/reference/segments/${segment.id}/questions`,
-        name: `Questions about ${segment.name}`,
-        empty: {
-            message: `Questions about this segment will appear here as they're added`,
-            icon: "all",
-            action: "Ask a question",
-            link: getQuestionUrl({
-                dbId: table && table.db_id,
-                tableId: segment.table_id,
-                segmentId: segment.id
-            })
-        },
-        type: 'questions',
-        sidebar: 'Questions about this segment',
-        breadcrumb: `${segment.name}`,
-        fetch: {
-            fetchSegmentTable: [segment.id],
-            fetchQuestions: []
-        },
-        get: 'getSegmentQuestions',
-        icon: "all",
-        headerIcon: "segment",
-        parent: referenceSections[`/reference/segments`]
-    },
-    [`/reference/segments/${segment.id}/revisions`]: {
-        id: `/reference/segments/${segment.id}/revisions`,
-        name: `Revision history for ${segment.name}`,
-        sidebar: 'Revision history',
-        breadcrumb: `${segment.name}`,
-        hidden: user && !user.is_superuser,
-        fetch: {
-            fetchSegmentRevisions: [segment.id]
-        },
-        get: 'getSegmentRevisions',
-        icon: "history",
-        headerIcon: "segment",
-        parent: referenceSections[`/reference/segments`]
-    }
-} : {};
-
-const getSegmentFieldSections = (segment, table, field, user) => segment && field ? {
-    [`/reference/segments/${segment.id}/fields/${field.id}`]: {
-        id: `/reference/segments/${segment.id}/fields/${field.id}`,
-        name: 'Details',
-        update: 'updateField',
-        type: 'field',
-        questions: [
-            {
-                text: `Number of ${table && table.display_name} grouped by ${field.display_name}`,
-                icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
-                link: getQuestionUrl({
-                    dbId: table && table.db_id,
-                    tableId: field.table_id,
-                    fieldId: field.id,
-                    getCount: true
-                })
-            },
-            {
-                text: `All distinct values of ${field.display_name}`,
-                icon: "table2",
-                link: getQuestionUrl({
-                    dbId: table && table.db_id,
-                    tableId: field.table_id,
-                    fieldId: field.id
-                })
-            }
-        ],
-        breadcrumb: `${field.display_name}`,
-        fetch: {
-            fetchSegmentFields: [segment.id]
-        },
-        get: "getFieldBySegment",
-        icon: "document",
-        headerIcon: "field",
-        parent: getSegmentSections(segment)[`/reference/segments/${segment.id}/fields`]
-    }
-} : {};
-
-const getDatabaseSections = (database) => database ? {
-    [`/reference/databases/${database.id}`]: {
-        id: `/reference/databases/${database.id}`,
-        name: 'Details',
-        update: 'updateDatabase',
-        type: 'database',
-        breadcrumb: `${database.name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id]
-        },
-        get: 'getDatabase',
-        icon: "document",
-        headerIcon: "database",
-        parent: referenceSections[`/reference/databases`]
-    },
-    [`/reference/databases/${database.id}/tables`]: {
-        id: `/reference/databases/${database.id}/tables`,
-        name: `Tables in ${database.name}`,
-        type: 'tables',
-        empty: {
-            message: `Tables in this database will appear here as they're added`,
-            icon: "table2"
-        },
-        sidebar: 'Tables in this database',
-        breadcrumb: `${database.name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id]
-        },
-        get: 'getTablesByDatabase',
-        icon: "table2",
-        headerIcon: "database",
-        parent: referenceSections[`/reference/databases`]
-    }
-} : {};
-
-const getTableSections = (database, table) => database && table ? {
-    [`/reference/databases/${database.id}/tables/${table.id}`]: {
-        id: `/reference/databases/${database.id}/tables/${table.id}`,
-        name: 'Details',
-        update: 'updateTable',
-        type: 'table',
-        questions: [
-            {
-                text: `Count of ${table.display_name}`,
-                icon: { name: "number", scale: 1, viewBox: "8 8 16 16" },
-                link: getQuestionUrl({
-                    dbId: table.db_id,
-                    tableId: table.id,
-                    getCount: true
-                })
-            },
-            {
-                text: `See raw data for ${table.display_name}`,
-                icon: "table2",
-                link: getQuestionUrl({
-                    dbId: table.db_id,
-                    tableId: table.id,
-                })
-            }
-        ],
-        breadcrumb: `${table.display_name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id]
-        },
-        get: 'getTable',
-        icon: "document",
-        headerIcon: "table2",
-        headerLink: getQuestionUrl({
-            dbId: table.db_id,
-            tableId: table.id,
-        }),
-        parent: getDatabaseSections(database)[`/reference/databases/${database.id}/tables`]
-    },
-    [`/reference/databases/${database.id}/tables/${table.id}/fields`]: {
-        id: `/reference/databases/${database.id}/tables/${table.id}/fields`,
-        name: `Fields in ${table.display_name}`,
-        empty: {
-            message: `Fields in this table will appear here as they're added`,
-            icon: "fields"
-        },
-        sidebar: 'Fields in this table',
-        breadcrumb: `${table.display_name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id]
-        },
-        get: "getFieldsByTable",
-        icon: "fields",
-        headerIcon: "table2",
-        parent: getDatabaseSections(database)[`/reference/databases/${database.id}/tables`]
-    },
-    [`/reference/databases/${database.id}/tables/${table.id}/questions`]: {
-        id: `/reference/databases/${database.id}/tables/${table.id}/questions`,
-        name: `Questions about ${table.display_name}`,
-        empty: {
-            message: `Questions about this table will appear here as they're added`,
-            icon: "all",
-            action: "Ask a question",
-            link: getQuestionUrl({
-                dbId: table.db_id,
-                tableId: table.id,
-            })
-        },
-        type: 'questions',
-        sidebar: 'Questions about this table',
-        breadcrumb: `${table.display_name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id], fetchQuestions: []
-        },
-        get: 'getTableQuestions',
-        icon: "all",
-        headerIcon: "table2",
-        parent: getDatabaseSections(database)[`/reference/databases/${database.id}/tables`]
-    }
-} : {};
-
-const getTableFieldSections = (database, table, field) => database && table && field ? {
-    [`/reference/databases/${database.id}/tables/${table.id}/fields/${field.id}`]: {
-        id: `/reference/databases/${database.id}/tables/${table.id}/fields/${field.id}`,
-        name: 'Details',
-        update: 'updateField',
-        type: 'field',
-        questions: [
-            {
-                text: `Number of ${table.display_name} grouped by ${field.display_name}`,
-                icon: { name: "bar", scale: 1, viewBox: "8 8 16 16" },
-                link: getQuestionUrl({
-                    dbId: database.id,
-                    tableId: table.id,
-                    fieldId: field.id,
-                    getCount: true,
-                    visualization: 'bar'
-                })
-            },
-            {
-                text: `Number of ${table.display_name} grouped by ${field.display_name}`,
-                icon: { name: "pie", scale: 1, viewBox: "8 8 16 16" },
-                link: getQuestionUrl({
-                    dbId: database.id,
-                    tableId: table.id,
-                    fieldId: field.id,
-                    getCount: true,
-                    visualization: 'pie'
-                })
-            },
-            {
-                text: `All distinct values of ${field.display_name}`,
-                icon: "table2",
-                link: getQuestionUrl({
-                    dbId: database.id,
-                    tableId: table.id,
-                    fieldId: field.id
-                })
-            }
-        ],
-        breadcrumb: `${field.display_name}`,
-        fetch: {
-            fetchDatabaseMetadata: [database.id]
-        },
-        get: "getField",
-        icon: "document",
-        headerIcon: "field",
-        parent: getTableSections(database, table)[`/reference/databases/${database.id}/tables/${table.id}/fields`]
-    }
-} : {};
-
 export const getUser = (state, props) => state.currentUser;
 
-export const getSectionId = (state, props) => props.location.pathname;
-
 export const getMetricId = (state, props) => Number.parseInt(props.params.metricId);
 export const getMetric = createSelector(
     [getMetricId, getMetrics],
@@ -490,19 +38,19 @@ export const getSegment = createSelector(
 
 export const getDatabaseId = (state, props) => Number.parseInt(props.params.databaseId);
 
-const getDatabase = createSelector(
+export const getDatabase = createSelector(
     [getDatabaseId, getDatabases],
     (databaseId, databases) => databases[databaseId] || { id: databaseId }
 );
 
 export const getTableId = (state, props) => Number.parseInt(props.params.tableId);
 // export const getTableId = (state, props) => Number.parseInt(props.params.tableId);
-const getTablesByDatabase = createSelector(
+export const getTablesByDatabase = createSelector(
     [getTables, getDatabase],
     (tables, database) => tables && database && database.tables ?
         idsToObjectMap(database.tables, tables) : {}
 );
-const getTableBySegment = createSelector(
+export const getTableBySegment = createSelector(
     [getSegment, getTables],
     (segment, tables) => segment && segment.table_id ? tables[segment.table_id] : {}
 );
@@ -519,26 +67,26 @@ export const getTable = createSelector(
 );
 
 export const getFieldId = (state, props) => Number.parseInt(props.params.fieldId);
-const getFieldsByTable = createSelector(
+export const getFieldsByTable = createSelector(
     [getTable, getFields],
     (table, fields) => table && table.fields ? idsToObjectMap(table.fields, fields) : {}
 );
-const getFieldsBySegment = createSelector(
+export const getFieldsBySegment = createSelector(
     [getTableBySegment, getFields],
     (table, fields) => table && table.fields ? idsToObjectMap(table.fields, fields) : {}
 );
-const getField = createSelector(
+export const getField = createSelector(
     [getFieldId, getFields],
     (fieldId, fields) => fields[fieldId] || { id: fieldId }
 );
-const getFieldBySegment = createSelector(
+export const getFieldBySegment = createSelector(
     [getFieldId, getFieldsBySegment],
     (fieldId, fields) => fields[fieldId] || { id: fieldId }
 );
 
 const getQuestions = (state, props) => getIn(state, ['questions', 'entities', 'cards']) || {};
 
-const getMetricQuestions = createSelector(
+export const getMetricQuestions = createSelector(
     [getMetricId, getQuestions],
     (metricId, questions) => Object.values(questions)
         .filter(question =>
@@ -552,17 +100,17 @@ const getMetricQuestions = createSelector(
 
 const getRevisions = (state, props) => state.metadata.revisions;
 
-const getMetricRevisions = createSelector(
+export const getMetricRevisions = createSelector(
     [getMetricId, getRevisions],
     (metricId, revisions) => getIn(revisions, ['metric', metricId]) || {}
 );
 
-const getSegmentRevisions = createSelector(
+export const getSegmentRevisions = createSelector(
     [getSegmentId, getRevisions],
     (segmentId, revisions) => getIn(revisions, ['segment', segmentId]) || {}
 );
 
-const getSegmentQuestions = createSelector(
+export const getSegmentQuestions = createSelector(
     [getSegmentId, getQuestions],
     (segmentId, questions) => Object.values(questions)
         .filter(question =>
@@ -573,7 +121,7 @@ const getSegmentQuestions = createSelector(
         .reduce((map, question) => assoc(map, question.id, question), {})
 );
 
-const getTableQuestions = createSelector(
+export const getTableQuestions = createSelector(
     [getTable, getQuestions],
     (table, questions) => Object.values(questions)
         .filter(question => question.table_id === table.id)
@@ -601,101 +149,10 @@ export const getForeignKeys = createSelector(
         foreignKeysBySegment : foreignKeysByDatabase
 )
 
-export const getSections = createSelector(
-    [getSectionId, getMetric, getSegment, getDatabase, getTable, getField, getFieldBySegment, getTableBySegment, getTableByMetric, getUser, getReferenceSections, getSegments, getMetrics],
-    (sectionId, metric, segment, database, table, field, fieldBySegment, tableBySegment, tableByMetric, user, referenceSections, segments, metrics) => {
-        // can be simplified if we had a single map of all sections
-        if (referenceSections[sectionId]) {
-            // filter out segments or metrics if we're not on that particular section and there are none
-            return _.omit(referenceSections,
-                Object.keys(metrics).length === 0 && sectionId !== "/reference/metrics" && "/reference/metrics",
-                Object.keys(segments).length === 0 && sectionId !== "/reference/segments"  && "/reference/segments",
-            );
-        }
-
-        const metricSections = getMetricSections(metric, tableByMetric, user);
-        if (metricSections[sectionId]) {
-            return metricSections;
-        }
-
-        const segmentSections = getSegmentSections(segment, tableBySegment, user);
-        if (segmentSections[sectionId]) {
-            return segmentSections;
-        }
-
-        const segmentFieldSections = getSegmentFieldSections(segment, tableBySegment, fieldBySegment);
-        if (segmentFieldSections[sectionId]) {
-            return segmentFieldSections;
-        }
-
-        const databaseSections = getDatabaseSections(database);
-        if (databaseSections[sectionId]) {
-            return databaseSections;
-        }
-
-        const tableSections = getTableSections(database, table);
-        if (tableSections[sectionId]) {
-            return tableSections;
-        }
-
-        const tableFieldSections = getTableFieldSections(database, table, field);
-        if (tableFieldSections[sectionId]) {
-            return tableFieldSections;
-        }
-
-        return {};
-    }
-);
-
-export const getSection = createSelector(
-    [getSectionId, getSections],
-    (sectionId, sections) => sections[sectionId] || {}
-);
-
-const dataSelectors = {
-    getMetric,
-    getMetricQuestions,
-    getMetricRevisions,
-    getMetrics,
-    getSegment,
-    getSegmentQuestions,
-    getSegmentRevisions,
-    getSegments,
-    getDatabase,
-    getDatabases,
-    getTable,
-    getTableQuestions,
-    getTables,
-    getTablesByDatabase,
-    getField,
-    getFieldBySegment,
-    getFields,
-    getFieldsByTable,
-    getFieldsBySegment
-};
-
-export const getData = (state, props) => {
-    const section = getSection(state, props);
-    if (!section) {
-        return {};
-    }
-    const selector = dataSelectors[section.get];
-    if (!selector) {
-        return {};
-    }
-
-    return selector(state, props);
-};
-
 export const getLoading = (state, props) => state.reference.isLoading;
 
 export const getError = (state, props) => state.reference.error;
 
-export const getBreadcrumbs = createSelector(
-    [getSection],
-    buildBreadcrumbs
-)
-
 export const getHasSingleSchema = createSelector(
     [getTablesByDatabase],
     (tables) => tables && Object.keys(tables).length > 0 ?
@@ -703,25 +160,6 @@ export const getHasSingleSchema = createSelector(
             .every((table, index, tables) => table.schema === tables[0].schema) : true
 )
 
-export const getHasDisplayName = createSelector(
-    [getSection],
-    (section) =>
-        section.type === 'table' ||
-        section.type === 'field'
-)
-
-export const getHasRevisionHistory = createSelector(
-    [getSection],
-    (section) =>
-        section.type === 'metric' ||
-        section.type === 'segment'
-)
-
-export const getHasQuestions = createSelector(
-    [getSection],
-    (section) => section.questions && section.questions.length > 0
-)
-
 export const getIsEditing = (state, props) => state.reference.isEditing;
 
 export const getIsFormulaExpanded = (state, props) => state.reference.isFormulaExpanded;
diff --git a/frontend/src/metabase/reference/utils.js b/frontend/src/metabase/reference/utils.js
index 0a85e12cc89dcc5ec8ef40b417179cc031cae011..1057f5c3ca4e9969150d37383ec30fcb82a72f0d 100644
--- a/frontend/src/metabase/reference/utils.js
+++ b/frontend/src/metabase/reference/utils.js
@@ -1,5 +1,4 @@
 import { assoc, assocIn, chain } from "icepick";
-import _ from "underscore";
 
 import { titleize, humanize } from "metabase/lib/formatting";
 import { startNewCard } from "metabase/lib/card";
@@ -13,344 +12,15 @@ export const idsToObjectMap = (ids, objects) => ids
     // hangs browser for large databases
     // .reduce((map, object) => assoc(map, object.id, object), {});
 
-const filterUntouchedFields = (fields, entity = {}) => Object.keys(fields)
+export const filterUntouchedFields = (fields, entity = {}) => Object.keys(fields)
     .filter(key =>
         fields[key] !== undefined &&
         entity[key] !== fields[key]
     )
     .reduce((map, key) => ({ ...map, [key]: fields[key] }), {});
 
-const isEmptyObject = (object) => Object.keys(object).length === 0;
+export const isEmptyObject = (object) => Object.keys(object).length === 0;
 
-export const tryFetchData = async (props) => {
-    const {
-        section,
-        clearError,
-        startLoading,
-        setError,
-        endLoading
-    } = props;
-
-    if (!(section && section.fetch)) {
-        return;
-    }
-
-    const fetch = section.fetch;
-    clearError();
-    startLoading();
-    try {
-        await Promise.all(Object.keys(fetch).map((fetchPropName) => {
-            const fetchData = props[fetchPropName];
-            const fetchArgs = fetch[fetchPropName] || [];
-            return fetchData(...fetchArgs);
-        }));
-    }
-    catch(error) {
-        setError(error);
-        console.error(error);
-    }
-
-    endLoading();
-}
-
-export const tryUpdateData = async (fields, props) => {
-    const {
-        entity,
-        guide,
-        section,
-        updateMetricImportantFields,
-        startLoading,
-        endLoading,
-        resetForm,
-        setError,
-        endEditing
-    } = props;
-
-    startLoading();
-    try {
-        const editedFields = filterUntouchedFields(fields, entity);
-        if (!isEmptyObject(editedFields)) {
-            const newEntity = {...entity, ...editedFields};
-            await props[section.update](newEntity);
-
-            if (section.type === 'metric' && fields.important_fields) {
-                const importantFieldIds = fields.important_fields.map(field => field.id);
-                const existingImportantFieldIds = guide.metric_important_fields && guide.metric_important_fields[entity.id];
-
-                const areFieldIdsIdentitical = existingImportantFieldIds &&
-                    existingImportantFieldIds.length === importantFieldIds.length &&
-                    existingImportantFieldIds.every(id => importantFieldIds.includes(id));
-
-                if (!areFieldIdsIdentitical) {
-                    await updateMetricImportantFields(entity.id, importantFieldIds);
-                    tryFetchData(props);
-                }
-            }
-        }
-    }
-    catch(error) {
-        setError(error);
-        console.error(error);
-    }
-
-    resetForm();
-    endLoading();
-    endEditing();
-}
-
-export const tryUpdateFields = async (formFields, props) => {
-    const {
-        entities,
-        updateField,
-        startLoading,
-        endLoading,
-        endEditing,
-        resetForm,
-        setError
-    } = props;
-
-    startLoading();
-    try {
-        const updatedFields = Object.keys(formFields)
-            .map(fieldId => ({
-                field: entities[fieldId],
-                formField: filterUntouchedFields(formFields[fieldId], entities[fieldId])
-            }))
-            .filter(({field, formField}) => !isEmptyObject(formField))
-            .map(({field, formField}) => ({...field, ...formField}));
-
-        await Promise.all(updatedFields.map(updateField));
-    }
-    catch(error) {
-        setError(error);
-        console.error(error);
-    }
-
-    resetForm();
-    endLoading();
-    endEditing();
-}
-
-export const tryUpdateGuide = async (formFields, props) => {
-    const {
-        guide,
-        dashboards,
-        metrics,
-        segments,
-        tables,
-        startLoading,
-        endLoading,
-        endEditing,
-        setError,
-        resetForm,
-        updateDashboard,
-        updateMetric,
-        updateSegment,
-        updateTable,
-        updateMetricImportantFields,
-        updateSetting,
-        fetchGuide,
-        clearRequestState
-    } = props;
-
-    startLoading();
-    try {
-        const updateNewEntities = ({
-            entities,
-            formFields,
-            updateEntity
-        }) => formFields.map(formField => {
-            if (!formField.id) {
-                return [];
-            }
-
-            const editedEntity = filterUntouchedFields(
-                assoc(formField, 'show_in_getting_started', true),
-                entities[formField.id]
-            );
-
-            if (isEmptyObject(editedEntity)) {
-                return [];
-            }
-
-            const newEntity = entities[formField.id];
-            const updatedNewEntity = {
-                ...newEntity,
-                ...editedEntity
-            };
-
-            const updatingNewEntity = updateEntity(updatedNewEntity);
-
-            return [updatingNewEntity];
-        });
-
-        const updateOldEntities = ({
-            newEntityIds,
-            oldEntityIds,
-            entities,
-            updateEntity
-        }) => oldEntityIds
-            .filter(oldEntityId => !newEntityIds.includes(oldEntityId))
-            .map(oldEntityId => {
-                const oldEntity = entities[oldEntityId];
-
-                const updatedOldEntity = assoc(
-                    oldEntity,
-                    'show_in_getting_started',
-                    false
-                );
-
-                const updatingOldEntity = updateEntity(updatedOldEntity);
-
-                return [updatingOldEntity];
-            });
-        //FIXME: necessary because revision_message is a mandatory field
-        // even though we don't actually keep track of changes to caveats/points_of_interest yet
-        const updateWithRevisionMessage = updateEntity => entity => updateEntity(assoc(
-            entity,
-            'revision_message',
-            'Updated in Getting Started guide.'
-        ));
-
-        const updatingDashboards = updateNewEntities({
-                entities: dashboards,
-                formFields: [formFields.most_important_dashboard],
-                updateEntity: updateDashboard
-            })
-            .concat(updateOldEntities({
-                newEntityIds: formFields.most_important_dashboard ?
-                    [formFields.most_important_dashboard.id] : [],
-                oldEntityIds: guide.most_important_dashboard ?
-                    [guide.most_important_dashboard] :
-                    [],
-                entities: dashboards,
-                updateEntity: updateDashboard
-            }));
-
-        const updatingMetrics = updateNewEntities({
-                entities: metrics,
-                formFields: formFields.important_metrics,
-                updateEntity: updateWithRevisionMessage(updateMetric)
-            })
-            .concat(updateOldEntities({
-                newEntityIds: formFields.important_metrics
-                    .map(formField => formField.id),
-                oldEntityIds: guide.important_metrics,
-                entities: metrics,
-                updateEntity: updateWithRevisionMessage(updateMetric)
-            }));
-
-        const updatingMetricImportantFields = formFields.important_metrics
-            .map(metricFormField => {
-                if (!metricFormField.id || !metricFormField.important_fields) {
-                    return [];
-                }
-                const importantFieldIds = metricFormField.important_fields
-                    .map(field => field.id);
-                const existingImportantFieldIds = guide.metric_important_fields[metricFormField.id];
-
-                const areFieldIdsIdentitical = existingImportantFieldIds &&
-                    existingImportantFieldIds.length === importantFieldIds.length &&
-                    existingImportantFieldIds.every(id => importantFieldIds.includes(id));
-                if (areFieldIdsIdentitical) {
-                    return [];
-                }
-
-                return [updateMetricImportantFields(metricFormField.id, importantFieldIds)];
-            });
-
-        const segmentFields = formFields.important_segments_and_tables
-            .filter(field => field.type === 'segment');
-
-        const updatingSegments = updateNewEntities({
-                entities: segments,
-                formFields: segmentFields,
-                updateEntity: updateWithRevisionMessage(updateSegment)
-            })
-            .concat(updateOldEntities({
-                newEntityIds: segmentFields
-                    .map(formField => formField.id),
-                oldEntityIds: guide.important_segments,
-                entities: segments,
-                updateEntity: updateWithRevisionMessage(updateSegment)
-            }));
-
-        const tableFields = formFields.important_segments_and_tables
-            .filter(field => field.type === 'table');
-
-        const updatingTables = updateNewEntities({
-                entities: tables,
-                formFields: tableFields,
-                updateEntity: updateTable
-            })
-            .concat(updateOldEntities({
-                newEntityIds: tableFields
-                    .map(formField => formField.id),
-                oldEntityIds: guide.important_tables,
-                entities: tables,
-                updateEntity: updateTable
-            }));
-
-        const updatingThingsToKnow = guide.things_to_know !== formFields.things_to_know ?
-            [updateSetting({key: 'getting-started-things-to-know', value: formFields.things_to_know })] :
-            [];
-
-        const updatingContactName = guide.contact && formFields.contact &&
-            guide.contact.name !== formFields.contact.name ?
-                [updateSetting({key: 'getting-started-contact-name', value: formFields.contact.name })] :
-                [];
-
-        const updatingContactEmail = guide.contact && formFields.contact &&
-            guide.contact.email !== formFields.contact.email ?
-                [updateSetting({key: 'getting-started-contact-email', value: formFields.contact.email })] :
-                [];
-
-        const updatingData = _.flatten([
-            updatingDashboards,
-            updatingMetrics,
-            updatingMetricImportantFields,
-            updatingSegments,
-            updatingTables,
-            updatingThingsToKnow,
-            updatingContactName,
-            updatingContactEmail
-        ]);
-
-        if (updatingData.length > 0) {
-            await Promise.all(updatingData);
-
-            clearRequestState({statePath: ['reference', 'guide']});
-
-            await fetchGuide();
-        }
-    }
-    catch(error) {
-        setError(error);
-        console.error(error);
-    }
-
-    resetForm();
-    endLoading();
-    endEditing();
-};
-
-const getBreadcrumb = (section, index, sections) => index !== sections.length - 1 ?
-    [section.breadcrumb, section.id] : [section.breadcrumb];
-
-const getParentSections = (section) => {
-    if (!section.parent) {
-        return [section];
-    }
-
-    const parentSections = []
-        .concat(getParentSections(section.parent), section);
-
-    return parentSections;
-};
-
-export const buildBreadcrumbs = (section) => getParentSections(section)
-    .map(getBreadcrumb)
-    .slice(-3);
 
 export const databaseToForeignKeys = (database) => database && database.tables_lookup ?
     Object.values(database.tables_lookup)
@@ -379,31 +49,9 @@ export const fieldsToFormFields = (fields) => Object.keys(fields)
     ])
     .reduce((array, keys) => array.concat(keys), []);
 
-export const separateTablesBySchema = (
-    tables,
-    section,
-    createSchemaSeparator,
-    createListItem
-) => Object.values(tables)
-    .sort((table1, table2) => table1.schema > table2.schema ? 1 :
-        table1.schema === table2.schema ? 0 : -1
-    )
-    .map((table, index, sortedTables) => {
-        if (!table || !table.id || !table.name) {
-            return;
-        }
-        // add schema header for first element and if schema is different from previous
-        const previousTableId = Object.keys(sortedTables)[index - 1];
-        return index === 0 ||
-            sortedTables[previousTableId].schema !== table.schema ?
-                [
-                    createSchemaSeparator(table),
-                    createListItem(table, index, section)
-                ] :
-                createListItem(table, index, section);
-    });
 
-export const getQuestion = ({dbId, tableId, fieldId, metricId, segmentId, getCount, visualization}) => {
+// TODO Atte Keinänen 7/3/17: Construct question with Question of metabase-lib instead of this using function
+export const getQuestion = ({dbId, tableId, fieldId, metricId, segmentId, getCount, visualization, metadata}) => {
     const newQuestion = startNewCard('query', dbId, tableId);
 
     // consider taking a look at Ramda as a possible underscore alternative?
@@ -416,7 +64,11 @@ export const getQuestion = ({dbId, tableId, fieldId, metricId, segmentId, getCou
         .updateIn(['display'], display => visualization || display)
         .updateIn(
             ['dataset_query', 'query', 'breakout'],
-            breakout => fieldId ? [fieldId] : breakout
+            (oldBreakout) => {
+                if (fieldId && metadata && metadata.fields[fieldId]) return [metadata.fields[fieldId].getDefaultBreakout()]
+                if (fieldId) return [fieldId];
+                return oldBreakout;
+            }
         )
         .value();
 
@@ -433,22 +85,6 @@ export const getQuestion = ({dbId, tableId, fieldId, metricId, segmentId, getCou
 
 export const getQuestionUrl = getQuestionArgs => Urls.question(null, getQuestion(getQuestionArgs));
 
-export const isGuideEmpty = ({
-    things_to_know,
-    contact,
-    most_important_dashboard,
-    important_metrics,
-    important_segments,
-    important_tables
-} = {}) => things_to_know ? false :
-    contact && contact.name ? false :
-    contact && contact.email ? false :
-    most_important_dashboard ? false :
-    important_metrics && important_metrics.length !== 0 ? false :
-    important_segments && important_segments.length !== 0 ? false :
-    important_tables && important_tables.length !== 0 ? false :
-    true;
-
 export const typeToLinkClass = {
     dashboard: 'text-green',
     metric: 'text-brand',
@@ -463,6 +99,7 @@ export const typeToBgClass = {
     table: 'bg-purple'
 };
 
+
 // little utility function to determine if we 'has' things, useful
 // for handling entity empty states
 export const has = (entity) => entity && entity.length > 0;
diff --git a/frontend/src/metabase/routes.jsx b/frontend/src/metabase/routes.jsx
index 2ef7fbfb05c7e85b604686a1e6d0bff60298d5c8..6314943f49b64346b3a88222333d9e3aa468a40a 100644
--- a/frontend/src/metabase/routes.jsx
+++ b/frontend/src/metabase/routes.jsx
@@ -54,12 +54,29 @@ import SettingsEditorApp from "metabase/admin/settings/containers/SettingsEditor
 import NotFound from "metabase/components/NotFound.jsx";
 import Unauthorized from "metabase/components/Unauthorized.jsx";
 
-import ReferenceApp from "metabase/reference/containers/ReferenceApp.jsx";
-import ReferenceEntity from "metabase/reference/containers/ReferenceEntity.jsx";
-import ReferenceEntityList from "metabase/reference/containers/ReferenceEntityList.jsx";
-import ReferenceFieldsList from "metabase/reference/containers/ReferenceFieldsList.jsx";
-import ReferenceRevisionsList from "metabase/reference/containers/ReferenceRevisionsList.jsx";
-import ReferenceGettingStartedGuide from "metabase/reference/containers/ReferenceGettingStartedGuide.jsx";
+// Reference Guide
+import GettingStartedGuideContainer from "metabase/reference/guide/GettingStartedGuideContainer.jsx";
+// Reference Metrics 
+import MetricListContainer from "metabase/reference/metrics/MetricListContainer.jsx";
+import MetricDetailContainer from "metabase/reference/metrics/MetricDetailContainer.jsx";
+import MetricQuestionsContainer from "metabase/reference/metrics/MetricQuestionsContainer.jsx";
+import MetricRevisionsContainer from "metabase/reference/metrics/MetricRevisionsContainer.jsx";
+// Reference Segments
+import SegmentListContainer from "metabase/reference/segments/SegmentListContainer.jsx";
+import SegmentDetailContainer from "metabase/reference/segments/SegmentDetailContainer.jsx";
+import SegmentQuestionsContainer from "metabase/reference/segments/SegmentQuestionsContainer.jsx";
+import SegmentRevisionsContainer from "metabase/reference/segments/SegmentRevisionsContainer.jsx";
+import SegmentFieldListContainer from "metabase/reference/segments/SegmentFieldListContainer.jsx";
+import SegmentFieldDetailContainer from "metabase/reference/segments/SegmentFieldDetailContainer.jsx";
+// Reference Databases
+import DatabaseListContainer from "metabase/reference/databases/DatabaseListContainer.jsx";
+import DatabaseDetailContainer from "metabase/reference/databases/DatabaseDetailContainer.jsx";
+import TableListContainer from "metabase/reference/databases/TableListContainer.jsx";
+import TableDetailContainer from "metabase/reference/databases/TableDetailContainer.jsx";
+import TableQuestionsContainer from "metabase/reference/databases/TableQuestionsContainer.jsx";
+import FieldListContainer from "metabase/reference/databases/FieldListContainer.jsx";
+import FieldDetailContainer from "metabase/reference/databases/FieldDetailContainer.jsx";
+
 
 import getAdminPermissionsRoutes from "metabase/admin/permissions/routes.jsx";
 
@@ -190,26 +207,26 @@ export const getRoutes = (store) =>
                 </Route>
 
                 {/* REFERENCE */}
-                <Route path="/reference" title="Data Reference" component={ReferenceApp}>
+                <Route path="/reference" title="Data Reference">
                     <IndexRedirect to="/reference/guide" />
-                    <Route path="guide" title="Getting Started" component={ReferenceGettingStartedGuide} />
-                    <Route path="metrics" component={ReferenceEntityList} />
-                    <Route path="metrics/:metricId" component={ReferenceEntity} />
-                    <Route path="metrics/:metricId/questions" component={ReferenceEntityList} />
-                    <Route path="metrics/:metricId/revisions" component={ReferenceRevisionsList} />
-                    <Route path="segments" component={ReferenceEntityList} />
-                    <Route path="segments/:segmentId" component={ReferenceEntity} />
-                    <Route path="segments/:segmentId/fields" component={ReferenceFieldsList} />
-                    <Route path="segments/:segmentId/fields/:fieldId" component={ReferenceEntity} />
-                    <Route path="segments/:segmentId/questions" component={ReferenceEntityList} />
-                    <Route path="segments/:segmentId/revisions" component={ReferenceRevisionsList} />
-                    <Route path="databases" component={ReferenceEntityList} />
-                    <Route path="databases/:databaseId" component={ReferenceEntity} />
-                    <Route path="databases/:databaseId/tables" component={ReferenceEntityList} />
-                    <Route path="databases/:databaseId/tables/:tableId" component={ReferenceEntity} />
-                    <Route path="databases/:databaseId/tables/:tableId/fields" component={ReferenceFieldsList} />
-                    <Route path="databases/:databaseId/tables/:tableId/fields/:fieldId" component={ReferenceEntity} />
-                    <Route path="databases/:databaseId/tables/:tableId/questions" component={ReferenceEntityList} />
+                    <Route path="guide" title="Getting Started" component={GettingStartedGuideContainer} />
+                    <Route path="metrics" component={MetricListContainer} />
+                    <Route path="metrics/:metricId" component={MetricDetailContainer} />
+                    <Route path="metrics/:metricId/questions" component={MetricQuestionsContainer} />
+                    <Route path="metrics/:metricId/revisions" component={MetricRevisionsContainer} />
+                    <Route path="segments" component={SegmentListContainer} />
+                    <Route path="segments/:segmentId" component={SegmentDetailContainer} />
+                    <Route path="segments/:segmentId/fields" component={SegmentFieldListContainer} />
+                    <Route path="segments/:segmentId/fields/:fieldId" component={SegmentFieldDetailContainer} />
+                    <Route path="segments/:segmentId/questions" component={SegmentQuestionsContainer} />
+                    <Route path="segments/:segmentId/revisions" component={SegmentRevisionsContainer} />
+                    <Route path="databases" component={DatabaseListContainer} />
+                    <Route path="databases/:databaseId" component={DatabaseDetailContainer} />
+                    <Route path="databases/:databaseId/tables" component={TableListContainer} />
+                    <Route path="databases/:databaseId/tables/:tableId" component={TableDetailContainer} />
+                    <Route path="databases/:databaseId/tables/:tableId/fields" component={FieldListContainer} />
+                    <Route path="databases/:databaseId/tables/:tableId/fields/:fieldId" component={FieldDetailContainer} />
+                    <Route path="databases/:databaseId/tables/:tableId/questions" component={TableQuestionsContainer} />
                 </Route>
 
                 {/* PULSE */}
@@ -259,6 +276,7 @@ export const getRoutes = (store) =>
                 <Route path="settings" title="Settings">
                     <IndexRedirect to="/admin/settings/setup" />
                     {/* <IndexRoute component={SettingsEditorApp} /> */}
+                    <Route path=":section/:authType" component={SettingsEditorApp} />
                     <Route path=":section" component={SettingsEditorApp} />
                 </Route>
 
diff --git a/frontend/src/metabase/services.js b/frontend/src/metabase/services.js
index 8035bd2b7e1b6c103fab0b9de13b703aa622083a..e3d2f855e37180b44bcab84e620d4b28a4d9afea 100644
--- a/frontend/src/metabase/services.js
+++ b/frontend/src/metabase/services.js
@@ -88,9 +88,13 @@ export const SlackApi = {
     updateSettings:              PUT("/api/slack/settings"),
 };
 
+export const LdapApi = {
+    updateSettings:              PUT("/api/ldap/settings")
+};
+
 export const MetabaseApi = {
     db_list:                     GET("/api/database"),
-    db_list_with_tables:         GET("/api/database?include_tables=true"),
+    db_list_with_tables:         GET("/api/database?include_tables=true&include_cards=true"),
     db_create:                  POST("/api/database"),
     db_add_sample_dataset:      POST("/api/database/sample_dataset"),
     db_get:                      GET("/api/database/:dbId"),
diff --git a/frontend/src/metabase/store.js b/frontend/src/metabase/store.js
index d326c6acf2648c1141c7222763350d20e158cee2..5b683f4396d38ff9955dc31e04f3100b787f89f4 100644
--- a/frontend/src/metabase/store.js
+++ b/frontend/src/metabase/store.js
@@ -21,7 +21,6 @@ const thunkWithDispatchAction = ({ dispatch, getState }) => next => action => {
 
         return action(dispatchAugmented, getState);
     }
-
     return next(action);
 };
 
@@ -32,7 +31,8 @@ if (DEBUG) {
 
 const devToolsExtension = window.devToolsExtension ? window.devToolsExtension() : (f => f);
 
-export function getStore(reducers, history, intialState) {
+export function getStore(reducers, history, intialState, enhancer = (a) => a) {
+
     const reducer = combineReducers({
         ...reducers,
         form,
@@ -43,6 +43,7 @@ export function getStore(reducers, history, intialState) {
 
     return createStore(reducer, intialState, compose(
         applyMiddleware(...middleware),
-        devToolsExtension
+        devToolsExtension,
+        enhancer,
     ));
-}
+}
\ No newline at end of file
diff --git a/frontend/src/metabase/user/components/UpdateUserDetails.jsx b/frontend/src/metabase/user/components/UpdateUserDetails.jsx
index acff1daecbc5e3fabb3eb72368626272fd42ce13..f58c3c5ec05fe8ff75a8278a1e7a0b1df6258b12 100644
--- a/frontend/src/metabase/user/components/UpdateUserDetails.jsx
+++ b/frontend/src/metabase/user/components/UpdateUserDetails.jsx
@@ -83,7 +83,7 @@ export default class UpdateUserDetails extends Component {
     render() {
         const { updateUserResult, user } = this.props;
         const { formError, valid } = this.state;
-        const managed = user.google_auth
+        const managed = user.google_auth || user.ldap_auth;
 
         return (
             <div>
@@ -101,7 +101,7 @@ export default class UpdateUserDetails extends Component {
                     </FormField>
 
                     <FormField fieldName="email" formError={formError}>
-                        <FormLabel title={ managed ? "Sign in with Google Email address" : "Email address"} fieldName="email" formError={formError} ></FormLabel>
+                        <FormLabel title={ user.google_auth ? "Sign in with Google Email address" : "Email address"} fieldName="email" formError={formError} ></FormLabel>
                         <input
                             ref="email"
                             className={
diff --git a/frontend/src/metabase/user/components/UserSettings.jsx b/frontend/src/metabase/user/components/UserSettings.jsx
index 036ff8898b190217e7a2ae22610ef2bd5533cada..ed1ade9083e471000ce283e301c0bad2b8784c38 100644
--- a/frontend/src/metabase/user/components/UserSettings.jsx
+++ b/frontend/src/metabase/user/components/UserSettings.jsx
@@ -31,7 +31,7 @@ export default class UserSettings extends Component {
 
     render() {
         let { tab } = this.props;
-        const nonSSOManagedAccount = !this.props.user.google_auth
+        const nonSSOManagedAccount = !this.props.user.google_auth && !this.props.user.ldap_auth;
 
         let allClasses = "Grid-cell md-no-flex md-mt1 text-brand-hover bordered border-brand-hover rounded p1 md-p3 block cursor-pointer text-centered md-text-left",
             tabClasses = {};
diff --git a/frontend/src/metabase/visualizations/components/TableInteractive.jsx b/frontend/src/metabase/visualizations/components/TableInteractive.jsx
index 8796ea2d4619982216240675d5c3069032badaa8..6db0134cef0b2341f46624c5a679cd4029c1c1c4 100644
--- a/frontend/src/metabase/visualizations/components/TableInteractive.jsx
+++ b/frontend/src/metabase/visualizations/components/TableInteractive.jsx
@@ -31,6 +31,7 @@ type Props = VisualizationProps & {
     height: number,
     sort: any,
     isPivoted: boolean,
+    onActionDismissal: () => void
 }
 type State = {
     columnWidths: number[],
@@ -362,7 +363,10 @@ export default class TableInteractive extends Component {
                         rowCount={rows.length}
                         rowHeight={ROW_HEIGHT}
                         cellRenderer={this.cellRenderer}
-                        onScroll={({ scrollLeft }) => onScroll({ scrollLeft })}
+                        onScroll={({ scrollLeft }) => {
+                            this.props.onActionDismissal()
+                            return onScroll({ scrollLeft })}
+                        }
                         scrollLeft={scrollLeft}
                         tabIndex={null}
                         overscanRowCount={20}
diff --git a/frontend/src/metabase/visualizations/components/Visualization.integ.spec.js b/frontend/src/metabase/visualizations/components/Visualization.integ.spec.js
index 9a97711b16624496ef9d0c2484a7aec904ce063e..ccb2854dfe941700a030f6e9f97928f0643e4f79 100644
--- a/frontend/src/metabase/visualizations/components/Visualization.integ.spec.js
+++ b/frontend/src/metabase/visualizations/components/Visualization.integ.spec.js
@@ -6,10 +6,8 @@ import { initializeQB, navigateToNewCardInsideQB } from "metabase/query_builder/
 import { parse as urlParse } from "url";
 
 import {
-    linkContainerToGlobalReduxStore,
     login,
-    globalReduxStore as store,
-    globalBrowserHistory as history
+    createTestStore
 } from "metabase/__support__/integrated_tests";
 
 import Question from "metabase-lib/lib/Question";
@@ -20,8 +18,10 @@ import {
 } from "metabase/__support__/sample_dataset_fixture";
 import ChartClickActions from "metabase/visualizations/components/ChartClickActions";
 
+const store = createTestStore()
+
 const getVisualization = (question, results, onChangeCardAndRun) =>
-    linkContainerToGlobalReduxStore(
+    store.connectContainer(
         <Visualization
             series={[{card: question.card(), data: results[0].data}]}
             onChangeCardAndRun={navigateToNewCardInsideQB}
diff --git a/frontend/src/metabase/visualizations/components/Visualization.jsx b/frontend/src/metabase/visualizations/components/Visualization.jsx
index 8d24e7694efbfa4a78bb30675e61e66b125cd9fe..2a14d3dc81b8585553313f353e4ebefa9f7ece22 100644
--- a/frontend/src/metabase/visualizations/components/Visualization.jsx
+++ b/frontend/src/metabase/visualizations/components/Visualization.jsx
@@ -29,11 +29,10 @@ import cx from "classnames";
 export const ERROR_MESSAGE_GENERIC = "There was a problem displaying this chart.";
 export const ERROR_MESSAGE_PERMISSION = "Sorry, you don't have permission to see this card."
 
-import type { VisualizationSettings} from "metabase/meta/types/Card";
-import type { HoverObject, ClickObject, Series } from "metabase/meta/types/Visualization";
-
-import Metadata from "metabase-lib/lib/metadata/Metadata";
 import Question from "metabase-lib/lib/Question";
+import type { Card as CardObject, VisualizationSettings } from "metabase/meta/types/Card";
+import type { HoverObject, ClickObject, Series, OnChangeCardAndRun } from "metabase/meta/types/Visualization";
+import Metadata from "metabase-lib/lib/metadata/Metadata";
 
 type Props = {
     series: Series,
@@ -63,7 +62,7 @@ type Props = {
 
     // for click actions
     metadata: Metadata,
-    onChangeCardAndRun: any => void,
+    onChangeCardAndRun: OnChangeCardAndRun,
 
     // used for showing content in place of visualization, e.x. dashcard filter mapping
     replacementContent: Element<any>,
@@ -239,11 +238,11 @@ export default class Visualization extends Component {
     };
 
     // Add the underlying card of current series to onChangeCardAndRun if available
-    handleOnChangeCardAndRun = ({ nextCard, seriesIndex }) => {
+    handleOnChangeCardAndRun = ({ nextCard, seriesIndex }: { nextCard: CardObject, seriesIndex: number }) => {
         const { series, clicked } = this.state;
 
         const index = seriesIndex || (clicked && clicked.seriesIndex) || 0;
-        const previousCard = series && series[index] && series[index].card;
+        const previousCard: ?CardObject = series && series[index] && series[index].card;
 
         this.props.onChangeCardAndRun({ nextCard, previousCard });
     }
@@ -256,6 +255,10 @@ export default class Visualization extends Component {
         this.setState({ error })
     }
 
+    hideActions = () => {
+        this.setState({ clicked: null })
+    }
+
     render() {
         const { actionButtons, className, showTitle, isDashboard, width, height, errorIcon, isSlow, expectedDuration, replacementContent } = this.props;
         const { series, CardVisualization } = this.state;
@@ -410,6 +413,7 @@ export default class Visualization extends Component {
                         visualizationIsClickable={this.visualizationIsClickable}
                         onRenderError={this.onRenderError}
                         onRender={this.onRender}
+                        onActionDismissal={this.hideActions}
                         gridSize={gridSize}
                         onChangeCardAndRun={this.props.onChangeCardAndRun ? this.handleOnChangeCardAndRun : null}
                     />
@@ -423,7 +427,7 @@ export default class Visualization extends Component {
                         clicked={clicked}
                         clickActions={clickActions}
                         onChangeCardAndRun={this.handleOnChangeCardAndRun}
-                        onClose={() => this.setState({ clicked: null })}
+                        onClose={this.hideActions}
                     />
                 }
             </div>
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
index 4c9df5db752a42dd18ccd311e3c0ad5f014318c7..da61ad4455eab56327c50355187b36ae22a67fd5 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingOrderedFields.jsx
@@ -56,7 +56,10 @@ export default class ChartSettingOrderedFields extends Component {
                         outline="list"
                     >
                         <div className={cx("flex align-center p1", { "text-grey-2": !item.enabled })} >
-                            <CheckBox checked={item.enabled} className={cx("text-brand", { "text-grey-2": !item.enabled })} onChange={(e) => this.setEnabled(i, e.target.checked)} invertChecked />
+                            <CheckBox
+                                checked={item.enabled}
+                                onChange={e => this.setEnabled(i, e.target.checked)}
+                            />
                             <span className="ml1 h4">{columnNames[item.name]}</span>
                             <Icon className="flex-align-right text-grey-2 mr1 cursor-pointer" name="grabber" width={14} height={14}/>
                         </div>
diff --git a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
index 93a4b857034a28a8d1ef5b47dcd69311f59a8520..5e338c432319e18697ed319ccbca2d7fdeb893e5 100644
--- a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
+++ b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
@@ -30,6 +30,7 @@ import {
 
 import { determineSeriesIndexFromElement } from "./tooltip";
 
+import { clipPathReference } from "metabase/lib/dom";
 import { formatValue, formatNumber } from "metabase/lib/formatting";
 import { parseTimestamp } from "metabase/lib/time";
 import { isStructured } from "metabase/meta/Card";
@@ -39,7 +40,7 @@ import { updateDateTimeFilter, updateNumericFilter } from "metabase/qb/lib/actio
 
 import { initBrush } from "./graph/brush";
 
-import type { SingleSeries, ClickObject } from "metabase/meta/types/Visualization"
+import type { VisualizationProps, SingleSeries, ClickObject } from "metabase/meta/types/Visualization"
 
 const MIN_PIXELS_PER_TICK = { x: 100, y: 32 };
 const BAR_PADDING_RATIO = 0.2;
@@ -588,7 +589,7 @@ function lineAndBarOnRender(chart, settings, onGoalHover, isSplitAxis, isStacked
                 .enter().append("svg:path")
                     .filter((d) => d != undefined)
                     .attr("d", (d) => "M" + d.join("L") + "Z")
-                    .attr("clip-path", (d,i) => "url(#clip-"+i+")")
+                    .attr("clip-path", (d,i) => clipPathReference("clip-" + i))
                     .on("mousemove", ({ point }) => {
                         let e = point[2];
                         dispatchUIEvent(e, "mousemove");
@@ -860,8 +861,13 @@ function forceSortedGroupsOfGroups(groupsOfGroups: CrossfilterGroup[][], indexMa
     }
 }
 
+type LineAreaBarProps = VisualizationProps & {
+    chartType: "line" | "area" | "bar" | "scatter",
+    isScalarSeries: boolean,
+    maxSeries: number
+}
 
-export default function lineAreaBar(element, {
+export default function lineAreaBar(element: Element, {
     series,
     onHoverChange,
     onVisualizationClick,
@@ -871,7 +877,7 @@ export default function lineAreaBar(element, {
     settings,
     maxSeries,
     onChangeCardAndRun
-}) {
+}: LineAreaBarProps) {
     const colors = settings["graph.colors"];
 
     // force histogram to be ordinal axis with zero-filled missing points
@@ -1038,6 +1044,7 @@ export default function lineAreaBar(element, {
                 }
             }
 
+            // $FlowFixMe
             series = series.map(s => updateIn(s, ["data", "cols", 1], (col) => ({
                 ...col,
                 display_name: "% " + getFriendlyName(col)
@@ -1104,9 +1111,9 @@ export default function lineAreaBar(element, {
             const card = series[0].card;
             const [start, end] = range;
             if (isDimensionTimeseries) {
-                onChangeCardAndRun({ nextCard: updateDateTimeFilter(card, column, start, end) });
+                onChangeCardAndRun({ nextCard: updateDateTimeFilter(card, column, start, end), previousCard: card });
             } else {
-                onChangeCardAndRun({ nextCard: updateNumericFilter(card, column, start, end) });
+                onChangeCardAndRun({ nextCard: updateNumericFilter(card, column, start, end), previousCard: card });
             }
         }
     }
diff --git a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
index 9608011fb23640ceefe4dbb0494bb6eaeaab9448..2ca4b525eb0b9d160c8dd037adbceaa8b51e3519 100644
--- a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx
@@ -193,29 +193,31 @@ export default class Scalar extends Component {
                         {compactScalarValue}
                     </span>
                 </Ellipsified>
-                <div className={styles.Title + " flex align-center relative"}>
-                    <Ellipsified tooltip={card.name}>
-                        <span
-                            onClick={onChangeCardAndRun && (() => onChangeCardAndRun({ nextCard: card }))}
-                            className={cx("fullscreen-normal-text fullscreen-night-text", {
-                                "cursor-pointer": !!onChangeCardAndRun
-                            })}
-                        >
-                            {settings["card.title"]}
-                        </span>
-
-                    </Ellipsified>
-                    { description &&
-                        <div
-                            className="absolute top bottom hover-child flex align-center justify-center"
-                            style={{ right: -20, top: 2 }}
-                        >
-                          <Tooltip tooltip={description} maxWidth={'22em'}>
-                              <Icon name='infooutlined' />
-                          </Tooltip>
-                      </div>
-                    }
-                </div>
+                { this.props.isDashboard  && (
+                    <div className={styles.Title + " flex align-center relative"}>
+                        <Ellipsified tooltip={card.name}>
+                            <span
+                                onClick={onChangeCardAndRun && (() => onChangeCardAndRun({ nextCard: card }))}
+                                className={cx("fullscreen-normal-text fullscreen-night-text", {
+                                    "cursor-pointer": !!onChangeCardAndRun
+                                })}
+                            >
+                                <span className="Scalar-title">{settings["card.title"]}</span>
+                            </span>
+
+                        </Ellipsified>
+                        { description &&
+                            <div
+                                className="absolute top bottom hover-child flex align-center justify-center"
+                                style={{ right: -20, top: 2 }}
+                            >
+                              <Tooltip tooltip={description} maxWidth={'22em'}>
+                                  <Icon name='infooutlined' />
+                              </Tooltip>
+                          </div>
+                        }
+                    </div>
+                )}
             </div>
         );
     }
diff --git a/frontend/test/e2e/admin/datamodel.spec.js b/frontend/test/e2e/admin/datamodel.spec.js
index 10e9a67e6d43e50bfaaa5283fe42141da0899eb1..8908d894e583b9c8a83dc2c6b2541f6ea8524506 100644
--- a/frontend/test/e2e/admin/datamodel.spec.js
+++ b/frontend/test/e2e/admin/datamodel.spec.js
@@ -15,8 +15,9 @@ describeE2E("admin/datamodel", () => {
         ensureLoggedIn(server, driver, "bob@metabase.com", "12341234")
     );
 
+    // TODO Atte Keinänen 6/22/17: Data model specs are easy to convert to Enzyme, disabled until conversion has been done
     describe("data model editor", () => {
-        it("should allow admin to edit data model", async () => {
+        xit("should allow admin to edit data model", async () => {
             await driver.get(`${server.host}/admin/datamodel/database`);
 
             // hide orders table
@@ -45,7 +46,7 @@ describeE2E("admin/datamodel", () => {
             //TODO: verify tables and fields are hidden in query builder
         });
 
-        it("should allow admin to create segments and metrics", async () => {
+        xit("should allow admin to create segments and metrics", async () => {
             await driver.get(`${server.host}/admin/datamodel/database/1/table/2`);
 
             // add a segment
diff --git a/frontend/test/e2e/admin/settings.spec.js b/frontend/test/e2e/admin/settings.spec.js
index 8960e4f39f5d578856abec63158b5b747e7341f5..84226d9ed7ce3a2309e076a274632eccd74e2ecb 100644
--- a/frontend/test/e2e/admin/settings.spec.js
+++ b/frontend/test/e2e/admin/settings.spec.js
@@ -11,8 +11,9 @@ describeE2E("admin/settings", () => {
         ensureLoggedIn(server, driver, "bob@metabase.com", "12341234")
     );
 
+    // TODO Atte Keinänen 6/22/17: Disabled because we already have converted this to Jest&Enzyme in other branch
     describe("admin settings", () => {
-        it("should persist a setting", async () => {
+        xit("should persist a setting", async () => {
             // pick a random site name to try updating it to
             const siteName = "Metabase" + Math.random();
 
diff --git a/frontend/test/e2e/dashboard/dashboard.spec.js b/frontend/test/e2e/dashboard/dashboard.spec.js
index 7731cbcc500de8c617eee51e406313043e4da739..484e75e29aefb2ef0a5f61708a302137c64edfce 100644
--- a/frontend/test/e2e/dashboard/dashboard.spec.js
+++ b/frontend/test/e2e/dashboard/dashboard.spec.js
@@ -17,6 +17,7 @@ describeE2E("dashboards/dashboards", () => {
     });
 
     describe("dashboards list", () => {
+        // TODO Atte Keinänen 6/22/17: Failing test, disabled until converted to use Jest and Enzyme
         xit("should let you create new dashboards, see them, filter them and enter them", async () => {
             // Delegate dashboard creation to dashboard list test code
             await createDashboardInEmptyState();
diff --git a/frontend/test/e2e/dashboards/dashboards.spec.js b/frontend/test/e2e/dashboards/dashboards.spec.js
index e8d18e433cfaa43af3558349cdd998f6dce0ee06..58d26e4055f012c928ae9436f3182da1902bc9a1 100644
--- a/frontend/test/e2e/dashboards/dashboards.spec.js
+++ b/frontend/test/e2e/dashboards/dashboards.spec.js
@@ -17,6 +17,7 @@ describeE2E("dashboards/dashboards", () => {
             await ensureLoggedIn(server, driver, "bob@metabase.com", "12341234");
         });
 
+        // TODO Atte Keinänen 6/22/17: Failing test, disabled until converted to use Jest and Enzyme
         xit("should let you create new dashboards, see them, filter them and enter them", async () => {
             await d.get("/dashboards");
             await d.screenshot("screenshots/dashboards.png");
diff --git a/frontend/test/e2e/parameters/questions.spec.js b/frontend/test/e2e/parameters/questions.spec.js
index 969ff8f1625a2335e33a72f2af74ee3a8184893a..1ec91bcc28850e06a3e1d74e037925104ff6bd4a 100644
--- a/frontend/test/e2e/parameters/questions.spec.js
+++ b/frontend/test/e2e/parameters/questions.spec.js
@@ -56,7 +56,9 @@ describeE2E("parameters", () => {
             // make sure it's enabled
             await d.select(":react(SettingsSetting) .flex .text-bold").waitText("Enabled");
         });
-        it("should allow users to create parameterized SQL questions", async () => {
+
+        // TODO Atte Keinänen 6/22/17: Failing test, disabled until converted to use Jest and Enzyme
+        xit("should allow users to create parameterized SQL questions", async () => {
             await d::startNativeQuestion("select count(*) from products where {{category}}")
 
             await d.sleep(500);
diff --git a/frontend/test/e2e/query_builder/query_builder.spec.js b/frontend/test/e2e/query_builder/query_builder.spec.js
index 6209e3686b24b30b13a278f7a2fbe40658121869..44d3190311aa30dc7716594629d19bb04f151707 100644
--- a/frontend/test/e2e/query_builder/query_builder.spec.js
+++ b/frontend/test/e2e/query_builder/query_builder.spec.js
@@ -17,7 +17,8 @@ describeE2E("query_builder", () => {
     });
 
     describe("tables", () => {
-        it("should allow users to create pivot tables", async () => {
+        // TODO Atte Keinänen 6/22/17: Failing test, disabled until converted to use Jest and Enzyme
+        xit("should allow users to create pivot tables", async () => {
             // load the query builder and screenshot blank
             await d.get("/question");
             await d.screenshot("screenshots/qb-initial.png");
diff --git a/frontend/test/e2e/query_builder/tutorial.spec.js b/frontend/test/e2e/query_builder/tutorial.spec.js
index 9298adaf0a18211a64e7647e82286bf14ddf5504..5c8aae8c95d29a9bd684bf413f1c60d766de4b81 100644
--- a/frontend/test/e2e/query_builder/tutorial.spec.js
+++ b/frontend/test/e2e/query_builder/tutorial.spec.js
@@ -16,7 +16,8 @@ describeE2E("tutorial", () => {
         await ensureLoggedIn(server, driver, "bob@metabase.com", "12341234");
     });
 
-    it("should guide users through query builder tutorial", async () => {
+    // TODO Atte Keinänen 6/22/17: Failing test, disabled until converted to use Jest and Enzyme
+    xit("should guide users through query builder tutorial", async () => {
         await driver.get(`${server.host}/?new`);
         await waitForUrl(driver, `${server.host}/?new`);
 
diff --git a/frontend/test/run-integrated-tests.js b/frontend/test/run-integrated-tests.js
index d55451a3471230b469c02a38b742f6e543a4aa32..251b5629c16daf7193d2776e29108d1108285667 100755
--- a/frontend/test/run-integrated-tests.js
+++ b/frontend/test/run-integrated-tests.js
@@ -7,19 +7,49 @@ import { spawn } from "child_process";
 // use require for BackendResource to run it after the mock afterAll has been set
 const BackendResource = require("./e2e/support/backend.js").BackendResource
 const server = BackendResource.get({});
+const apiHost = process.env.E2E_HOST || server.host;
+
+const login = async () => {
+    const loginFetchOptions = {
+        method: "POST",
+        headers: new Headers({
+            "Accept": "application/json",
+            "Content-Type": "application/json"
+        }),
+        body: JSON.stringify({ username: "bob@metabase.com", password: "12341234"})
+    };
+    const result = await fetch(apiHost + "/api/session", loginFetchOptions);
+
+    let resultBody = null
+    try {
+        resultBody = await result.text();
+        resultBody = JSON.parse(resultBody);
+    } catch (e) {}
+
+    if (result.status >= 200 && result.status <= 299) {
+        console.log(`Successfully created a shared login with id ${resultBody.id}`)
+        return resultBody
+    } else {
+        const error = {status: result.status, data: resultBody }
+        console.log('A shared login attempt failed with the following error:');
+        console.log(error, {depth: null});
+        throw error
+    }
+}
 
 const init = async() => {
     await BackendResource.start(server)
+    const sharedLoginSession = await login()
 
-    const userArgs = process.argv.slice(2);
     const env = {
         ...process.env,
-        "E2E_HOST": process.env.E2E_HOST || server.host
+        "E2E_HOST": apiHost,
+        "SHARED_LOGIN_SESSION_ID": sharedLoginSession.id
     }
-
+    const userArgs = process.argv.slice(2);
     const jestProcess = spawn(
         "yarn",
-        ["run", "jest", "--", "--config", "jest.integ.conf.json", ...userArgs],
+        ["run", "jest", "--", "--maxWorkers=1", "--config", "jest.integ.conf.json", ...userArgs],
         {
             env,
             stdio: "inherit"
@@ -27,21 +57,21 @@ const init = async() => {
     );
 
     return new Promise((resolve, reject) => {
-        jestProcess.on('exit', () => { resolve(); })
+        jestProcess.on('exit', resolve)
     })
 }
 
-const cleanup = async () => {
+const cleanup = async (exitCode = 0) => {
     await jasmineAfterAllCleanup();
     await BackendResource.stop(server);
-    process.exit(0);
+    process.exit(exitCode);
 }
 
 init()
     .then(cleanup)
     .catch((e) => {
         console.error(e);
-        cleanup();
+        cleanup(1);
     });
 
 process.on('SIGTERM', () => {
diff --git a/frontend/test/unit/reference/utils.spec.js b/frontend/test/unit/reference/utils.spec.js
index ed576007bccc8269dfa1b6c922972d35fe9d8f5c..c96c4beb5971b808e3b689d1328d9e4914f511ff 100644
--- a/frontend/test/unit/reference/utils.spec.js
+++ b/frontend/test/unit/reference/utils.spec.js
@@ -1,148 +1,13 @@
 import {
-    tryFetchData,
-    tryUpdateData,
-    tryUpdateFields,
-    buildBreadcrumbs,
     databaseToForeignKeys,
-    separateTablesBySchema,
     getQuestion
 } from 'metabase/reference/utils';
 
+import { separateTablesBySchema } from "metabase/reference/databases/TableList"
 import { TYPE } from "metabase/lib/types";
 
 describe("Reference utils.js", () => {
-    const getProps = ({
-        section = {
-            fetch: {test1: [], test2: [2], test3: [3,4]}
-        },
-        entity = { foo: 'foo', bar: 'bar' },
-        entities = { foo: {foo: 'foo', bar: 'bar'}, bar: {foo: 'bar', bar: 'foo'} },
-        test1 = jasmine.createSpy('test1'),
-        test2 = jasmine.createSpy('test2'),
-        test3 = jasmine.createSpy('test3'),
-        updateField = jasmine.createSpy('updateField'),
-        clearError = jasmine.createSpy('clearError'),
-        resetForm = jasmine.createSpy('resetForm'),
-        endEditing = jasmine.createSpy('endEditing'),
-        startLoading = jasmine.createSpy('startLoading'),
-        setError = jasmine.createSpy('setError'),
-        endLoading = jasmine.createSpy('endLoading')
-    } = {}) => ({
-        section,
-        entity,
-        entities,
-        test1,
-        test2,
-        test3,
-        updateField,
-        clearError,
-        resetForm,
-        endEditing,
-        startLoading,
-        setError,
-        endLoading
-    });
-
-    describe("tryFetchData()", () => {
-        it("should call all fetch functions in section with correct arguments", async (done) => {
-            const props = getProps();
-            await tryFetchData(props);
-
-            expect(props.test1).toHaveBeenCalledWith();
-            expect(props.test2).toHaveBeenCalledWith(2);
-            expect(props.test3).toHaveBeenCalledWith(3, 4);
-            expect(props.clearError.calls.count()).toEqual(1);
-            expect(props.startLoading.calls.count()).toEqual(1);
-            expect(props.setError.calls.count()).toEqual(0);
-            expect(props.endLoading.calls.count()).toEqual(1);
-            done();
-        });
-
-        xit("should set error when error occurs", async () => {
-            const props = getProps(() => Promise.reject('test'));
-            tryFetchData(props).catch(error => console.error(error))
-
-            expect(props.test1).toHaveBeenCalledWith();
-            expect(props.test2).toHaveBeenCalledWith(2);
-            expect(props.test3).toHaveBeenCalledWith(3, 4);
-            expect(props.clearError.calls.count()).toEqual(1);
-            expect(props.startLoading.calls.count()).toEqual(1);
-            expect(props.setError.calls.count()).toEqual(0);
-            expect(props.endLoading.calls.count()).toEqual(1);
-        });
-    });
-
-    describe("tryUpdateData()", () => {
-        it("should call update function with merged entity", async (done) => {
-            const props = getProps({
-                section: {
-                    update: 'test1'
-                },
-                entity: { foo: 'foo', bar: 'bar' }
-            });
-            const fields = {bar: 'bar2'};
-
-            await tryUpdateData(fields, props);
-
-            expect(props.test1.calls.argsFor(0)[0]).toEqual({foo: 'foo', bar: 'bar2'});
-            expect(props.endEditing.calls.count()).toEqual(1);
-            expect(props.resetForm.calls.count()).toEqual(1);
-            expect(props.startLoading.calls.count()).toEqual(1);
-            expect(props.setError.calls.count()).toEqual(0);
-            expect(props.endLoading.calls.count()).toEqual(1);
-            done();
-        });
-
-        it("should ignore untouched fields when merging changed fields", async (done) => {
-            const props = getProps({
-                section: {
-                    update: 'test1'
-                },
-                entity: { foo: 'foo', bar: 'bar' }
-            });
-            const fields = {foo: '', bar: undefined, boo: 'boo'};
-
-            await tryUpdateData(fields, props);
-
-            expect(props.test1.calls.argsFor(0)[0]).toEqual({foo: '', bar: 'bar', boo: 'boo'});
-            expect(props.endEditing.calls.count()).toEqual(1);
-            expect(props.resetForm.calls.count()).toEqual(1);
-            expect(props.startLoading.calls.count()).toEqual(1);
-            expect(props.setError.calls.count()).toEqual(0);
-            expect(props.endLoading.calls.count()).toEqual(1);
-            done();
-        });
-    });
-
-    describe("tryUpdateFields()", () => {
-        it("should call update function with all updated fields", async (done) => {
-            const props = getProps();
-            const formFields = {
-                foo: {foo: undefined, bar: 'bar2'},
-                bar: {foo: '', bar: 'bar2'}
-            };
-
-            await tryUpdateFields(formFields, props);
-
-            expect(props.updateField.calls.argsFor(0)[0]).toEqual({foo: 'foo', bar: 'bar2'});
-            expect(props.updateField.calls.argsFor(1)[0]).toEqual({foo: '', bar: 'bar2'});
-            done();
-        });
-
-        it("should not call update function for items where all fields are untouched", async (done) => {
-            const props = getProps();
-            const formFields = {
-                foo: {foo: undefined, bar: undefined},
-                bar: {foo: undefined, bar: ''}
-            };
-
-            await tryUpdateFields(formFields, props);
 
-            expect(props.updateField.calls.argsFor(0)[0]).toEqual({foo: 'bar', bar: ''});
-            expect(props.updateField.calls.count()).toEqual(1);
-            done();
-        });
-    });
 
     describe("databaseToForeignKeys()", () => {
         it("should build foreignKey viewmodels from database", () => {
@@ -198,62 +63,7 @@ describe("Reference utils.js", () => {
         });
     });
 
-    describe("buildBreadcrumbs()", () => {
-        const section1 = {
-            id: 1,
-            breadcrumb: 'section1'
-        };
-
-        const section2 = {
-            id: 2,
-            breadcrumb: 'section2',
-            parent: section1
-        };
-
-        const section3 = {
-            id: 3,
-            breadcrumb: 'section3',
-            parent: section2
-        };
-
-        const section4 = {
-            id: 4,
-            breadcrumb: 'section4',
-            parent: section3
-        };
-
-        const section5 = {
-            id: 5,
-            breadcrumb: 'section5',
-            parent: section4
-        };
-
-        it("should build correct breadcrumbs from parent section", () => {
-            const breadcrumbs = buildBreadcrumbs(section1);
-            expect(breadcrumbs).toEqual([
-                [ 'section1' ]
-            ]);
-        });
-
-        it("should build correct breadcrumbs from child section", () => {
-            const breadcrumbs = buildBreadcrumbs(section3);
-            expect(breadcrumbs).toEqual([
-                [ 'section1', 1 ],
-                [ 'section2', 2 ],
-                [ 'section3' ]
-            ]);
-        });
-
-        it("should keep at most 3 highest level breadcrumbs", () => {
-            const breadcrumbs = buildBreadcrumbs(section5);
-            expect(breadcrumbs).toEqual([
-                [ 'section3', 3 ],
-                [ 'section4', 4 ],
-                [ 'section5' ]
-            ]);
-        });
-    });
-
+    
     describe("tablesToSchemaSeparatedTables()", () => {
         it("should add schema separator to appropriate locations", () => {
             const tables = {
@@ -265,14 +75,11 @@ describe("Reference utils.js", () => {
                 6: { id: 6, name: 'table6', schema: 'bar' }
             };
 
-            const section = {};
-
             const createSchemaSeparator = (table) => table.schema;
             const createListItem = (table) => table;
 
             const schemaSeparatedTables = separateTablesBySchema(
                 tables,
-                section,
                 createSchemaSeparator,
                 createListItem
             );
diff --git a/frontend/test/unit/visualizations/components/Visualization.spec.js b/frontend/test/unit/visualizations/components/Visualization.spec.js
index 459d760ce80d15a2497a5af140c2ed8fd9a5ec07..077a7b80fca0da4de530b5dbf8cbd0d31bfed248 100644
--- a/frontend/test/unit/visualizations/components/Visualization.spec.js
+++ b/frontend/test/unit/visualizations/components/Visualization.spec.js
@@ -1,6 +1,6 @@
 
 import React from "react";
-import { renderIntoDocument, scryRenderedComponentsWithType as scryWithType } from "react-dom/test-utils";
+import { renderIntoDocument, scryRenderedDOMComponentsWithClass, scryRenderedComponentsWithType as scryWithType } from "react-dom/test-utils";
 
 import Visualization from "metabase/visualizations/components/Visualization.jsx";
 
@@ -14,7 +14,7 @@ describe("Visualization", () => {
         describe("scalar card", () => {
             it("should not render title", () => {
                 let viz = renderVisualization({ series: [ScalarCard("Foo")] });
-                expect(getTitles(viz)).toEqual([]);
+                expect(getScalarTitles(viz)).toEqual([]);
             });
         });
 
@@ -38,9 +38,10 @@ describe("Visualization", () => {
 
     describe("in dashboard", () => {
         describe("scalar card", () => {
-            it("should not render title", () => {
-                let viz = renderVisualization({ series: [ScalarCard("Foo")], showTitle: true });
+            it("should render a scalar title, not a legend title", () => {
+                let viz = renderVisualization({ series: [ScalarCard("Foo")], showTitle: true, isDashboard: true });
                 expect(getTitles(viz)).toEqual([]);
+                expect(getScalarTitles(viz).length).toEqual(1);
             });
             it("should render title when loading", () => {
                 let viz = renderVisualization({ series: [ScalarCard("Foo", { data: null })], showTitle: true });
@@ -110,6 +111,10 @@ function renderVisualization(props) {
     return renderIntoDocument(<Visualization className="spread" {...props} />);
 }
 
+function getScalarTitles (scalarComponent) {
+    return scryRenderedDOMComponentsWithClass(scalarComponent, 'Scalar-title')
+}
+
 function getTitles(viz) {
     return scryWithType(viz, LegendHeader).map(header =>
         scryWithType(header, LegendItem).map(item =>
diff --git a/package.json b/package.json
index ee8bf91d43120f24a333cc27f08605f30f6488e2..eb8ac86c86cc2125611e8df0f8935e500af006eb 100644
--- a/package.json
+++ b/package.json
@@ -151,11 +151,11 @@
     "lint-eslint": "eslint --ext .js --ext .jsx --max-warnings 0 frontend/src frontend/test",
     "lint-prettier": "prettier --tab-width 4 -l 'frontend/src/metabase/{qb,new_question}/**/*.js*' 'frontend/src/metabase-lib/**/*.js' || (echo '\nThese files are not formatted correctly. Did you forget to run \"yarn run prettier\"?' && false)",
     "flow": "flow check",
-    "test": "yarn run test-jest && yarn run test-integrated && yarn run test-karma",
+    "test": "yarn run test-jest && yarn run test-karma",
     "test-karma": "karma start frontend/test/karma.conf.js --single-run",
     "test-karma-watch": "karma start frontend/test/karma.conf.js --auto-watch --reporters nyan",
-    "test-jest": "jest --config jest.unit.conf.json",
-    "test-jest-watch": "jest --config jest.unit.conf.json --watch",
+    "test-jest": "jest --maxWorkers=10 --config jest.unit.conf.json",
+    "test-jest-watch": "jest --maxWorkers=10 --config jest.unit.conf.json --watch",
     "test-integrated": "babel-node ./frontend/test/run-integrated-tests.js",
     "test-integrated-watch": "babel-node ./frontend/test/run-integrated-tests.js --watch",
     "test-e2e": "JASMINE_CONFIG_PATH=./frontend/test/e2e/support/jasmine.json jasmine",
@@ -180,4 +180,4 @@
       "git add"
     ]
   }
-}
+}
\ No newline at end of file
diff --git a/project.clj b/project.clj
index db982ea4083b96cf23faf6cec520072d08129564..504c2d9d5979520b628a92dab9694b26c470faf4 100644
--- a/project.clj
+++ b/project.clj
@@ -69,6 +69,7 @@
                  [net.sf.cssbox/cssbox "4.12"                         ; HTML / CSS rendering
                   :exclusions [org.slf4j/slf4j-api]]
                  [net.sourceforge.jtds/jtds "1.3.1"]                  ; Open Source SQL Server driver
+                 [org.clojars.pntblnk/clj-ldap "0.0.12"]              ; LDAP client
                  [org.liquibase/liquibase-core "3.5.3"]               ; migration management (Java lib)
                  [org.slf4j/slf4j-log4j12 "1.7.25"]                   ; abstraction for logging frameworks -- allows end user to plug in desired logging framework at deployment time
                  [org.yaml/snakeyaml "1.18"]                          ; YAML parser (required by liquibase)
diff --git a/resources/frontend_client/init.html b/resources/frontend_client/init.html
index 09137b50c19cd83b09c4a5b17b590fa1d9bb3ffa..5526fb2fd2af1166a617b2648f24effef51c3791 100644
--- a/resources/frontend_client/init.html
+++ b/resources/frontend_client/init.html
@@ -3,10 +3,30 @@
   <head>
     <meta charset="utf-8">
     <title>Metabase</title>
+
     <style media="screen">
       * {
         padding: 0;
         margin: 0;
+        font-family: Lato, 'Helvetica Neue', Helvetica, sans-serif;
+      }
+      progress[value] {
+        -webkit-appearance: none;
+        appearance: none;
+        width: 100%;
+        height: 4px;
+      }
+      progress[value]::-webkit-progress-bar {
+        background-color: #DBE9FA;
+        border-radius: 8px;
+      }
+      progress[value]::-webkit-progress-value {
+        background-color: #4A90E2;
+        border-radius: 8px;
+      }
+      #logo {
+        padding: 25px 0 20px 0;
+        margin-bottom: auto;
       }
       #container {
         position: absolute;
@@ -20,42 +40,133 @@
       #progress {
         margin-top: 75px;
       }
+      #heading {
+        font-size: 21px;
+        color: #616D75;
+        letter-spacing: 0;
+        line-height: 30px;
+        margin-top: 50px;
+        text-align: center;
+      }
       #status {
         margin-top: 15px;
         text-align: center;
-        font-family: Lato, 'Helvetica Neue', Helvetica, sans-serif;
-        font-size: 16px;
-        color: #509EE3;
+        font-size: 14px;
+        color: #93A1AB;
       }
-      progress[value] {
-        -webkit-appearance: none;
-        appearance: none;
-        width: 200px;
-        height: 5px;
+      #footer {
+        margin-top: auto;
+        text-align: center;
+        width: 100%;
+        padding-bottom: 20px;
       }
-      progress[value]::-webkit-progress-bar {
-        background-color: #DBE9FA;
-        border-radius: 8px;
+      #feature-image {
+        -webkit-transition: opacity 300ms cubic-bezier(.165,.84,.44,1);
+                transition: opacity 300ms cubic-bezier(.165,.84,.44,1);
       }
-      progress[value]::-webkit-progress-value {
-        background-color: #4A90E2;
-        border-radius: 8px;
+      .transparent {
+        opacity: 0;
+      }
+      .opaque {
+        opacity: 1;
+      }
+      .shadow {
+        box-shadow: 0 5px 25px 0 #BCC5CA;
+      }
+
+      .column-heading-img {
+        background-size: cover;
+        width: 504px;
+        height: 311px;
+        background-image:
+        url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfgAAAE3CAYAAABGllMeAAAAAXNSR0IArs4c6QAAQABJREFUeAHsvXmY7Fl533e6q7qrel9v33sHxDIzIHYxMwwMgkFmEVIQax49sYIUGRuwkBLnkZ3FSZzkjzyOE0d+iB7iICKwpCcSmFiSwyZkISASI4tBwLALsJkZhmVmbu97VXdVdef7eU+f7l/Xrd6ru6q733NvdVX9zvae71m+7/ue8/tVR/DgCDgCx0ZgU+HYmT2jI+AIOAKniEDnKZbtRTsCjoAj4Ag4Ao5AixBwgm8R8F6tI+AIOAKOgCNwmgh0uIvxNOH1sh0BR8ARcAQcgdYg4BZ8a3D3Wh0BR8ARcAQcgVNFIL+xsXGqFXjhjsBFRqCz03Xki9y/3jZH4DwjkC+VSudZ/lOVnQPSHR0dp1rHeSrc8bi5t/r6+m6+6FccAUfAEWgDBPJra2ttIEb7iQCZJUJzkg+GheNx8zj99re/ffNFv+IIOAKOQBsg0LGwsOD38TboCLYusoR22Une8WgwSHRpcHCwcYSuLi8vh/7+/j3jPcIRaAUCPi5bgXpr6sz39PS0puY2r7VWqwVIjT1WXped4B2Pow/YlZUVJ/ijw+Y5ThkBH5enDHAbFZ/v6upqI3HaQxQsdwKkDrnncjl7bw/pzl4Kx+PsMfcaHQFHwBE4KQJ+BPikCHp+R8ARcAQcAUegDRFwgm/DTnGRHAFHwBFwBByBkyLgBH9SBD2/I+AIOAKOgCPQhgg4wbdhp7hIjoAj4Ag4Ao7ASRFwgj8pgp7fEXAEHAFHwBFoQwSc4NuwU1wkR8ARcAQcAUfgpAg4wZ8UQc/vCDgCjoAj4Ai0IQJO8G3YKS6SI+AIOAKOgCNwUgSc4E+KoOd3BBwBR8ARcATaEAEn+DbsFBfJEXAEHAFHwBE4KQJO8CdF0PM7Ao6AI+AIOAJtiIATfBt2iovkCDgCjoAj4AicFAEn+JMi6PkdAUfAEXAEHIE2RMAJvg07xUVyBBwBR8ARcAROioAT/EkR9PyOgCPgCDgCjkAbIpBvQ5nOlUj8dLx+Nj5sbGzskpvfkue1V+A31rO/s75f2r3KaMfrx8XjoLYkfDs6Og3vg9J7vCPgCDgClx0BJ/gTj4DNUKnU9FoPtVotkraIPZfLha58PuT1qid7iL1SqehVDagAXd1d2+lOLE7LC9jBoyo8BIhpQPvhUS9yvfIDua+vg+9m6OrKGVaU58ERcAQcAUdgbwSc4PfG5lAxkPrS8lKYnZkNK6urRvCdnZ0ioq7Q19sbBocGQ29vj8i+a9uir1arYXFxKSwsLIaOzo4wMjIcBgcGTCk4VKVtnMjwWBIes7NhWXhA8Nt49PWFocEB4dEnfBoPPch8bW3NCL1TJN4tHCH3+flFu96nMoaHB0OxWNzGs43hOJRoDz70sI2B0ZGRm9KXSuXw6GOPWXufcMv1m+KPe+FPPvEp84S8+idfedwiPJ8j4Ai0OQKNV9k2F7qdxKtWa0bUD3/3e2FhcTFjtYdQ7OkJ165OhOvXroaBLQJP1vvi0nKYnJoSqXeGQqE79Iu4sEp3XNHRvZ9c9/VWbbreTlggC8rL/MJ8ePjh74XFpYWQF5HncvJi6F9fX2+4fv2a8Lgm0u814qddhNQePBtz8/OGKSQ+NDho3pHZubmwWiqZlwSFqbu7eys/uTe386dysniRAiWjXcO7f+O9oaenGP7x//Q/3iTiZ+77t+ETf/qpABE3k+Apk+AEfxPkfsERuDAIOMGfsCtrG7WwsrwSZmZmZMGXwtjYqMinK6ysrIrwl0JF1mdO5AKPQXZYuGvltVAqrSquEjpE7sTVahuhWiuH9bV1vVeVR9aryunq6g4bmxuWdl3bABBXt66hFOD+bzfioh3LwmN6ZlptBI8x82ZwbXF52eTvKfaEXD4XNjc2zTrXaQTzcGDVg+GNG1NhcnJSHpC+ULumbQxteWDVbwi7DbUfJYCyI266Jqu/E0VJpI/Fj2m6JhzJU1McilO3ysarwmcwS4rACbu/Kdlf8II7wxe+8ED4vF5363M2fP4LX7Svd9+9+3o2jX92BBwBR6ARAk7wjVA5yjUj55oRNORyZXwsjI6OhOnp6fD9HzwqV/W8yLhghAOxQPCQFOQDsUHSegurcmcviwDn5bbHJQ25D8p67RfJVaoVWcNLpjRA8FjCuHOJLxRw/bePdYp8kDwvCBWFBznxVtx4/IZtTdAWCLmkNi/Jk4EC0yNvR6+2NMrlcrghcn9caXt1rSZlp9vwW9ve5oDc5xcWpAzJla9zDGCKcjA8NGR1Qfh4UxbBUsoAGGP19/f321YIn9tpD/+FexD817/+12Fubj4859nPsv7GXf+Nb/x1wJtxyy236PozbaTynXS3XL++Hf9s5am3+FEg5pT2tlufetMIz5bN2CI/XgXCDx99zN75jiJCPc95zrPsmv9xBByB9kXACb5JfcOB+bysUtzKkBWkjuVelrXOfvTC/IIs85pZmLjuYXUsUSxJiH1JpDc1NR0WlrQvr1jKgOiXiytheWVZZczpu9IrrlAshFV5CJ7whCBlYljk1j4Eb3BKYUF5wcKG8AmdUkKS5Rz31OdFNgsifO2tq515WdacQ+BMAlhB/BxCxL0PrpB4rxQbXmtSAiaF1crKipW5IU9AJ2cZhMX42HioSSGantEZAOEalQ3hLut+YmI8dD7xiaY8tRPB33bbrSLs6+HBBx8y8k578RAyAasekv2N97xXnouyXeMPJPu3/9YvhM9//gFz46NYMk4I7LETRxrykDcRtSXI/GlUNmX98jveZorFhz/8Mds2QbGiLBQEJ/gMgP7REWhTBJzgm9QxkEylApnPiWBqWhAXzDIt9hSM6LAoIZsrV8bMmoTkIDEIEHIry6W8IKsUSxSLt0eKAoTItSl5A3Bx44LmWnlei7zy9Q30aW+/zyzUdnI5o4VgRa/K3f74jRtmTZdFDBD1kKxsLHPiaTfEC2nMS8Fh/x4r21zq8mAUpcj09vWYUsOhxJLKw+oHa3DmzoXhYSk4Khcyn5qakVVfMVe+eQmEFV4EvAIlvfr7+6xP2gqrrfH3sntfEj74//xBYM/9ja9/rRH912WtcwATMmWfHpx+RaSLQgCBs4+elACKwbKGlOeEzbvf8z6LJy9lQuJsBVD2o48+avFp6EPglP2G1/+MlIm7VOYXw4c/8keS5w+tPtKBN56El93741Kkbj4MmMryd0fAEWgfBJzgm9QXWJjsu9+YnNJhMJ2mFwlB1IMiLCxULPlCIReuTkyE8SvjtmBC3uwVQ/6QIcR1TQfQnviEW8zKXJaFuri4HJalCOBqhvQhLOrCmmd/H6JsuyDlg/Yj37wUHbtbQEJOXL1iCs6gTtJDumtrBbVrnS1zaw8Ez9YEJI93A2XgCXJF017aSZvxgqAobW659SeEZz6vrY9HdTeDlIQF1YPSVJb73u5eEF4oEXnl5wR+sVBsK/d86jvIE+8PLnBIGKucAOHiguekPVY177zAjJAsdj5Dvlj/yQOQLHYUBQLl4mZHQUghlY1VjpJB4B3FAY9CNvzc3/zZbbd99rp/dgQcgfZEwAm+Sf3CeotliAXO7XHsJ0PwvVpQcRdDdLjtsTiHBofkYi/JGs/Jal034sKi50Ad++sQIEQOyaU9bcpmLxkSgARx4fO5nfbft6GUrHgakG9AZB0VEh02lLsd6xyCXuYQogh5VZ4JOwwn4ibQbhQdSBkywuomPdjxDg76b+Wg8AwO9Nt+PunVA4YX5eBFWVmWtb+Vh9sVh/RKnhHStFOgrVjb6bBdOlwH2WJxExgL3/nODulCylm3/F7teTSzh16fBmu/UQCn+oCMHhwBR+D8IOAE36S+6pSbGDLiljgscKxQCA7LE1d8riNnpGS3jSltZy4SVVQKeNBNly3g3AqGJQrRlWT1s6hzKx35iyIxbqeDPHt0UIxT5ri9jfGa1I5mFcMhOjDAI0EbOVWPt2JG5xEW8/E+eXAhjl169t4JfGc/nXZjsdthxMxePiQeg9JJWbCX8CAPxN+pP6TAG0DeqvbjBwYisRelJCBXuwbIHIL/8EeiyxyXOqTKgToCWxu/8stvv0l83PX7Bdz8HMJrFFLZeFSyAcvegyPgCJxvBJzgT9p/YhMjaVnX7JFjUV2RCx4LGyKGsLFac3IjQ9TQDwTEXyx4DE8UAwh+SQfsZmTtb3ByvLtgkkFIeAMgq3WR1vr6mkhKdW0WtsiQMtsoSBhIlqf4oaSMilxQRiBg7iyY1j45uLBnjrsd0gUX9uNzysPtc7lafB4AaaanZw1XrHfyRfJXeuGZvnMtfs4ZJihVG7p9kVsYqYO9erZA2PIYWhsy7wB91m6BU+8ctksWN6frCZA81jquefbdb7vtVttn/yspA+ybHxRIj+LAnvrdd98RJnUbYgrZsu/7i7+0+tPpfRQMD46AI3B+EXCCP2HfQSwQ2Ij2PiEdrFbI2W5/U9ncz17UAj00HImF+9chfKz7oaEBpegIY1IKuF97aorDYqt2upwDZpRlh8hElAt6+Auubg5DmTtabuwda/aEjWhidtoLHkluthvYS+cU/abaCMnKODcFiPaABcoA9/YPCyNc+pVC1dzrpXJJCo22LkT6KExwMh4MiLsmZadHig9KVYf6gAcJceoecucsBMoTilH0ouhQnixS2yLhkJ8pHO1pyWPFc9gOqxtiTuFvv+U/0cG499rhuhCixU6aw4R4sI5b3fRAIP29qrMQ9770xeG+v/isZU9lf0iH7VJA0SCfB0fAETi/CHTIFQpTeMggACS4eCELCBwS4r1RYJ+c/XVcz1iu4+NjtveeCN7idZiONFzjABSks6Jb3zhpjyXJPjLvCws8vnZB973Lgheps4fPwTC7D17X8QZweA2igjRRKvp0yhz5TjMcBQ/c6jzJDk8Eljm3rXGuAA/EjPZ72X6gPF6JkLmdEMsdhQaFANzn9PwAng3APfDgBbmDrxG2DtiVVqXo6BkA4IA3hIOKlI3bf3Jq2m6/g/xRDHA/c+hu4sqV8IxnPN2epMc5htMON3QHwdWrV49cDYfbOKmeDstlC8gefEsKAMoLe+m429M+eUqX0kzq8OeyHqnMmCFwPzx9cNttt20Xn/JwIeXjM4f1yhp72Wtc93A+ETjuuDyfrb3cUjvBN+j/oxAaZASJQ2yQENY1runkAk7x9sMyFh9d0igQ5COQvlMkRxpO3JtlK7dzKgt5sGQjIWpPXp4CyItDeZA79Z5mOB4enI6PbUCx2WmDbmPD+9ARH4iDwkLbaQfnCTikSDQn8HkMMNY57nsLaiceAixRMOKAIT/UQ/PBkj1+HnP7Az1giO0ANFe8A2CNLNdEtrfe+hR7+E5SwKzcU/rTLgspZM4Lcs8SPNfwtIyOjp4SAl5sOyLQLuOyHbG5aDK5i/6EPQo5JSKmKIgkkTvf94qH1CPJkD7mg+Rw4UOGqZxUViRJSrw5jqvtEvZqL/JhfeN9MJfRzh8TPbUzvePBEAyGTbZtxINPCik92KHwUD/79XznccAk5RrnHLilrk/vxF2W0IjcaXuW6PnuJA8KHhyBi4WAE3wT+hOSSUTTqLhG8Ye9lsqDpM5LaNQ2ZN/reqN2kXav0CiOa2DElsY1bQ1A6Dx5DQ8KyhEn0O0+eHP37132XnW2+npWqTmsLJD7vDwaWcs9m7ee5NP3bBr/fPEQYCwdZzxdPCTat0WN1rjjSOsEfxzUPE/bIsC+P88h4HQ+bnwWMiYLVjuv86QoNVqEG11r1BkQ+37knvIkUkcZIOCy93CxEWAMHXYcXWwk2q91idiz/ZOuHUdaJ/jjoOZ52hYBJgMviJxtkPMYspM7fU7vtCf7uVH7OKjJay/LvT5PluQpm4OLHi4uAni1eHloLwRYt9LcTqTe6NpRpHaCPwpantYROGUE0gTnvf5F1Sl+LzH48R7uJjgsuadysiTP4s8dHB4uJgL0L94tD+2HQJbY+Zx9MfdT/GEld4I/LFKezhE4ZQQSeSdiT5YW7+laSoMo2c9859f1uLXwqOROXkKW5CEAzix4uHgIcEcOLw/tgUCWtLOEjhcyvZCUOOZ8Nv1BLXCCPwghj3cEzhCBROQQLMTO8wN4oh8Lcj2hNxLruOSeysqSPMqCh4uHAAQxNbXzNMOL18Lz3SL6hzuzeC6I3XUkUk93/hyF3EHBCf58jwWX/oIgkMib92S584AeDr+NjY3ZZD+rA4InVRIuSJd4MxyBliDA/Eepn5mZsUOv8Sme8VwRBM8acViid4JvSRd6pY7AzQgwcRPBY8EzySF33w+/GSu/4ghcVARQ5NOc5zwN1jyEflRyB5/zc3P1Re1Nb5cjkEEgS/C45XHTeXAEHIHLhwBznzUgbdexNhw1OMEfFTFP7wicEgLJgk8kTzVn5ZY/pSZ5sY6AI3BMBJj7aS3Irg1HKc4J/ihoeVpH4BQQYPJmQ5rM2Wv+2RFwBC4nAo3Wg/o1Yy9knOD3QsavOwItQCBN5sNO4BaI6FU6Ao7AGSJwkjXBCf4MO8qrcgT2QiBN4hTvBJ+Q8HdH4HIjkF0L6teJg5DJcyTfw24EADHdqkTMYW9J2F3KxfnmeOzdl75Hvjc2HuMIOAKtRSDPL2552I0AhJZOLrKA85CBy0zyjsfu8ZH9dhpPewNvD46AI+AIJASOuybkeVKWh90IACYWPO8QOyR/2Qne8dg9RtK3b3/72+ljw/cf/vCHDa9nLzLO0gvFslqthkqlEp785Cdnk/lnR8ARuIQIfPWrX7UfzuJnr5OxCR8dhpOUx59102jMsNA6we8g43jsYJH9dOedd2a/7vrMg2oOcx97IneUKHDm3lde/CKcB0fAEbjcCDzvec+zh93wwJv0k9eHJngeg+fhZgRYaFlwsd4vuwUPOo7HzWPkoCv8+MthCP6gcjzeEXAEHIHjIJA/r7+ZfZzGHjYPFhUBLSntwfN+WYPjcVl73tvtCDgC5xmBy8ta57nXXHZHwBFwBBwBR+AABJzgDwDIox0BR8ARcAQcgfOIgBP8eew1l9kRcAQcAUfAETgAASf4AwDyaEfAEXAEHAFH4Dwi4PfIncdec5kdgRMiwH329913n5Vy77332n22JyzSszsCjkCbIeAWfJt1iIvjCJwFAjw8g/vseX3ta187iyq9DkfAEThjBNyCP2PAvTpHoNUIfPOb3wzf+973tsV45JFHwuDgYLj99tu3r7XiA14FFA5u3R0aGmqFCHvWOT09HXiNj4/bC8x48Mj169f3zHMeIlZXVwOv+kA7z1OgDYxpnuvCEyAvSv+ctA+c4E+KoOd3BM4RAo899lj41re+dZPEWPE8V7+VhMWijBwQ/Gtf+9qbZGzlhampKcPtGc94hsn3wAMPmDhvetObWinWiesG80bjgT5A4aO95yFA8CiuKCbDw8PhovTPSbHP84Syjg6e1tYReLwLT2/b0LWa3jv0vVM/tJLbeppbtrL0bHKuZZ/0Zvm3HrlJXHq0Xv2DYrL50wNlSE/gwSoxnrJ54MzOs+Dry6fczk7JmIu7DSkv7eJzLDvG8/k0Q6qb94RJqhO509PgeI5OanM+f/MP2aRyqrRhI7aBdJQZ4/gxnKr1ly5YkyiPV8I71Xua7T1M2aktCZP6cXCYMjxNcxDAOv7iF7+4Z2HEsR/fKuv5wQcfNNmw5CGedn0Wf29vrylCvF+U8KQnPWkbb5QZrGEIE+Lc73HM7dj+i9g/x8U5Pz+/EHp6e0KhuyBSralDS2FFnbq+ti4WCqFYLIY+DeSenqKRBxxZrdZCqVS252VDrLhF0PggsXK5rPylsKZ3/YRGKBaKoVflkyY9KB+i40duSAsRFZSmWCwYgdVqG/qhjXUbWJVK1dxg5Kd8SII8yMiv4PGd63QoaSifxYF4BmZFP9qR17UetYFHhnbZs3xP49gBhBvbTt0bkqtXeKU2872k64tLS2q3cBFp5/PI3SO5+qyNifjAEGxSG/nhEci9hz4o9hhepbLat6L2CZ/NTf0ojlE9OHaH/r5+WWK9wgXnzOkqNAcNOvqHtqxIVvqcsZT6qV0UkIPacFbxSSE9rfqYF/fff7/Nj73qSGle8YpX2LzaK91pXMf9zZzFAuMzBFNP8MlNnhZw5j4BufFMkB/lJOuFQKkhjrRcT6TMdQLXiSdk4/lOechBGupIge9Yt7wTDlMWdZCOPJBpypvKbPU7uCS3PO+079Of/rQpWsib4sCEtoAHeGWVweP0z17lHQZTZKB/eGetTeE4/UN9aRzQ3jROUpnn9T3/2OM3wsTElZAb7Awlkef09ExYXFwSeTOgN400RkZGwpWxMVMExE1GPrOzc2G1tGpkksvlzdIvi/RnZmbC/MKiLezQS7dIh0EwNjZqigILO4v+7Nx8WBLhsY81OjJq6aQhKK4cUDomJ6clw1qg7omrkk9EvSalg3rn5+clq34FTwSS04/lDA4MhNGxEVMmeP73jNLwQx8smgRcj1eklAyPDEuJ6DaStIgm/YHcGajINiX8CBNXrhiJ412oagAygG5MThp2kDlkN1wbMnzBgAAhrpN2cVE4zppSgHIAZihZI5IfRWh5eTXMzc2ZskMbUQJ4Rwm7fu26lcmPCKGMtTIw8eZp940pm4Tj46Na2K5aX7ZSrnas+7d+53eF02T4B7/6n52KeIxP5uFBCxeLI/121gSExU545jOfaZZjIvwkL94FFvMUkO+nfuqnbN5xNwAyp0A7UVLq83zzm98M99xzj5FVOmRInpSXePJRJ/IkN28qN/tOnZAeHo+DyqqXg/QE3N+0tx0D+N522222ZfLoo49aW+sxAa/nPve5pgzUt/Ew/bNfeQdhynpa3+9ZHI/SP43koKzUv9lyz9vn/LyIdnBwwCxOrMzl5RUjjO5uJvq6SHh5m2C6uCYyYdGeFpFDSEwGCCiR2LQIbk35ivIIYEFiiVYrtdAlJaDLSKfDFIgZaekQNqQrD7zZmhDVkoh5amo6PHbjcZODLYKR0WH7jGyzs7PmIUi/rFNGWRDhd8qT0NdfCyvKX9Jihky0AYsfhQBPQ1EEyMDL5ZrHfNHi5pe/lkwpgcRRRvpknUPIEceK4YolSyhsWbLFQmEX2ZmlL89EVGLQ9vOhu6vbPCVgHrSNMtY5Ihxz6q/osVgX1ivCBZwJ5rrf2gKwCy36w6JJf03Tl489bt4d2js2WpVEjA0P9QjMaS7e9xd/GV76khfXR534O6QHubVjYKxA3qwlLKpYUBD8d77zncAvaRGIT8SNsgLpMJchAvInomGxZm0gP3mwMu+66y5Lw6IPEaEYEMgHyWKtUhd70bxDuuksAJhRL/mShWeZ6/7sVRZeiCQHZUFMWMa0kXrbObCXTUBm2gcm9FG6rRJMuHbLLbccuX8OKo9698KUMVHf7ygbjc4SUA5hv7JSu1DuCPQPY4txc95DJ+5diBpywbLEhTo2OioLdNxO1kKc/HQlAEEmi7LOsdIhK9zfkaQ6jaxRBrDOIZ+r167qNWGuk7Ks8sWlRVvwsdpRDhbkJYDVC1r0u+SuJuD6r8hzgDUKQRPMBb21f12Waxr3P3KO4lXQYkBdFcmH5b6uuiHX/oF+k//q1YkwIOue9uFdwCvB5+aGzVDVfjjYCEVzp3dKdojfcNU79a5JRgLyjgwNhhFNngHJ2SUC326reTDYnojbDwP9A2Fc/dCvNtj2h8iffqJ9YPuEJ1wPVydiG3FR9fb2Gd4oBq0MnN8oy8OCUrKoMWHYaCthg+2EpuPfypY2t+4f/dGnhT/78/tsnjS35PYuDVImYDESIAwWWIgxBb5D7CzGrEWQI98hcpSCRJYQKqSeyoTs2dunLMiJPNkAmVP2FXncCJAZZVJHck0TD8kfFBqVRTkE6iZQVnpPn+1Cm/9BoaIttAMswTR5HsGUthylfw4qL8GxF6b0EX2S+j31X8rX6L1RWaSjXcifXilv6rP0/Ty+59l7h5Aga1zZWOls6ULqkKuObilOhCG+XV0phUkdwMDC3pCvHpcwC3k+v2oEz7682MrKGd6aEHgF6PhVkdOiXM9Y3FNyv7MdkJQH9tOxsDnoB1HhlueAGW52CJvK4QXIjXo7OngBdzyMV9VeNG5y22/XXjuECcnh7l6UIoFCQF2UH/M1s6uEjyzqPu2lb0oG5FwTJtSZAoSH0gJJM5jM2pYgbC8wSTY3dw4RbioN6SgIWWkm/YB3g3YSTKlSnTUpRFwjDa77oaEB29NHnlYFZKf9LJRLW0oc2wuEnLYrPOyNwG23PlV92RH+9JOfDj/zmmhl7p36aDEsiFg5hwksmpDkWQXIggB588oGiBrSxprCasPC5sU1CHivkIgcxZ9XCigDBwU8foRmEDD1QUS0kTnBi3KRv91DwgH5E56sXxzCS4H20Z7j9s9e5aXyG72DIaEZ/UM5KJb0D5Z7XJ/P38FC2tEo5CERiLNDhFQUue+4tVdFjstqcDUM9OeMuDgkNjer/W8ROZY37u8pLRzsxUOqWGosUABve8Cqkc+QHQrDgqz/ZU02XhA6pMV+eTwstmkWLYfObL9d++/koTyInPQcIoPIqHdWe9DEsN+/AbnLC4DCwQEzZKFs0q2VpICgvIhkaFuylhuBcZxrlNctJWlooDPkRWAleSuoO1JzLNG2ByT3+nrRyHtpeck8IBxkBJvBQZ1hIIeVRRuL5gnB+kURWtI7ihQWOsoWecClKoJHWQB3sOEsArJw10GrAhMERY5+xWtBWzolD56d6C2KVnyz+6FV7W12va95zavDO//3fx5ecNcdNtabVT6LNH2TFse9yiXdYUhwr/xHvY7iAXlQb1apQFYWXazFZJUTj/y4hiF+LH0CaesD5VH2cZSV07DckCdhS3tOo456DE7yPeFPGcibCJ6xkbZNsuWn/jts/yT3/17lZcuu/3wa2MFTyMI73oCznAP17Wvm9zyWNXvWHGiDPFh47QWJ6DOhIiLBysaixh3Nnn2y0NGOWbyxmBkURj5WBjmVX/9xy0Li1eqKkS6n2oeGhywPXgHOAZAfMoCgsdIhbDwL5OePud5lnY+NjoQ5adjIzUlyiA95BqQYFIs9plhAsOz/zs9p76hasRP0DEAjG7WrmQGMUCCQFcJNGKY6wIPT7+PjY2ZdgwOyQYJMBix/9uutDKVli2RUe/dY8pD3spSqZbXTTsj399qiT5l4BMCeA3koODyoBA8MilWrAl4UlD/OSaCA0SbOC9S2lC0WCeLx0jCR0vhqlbztWC+HM++68/nhTz7xyfCG1/9M00QEb/aAk5XSqOCUhvezCsmVjvs0S/DUz543JM1cwWonnoWXBZ65wzjiO2lQBpjjXMfChNi5lrwWtAllgXf26/cLyd1L/kRE5D1uYNyzNiZckTEpLccts9n5wDC7hw3eyIx1C65gnjAEE76TBysfwifvUfoHi3+v8g7a+6buVH/q99TPx8El9Q/tQSbeUR7TltFxymyXPHlIG+uWPXV5grcJekBkyt42RMLeNmSCRQ0A7H9z8p4BwKE7LHJIPL0g2KoWe7iZxT1dx32LmxZyv+X6VdWVs5PlWPZY25RH2kjqet8OW+cDNKHF8CL7vDwHU0bwWPTsZ0PyuKYh9CV5HjiFTpsKiucg38DA6ZLfXmTFdTwHg51yn4uAq8IAskYpAk9eyX2fvB8czuNwoZ2kFy5gzqTiheeEQD48KqurKyLRbjtrgAKDt6B1QecR1N+cOaDf6f+yPCiMHV60g8nE2YN4yt+0t9aJ26Y1v+pVLw//26+9s+nSsShyQAqSbxSII81ZBeY7xEmd9eSODCywuOwhG0g7KQPE4Z6HeCADDs/hvk8h7Z1z/zYn4bk9MIXDLNrIU5+Xuo4TGO+ELK4oLrw41HXcco8jy355IDVeKTBX08FFrvGd8ZEOKqZ0KFj041H7Z7/yUtn7vaOsZvv9JDjSR8jDi4ACBhZwEYrieQ5xc11LMXu5i5VFW6C7RSKQUl4NhqBYrLEScf1iWWNN49LHksT9iqVmxCNAcMuu6DYutG4C1ifEzsnxtLfP4p721ik/upR3HrTDiXwsXV5dW+9Yh8nKLxY5TIfFX7CJc0UH0ZhA1IPLflK3G2HlY03j8qfj0BuIj/U1l1gYCJA0A519f5NdigbKRnxYDQftONMQvRnIQUjeDvKQH4UH3NmXx8sBTrSZrYerUqiGZKWjxMTb8kq2x02+oSHdT8/5CaVtZQBbsMabgJaGS56HJnWsRm8QCgxpPOyPAAr3y+596f6JjhnLQpjIK1sE106ySGbLOsrn/ZQKFleUWsYU8rHoMseY60lWPnMqPpETaVMcVjLWeJZkE9FidVJWCuRBFvITyEvdpEllUkfKn027X1koJZQBmae8KCwoLtn6kxxn/Z4wytab2pu9xmcwAmsIkJBNl/qANtHO1Ad8TnH1efYrbz9MKYe8YJr6FkUjyUX8YfuHPiUf4wssCHzfz9Nlic7Jn/yQTnRjUUEqPOBmQfegYztjZWKJYZFxqAtXclUu6Fpt0awx0iRSg4yYDBBddJ+v6JYxUsR75gsqe1D1QHAQP4ewpqZnzcLDZQsxMRAgNLwFuJ15rcg6renhO5y8J76jo1eTIu6tM5CwWMdGx6xsFAY6e2Z6JnBvP1sK5OE+fBQIiAYZkLXZJANh405H5sXFuL8OEfMZuVCOuP2P2wKRg3115EcWcGcvHg8GSssQngjhsaYtEw4kggkWPQcPUWiQvSrFgfZRBg8J4k4BFCwUhlYGZEMZYTsCjwqn5unrtMXCNciLhaHVsrYSp8PU/eJ7Xmjz7DBpj5qGhYxFDPcmAas2LW5HLesk6RkHLMz7hWx89nN9nr3iWAN41YdEQOl6I1nq02TryH6uT5ctKxEQ1maSA1IhT32+JMtZvu+Fz14yZNtWnyaLyWHj9iqvHptG6eplz+bJypK9jlzZsugfvqNwpW0Y5gbX0hmP+racp+959vwgPhZeAvva8Ul2LMzxtq5hudR5Qa4E3K1LS9wfHxWBweHBMDo8YnGcVOcWOAiPAFAoEbavrO+4kHGhr+LWt++6rU3Kw7DSdCstt9SRF8UCwoMcsH5xaaN0oFRwKp3P7G3bw1+23NbkYcsAzQFiJECcVAThMiA2m3wLNkoNig/ycccATwPMq40QOde47Y80EB0kDznzHSIcEWbgTvt45fI6La/8HTV5TZQfmRmcbImw34iyQN7kiejVeQWuD265vK3BLfwDwdPfYL+xwXiKT7KTyLZV0i95URRT37RQ1Lav+rQxwkJKixufPZwOAmw94E5Oljy1POMZ8d575oqH1iIAJ2Dt41VJyhh9xpkQ4s57yGNtYQljRUMgLNI0FDLHyoKIuO8aaxNiYeFZgZRkPYrLLS+PgSUdAQKHdDj8xgKPhdmv/W/u/zZClxuaz5Af37FgbeGXi5n6axtdRvi4cyuyXNmzpzysV+RBTk6LI09y0Sfi4zv38CdFgLZYHm0rcHgPyxilpJmBOnhwDnViSedEyigaPNQHAuY6aSBm6o+KS8SI+9sLRojx9jHawYNtwNAOzEnBAW/KIW8KED+YY7Xz6ukBmyY3LFV2xHfaGnHfyqjvIyND9hTEtP1AvIfdCLz9rW+x+YVid1YB4vFw+ghAGI3OGJx+zV7DYRDAiDroYN9hymnHNHncppAgiy4EYwSqPVS7B37rGtdJQ4BwIBcs1ZQnG89nCDktVBana/xgjeUf7JdmRLz2obXOQ+CkSYfDIG7I0Vz+ds97JGlIDRmwBtF8IUxc7+RLhEG9yDemx9ZyEp8AlxDPobV0Ut0imvgHTwPaHmRbq42YbBAu8tI26kfRiW5rHRhMuEpWqA6ZiUdW0hN4x7qnjVYWkQqUxdmI/v6IZ4pPGFiiNvpDv6Nc0Td0eLa/2khMF8URcAQcgQuHgLhlxzI0ItSCvEOgkVSyrSY9r0iwN8dHst77gSaQIa9Ivyz5u8NB+WPqm/eakZ0XJHvWgXoTLnvVHYk7KiakIU82xPidK0mh2rmy8wkFoTPTbzsx7fcp9gvKWfvJ5hI5Ao6AI3CREdhh97pW1hNQXfRNBFUff9D33fR2UOqLE38Qrhenpd4SR8ARcAQcgVYi4HZVK9H3uh0BR8ARcAQcgVNCwAn+lID1Yh0BR8ARcAQcgVYi4ATfSvS9bkfAEXAEHAFH4JQQcII/JWC9WEfAEXAEHAFHoJUIOMG3En2v2xFwBBwBR8AROCUE8tzu5mE3AmDCKz0xLn3fneryfEvtdzxu7nO/K+JmTPyKI+AItAcCeZ6s5mE3AhAaD+pJJE8s5HZZg+Oxd8/740b3xsZjHAFHoLUIOMHvgX8i9ETyvF/mkPBI75cdjzQWZmdn08eG7/wcM7/dsF8AyzTOwJffJeCHhHiMswdHwBFwBI6LQH6/J6Ydt9CLko9FFxdsfETu5SZ4+hQ8wAJM3DUdR/nVq1f3HO6QO4915rVfyBI8nqP040P8qpUHR8ARcASOi4Aea+6/aFQPXtaagtASqdWnuyzfHY/j9TSW+0HkfrySPZcj4Ag4Agcj4BZ8A4wSoaWoZMWn75ft3fG4bD3u7XUEHIGLgIDfJncRetHb4Ag4Ao6AI+AI1CGw54/N1KXzr46AI9ACBHwfvgWge5WOwAVBwAn+gnSkN+NiIjA0NHQxG+atcgQcgQMRmJmZOTDNfgncRb8fOh7nCDgCjoAj4AicUwSc4M9px7nYjoAj4Ag4Ao7Afgg4we+Hjsc5Ao6AI+AIOALnFAEn+HPacS62I+AIOAKOgCOwHwJO8Puh43GOgCPgCDgCjsA5RSC/trYWcrmcvbKPH00/tkK7sk9y41nZxNX03qG4fD6vx5Z2Kv+OrsCDUbIPRyE+lrGDEvGUoYTbj4PN1m/5NzfCRo14ZMjpxY++xF95q1ZrKiw+OjXJT+lWruQjns+dnR3WNqufx6zuiNDUTwmTDfuRmrCFKbjkrB7iE3YSy/DKyl0vDLKntgBAbusRsSldKqtWUz+oUTn1A220dqZELXxHrthm+ok+iLIlPFoomlftCDgCjsClQCA/PTMb+vv6Qm9vzxZZd9jCvLpaCpB/Pp8LxWLRfviCX57j+urqqv0YRofIs1gohr6+XqXpsUUc1DZFzOXyWiiVykbe5C8WC/oclQCIi7IpizKJ6+3ttfpj/k2Vr7rKpbCucvQ83dAn+XK5vJ7TTb5VvcpGmPwgR19fT+jp6bX6eY435ZZKJWsHhFLs6VEbe60NHWgJTQ7IWpasyyur1i7pHaGgNvUJ1x69E8CDR5fyvqH20+Y+tTm2O2c4JbHAhx8boR3lctlwoaxCodvSra8rriQMVoSP2tsp8uwRxn39feqPgnCISkUq7yzfo1JC/wuP5ZWwJvm4RnsZZ4wF5Msqc2cpX7vWZQoiivOWItiucrpcjoAjcH4QyC/ML5h1CHmw8GIZQqAQf0nvEEu0njttwZ6enhGRLWshij+fCqEMDw+HsTGRvRZvrDVIbHZ2LiwuLYlUC2FsdMTINXLrpkipEuZU79TkdKhU1xU/GngmvhGTzFEWuSXlnZyaVl0rYWhwIHReGVd8PvDgD/KWRH4QBwrIoOJHVUZBsiDb7Oy8yU48RNIjIq1JhuHhoUjymLxNCigoK8KJ+xUXF5eMmKm3u7srcA/ziLChuvmFRZMbxQaMu9XeYcVfmRg34kukTF5Im/RTtF848DzzW265Lozy1mawmVZ9KyJQ82SofAh+ZFT9IBzoByz5VoQ0fmb0K2vz6ifaoiZJ8VB7bZyMmkLY0dE6JaQVuBxU52/9zu+Gb33r31n/Mv5RDN/xS289KJvHOwKOgCOwJwJ5LHes4EQIZREQBDojgscSjwTfaZb2kn4da35+3ixQCKWqhQgChsFSORAORIeCAJmNjkTXcbLYiE8KxOOTN0R2myLmYhjbcqnDBquyvlEQbty4Eb0AEn9AJAf5IReECkFC+NRBWsrHGqbupcVFs2oLUi7W1tZ1bTHkZeUWe4qmSCRZ9kTlCBEQ/KKUDuSyhVneAtpQXisbVsltjlxV+wnQLm07bJiHYVNE36P0YJkInjJW5AmYmZ4Ojz12w7CqKv3Y+Kiw6jOLeE59MDc3FzrlEYHMTclQP+BR6ZEnJdufR2hKU5LieUAJQxHksyl9wgNvTm1jzrwxXV3duu4EXw/4Hc9/XnjTm14vz8xqeOjhh+uj/bsj4Ag4AkdCoHNwcNBIBrLE1byA5ShywZ2c0753t7l8O22/fF1kShrIFasZ8idgpbGY8+InMqemZmyRh5CxquM+fTACxO2MZYdlSlkoEVh9pIXscUkvLizJgl0wcuY6r3WVjYIBuXdpv/mKLPpr166FgYEBIzjkXlpaNuJE8YBYBhWHa5h9cbwGNZSII8Gzf2LkQmFByWFLoFsW9vjYaBgfHxPJFsyTQXshbXAYlRfhFsk8PkZ8t7VpTVsOxKcAFhHLqi5FD4QQMGyIA2ss97W1ivUbOIyMyEsgix2vBgoa6VoRqBeFi75Alh4pVNeuToRr16/ZWKFvl5YWTfmx8xetELKN60QZZG6hLD/9abe3saQumiPgCJwHBPIl7ZVG93inrMUVkfOUrMcZkc6GkSSLclnue9z0WJkQyZrIkv1mLFIW9XQArFxeN0sWBQHCIw+Eg8XOYTfSYk3jusdtzb44JEm5kSxF4iJpLMBoDReN2IjHSsX1z/WBgX5zf3dLrkpl3Yifvd6i0rBI4oAnLZY69dshL7nyU1wzOwa5edE2Ux5UJ0oLciIzcRAdCpHhLPkgN5NFabG6sx4FrqOUsJ2A5Q5eXfmu7TSpPhW83Qzqpi7KQZlpVUA2FClInk7AozI0NGhycWbAFCGdnYhu+x35WyWv1+sIOAKOwEVGIH/jxqRZoQM6oIXlNaf9a8iRPXkWalytLNrsg6cDaiva5+YQFQs6B+cGB6K7leuzc3KhY/2LlGu1qrmSsUgpC2LDtYzbHLc8XgPqgqBY9LFmce1zOAsrnT1n8kGYxHPAjjq7tL/NHjeeAT5DihDchtJRb1QklsybwGes5bzqyonkmxkgVOrDzY7HYF3tiq5p7aHLSwGhc0aB7QUseGRn+wEXPAoAWwa9djhxRy7K6+3l3IMUAaWh/ShQBLCmzB5ZeHgyUJwmJ+OZCTwneDPSXQ3NbOdhy6J9yMwL+embKE+HKSnWT4ozxUf9IvAOW/SlSPfDHz4WPv7Hn7B58MMf/DC86Y2vuxTt9kY6Ao7A6SCQh2ywtNkXxrJmcYYohoYHA7YwZD2rA1MQpRg0bG7UjNQgGq5h6VdEruw5x1Pfa2axDg8N2wIPCbFHXpLlBsGvyEsA2ZKfhX7N8nF4blEu63WrC1c6J8LZoy6LNKtV1S0yxaVPkM279W5vRBl5Irs4BjFNRg7gGZnoYrVasTMDzbYbaQeH5ajH9v+FIQoK9fX39duBMhQM8ybIG8KhRsgY4hvS9gjbHJB6CqRDsdnYkFKisiFFXPQE4lAYOLhHf2ERL8jCx+sBBngKUBqytyymcs/sPQNw7KetvkJAa4cS0EkebkIAhQjPDYriivrUgyPgCDgCJ0Egv7kZT713d5VCRZY6i8zIyEiY0OnuaiVaW0siLNzmEAy3eEFMthAp/YwscsgdUsPK7lSaQe0J33L9upETHgJOVC9q7xUWgghzskTXZLlDUCgQUDYHryBo4gnJ6oe82JeErDfF3BAbRM+rQ4oJe+CmfFieqn2H4EYlQ6+2AFZEpgs64FYSua7ptSG3cbKIraIT/kEuTrnTNkh7cjK6yrl1cER77v1SVMCNLQsUHVOW1M5Bua4h6nTrG4qSkhlmiESeSI07AhIPTri9uTUuN5szC5/PeAm4k4BDduRtRaBeZOmUwrIhz0NVfYQXh+v0K2cs8Mxwz37yBrVCznatc0LnKX78xS/a8lbdYXOuXWV1uRwBR6D9Ecjj/c1rQcZ9jSUZX1qkRcIdHdrP1eIMX0CivHDD4h7vlVuahTy30GlkDNGSMObfOjmv/eWYH9dydGUbCahS9oohvfgQHAg+Hi4qyNrF1Y6xBymwd88LkictMpAPb0NBJII1TN1YvdTNXjzUCHHiOkdR6OxcjjLiAWiy8Uh7qJuT8KuSHeWCQ1JY9SgZtItzDLjuJyen7DMKAc8PQF6IvVbj8CJubbVT2HIdrwivhAHnHfBsoETgEWBLAOWCvuMw4ZXxcVO6yI9MrQjUS/0FvVZWtB0h7w1eDa6jyDF2ij0Fk79VMrYCF6/TEXAEHIFWICCOyIf+gT47uAaBclrdrGoIVtYXVj1WIRYphEPcqm554lYtvmOhQTiQGrQCEbFvzEE7FnHIGLLlpDcn9iE8HUNTmnUjMhQLCG9sbMQI2ax0kTjEDFnYXq7ycAId+eAuDs5NTU0bwXFamzSUjRyQCLdk4XVAPj5jOfb2FuSd6JaJ3Hzyo07kRZaathNwzXOSfkDnFhRlJPfY45M6XzBtsnYK84XFBVNkOIgmAa1NWLZY4hD30uKyHbADb9oHUZKWQ3koVhUpMrSNgEU/ptP7PDgH5aBVATk5azAwMGhjhC2bGzemJE48exDjdGeD0uDp8bAbAZQ5zlbQt9x2yWFLD46AI+AIHBeBPK52yLdPB7s4rQ1hcxvWslzj8t6H7qJcwiJPSBgSg0DsdidZzpAXh+UgV9zNsC8G8pLICOuNL1i0EBC3hvXr9DsWJ8FOUuudk/BY2vGWtvigHDImy5V9aOockpx5ueQhEe7Fx+WudTDGSTYUgLwsaconnoOBy5IXedjnHhkeiU/DU/5mBwh+Q2cTCCg6ELspHJKddtKWGmcXtuRHCeLsAwoQ5x+gOpSiLhE9SpV5KXSI0bY8JC+WPecTwN0UAqXH8qc8MGVLhTZi3bc62JkEnd+gHXa7nNpBJ3Rra2F4ZMjGUjqT0GpZ263+r3z16+HLX/ma+rYmD1kx/NLf/TtnKuKDDz4U3v2e91mdt9361PArv/z2M63fK3MEHIHmIpCfmLhie9Xp1DoEuiJLEHLBYubQFo8Y5dGruNV5eAzkXdEhMqwwCJ59ZoiN0CXrE/c9ZAS5YrVxOxwEZNZ7xnLDjQ25UzflZAkKUotWOY+41QNc5Nrt7Iz7t8iCDBAhZEH9KCjs/6KkYPnY/eeKRznAfc7BQa7TvmYHykQOlCVuh+OUOwfeqJsXbef+d1z2kDm4ovgUJBe4gWNyzYMvmhPXx+QFAAMCsscy4/Pt+c7Db8AGy72VrnkTcOtPai9tRF7ukmAgIC9KorX3FPogK8N5/Pz2t77FxjPkztzjxbkXD46AI+AIHBeBPITEokyApIaGICQ92nXr0BekG++B12luEQ8kzX3oWKyQC7e6QVapDD6zP2wn2lWm7e9vER3pUyC9nfrWwi/KszJSHO8QBMoB9REol3SdnUVdx6uA+5sfk9E+tJSKVD8EQr7BwXjbHGcJbK9a7cjWb4U26Q/lJlklksma5AE/MMbyBjPiCeZqF9EljwbbCCg1KAukwXOBUsKdBASugzVtoT4evwvO+mKHBk9DcbGKj/gH2WgzShfKIecGYPg4Tugntll2xsERi/fkFxCBrz3OuZndYaK/M0z07/ZIke67M5XwumfHB2ztznG0byvrG+HT/74UnnO9EJ46mg+f+verYWp5I/zcHTow26RAmX2FznDPk/BMenAEzh4BrcW7JxHfeUEy9eswCzNEAulCro0W6riQx2emN4pPTSQukWC6ln0nnlc9cZGHVyL+bB4+745vLGN9nmZ8T/XWl4X8O5jtxKpp+waInLCtENSlN8VAOLRjSH0LJps69lAnejuK7DK1EIH/7uMzDWt/3rXu8LZ7hoyASfCPPzkXVkXMTxnrCs9V3F7h/u+Vw0e/vhL+59eM7ZVEhF4K7/3copXzT5SO7ygQxyX4+jofnq2GX78vemA++AtXQ1938z2HezbOIxyBLQR2s3sGloMIiEV8v3BQ/H55mxEXxdtfxmbUc5QyDoCsYVHHydOwoBZdbK8eaBEIXu2hEIBoCZNL1fC1x9bDp75TCv+tyP9/0XWs7Ffd3hMml2vhVn3eL9z/3XL4qsh6v/BcWe4oCa98Wtxa3C/tYeLq60TeV0peiN3J/TAIeprTQGD/mXIaNXqZjoAj0HIEPvSRj4VHH33c5Lj7BXcGXq0O21a5EW9vuFWWOlb2++5fMGv8VU/Xcy1kwSfCnFyuys1e1veO8KInF8ylz7WHZyvWlK9vkTxki0XN+/2PlM0V/8qnFcOb7xxQnt2WNfk/9wiPtw7bZfIZ675fZE0ZBNJNyqXPd2Sqr5M0yJtk5TsBS/+7M9VdMnMd+Qh9ckw0qt8i/Y8jcEQEnOCPCJgndwQuAgKP6rG4Dz70sDWFE/PtGF6vvfb3f2nZrHFI9L0ieoj2o3/nuu2ZJxc4sv/m50LAA5B192P9E9J1LP+Htoi0V0oBysObnz8Q/uM7d/bd//MP6WeYVRfh/V/q3PYeUC4KSPIyfOrflcMHvry0XbZl0J9UZ/qe8lAmZaT6iaf8X33ZkO3R07YUl63/XW8cu+ksQirb3x2BgxDYrb4elNrjHQFHwBE4QwRu27KYE/mlqtkzJ7C/zevtLxo01/273nhl28qGjBMhk/ZxWdy/eu+QXXuqvAONwhue1bddHkT7gQeWGiXbda1Rndl6SfyRr+sngKVc4LZH3n/0qhG7y+jXP7OwrVBQX6ofxYPvH1Y+D47AcRFwgj8ucp7PEXAEWoZAcn2/73NLAVc81j7XcJnjSidgPW+7/fWdPfxXPq131zVLmPmDNU85lNerd1zqB4VGdWbrJf8nv8MjuYMsdj1zROVysh55IPGs8pLqf84t8RBhcv1bZv/jCBwRAXfRHxEwT+4IOAJnh8CDWy71+oN17J9Djp/UrWi8iMdqTsTfSMJE/I3iGl27qv35h2eju75R/FGusV9fH44qT31+/+4IHISAfmxm68bsg1JeongwSa/U7MuMU8Iii0H2c8LoMr63+m6Ri4z5R76hx2KLxLF264kbqxlC57DbBx5YthP3uMGz++knwQblgYNv9Yfwjlsm8lIe5aa23JDsHhyB00Qgz2NUPexGAPLiKXm8CHy/zAu547F7fGS/7fU8hmyaVn/mEbTpoRb8yiMPmGrH8EEdqEvhIT3Q5rNyj+Mmf/s9A+ny9vt7718Mt413hRc9qRCubj0Qp6+w+6ZMXPc3dMvdxMDhHZUflVLB/nza43/V7fGhOsiBK/1zWy77+78XzwBsC7T1IdXJVkA2vPhJPSL4pcCWArfmcbsftwGiQODO/5fZxP7ZEWgSAnmeOOdhNwKJ0Lia/bw71eX5lsUg+/nyILB3S/n53/0Cv3ZoP960TyIwTbiiVPKY2vhjS3s/zGWf4m6KSs+XJ+JX3vG2cNttt96Uph0uvP9Luw+0QXycMq9/oh2ysjf9kb+O+9p8x0JO97Q/91rBTttzoh1i/i9/YogkBwbS/qZO1qdAma9/TiTqv/uiAXtwDQ/bIRCXDfV13vPk3UoUngUs9rSlQF7q++9ftffDeLLl+2dH4DgI6Odi/ZxdPXAstgTesdwvO0aOR/0I2fl+9erVnS91nyB3nr/Pa78Avrwg98v4LPr6E+dgxZ56cmUn7N6up9oty8VNIA8ub0iTdNlDbZAph9Rwh6frpGdPPYW0Z5+uUTaB+9BvbO2Xp7xcxyK/dazb6sNjAMFzy146G1BfJzJRZ3afnQN2b3hO/3Ybsm3Mto36knzZ/Fz34AgcBYGbHlV7lMwXNS2LLQstCy7kziNXL7uL3vE4+mjHcj+I3I9e6sXLkSXS/VpXbzXzvf5ayl9fZv33eqUgW87EHvpYfX31ZR70Hdmy9SRZG12vly+b1j87AodFwC34BkglawpST6/LbMU7Hg0GiV9yBBwBR6DNEejQ4u3H6A06+LQAAEAASURBVOs6CUg4fJi14C87wTsedYPkEF9v3LgR9nPhpyIYb7wauehvvbU998uT7P7uCDgCp4fAQw89pF94HbJfeuXXXvEmw0XJ8Dyo5p1NqYNSerwj4Ag4Ao6AI+AInBsEnODPTVe5oI6AI+AIOAKOwOERcII/PFae0hFwBBwBR8ARODcIOMGfm65yQR0BR8ARcAQcgcMj4AR/eKw8pSPgCDgCjoAjcG4QcII/N13lgjoCjoAj4Ag4AodHwAn+8Fh5SkfAEXAEHAFH4NwgYM+iT/fVZaXmnlxe3CWfy3XavXfcq1vjup7yxjshp3vyyM/9eQRLk+KVPt23l+LTvb6WPxuvMnRzn9WZ0lAWZafy0/Ukl1WoPx3KmuvU/YHcI6gyarX4yM/NzQ3F8ajZXMif8tPodskmmSIuOcMuyck76XgRUtvsS+bPNoZqB2k71Qbwo420JxtoK+0MutwpICizHcLGhsaI9QNt3RoH1j/cw7lbws0NxlVMT9u5x5MxR5v57MERcAQcAUfg6AjkV5ZXQlG/LsWvYqXFlIW5XC6H1dVVI+ze3l77BSoW7WWlX9YjOPlBDFiFm+/7FN/X12tEWl4r68c1VkO5VA4bIp5CdyH09feG3p4eI5+Srq+o3JviVQbktL62ZvlLpVKoSlHo6soHq7/YY4+Ppe5yuWTkwdK/gZKgfL2qv7+vz2SgjtXVlVDRw2ogiZ5iMQwM9EvWghHH0WHaO0ci49Qu5NdjS0J3l3CRPL29PdtEBVmDK2kJPcKkWCxYu1MNpFnLYlCthXxe7eulrN5QKHRvp68qDpzW1BdgwK+E0R+tJPmIx4bkWo3joLwWx0GhYP1DG/L5HeKO7V23MUFbUB6tz9QW2pxtb8Loor+nhwpd9HZ6+xwBR+B0EcgviTC7uru06OaN4Flw19fXwszMTJiamjaymLg6YUS7vl4JM/r1rJnpuVCBVES+kBgBBWFzcz3Mzc2FufkFIzIWe8odHh4K46OjZmHPz883jh8bszIWFxbC7Ny8LfjIAllBzqPDI2alLih+aWk5PmlOisiaZMWqHR0ZDRvjWLIdYVH10y4WSpQWSLZWq4aRkRGVV9hWZJoBLTKuiphmZmbDwsKi/QoYFms+l9cTiAbD+Pi4YaRmGCazs3NhcWlJCkCXtQ0CSwG8UJzm1UbKQwnC04FXAgVmbGxUWA5Laeo2yx4FjP6AGCNx5o3gU3mteN+QNY48tHNOfb0mgqcNjI8RjYMrV65YfyZlkl9NW1hcCNPTaq+UHzDAaEf5GdOYGRkZtjal9K1o01nWOTk1FX7tn/16eM6znxle9cqXn2XVXpcj4Ai0KQLHXf/yetq6ER4korXVCGpxcSlMitwnJydtcR0YHDCyxLJcXlrRAl6WUpC3RRjyhKRYlLmOhZ9+6pIfKDGrzBb4vC3yS/qFrUbxkFZRlrZZ6PICmJUX8uZFmJ9b0PeuMNDfF4qFopFApVI18liVpVgpV8J637qRPVbtqix8ACnIaoQ0FhYXQ5cUDUgQC/e4YDXqe9rIr4ZBaOADMWHBl0uy5DcXrE6s9Epl0+SYluIEiUPUuN6zsuCNAMPZ2XlTFvBeFNUGykV5wEXfI08G2w1Y7ShTMyJG6sOL0im3dra8RvKe9jW8PPR57Oeq4Y0nJnktere8Gihu0XpfC/NSyFDcaG/ss9helCT6LOtdOm35W13+5z73hXD1ykT4+je+5QTf6s7w+h2Bc45AHnLGJcoD6WuyeHGvs+BiHaZ9dlztfIaYebE/ijucZ+T2iXR75U6lDK5DZoWtF9ZbtVox5aAi679LJA2J8yLNrniVy+LepdewFv+C0uCuZX+5tFq2ciBnrPnoZaiERRF3ReUjE1sEkH+lsxKUyIgFpQUrEnJcN9mrphw0s88gZdqG1wPS6hcehKoUELYIqBfPR1kkjZWKLIYBbZVVmw2bwnhtbd0IEkt2YGAwDEq5op1Y9KurJSksa+YVQWmZUnkoRENKU1DbIf5WB5REFBf6gq0R+hmZa7UZbblUhUvF+i/JiYKEAsM7Y2pQfYerZklKJooQ1y9DQDGjrQ986UvhDa97bfj4H//JZWi2t9ERcAQOQCBrtPE5+/2ArCGPtQXRQJ7mHhYhQhp5WVMD+h1rI25ZjmgAECsvW5S1+LKXjnsca7tXFjLWKwfaICcW85LiCbjpu0VoWGNY/JBAfTwysIdsxC4rkINXuLKpj8Nz7GmjjFAGAQVEHGdWbXGgGIalbPSL/NOBrU2573Gd12TRQ7yUn8vs/VohTfiDEkH7crI2UTQgYRrI9gB10hkQWNrywKMAphA+acGrW1skyEhAoaHNlCGfir2DN+VFZaaq/lm27ZPZ2Rml3RQmxVCS16KwGvff03ZLE5p35CJQ8uijpDQi96qURsYEcu2WTQcgO3Km+BlOjCmNPfBSyy0tuAjCSxG+9rVvGB7PfOaPhhvynqX5lsbGpQDBG+kIOAKGAPM/EXp6Pyo0+cnJKXP34v6G7Nk/h1A4FIdLGPcqFdkCLdLvEUFjtWJdY1lCtFiwuYlxI3hc6ZXKelidhYCXzXqLB9y6jcBxI5M+xi/tiseCh8whBcpmq2BlRcQlYjeCVhwNRZ6SrEK8Deae5oCdlBEsRouXbLiI7aX9+qiE6JyBSLjZgfoiwefMVQ85GS/rD9sOcBOkNSsLnHcIEKVjTm54rHxwHRzk14KiZtattmLhU86iZEdJ4cwBLm68FLjAFxdX5cZnz3rNsOF9enrarGPkGRiUYibibEWAjPAm0F+0YWV5VVsT9HPZrHOwSoQFced0gJBr9Cl9Dkbg0yXscqY40Y6LzfD0GePgs/f/VbjrrucbHnfe8WPh4e8+EiYmJjQ+BlvRlV6nI+AItBABtn6TQcQakQ3137Nx2c95rHD2s0uyJktahCGTYrHbCsa1vKb9cCywyvC6uV0nJq6Yy5lDdljYpKduXNMQNJZbh27X6hCRxc/ptrVIZorZI16KhBY55bZDZdzyZflVjikUIgCsVYgA4lhS3ZCfue1F7riCE3EgEDLYrWoQqvJwGxZ5jX2zCJzwMzJhudf0Uq3m+aBIlBQUJax05EVW7lYY0d47B+xWdB13PQccIfSurvgzgChWY6MjtuDjAZlXO5eFP9hiGeP+RrGhzwbkzubgGoF+5HAidVBertgaglcXAr/96RDZo9ClcQBWYBL7AedE/M7WEIHBzCsSOnHCVelJd9gBbQWdwz9Y7BD6m974OmsrpP7QQ98Nt1y/Zq1Bgd0e3+ewfS6yI+AIHA4B1kfIHa8vh9iZ96x/6XW4UmIqbdvmjNhxDUNKFG4H1URIVAI54XpfW6uIOHq03xsJBSudBZz98cq6FAQpBwXlgVQliR364gQ01jquZUgJixZXO+TPoTBOtZO3Inc+ngCICXc/DcJqh7zYNuAgHeVTFgQAaaJYICtWLecAqBei5QUhkG5Qp9jZ015YWjRrt6x98r4NSPIoEO2dlnqoD3Ll0BvbD6M66U5HcI5hXXWjiLAPT1q2EViwwZw7FDgtD35gzNkF3PxYvtx1gCeDA3m0GyUGLDnzADZY8d3ypoxKEbh2bcLIvqbfHseSj/vdKFPNPUy4Nwq7Y5ANzDl7gZIFJigsGxpbbMtwAHJA/UhbubOB9vECE0iNcQGeWPMlHVQEmzjId9dz0b7d/7nPGwYf+6N/Y+MaxYYJ/v3v/yD8ws//TfPQXLQ2e3scAUegMQLwFwYdaz9rYyL5xqn3vmqn6CHHRK4VuUchKHOj63rSGmQ72wK9ob1tGaqmBJglps9YaRAYJM6CzGGvHgkXBZMFLyLmQB0u+3iPuE6H9+zEb6xzu1vF9pZRLrBSWehRIPKUvWX5VTd0cl7l47rHujXrXVYsB7oIkBunsVFU7DyACCbPPrj+saVgsu+NxbFiwACsqsKlR6TVq3aBGa5mtjzY4iDQYbs6SmlIFzqkJEheFBxID8WGdnF6Pq8tEvJxNgHPCYfpwIlytt3XlEELt8qzMumgFgXai1KDcoiyksZBh2SG5MEKXCAwvCl4iWg/gXajEKAI0ALzgghfxtZFDrTzi198ILzi5T8Rbr31KdZe8OH1gX/5++Eb3/hmuPvuu8KnPv1n4ZHv/SD84i/8nMEBLu/+jfeGW5/6lPDqV78y/K//9J3hzW/+j8JTnvykm+B6+OFHwu994IPhf/hH/3A7rtG1j37s3wj3dXkSXh9++3d+L1yXQvo3fuJeU0B//w8/JCV1MPzkq15h4/WfvfNd4Zd/6W269XHcyvyzP/9M+N73H92Wj4v//N3/V/jxF98T2HJA3ve851+EZz7rR8NnP/tX4R2/9FZTXLcFqvvwgx88Gn7rd/7v8Pf+03fclK6R7P/fn30mPPLI98Mb3/haU6Y//4UHwpe/8tXw9re+JTRKn23r773/g+FHnviE8BNqa3145JHvhd9V/D/8r/6+jelsfLbcj3z046aI/a1f/Hmbo48/fiP85vt+O/w3//U/sLGdzdfKz1NTU3a7aitl8Lp3EIhrNnZxXMchc1vjtWbW80ZKu5N7/095Jh3u9fHxMSMSfTULwg6LaZUtylrmZDOLL5bZihZuLFIehsNCTUDTwIXMwszpZyx29mEhPwi5S1Y5xIWXgH1xLLfu7ky8rNFCgRPl0f1sJN4t1z/fVT8KCNY/B9K47516aSinrnlxe1Vy3+MKX5Z1n8sv2p47e9e4+DnIhmtcGU3mZv3h4B7WNx2Bt4Fb15CNe9i5hvVJlUtLHRY/NT1j31GGuHUP5YQFHvc6hAiJ0x4O4eFxoIwRPQMA1z4eFMpGiaB/UCI2J+PdD/QNDxWy2+gk01EHQrPwUCcbYbN9wxhBUUHBYw8+DVb6zxQA9Qnjj/bS54wts+ozfUaeJndZ05rarIK++tWvawxshJf/jZfZOAUTyJ35c/cL7tDJ+q+El7zkxTY+eI4E/Y4358tf+Zp5iu5+4QtsDr5Q75+579+GH/mRJ5qCzJ0XuP1fcNcdNj9RIFHkU4hbaruvMQbBm7gbOp/z0z/9k+ZRSs9mmBCZR2OAfD1bHiOd2dEa0CXvHH2ZrYMzOaawbtX70nt/PPzRx/8kPP3pt5vykGRp9I4MnJvhPVsmaRvJznkiyr129aqtUd//wQ815uIWWKP0qa2U/eJ7Xhg+8rE/Ds/7seeF69euao0pC9+vCLs7w+2336ZnUIwJ278Mr/kPXm1jlj559rOeuUuO//BNrw//4rd/V4rYn4fXv+41Fof8lA8G7RKQpx7PdpHtMsvBmp1eWZLnc9aCP8ranucpcxDIsFzAkURxAW/aAGCisxj363YtiIhFGuLh4BsLMRVB/qNjI3bIDZd0qVgK60u45Fesrzg0RhpczFq3jMw4PLYrXq7Z4aHhjJtdbnk9iQ7Cp2H9yo97G/lKJQ5giQhlSeDKZqDGxkPisgC1nQC54vbdDLp1TaUMav+SB+Vg1dsWQpNGEe1HaUB2lB7ahHsZ3HCxD2r7YETuac4TsDWxtKxzA4onoKFxsJF2GAEKZwKfO0WMG5tqJwqA2gh2HG5k+2JzsxCGdM22PfTMgYQjCxjWFQcaIcVWBdrFYUcUDTvkaOMAEo99hjJptxAKL/oN7wTKC31t2x1Kj8cGxW1U19MtmK1qz1nU+1m55yMJ75AAODK+XnzPi8Jfytp99NHHrF+f+pSn6Ba6Pw0/+OGjGkOd4Wd/9k3hqU95son52p/5aSPPd/0fv2HjC8xfYUrDziHVLNEQTz3Za3Hs6AmUGk+vePnLwr/6/T80cmOMP/c5z1Y9cZ6R5yU/fk/4V3/w/2oOFsLb3voW62OUiGx5lE896Rrt/PgffyLce+9Ltq/thbHdXbIlX8qf0jaS/aUvfUn4gz/81zq78LA8d93hec99tpSjL1s9jdKntlL2HXc8X2vLWni/LHUMApSsO57/Y7a+0Ia3/OLPhz/41x8K//TX3mnj9mm33x7uuvP5W22OGFLOW37xzeH/lFflq7ojgu041oFs+5P8rXxvN3laiUU71J0lbD6nF+tjeqVrR5W347HHb2z2i4jiLW7RJU8hLLYQOoe5zPrV4MWdivsV7ZZDawwUXOnsg3MbXLyPnkfZxj1p8ZxZcMSj4TNpIEBz5cvarY+nEdG6k3sbgtZCz6SxffYtSx1LFblICzlA8Hwm4N4viyghFsrBgmQS4/blkFLc5z748BlyYlVjQQEwE5z3RiEdsuPWNcgb+QjxUbURGzurIHkgY7YqcDijrGDdcziQulBKsreYIT9lmfzCj/S0E5nwFIAhWPKZW/W4vRCFgX4kT8LEhDnhn6Pgwb38KDvcamntNTx0X7zaCWnTn5zfoG3J2qPfSEu/ouCghNG3fX26MwKlTPhvdfEJW3K22W/oXMRVWZNHCWBN4L3+la7zDsbmkeJLXSAfWILdSUMcz7ojRPO7UWD8sQ4cdrzhdWCr4b/4+3+vUXEnvobnAyOEdem4gfUNj2OjOQ8ezNOoHBy3htbm4wFm3J3hof0QSPOI9/oX0qb4w0reoQm62YjAWCQgE96zAx0ygtzlbdf1eIsY8bxIC6li3bNQE7jVDjd2spz3i0f4tPfIu4qzyYR8vAhJJj6nevmcQswfZYiyk3d/kk550zv5DkvwKQ97z9zexSEzzhlYu00xQDlI7YrPECAPskfc4y1S4AKJpXYiA23loBpnHCDxFCLOcY+Wvkh3DMTydpS0lP6k78fCg3ECJjYO4o/HcDaDPqZdsW3xR3SQD5IHu3SdBZT20LZM00/alDPNfxyCR0DwTiF9Tu/18SndeXn/9Xe9O9zzorvtdV5kvmhyHndcXjQc2q09WfJOn9M7smY/H1Z2nUHb/TS1lJHCEtmka7xjgRFYcOor5DtuZHMlWyocr7vDQfHUySstaPV1NJIpW8NO/uimrs+fTdvMz5AXr/3ktnaFiHc9Lo3a1egaMkec4y1ljfqhme06blkQNK9EVdn2otzUh+5ursU9eUbNeSX1+nYd53sas9m+TdcoL42x45Tdyjycs8Ctj2u70RhopWyXqe5GhtFlan+7tjU7x7My7nU9m2avz8ferD2o0uyC3qjyA+NPuMIfJF8jmZpx7aB6D2r3UWU4qL6jltfs9Edtb7u3p9n47FdeFossqWev75e/3eLYTsN699BaBBg/53UMtRa5s6u9Wf1zbII/u6Z6TY6AI9CsCe9IOgJO8JdnDNzsK708bfeWOgKOgCPgCDgCFxYBJ/gL27XeMEfAEXAEHIHLjIAT/GXufW+7I+AIOAKOwIVFwAn+wnatN8wRcAQcAUfgMiNgj6q9zAA0ajsnlnmle7LT90ZpL8O11H7H4+be9sNvN2PiVxwBR6A9EMjzxDoPuxFI5J7eieWhLZc1JBzS+2XHIzsO0nMhstf8syPgCDgC7YBA/jIT134dgLVKSKTG+2UOCY/0ftnxSGOBp4LtF/hRnfR7Aful8zhHwBFwBJqNQIeeLnW5masBopBXInZ/6lNUchyPBgNFl/az4CF3fgPBgyPQTgj4uGyn3jhdWfQ0UX/WTT3EiczYX00Ef5n3Wh2P+hFyuO9Y7k7wh8PKU50dAj4uzw7rVteU92dC39wFidBSTCL69P2yvTsel63Hvb2OgCNwERDw2+QuQi96GxwBR8ARcAQcgToEnODrAPGvjoAj4Ag4Ao7ARUDACf4i9KK3wRFwBBwBR8ARqEPACb4OEP/qCDgCjoAj4AhcBASc4C9CL3ob2goBDiXyAKnh4WF757sHR6DVCDAO19fXw+DgoL37uGx1j5xe/ToYbsEJ/vQw9pIdAUfAEXAEHIGWIeAE3zLovWJHwBFwBBwBR+D0EHCCPz1svWRHwBEQAriCz8odfFBdB8V7hzkCFwkB/dhMNeRynfbEttQwJgHPHN/Qe4cu8jAcOfQtmus8v96eYa9r+VxO8bwaxCtHTvHx1alJHqzcmJ9nvW/eFE/dtVqsY3NzIxOfU2r92yC+FqpVfvxl02RLdSBgfX6uIX9Kk9rB9WaFhNc2Lio41Zewo+0xXc3euZ7isnKQhpDKis9+F875iCN5ssH6SX1Crs6tJ++dRhuzdR70eTceu/u5UZsPKu8ix4NVwot2Jnzow2wc31Ncq/FI8jJGCYz1RrKRrqo0G1vpeGomafcLaTyTJpWppmvdiGsS1xthQV1pzpCGulJ+vlt8tSp5NkKH1qq4bu2sa6TZL6R1DzlY63KUj2AeHIE2RiC/sLAQent7Q7FYsAmBrEyU1dVSWFtfs4nQ09Njz9yuaoKsrK6G1ZVVOzzERCkWiqGvj/xFm0Slctl+XKNUWrPvxUJ36OvvC32qg1Aur1n8aqms+I1QKBRCf19f6FUZnR2dQc/GV92qQ/XXRFyFbuXv6zEZmbDEL6v+ktKgCHR3dymuT48E7bVJzSGS5eUVq6MieZmMBck4oGeC9/b2hK6uLpOjmX9YxEqlUlhRvbRvg3YJjwHapTpZbGhLWdiU1K6NjVoAU3Cvf1QwCxFtWFEbeaRkVMByVk6/cARncCDUVE5ZOJNOy5/SRJxbSfBpoQUP+sHwUNsZX8if2txKGZvZ9yctC7xKmgvlckn9mrNxUdCcIRBXFo4ljamcFLyeYo/Gcow7ab0nyW9yaSwzR1kDejWWGZf1fQopMuaZz4xZ5jnzPY3fehkol7FPueRljhR7tK5onlNOWXMfUuU65WTrizLFtQOrhLpIlwJr2oqwXF0paQ3Ib69ZKf6gd/IznlkT+f0BymctycpwUBke7wicNQL5xx5/PFy9OmFEycSL5L4apmdnjYwYyLlc1IYZ4NPT0zbQIRfp0rbgcFp4ZHjILP5Z5ZtfWAxrWpSYdBDYMHFjYzax5+fmLJ7JuqlJTPzQ0GAY3xiziTc/vxDm9GJhE09qYevUqc+BMDo6GrpE5kuLS4qfF6lpEcDCl8yDAwNaEMaN5CHGqalpS4O1jwLA88C7VA+LQi4XNfBmAc1CBJnNzNDuBSkg67Y4UV9paChMXBkPPSJ5iG5aaWZmps3avnplwhYILJq0SIAXp68XFpaUbsaIG+UBO6FHysD4+GgYEw60g4CyQ7rJySnMmnD92lUpXHsvoJbplP/QBsNjVv2sfooEv2l9yzgAD/rjIEvulMVsm+Lp36WlpcC8yee7wpUrVwwr8KlJQV1UHPMBRXd8fExpoienlQ0wZVVjD9lQyvNaH9KYzMqFAr6yvBpm52atTciefpxHw4QhuyswlyB3xjPrEO1FQV9fr4Q5rRvE9fQWzXpO5aQC0ro1IxyRCfxIkxToSNDLwnnOZM2LnIk/zDhkTOMxjEr3simpzLPTMBZSe/zdEWgGAvn5+cUwLCLC9cRAhnhZUGZn5szCjgTfqQFetYVofm5BBLUpzbrHJiGDHoJisJMf67oqtz8TPk06Jm6XFi9Ij3hIjAUrxkeiJj+TjQmIxm+Tsztnmvvc3LyVDVFS37pIFOJmfVgVuUL4XUxWKQNmOcqiZXHEquiTgtIrD0CczLjkmgHbThm0obxaltKzvNVutUuLARbZ3Lxwkgy4z1nEUY5YvGjnQF+/LRr1C926sFldXVG7otXTI1xoE54WFsg+WelgRX8sShGgvMdvTNq1Yd3+wqKq6JYF8MAiXV6KeODBiR6Osgg/mOWEFX+YhbVljTjDinFf4/VCse0WVii7m5t9JgFECpb0PeNoQIosVmkknKq9R3dzVMDJRP8Tj/KrDxrvGvMiSZRp5iHf8QbgoiZwDfLCq8TkSK5r4ignlhe364zMlZdyGdR8t605zSnq26gqvcYl+aKxUI0eNxkGzNchrTOMD7b+yF+/NcgatCYLfmFxUXOpojUGhbxTc0eGhRRZrPfo6esweZkDyJ8MExRevGi0g7WiWxOBuYJnhLQomxgp1maVH93+FZMJkaiLccl6Rhus/YZb9CzgcVTh2/GUSRrKo6y4Dsa+2MtLAa4eHIGzQiCvsWwExODFPcZCMyUiwu2LW7t7yyJkkSYet3eP3GaDA/2ajBWbwFyvViumLffIFdunycUiXtbi9LjSE19eKytebjPF92ixwmWL2w0XNAoBJIbFTb3dXd1m6XXpHc2d16IIgwmUPAJM9I3aZrgxOWlkQlnUwwLBxGOPDEuRez7ZQuhF89+avM0G17YqTJnoDX09arcWGuRCkaHd3YUuw416495dXFhZHCL6O1pHaiNygzPWEd4BFjhro8qsCGs8GHgMloUX7c3L7Rh34imztYE2QEjJxYo3pladtYWUvmZB9BARMBJhbqkPNzUMGMMoeVxn/Nh3zTOs+2qtagotRMV8QZGk39n+YiuIPCgEEB1pmU8QTafGfSI15gBbZijukBXloFBTVwdbBMxP3OKKxQtn80lxKBuQP3mZv5qMKldl693qlZKLosIYRZkwBV3kSrmQeq3WGSpqG/O7JrnwvDE+SGdKgsEhspSCwhihjUuLy9bGJZRn4TM6MmxKTofyQvolKcEoJ7jcmVdp/lMnyvC63Ol4H21bSLKbHFJkeKc82o3Ma3rRYDyEpEUZoVzKZ31CIQFLw0jtxbKgroQ1ayJlgjXbFQNaGxn/TvJxjPvf1iGQT5YwmjqTc3pqOsxMz5hGyj6y7QFuubKYREwuJv2SNGEmCQsHiwZkzOBm8vOdwV2rRu2az2jSTB4sahYE8kJOdpBO8Uwg3NtMlJ5BKRAiOPYbITNcgUwuVW7eBq5D9CxOZgXkdOhFZUi3NnlsIqsc4qmbOUn6XA5tvrlgUz7KBuWzqPC9KkywlPhs2GhxRtlQY/kvnJFLQjUIWB24sgdqA7ZwscCwQFMWlggFoDgtSBHDmwGu7G2zkNH+VgfkRKFirLDQ0xfLem1sioyEA9etQ1otaBvVz5jA8jWXvLag6O8ujSUURcgNMsETAnEzRxaVhs9gy9hmTuGFQ7FC6WNcMMeiZRnnJ/1C+YQhbaltjEVLH48Z85C0pMHzxpYXQ4l6mEME4gmQF9tElA9BUieB9YN5ilwoAigcPVJ2kRFlgfnOmrEqRQBvAedF8CSQn7nAO+ROuSgTeOY2tA6ZoiDPHNY/23QoIBArCi9eImU0Baeg66ZMiJhZxxYXUV5E3Argg9zMJYSBsMGWs0QLS4vCtxLd+qqnX5410oLzrAwLlBJz52ue2boi2fBg0l68dshA+yiYa6xx1zYmbD1Adg+OQCsRyGus28BkYrI4zModzuCGRNd1bUqTjAkwKNdhmsxo4UwiJgpuuoEB7XdpAnAghu+QNosMbmYWBogfK4OFn0WE8igDt/VaeV3Xe2ySm5tQaKBJo3hAmqada8GgHHNRqwwmDvXjbmPxY1GibGRGwWBCY30woW3vjsUCq8GIsrl71JRpHgnJgIx2CFELH4sBBxCZ8Cx2YMfCx+FDvB22gtb1PGkgbMpkoUP+UikummxvgCPXbQtF+5q0CVzJR1rwS4tk6qu6Kk79K7JjvaDwMabYPuHcBIcBBwejYoYy5mEHASM1jRfDS/MPbxmKK5a8kbnG+LqIC6sVEiMd7nzmSEmEyVkHXNrMF9KTD+tYw8JImLEGadE3WKy4/OkDyoIoISY8asgRleyq8naqrEUbxyinjN1kSaOo5UWGuMNZA5iDzGlevVoDmIuMAVPmyh1G7iWlYYzaONZ8YI6SD2WV+vFEoNRwtodtC5QHXhyQHR0d1jjXAdKt9QPixtOI8sH8QkGgbWnMR0WlaOsEZbDOqHGmONBG5gjrD/LjGQRH5l2pHNuADMgGrmA3OlKwslBgklLDXGe95NAs+HR3F4zwkQvs2U6hzCTTTm/7J0fg7BDIM0DR4JkUaKM1ufY41IYViUVIHJosA5rJsanBz2SCZJmIaNto5yxKpGdRwb3GIkJ5TOghlYVrz6xMxacJiftZ68hWGZrYKmu/wGRh4WFhYp+OF3UOSF5kZmLRDjRuNG8WK+RYVRvmdS0pAfvVcZw46oTQWXixrFlQWGzZT8UVmjR5Jjxuzf0mPXGUxwKDhcCCgcuyXwvGgDBkMcTq4iAeizJ9UdHCisKD1YNlwuJP/a0IjBEWRcaB9TP9IVnYxkAhwYo8qJ9bIXer64xWYMQN7GysC0cCfzdwz4usGNMQ0tiIrFmRKQr51NSUxpyISv3O+EC5wgOGk4ixwzW21PDIzWnsRA/cspErc5TrjE26DuWTsawabb6jPI/INQ7BQ9Amg8aamNfmvM199SlzsqhT/iOjI3bglvJwXdsdNxqfKB6dnauKG7TysLjJyzkS5LG7LDRXWFOwkKMHTHioEcifdYNzDXyQN1nV9kXXUIzwDuBlQLGesbmiQ7uaFzFPJHiUBDwKlUqsmzWDcckLuSiX9Ozlj+mAcHe3PIZqN7KwRhLPWKedNs9F8nxnveGkPWXwnTI8OAKtQiAPgTOIIQoGJgMWV9jViSs2SJm4TISFjkWTEY19SIsHJ+fXNTkgG/a6cOWvS5vGisRq5jqa8NDgkLkPu+QehwCZHCxZaN4sHBDZmuqgHlvk9AfCYjFhO6BagfjZ3xLxabJQBofQZnQIsCzrn9vjKAdyh0ggRxYlvAjcXsREZHIjo9Uh+ZsdmPSc8E3thsjACLnwKqRJznuj6c5CQJ60FiAnCyLWFVYTJ3bHtHCioOC1gCST+xsrZnlFi7Xa2rfSZ4sQ6bIWTbPbu195LJDIQhvoMxbZEVlgtkCzr6lFsqI+7eryxS/hSL9DoF02J0SQEKrGMjhCeFEhguikSIuAGVOMcbBFqWNcgXfqc8gIrxL4Y0lDNswP5jkKPRY+19ZVFvMZz5hZ3CJHtsqwvCnPlEUp8uTFukaBwCvHnIoyofBru03zk2uQK2OV2/lwvzPTmMMcwKP/c50iR40PU8Kl3OPtw0NHPMo+15kEOW1FMYZRjvHmsRYsLMyr3IKtO7QNjFhHmNccFMZ7gJscxQAFiLbiJQAfFGWsdjQe5hr/+E4b2PZizetVmRz8BUPeaReKef+W54C2gVOao0xk5M3pIDD49OkFhij3Vrba1PyVJo0Yf3cEDodAnkFqA1UDGAs7kSQj2bhQ7ywgTAZIkwliEwh3vPKQ1xYLTTC09cVlEdPUtC0OuK5YjFhoUAZwX+Ma40Q9ixOTiTI21+LDJ5hYkDskgHuQ73Y6XcSQXIi4zbgVBqJjQhXkGmNxZKFCDl4sIhAph5CQm8+0LS6AhwPmsKlY2GxPcOuEPItyv6wlFkPaHck74sbCysKJVcWCF60lLFrcnJwxYH3rMNchh/QWtHCxsHSrPLOCbfHq3lIcdKuc0q+viUjBcasfqbOVAfxZ5Og3Wzi3lA3kq2yKUIRXHEe0tZWStk/dqH2MTfDCG4XyDPExrlBmmTdxjsb5AsbRVYy3jOdJyJIUKTNGTDFWeYyDnTER5ylkFq1fzQf1B9tqzE/qZa6ZMso40jhD8SdNLIc1QHkZcApGXCwO+k95pKNPkzJd0hmTKAsKRLyDJt6NE8cpijfrAcQ4KsWV+QqpIy8KP2tCj1zzY2PRCue2W9YNbjMFJzwXdqZFsuDhQgnGEjevouRiDlEWygVtQWrzCmwxLu3Id4nI1XawJB/bi7QD5cbkUHmG39bcsslG4zOBchnDO3WBU8Qok8w/OgItQyCPKx5rExc3gxOCxaU9BWFqMeZ73FfrEylVjFh5SE0n+36aHFgVLBDkZVG/oVu2uDebxYTJyOSkHMgY6xvLlIUATb+myc9JfNOUpQygxaM5l3TyfFKE2aX8LHLR7aYDO1oI8AxMSYGgXhY2yIT3AZEm5aAcYNWyJxnvXdVCpUmLpU88Gn4zA21BGXn88UmzuJnsWC+46qKVHfc3oxWyYHt+LM5YA4uLA4YTOLKIgyFtnZudV3k31A4pC1tWO3H9/QN2y9+ViXEpL/HWnBURAIvoamFVbthB9RXWu1ziSt+KoK4w5YX9SjwbxUWdTZB8WFqQFnuqjItWKyKtwKZRnfQThAY2jM9ujVU+Q5DpWvqO14uxjLcMJRdlmhPgjDksXuYhnqSo8EWMkyVt12x86RY5lWEPzZFFTP28mJuQYCJ7+oi81leaM6rCPpPXrlm8yFDvzOWkvDI/KYtrpGM+o5xDpjbnNV/i9tOqeRniHnqck8wla7fqCNJfued9WJY6VjwKBMoMt8xWqv2SWaStwUYdKPiGo4SUyFE+JUDXBVvmw5ZuEsvHwpdyQeBuFOYmZWN4FFVG51YbY1ujokB9VtdWHAoJ6xXlMpZjP8ZrpGv2OtNo7Pg1R+AgBPJX9OARCJ4FggGL1Yv2jsaMwste2ZDInz1gtGQmCxo6ZM5izkGyga38uMOYdEwMFh2IPVoa8fAYVgITi7ypfKwI9rBwuTHBjOCklTPhUC6YvBwQ4pAfE5Hyo8Yc77uPLkodzNOiyHUWCbN85EpkcaG8ISkPWEUsNEzEZgVkgcQg6Ojq3Gq3MOSJWciDK5UJz6JHm2y7Qd/xLMStg3jnAG1F99ioqQ/UBuSkTbyn/UNwRVFJiyL1F3QLHooEbeakMW2kza0K1M1hQBQNSJ6xROBglt0dMKiHDqldHiICjBFczvQdVniXxksao8TRn8xPiNdub5PiiheLw3Wl1fiY6aik68yMiIZ0cdxFDxKnwhlPnMK3MqQkUH5yozM+8YbZ7XBytSvWvGLUO7ihg2LIJEJkbegf0K11mj6MP7x4lKP/9h2PFIouZwSwqFlHkJc5z/xm7DL32V5imwCbGs8VsjI/UsDzxfkB1g67/U/jiNtmNdSj0qwPzBWUERQFItKte6wlrBG0E2XJlA+1A6+IfGlmbuNBo832VEXJk8/Fh1Nx2G+jO97ehzx4GAm0tUtjelMN5fPwcHy+Bu1iy5BgXkRpFtweXNEZA8uj781baawa/+MIHBmB/JXxMRvwHMxJxNy30muTBy0U1xXuNTRwyIzBjJWANc8AxyJL1gMLAZMetxsrAfFMFvLafpoWdiYX6VkImB9xsvXb5EiTHaWCOiBBJipWbLQSuM1l07wNkDcuOHM1ql5uVUPZoA1admxBo4JUX3pATFo8j4xUgwyUhSWOu/CW69e0Tx73BbkO0VE3notIaJJbSpIpUVpIUVw4DEQaFru0yPFOevYQWSRtEWHhFkEazsKDNGBF4FYknQGyhQ2crf0A26KAbPQ1GLDQca6DscD+KVsXXEttbZGIbVUtWHDimn7jM96y1LcpjrmZxhOkyDhnfkDcjBXGNuMF0kO5EtyWhj7Ak4b1yziE8AY7RECaK5BhHIM91l8ooGiYEDtlkJd5xxqAS5zvoyMjRowmj8Yk45G5xrhDLvLhPUPZZZ2AJLFuIVMs6YLaQdxaP7evdWwrCalDqIsyJnT+h7lPftrHa6yDW+SK1mbwwSsEyW70xackIiPGB8o28XwHU3uWh9pKwGBhf5zrzDuUbXBBZryDKDOMT9Y8cIhrBgqObndT+3laJ/2DFwXs2OMnpLpQZCg3Khg7ipol8j+OQAsQ6JBGu8mEYAITWDTMIoVAdYlFhldadIgjje1tK0GKJy+TN52S1kcLWBWR6LFu45402jllsDjgBmSypPJZKJh4xJu1rr0/nlBHPdSJhs47cYS4iLGQxTRcxzVPfhUvBQB3Z4xLbbSM+/yJZcR6UrlJvvpspKWuiBlyxRQ77Y5t2ymTZZjbC7F+4sEdctAmAjLy2V4UtlUe9YMfiwdpUlsoN+HBNdKlOCuwCX92ZI8HpLLjoVHxEZOt08jqy/p+brZ8jWRo5bV6vPZTumL/xTHPgAVb8NF/G+Opb2kP44XAeNueHxoTEBsKAEMFbw4hjleNJREhgxJlmH6I5x929qkpP87pmI9ykgzIFmVhTDFGmffpWpzLyJz6M8olLxv1K0Nq9045Joq1CxnJVz9ebdxLJoY+cchD4HpqM98p07BTuhwYiHQl4lbZYLKTj3Qp8DnWSXyau1trjWG5sxaRNslIfpQA8I2YpPbHdnDN5NmKTximetvhHfnwYIAj8qW1pB1kcxmai4DGI9Ph/2/vPhjjuLUtUTfJZiaV7XPO/f8/bN7M3Lm2MnOm3vo2CDFYlkibySJgF7u7CgVsLOwMVGkyk0k/5/4LfTjbqlw4eeGr287auHD27KsWq/k/Xvp6JvdLe/2o2tf6N/4SIrwa7C90YGzdYDclcy703yPjR5i5t6C5Dj7f6+ier/1VPIrMO5/newbjGt1dxasbumvc+mBV0ExYvifzD0bcdzq+jsx95/avl26rna8NPsIv5ngY+Ec4MXdAUjfwf7oY+iNB/1PjjtjrGNU7Ne5nRFyHjlsE90eYfYXmnum6xSHevKk7n+ebkzTu+CMC35XnP1Z/NGeuI3PXIfa22rlOX6POQOC+EGh5rPvqbfQzEBgIDAQGAgOBgcC9IDAM/L3APDoZCAwEBgIDgYHA/SIwDPz94j16GwgMBAYCA4GBwL0gMAz8vcA8OhkIDAQGAgOBgcD9IjAM/P3iPXobCAwEBgIDgYHAvSCQfy7W4zGjXEQAJv3o558yTh2Lixhc/N4xGp8Ngat4DawGZzwGBLxLYJSnhcDU896jXEaAQu4v3HDF73/qY0SXR/bXfg08bobbwOtmeI3a94MAvrz4sqD76XX08pAITE34KJcR6Ara2YvfL9d6Or8uYnDx+9NB4GYjvYjRxe83a2XUHgjcLgKdF59ysHK7iD7+1uqfi338ZN4vhQRB8UkYvM3uKZeBx81mf+B1M7xG7ftBoPOl3oaRvx/MH7qXvEXzT19m99C0PVj/BEFmQ5q+v6r2KQvEwONmrDjwuhleo/b9INDX4C8a+vvpefTyUAiMCP4byBMAwsCo9+MpR/EDj28wyXdOXcUL7zxlB/E7UI1L94gAHux7i4aRv0fgH7Crp517fkDgR9cDgYHAQGAgMBC4SwSGgb9LdEfbA4GBwEBgIDAQeCAEhoF/IOBHtwOBgcBAYCAwELhLBIaBv0t0R9sDgYHAQGAgMBB4IASGgX8g4Ee3A4GBwEBgIDAQuEsEhoG/S3RH2wOBgcBAYCAwEHggBIaBfyDgR7cDgYHAQGAgMBC4SwTGW27uEt3R9kBgIFBvhLwIw12/E+DiM9437evivWi+6f0Xxzm+DwQeGoHp/v7+17e1zc3NfaXn/IUIk8ncnBe+zOX4ejlvejuN4LaXwVx9kYfz7fokbbdXvXZBcf709KTeFKe12dm5tD+bo/V98XoJ29mrYqe5rh90Od//kRzn3DvndbL1Iof2kpqTk+OzV8263up0Gs5HcXvf0K3PRl9TDGjzpkAYKOiuf+wh32fPxvUtmnq9/jY9dVo7s4VBXQ8Op2dv29N27weej6Ggvc8lembNQWhDX4ZzqfxovJcq/2Q/jL3k5TSvRc7Y8Izjaim+SV3lz+pcvecx/DY+MnEc2ZiE/Lm5acljp+1b/N+v9XtLDiJfALqqL3rd/ukeuuHk+GQyExzn58nfH/Hs9b/1eXR0VLxLb5CrizRe/P6te8e5gcBjQmD6f/7vf0+Wl5Ymz58/m6ysrJQwnEbZ7O3tTXZ3d8sora6uTpaXl0swuwDt7e1PDg4OIgBzubYyWViYL0Gg1DkN2zu5N4Zcmw7CQlDdt5N23UviFxcWJ6urK9U+QdzfP5hsbW1V3ydRDIz38vLSZH1tvfogfDtpe29/L+1/iQDPp/3lyUraoDwODw8nu66Hfv31+41hcXHxxsJ+nclCJ6w2tzZr7PAruoLZ+vp6+l0oHBumoSv1V9EcXCiQi4UyPDg4zBi30+be5CjKyhjUN4aF4EWB7e7tZpx7k8OjwxqTOXR9KZ9zmZMrNvRiF3f6vfGHed7LGHZqPk/j8MF+LfQZM6XbFeX5eHcKwz7elWC3ttbGc1MFfacDvOXGjb/JxE4ZQHxM1vKKyXJYnTyOscILMOUs9nn+J+CCH8g6fRCBrflfWGjygAe6Ae380OF1H1k37uKjtDE7Mxv+pi/wEX3EWbzM6WSeftgNVvORrfX1teK9q/V6P1c/ydbW9vZkP3pqMX3hWY6CeRJkdHqv3jd+DwQeIwLT/+9//e/Js2frJSyLi0uhcaYE8sOHD5N3794Xc//7X7+WkSojHUYndB8+fCwhWo8Snk7ny/iKKF17796376Oavkz+/e9/nSn0xVJk796/n2xubrUIPEI8jbLX/5vXb6oPRvL3399OtiNkaKEMXsT5WEgfhHdzc3Py6fPn5iAkIpiN0K1FKb5+/bqEf2t7Z/IxtFGGlATBpjBfvzlJO89vJOzXnTCK6PPGRtHN0JdTsbQ8OX152gxunBtK7t37D5P37z5UJPKvX38t3DglF3XU0dFxOQrvUk9bxhwY48BkDBnjszgM+wf7hf/O9tn1mS+TpRjQVy9fTV69eTVZnlv+g+K77lj+br3uHH78+HHy+fNGjZtDQzG+fPF88kvG/Wy69pU+2JnT98FmZ3cn4/VvVn+ZMPBvfvll8vrV7J3M2d8d523df3zG0//z228117+8eTP5NRjNxqmV5YEnmSITMCWj//Vf/y656AY+bH6Jh35E203rX2zPvbzHy2b1Yo3L37sD8+nTp3LIM5zJYnicISUnDDXn72rB99uR5ffRFxtn+sJ4V+MgokFA4f6rpRvoT58+lz5Qb17dZCCvUziYGxubdXAOOBXGcHR8VDzJ6SSzStMvvdXrItLrj8+BwN0jMGV4Dg8Xi4mlCo+OTkvhvo1xf/v2XSmS58/X6zpGF50zZh+ibBQGXlRRnnqU9UauvXv3bvJ77iWAhOTk1ctSXjzrjSj9/fQpKlcY4tMo9eUYREUdgn1y8iWeuqg1EU2EmiGvvnO/65QCo+H+zxFITsbx8Ura/1z0u6bOweFBDOZW1dUHh+G63nwR9IM/JfyHiTQSraJlJljIaHA6RNWcosNcpzQY7bdv34aWOCXB7dXJy+BmmaOlEHvUAoO+dCIT0MdIwX3JHLhOgfnNeaGUtuMMiDSWozCXEuUn3PgB5Xdz2fJLZXAyR9KyC5mDk9AnSv0UDFbX1iobgXbG6zjKniMjIyP9Oj+/UOOl1OczV3C87Tm7m5H/tVbxj2jz/fuPNa/HRyeJHJcqAzQ/P1NRLJn6f//zWzl1Mm0vXz7P+bWSSdE9vsFTDA9ZhKt50LaSBbZaIlGPAWQg4Y838Yzr+FAhN8ppKpFLzid50dZxfnPi9aGeNhTtut77c949jLRs1NbWdsmkugwufiYvLZJ/Ve3g84tyic7SJTHwJ8eJ/MMHi+EHxno2S4aK/jiP+KuNqeGlfTJ/lOzW2gr9lMg7gURf5mv0fql+YSATqB2OJYcTr3I60bMQusyPiP7lyxeVHZuPrmkYt3vQQtfBxOfFcbg2ykDgoRCYriQFtRalK7WLwRkPBpyQSK0S8BL2CEFFW7nGq6aURZPSWHOUQiTMuhdjQ6VQOBid8BCo5jwcJqV8VAK3urqWal8mh1EA2u2HFDvBldYW2a+HNl4+4WE4XCfe5fmfpasPcp4wHx5OY9CPil7jWVtfnUy2ZnJ+u9qncCiC2yzGhvaD0KWIPF/EIeppxKI7Do060Yul4NRjqN17tcCbsqPIK90ehSGb8uHDp1I8rm1HOWrv5cuXFdXvxzi+fdcUkyUOyirq/mrT9/LbkBgAtPfobC/zc3zyIcYhkVvo7oagCMqAa7zPnhc2HLmPHz+VcjfGFtHfC+kP00kAK0MV3iwHNvIl88EBnJlZrjn/lN+M3UEyN6enq2WkGSE8L7o335a6ONOwZFT3soTDSHI4F+I09eUrDi+ZZNg4UDI/MGckGSeOd+dZzn9zBObKEetLa+qJpC23yNKh+yB8JxvhGsOtOE+PNAO/HZlm3FM3NHz8+PmrLKCFvOi3dEYw4bjgm72Mz7IUXUMfGB8nQdG29L028d1CdIasB4e66An/TKcyQ7t1T1vaWIwOanwo3Y9P8Vgt+aUN+2hgQZcZv2wjZ1p2Cd5l9DO+JvPh5YxZWQpuMoQCEhiMMhB4DAhMCerzpE4Jx/7+YSkXRp7Hy7haz5XeOklEsLt3GEPyvtLMBJtwUDA862iGUhruobBaJEdBMMctCiDAhJkAchAUSoHQtmiAsmsOAeWkjuiCUPV1/K58moI7KodBFOK8tV2fCuXCE2D8SX+LbkQWdfnW/jDSFUWIbjLuo4wNfky3jWVFV2hai4IqR+eMth79XCWEcrQk8eVZsJ+brzX2aSKzueBoIyEsNE6h+WOfA2XEcGqTU1YVrjZ8T7/Nb99bwDEUoXNIODTmGR41htCDN8wZZ4ZiNPfmvAxTxilSEn3VRN4T/fffjU2oc5Gh+TIS5Mr+i+1EvQyx9eCSg+BB3nr0iL8ZLvtVOHXWmw8OX5aDyaB+jFHCG5XRSVof74lEzUeXNYadU2BOOM7a+LrUlXZFseZMvxxxtDC4dAFj+SoOpqIvtDCu6mrvKO3J1JEJ9KHXvHOEd7J3hOFcONMxa7W/ZqHmP1XO+CNZidCHRulxtAsmmq6YKx1iqe5zUv/0ifMcSk4L/jnOPYeHbQ8PJ0Dfz549KyehOR77JWcvX0YfxXB/ilMJI/KHZvMgINiLU+X+rcyJa6tru5OlyJuxmZfOr3iYHuQgDQN//1I0evw2AlNCQVgpYGlk0UMJcAz/NIrniEcbgWYoNzaaN8sDtxbIw7V2yqj98subUtK8bFEDI2c9OZJVPRMwjE+Z7e9v1b0uMAKVbj8zzisRkP3QQ0gpBoaccL/J+jPjwWgSaNf0w4NGPwGvI8qFgErxWo/naBDMSmHeUdqaIoIjpSIaYNAoBVHE7L+k41cSgcRgxwB3x+RbRgtGlKPxlLMQoy01aM2dwyXTYrPhaZYv9jMHlCoHiZLRnw19Fw3ot6f8bs8yHmWIMh/4YydzQJmbrzYP56ldlKDXYb4ZJgaLcetYtEzQ3dL80K0TEYYJj8CC3HyM4SojHjliaDjO+KtvUIQPgwzT/b1sYgvOlno4e5asRJ2WuNZTx/2MMyPO+TI/nWc4g+RGX+RwvaJk2TKbXUXdkZ1K/c+mr2zwDG27m3uZW9FsS/N/rj0xh+WokQVtuxeteNYcooH80gF+LyxkCS10dIOov+Nj8npaY5qfj9yEn2WpZC/0IWJ/HvqeJ1JmjBllMtA2ZCYLubwYnz46InR1/tE+ntzOfhW8pWjHUfQF81pGCH7aDLll3NVzXznXwZDx1g9HVNaDPIr28TeZhwWHVb+jDAQeCwJTHjyGJeA28WxsbjSDG6bmbTMulAfFsxGPniJ+nnTqi0T9gkib4XjSBMl6MIXTUoIx5mfMHrlpBiv3Sn8RHEpFaWnYRKA5T/gJNAUk1S87QLAJ5nyUQp2P0SuFGAEr7z6/KQW0WirQHsIoP7/1V/3kk3JCy22WMmgZ++vXr6IcVqNEI/Tx9j9/3qwIaC34MvDG2zcGfU8J9GsUItylZ2HDeL/I2utq1hQpyIr0cn0rxnMzczAXUCgg6/5oeqhyEV+ZFXNURpozlohU6tV89WIu6558QbdMy9w0mYg4MTBwULwdl37fz/aJ98t4ZP4YO8sUn2Y+Fy/LruF9TnatmcMqxpKRqSxHvotyLdXgMalkxsYy2IvnL8rhZNwZq9evXlU/9tD0JZDZ2ayvZ17m5oL1WQaNw89ZOJkyXi3LsDAfOSNTmRNLYctZBmD4zCvnoEWxi2V01Xnx4tnk1zj+ol3tm2v1zSdHgyMrquZEeCpkMwEEo2m9Hd3NKc6eloyd7vF0DKdZphFPcfx9Whsnf/A4zDUbdckbmgQGePDLl/flcHI6YSFI6LzVxtoeq+3jN2bOylJoW1kRlc9kPC+StXhR+m0nWKNFH+h9lX1GxvSQsvezycQYz99HYMrDJgw8fAJPWHmkjCsDQzgX5rPOHmYnHAw4Yfo1O5zVlxq2VsZBIJxZCfsGVVlrj0D8xAcBAAA/TklEQVTtxdu2/uXREwIhiv346WNd0x8jJhLmLDACvHPCyIPfTSR7FCUhAqYQOAI23FAKsgVoRU+lCqPwXr56UQJHKVAOPHb0a1ckcVuFIrARZy60n2ZcImprjZS0/kqJps/mznzbu6fwHL3UTvpEYZ5GEHlQItKh9chd8Bd5UCQfz+ZkPp+uvcwu+h6x9Lbu+1PGpI27OXKWgOzuZyw4bdY6zSl+Ujgv9mVQsuaFkZAylU2SKYLfRWzuezz31V/xUSJk8mhu375NOjy8zuhz7MidTW8whM/urqddDsvoi+wZUAYLf+MyPOLRSmvDMFcYQPzBWdAevPX7tYQHyb9lnn6YN3TUHhp9Z+7MWa1Vpz9sy/lfCM93A8f55GAsJctnicBvdcxjvQ8h/XK+6R2Ha5wP393nt3p+F8+nHTi8zeZdGUZBBUcGbT6Nx4GnbMiTKfO9pczb/p2tyBC84NP4qcmc33V8lb8mh7U0GFo4B97f0OlDG4AtWdCNaHweR4aTgYZh4L9y0/jyCBCoFD2mxZw8VILP1T48yLrX7M6ZsEhVtV2ilMjXXd81gBKFr+cIPiVgDY4xl75n3AkcZc0AzM01gXS7iO3kxIahdp/0Wu3oDQ0UCcVfkWCEtgQx/VubZvRsLNqbehzutPqgrPShEHzKrP9uSikKKf/dZqEstM2o+U5PULalzCiaKAcqFG5wEfnUWEMn2txrXIxcIZkxSPH//vvvlQWghGUG4K9x7bb5oqDtnJ4tJfjLr29KyVA4l5T2bQ72Gm0Zz2bSs5QwI+OJAruezSHajZnB4AhRhn5vb0lzHoUHl+uccSkcTdi476cvmXd4VBYsc2hpxm8RrowZvpX2tiRlOaat/QbDzL/5xgcsTyFV6WK80fiDcbI0xkHAp6le7ePDypictVEOWCJpfZkj1xUOtgxB38ei3ZnMs870bX5bX4xhdMVs22eBp2uJKUsIeL8bv0qh517Ztd4H54Djbr6rn9DUaGjyzDkh82X8Y3j1h4fIGucdHu4zPueVlu0IPqnv4DwYvMwinhKB21MgOEGfNi9yGnlUF914kcNZ+xhC97t378O3W7XMgC73jjIQeGwITJvXHCMSD1kanMARMhF19EQJDg/VRrz5nfnJxzA3BaNOGa1EE6IEkTfhcZ/oizIidJT8+lYejUp061E2yobna2POTAlZ1pfjYDDIFJAd/C0b0Ayi7IDHviwlkL5yHqI4KB3pSQJHAKXRLDVQgARe/8ZCSfQUYo01NN5m0bY+0E1hwMSyBsNFWS9nXZDSQBOabVyCH4UslViKKspTFqI7Mp4Z/u23t3UP3KxJ003HcY4oe1gdxAHTpvIsUe+rpF7NQVeideGB/ng8zrIKLCg/ytGcmmfjrfk5i8I4QNKz5ms653FHjz62jZEUPv55SIflziHMvMKEA+fT3C7EoRM5wonhW0uqXRTuuvnFc22/R9tfwrBxzPF3c8RjzE9tUGtryBxdyzdkReqfsbQvQkTLsRfpao/sWvtfCC+S3eZcZRkt1/ZipBcXk4rPRjdyvBjZ1R+a9F/0hzZ0iLa3s0yFz99nfOSQPPQoWzrL5l39e5xtack9Xmp0/jw8HcHRlX075TDnP3gYv7oyA7Ohk4FGs/Y9kskgtyCi4cmol6HOfYUvmvN9PwYd373POzPwqfvhon3jkWFQvzDNPTIaxaM5j25PtlgWfJb+jLPplrb/pByJO2ec0cFA4McIRC7b42xdQfBsrUMRRhZ1bz/rZEn/2nxjPYrQEzwKQLE+ZtOLtWaeeUWpEU6FslIIDyVtAx5hcr90vRIPoyJUqVnKncdP0fDEWUYGwrWXyS4o2iH0hExfOROjd54iI+TW7V0jeBlOnAM7fl+U4iHct1uCVzqp/upRmhZxMLaWETyGSOnUfoY4AOraH4CwPgaY1OODqWc+/KZozAll4V5vArMkYQ2ecqRwrD/CVD+i/HqDXdp4yIL+lfDESiJ3Rr49UdB2J5tHdNoLYWmHUTC/6rbNhJY1snkrU9SWHH7+tKd5JmvmkaHlpMpkyE7hA3OqzumXbLSLjKnDcJMpy0CuiU7JGgPpXQ8MlUzKSr33QUbHkljk52Mcg7Qp6nWdgHE0vWeCHJIV1/AyWSx64hzg2bk5T7TkM5MjGNAmnWB5Cj/jTfU5AJYU8LNH9cwnGtHOWXHoqC0z2NXfMlp4tsYS/q3+cg9Z5fRzTBhtso4vLO9xnuH2aZZxb09qrNBboXd5KX2kLr7iIOJJS0UMfdNrrS/6AY70lv0K69krQ24r4xE6VsOrnAkOKrzQxVH1XVswog85HmSVLuSUxn3JMcpA4OERmPboyGf/jj/DqiVImBnz2jVPmKX61nZtJmtGu786ksApBMgGPIxOmVDihFoU0SON9QhEGecoFIqpXw8BEZuIR3bQdsVgHW81gtdfhMOo2dQiWm5GblrRiXV9ytCGJIJG6Op58PRPaVrbtGtXlHybhVKCgbe0UXDSnBSK8epT34pPkTYsRbjziRKWMw54iU6Mi1KicNUpxRJl21Kw1jkZ97ZZD6baf/PmDchK2dXc+PHABW3GDWcKshy10FVzkDky33iHYWeIzJVrxmyTGGVKcVK0nAH1vvLlA4/tLrovvGL8WvTtrX0eMxM5tsc99cmwiMBnX2fZKvh4ZNJ+lPZcfIxusMb7XhLE2DZj5C2KeWwsMgtP+2ZgSe5cn25N62Uzri+Hf21o8wRLl7taI0+b3fC/eJHUdwypueB0lgOQ9nw3Z5wMvKw9DrfMDBmUbTAeMmGO8a3iftk5tLuPXulFH9phzLW7t8fINl1Cz+Av+OAbB0dH8aghGScUz46b8wED7dFJZEq/fuOvchw4UTIQaY/OskFYXxwSvIrmcp6SieNIGAcH5fmzF+V0aGsafWV+fvpsU5+g8fmPQSBZ8nDrN4rTvFMFE9faeAwR5ifQPGrnMbyDoXOP6+5TR4RQ91JAqeN7r6Oe0jex9LSWezkGPpl7iouyaGuMbS1b221DX2jTdl1HQ5RN7uP1u66vqzRWpz/44z5KEA3G1cf3Z7e18Z5tcsq9IvaruJzXuYwLxZbqhZdP9FKKHk2kSHrpOHYFpT313INGx12Vm+KBDvNb81jz3ByXqzxwke7GV23vQs1ZFDHlf5fjui+8+pz9WX9X59L4rxZzoB6WcLn4Kb+d6I9oBaw8JOZU44vGM81wNnyb3IquP2eJzFKaR8t+efNLjJ9XwJ7LPNwZ19pvc3Zen+k93bRgoM8NLkVx59EaDxkMDzdazOPle9DT+ZdsNzm4PO4aY+qpqx1tzGZ9v9Vve3LO+YYuabqg8FE/XzqNjfZGY0hN3/iz7e8oPZN76ZLCPvc2uhvNvjd6o5Okl1Kc81++fB13l/mq8Aj/oFnGwljQyon6Fq89QtIHSTdEIPNawvSnBv6H7YVZwh0/rPZnFUqAXPzTNggZAft2C3V/G8K3K9TZrnq+U+Ubl7R9EwP/jSZ+qlP3i8dfm7PHBPhVvH5k4O+bdo6XTZCeMEFbW3577JmS7/PFX1VH32/1vmfmbvvDl8PA3y3Gj6X1buDP84A3pezPLO812/mx5/jnxl0XP76/al2TmlHt8SDwJx7d4yHwH0+JqNaymCUlciQNfz15esihf58v/qo6+n6rDzne0fdA4O8j8NcN/N/ve7QwEBgIPAACUte1MS7R+ygDgYHAz4vAkPCfd27HyAYCf4rA44/Y/5T0cWEgMBC4JgJ3tzPrmgSMagOBgcBAYCAwEBgI3D4Cw8DfPqajxYHAQGAgMBAYCDw4AsPAP/gUDAIGAgOBgcBAYCBw+whMPToxymUEYOLw7Ky1yv77cq2n86uPf+BxvTm/ihfc+vPY12th1BoI3D4C+BBvjvJ0EJh6LnKUywgQAi+DUAiF0n/Xjyf25yIeHYf++cSguNZwB17XgmlUumcELvLlPXc9unsgBKZDUX8becKg+Byeb8MBHjIaAw9IfL90/hl4fR+ncfV+EcCX4wmK+8X8IXvLq7DP3wH9kIQ8tr67YvY50qvnhh0WQ0H8mFs7/wy8fozVqHH/CAwZvn/MH6LHvMSq/YtvD9H5Y+2Tlyuz0Y07Jf2UjfzA42acOvC6GV6j9v0g0Jcb++f99Dp6eUgEvv5rcg9JxGPvm6EfHu/5LA08zrG4zreB13VQGnXuGoGLfMgJHeXnR2A8Jvfzz/EY4QMjMJzDB56A0X0hgA8Z9mHcnw5DDAP/dOZ6jHQgMBAYCAwEnhACw8A/ockeQx0IDAQGAgOBp4PAMPBPZ67HSAcCA4GBwEDgCSEwDPwTmuwx1IHAQGAgMBB4OggMA/905nqMdCAwEBgIDASeEALDwD+hyR5DHQgMBAYCA4Gng8D06Qx1jHQgMBB4jAi0x7Y8lz3eN/EY52fQ9M9FYLq7uzeZm5vNMVdva/OWI29xOzlp/5LadDpX1/qzvO2a6/nHWPJcZd51+/W6e4+Pj/Ou8vNnLd03OzuTOtOzeu295ton2N4Qp//+jObF/r988Q+95C1yc+lnmvtT1z2dhvP7z2loU6HO6dk/FKPvu30THTrO6T4JjZPqE6b1KuCZ/KM1oeec7nYddrM5OrZo15bS62p3ZmY24z8fY9CdnBy3OTBOpV9/bK9GPYVNeMW4jBMefzbe49RT1/Wab/hkzn/mcpl3mkxk+Gdy0cYPj6uYdX6DTZfdi3VuGzN0dlq13fnsOn32e4/Ds767l04wBufwej+Pj819b/+vjkN7aXRy8lWfnfFg+v7KW1dw/at9jfsGAo8Vgen//e//niwvLU2ePVufeG3t/v7BZHd3d3JweFhC5tra2upkaWmxDPfOzu5kZ2dncnBwkDHNTJaXlyarq6uTxcX5nDucbG1uT/Zz7ZRxLlv1pQRqfX097azl+1y1vbO9UwK+srIyWVlZrr4Z9L29/cnW1lbRQDgpL324f3FhYXJ4eFT97+/v1/3zC/O5f2WyurJabQDav5CHRnTMT+dD33LoX6rx3MVEUFC7e3uT7YwJ/caxtLhYuMCGEtzb/8b14LqW6xROV5QUE2zhbB6OogBhtmqMqbuQ8TLqO7s7ExjuB/PYg8IIvrDU3mMoFLixbGcuOH7Ly8s1jouvR27jPaz5MqajzK85N6fr62vhq8X6/RjGcxc0GP9eeGdjY7M+/WbcYLScucTXi4sLlzCA6174fzc8MhNDiTfwd+ehu6JTMEDu0Gd+0PWjkuGUnJILMklWFkPr/Px0chjexedHR4fRF19qjMby7Nmz0jd/ZzznvLdbuB5Fnzk3Tb/4kKzQbY9FVn6E47g+EPgrCEz/9//+P6VIGdOFKJWNzRhXCrkiqUkp2MPDF5Pnz5/n3PHkw4ePZYAZWoXRffHC9fUyvhubmyW06hJmjsJ8DM6/fv010WqLpD9++jx5/+5dOQD//ve/SpkRNIaLcf/t999LGXAgKJHnEXj9fAmNFOGnz59LOYhkKZu11bXJlzdfyhGhID+nztvf35ZhWY8g/+c//45hXLgTA1/KNsoLLhufN8qpQOdcxvPixfNSKjIPnzY2vnk9sVnhz6ih/TB4GaP2GHjzItqhUF+/elV1OVJf58E/9xslyvC/yvXZuTeTlfQHl4csxsLRMle//fa2vv/6y5uax4sOzdHR8WRza3Py/v2H4hs8Y0ArUcLHx28mr19nTBnL31H2D4nDj/o+iZyQuf/57bfw/k6MXDJa4Z2a82BgTl+9elnGqM9pN15b29uFC/laiCN0kxnP9OTeH1F3fp2DthnZ/PTxU8nrL7/MlJHGt98rnF1O3qdPn8ILG5PZdMpZpws2M25GH68Yk0+BRv6BjOLnPt7vtd+uiSTaYFpbXyI7e5OPnz6m38+T/b2zgCO14MtR/pIs49xsy5Bc7idtVXM3AKeIkOGQaWkUjb8DgceAwJShZjAOYqREBISYMl1J1MzIExQML01MWP2mHCjgiqZjhNRfTIS/ML9QRpYCp9xFtaKTwwjv8fFRGWXC/u7tu8nbHOqJ0hgugkmJaJ9X7zdvfmW1HVLZogBKwnUZhWnS/vr4HOMpku/9Mn6/xcDrW2qcgmxSe/uQM0iiGtj5vhy6jtMn4/w5tMIEXWi+ep1DIIIXdXcDb4wfo0RrTMk+iMy60ecMKIVt2qeHzAMnSn+WQSrbQtk/sIE3lwzQ+3cfJr/HYTOfnBQp2V6cOwpfUPLGPY3y5dDhAcp/vvhpLcp+8adVnJxa/LO1tV3zurwcZ/YMA3wAr1rKiYyZ05KT8BleInezJZdZ0gneljcsjzGWCmOG99zXl0rcp45zMkNf23R/zqfJMnxzZ9f6XGlz/0zWZKc4/GjpxXfLRhx7fTHk+JHO2EqmiUzKcK2urdQ4D3YY/c/VxmpkHF07O3s194fRERzbSXjD+Ht7xmLM1ddp+Cjd++5cHyd6Dg/TdhzLt2/flw6A59rSauHRx248+kTvJP9rp7UVZzIOdX7kOqejZRELj8I6+Ooz/cBO6c4JOhp9lgfbPFyk3XzQo6MMBO4LgSnhYmR41Dt70mVHk5eJyEVO0oAHB2/LiC4f7CftHEFJXczOcG1HgR9+OCzDjGCGSjqcYDDkHz9+LGGbjadMuTNiJ2F83rbvXVgJAeFiFBgrgre4mKWBePocAEZMao0njj5leWk5UctC/aYgjxMJut/h/soWZExKE95mHOvELf8h6BwOxthygqWBozM60CPd6jqnSZ1+nQOlHvoUuHFKGDzYvHz5YrKeiAbO7969r4yE9ikz81aRTuZha3tr8iG4UFbalNl4yAJ/Rvrz580y8mhiiDLQr2O9SB9D/vx5y9KUcs3FzQ3KPXNJkdd47m7+LtJy39+LN8uwtizNL8ly4PcPMe6//fZ7sjkbZfCL7xm31LUnhQHBNjP5bt4ZUYZNRoSh1e5SeOVZZEj2yv3lSEVWZJgsfZDJvmS2G+MKb3IjdY2/8GqP0LXH6KpzHPln+JSiP9f6Uox5N/+yClLhCkNuPOijO8i/TB0njgNPPhwCDePTz34cPo4tB763R7+gW2CxG12FFgaTbMnUoZex5ezKNKDFPTCFQ+kfDkj6IEMxzZPtZE0sS8qkKOhQj1wakwABRrAyHkuP6BJcLC0vFmvqBy0tSziT9g6Dd9OLxiKDZ5wyjWgl26MMBO4DgSmmpVyl+HbCqHQpISkPN4ri6DCMH37EpIz7zHqiiAhIM1LN2DI01rqliQkDAcLw2iAI1ru+rqvFO6YcXDuIsmnM3gxSKa2cpzQIyM7OdmGQOyYrM3FCcq/29/esQdsnkOxDhK1tQpuWEyBqYBi1/zlePEVjANq8i8K4UyIXI6HjKNtK04cWTghlqQ4aSkGeXadkHN2rP40xo+QobEsScHseAy8a2ooy3CtFdFIpzrU4PtqjhChvw2vtxXEyYQ9U4M7hslTDMTFn1pER2COei6TVEk/47zi8Zf7NOWdtJrhy6qRRn1KZZrzmEd+K+PALQyj6ZegYEU4ep9k19WBuPVsWgAEy/zIjsHUe/8mQyApZi2bA8CO82ZqNDe1vZ4qyHJRrDCUZevWSsY9Bylx8rzB4ZO19LSvtpyqjGAMfJ5zB3I4xr+Wm0Is3jAOtAgiZP7yhD3JASlvG6nN4aLvu03c3spyfluX6WI4Aw4tWTomibQa3ZbRm69qb169rTCV/kS2yqc/90I1mTlR3emQCSzeRw9Db9YZ+K2uRsXE+7CN4OfOi+pSdMBbZM9mW2k+R3+TW/Yy8Ofj1V47FXGFSN44/A4E7RmBK0BlfAolx92I4mxf+rj55/YxJ9/gpFkK6F4GutGKEgFc+ne87nhNR5BwBk5amTEThGHw+Cschmmspbc4DY9QMkrptA8xq2mjGbn//Y+jaS0ahKR9GgvLa/8w5SOoxHvZKsgY27dhDQKEQouMYPffNRElWF3cEJJopxGkcnB5xWOaApfVESrYrZBEMXC5enw+tjKBCGTDyPq3DNofJZ3DLuCi26OSaC2nSvWRVPn/aaPOQ8XLCOFTdYbijIf9ps+guZV97CD7UhjnYoKeioSg642NY5hJ5cu7wnTVRPIOfRKJb4TnK0TX4/uwRj4yL8cOIwVkmOzngRh7guhmHCQ7mfSnZLU5dM2JxqGOYZX5sZmTolmL0TjnBkT8G0zWbPEW+eLE27i1lT0uM1ebGdqXPy6lM24yROdSXtjio39uyyRjuhi9F6JYUiDJ+5ahWf2lDmxwRPCzS5rhVRiIUrImMczDM5rzaq4j4qBwb7ZGhg4MEG3H8DmwCzng+Zk2fThKcoFOQoZSzE/oPg4/UPMPsE4b0Vm34JCvhKxtYWyZhs2S41uZTT1RPx9CNApftOJ1S/qL6CjBCw2roZdC1q03toF+7nFvziTYyuRm+lsUwb2vRg/j6Z+fpmozx58ERmIoSK1UXxnzx8nnzruPN12a5KFsGknEmRJiXBEuj8lQxe+T46yNbmJ2AESRRByEj0ASBsRIdMO4EvR4P+zr8qKEIB2Xy6nU2FEUJEWaKyZo7g6gv3j6lobR0WIQ0kb5+9SXFvbg4G0PfonnOQDOdXzu69S/6doT8OkRdnA2pToqNoMOkGyrO0MXrR0fWU0U81yXtvC/jg4u5OEz/lKSjpU+/H3Vdt7eb1IODdGdtqIrjwenjqFDmtfQQhcwYMFqzc4kMLzYeAC+OR2r+fDzGfKn2xTv/8d8DW/jkpPH73OfI1HKNl4NIFmAKPzz/8uXLybMYDgZ/kv/xGP6pVHKcO876y2zu3Dxb1uEEcBzwoZT9q9xv8ydHneESeToYXXKpkLGL2H8PYPXQxjkj93TJYpZciu8NjFynXUacXJJvy3uygAwdWqTPBRX0ir0E2uPM9vbUd/4k7cEJP+EHfdm/I7LmBHQeyV63r9877WRCux+ymXMzS1qWhThL2pL1g9uLZALg1RySbFoNVsWrH2Zricw1GHVsOKoRtq+/j8OzaDBs+0ZsPjZ2joQsgf7ptaYvfl5+7piPz4dHYMoA83ApV+u9GJSREoEywk1hvCjGJnAtrTdTUT2jimF5/Dx2gkFwebMi/2oz0XsJSRRKsfQFvo4cREAaCE4zVPXITwSPkIhAKKfPG7z2/fKg0YBeu4v7rn/pRRkBdSnEDKIaPWu6dXBHf5tD09LkFBRH6FUUBcXhka/t7aYUKFDju3p9P5EVJwXmBB9mUqwUZLUB31x3KOpI1dvIV8smmb/atxDsRRjmohTPHY33e83CQiRIoVGoX04TuWe+zI25pFQpcg6fcTqMs2jOuGDwIsaLgaEQzScMjCdVf9qCXWVxOH7499l6otJ8iiA5SFLAZZDCW83ZjqO0e77hjBBJcdf9K7kvDvlhcOVUwpZBKidzJk5yZKtnBWZ28VxbSydL1ofds7x8Gj5N9BqjKSq9XOLQZj7MiTYdZXzTH7ljAGVtFLrEb7y7EJ6ta4lipcE58wuZZ04L599cdwNdbdaaeJyDXOvtVZv5Q160ZRzlUGRMeEfBU4sxrq43p8k+olbftXBl8eLMTDYLx7Ggf+gTkTW80dHxtGzJKeI8kDU4wgd9UvqV6lc7WJDL/Mmg2+ZGdGvX+DjhrnNafd6HXoLFKAOBWoPv0aV0FK+WRyvSlFr/5ZfX5WWDSlRe62YRIAIqCiCUIohSIhEAwmT3NMUsO6CNtgu6rUd1D1wK3XefnATfCVZTSE3paMOmPKnK2i2c703ImuCgtdKQERqGwjUHQ8e4OsdYtuheJN2XEW5v4vXBodlOBMOIUzgzUaSlTELXQdLycKMUCP3F64QdrW2TT1OW7qPU4SBzkcZqDZPiqY2Duc6hgZf1UUqo5i9Dqqg3/cDxIQpeEG0x0nbEl1ILnXgGjZQkc1EGnYOSOuYGfjaGNUewvXQJ/RWZPuB47g/DZggZA48Svq414zwlcpb92Nhoyzj9sa5uCC/SB1fnyUmTF5zvd45g32UDr1W0nPPOTefsnWlPejCMjJL7ZcsWw69X+2LYzdleNrnt7GT9PAXfzcWgLmQOGVYGkSzUnKfvLzvX50f9SedzRMiCpS/fa7kmv/W1k0i4tc1JlPk5d0LUY6hX40S2R2rbEzacSjLYMayXL53xFr6k89zr4Ki3PUC7GR2Hur1zwzKA62Tv4KBt9JskXUA28Wov+mlLhHHEo9tsulPcS4bPqe13jM+BwN0gMCXcXYh5ogy09TrC9SzGWZqKUXKewSU0FDdjxTBTEhQzoXZehI3hCbrnXV3r3jUhoBik/61LtZRXHpWLARR95PZS9tJz2mUItMeQPctz9io41+nYTR/SXmgVffCURX8cjFpiSBaBkmNg60mB1Ls43tuC1C5xffZ1TALeoobstA1dfHbp0JNNTwd4YVC73tOiIvDaOR/6jAXeUrAes7MnwmZC2KyvrxaeMNnMPGxumof28h80rOZRoBpf2niIwuETef7y5k2MfHsHwEH2CeCvlgbNnoTgYR1182g7qdws1YRW2SL8MD/dKufGnCocOHykzs9aGjaWlVpU68mRtqTVXiJDZhggONQ+lzLgjBrjR2aS6o5xOplmDTsZE+eb0WvLN/hNBMwR5Ux6sgX/cNC1ayf48mHbfV6GLBE9Jy1xaxn6TF0VdHIW9MdBePc+j6ClHX3jb0/Y2CBCbp2fP23BAhob/YxnCwg4IQyt8bTNdefjQb+1cHzSNxbiB1E/fqhxlzFuxpYzcrG4vrKc1H30FuPqXo/k2qRqDHSO/heXF6oPjmWNLYYXTXQNnbUV+bMTnzNdOiaOCn1mnowRhvYcaItOavhwattjrHVPaOGsk4GlZERqXn9yfr44F+P7wyOQrPG5gEjXlZcbZrb+Zw0JU3ZFYh1tqdKtO0m7Zi08AiOlrh6hJFzOYebpamujG1SKoe8SF0UolBbfvlLQMWJo4R3bRMNJcM9SNgN50Y0+CA9B8mIQRrELls0sdtJSZgRWWphCY1TU9whMpbEjmNp07rZKUyhJFSbFx5Gg/PRhbJwSjxxynCgF65RXr1MarnGWZE36Y4hIpIyk4/UBg5d5nh/e5oMDsZs3v0l/Cwk4BTBwnUJ9iILmUugMT5wYOByW8fhSyhSNligYeMrXkoWocSW77L2Rj9L8kk8BWfFfxtM26eXET1o6/+BvTm7LoJ0/OUAmvNHO0xSMHkPnHvWsXcO4p4LJL4eSo0UWLLmRZ7iLWDlR5MqmsJXUtTynDUaKA0qezFs3mlBP8/ndUt8Mn3s4s/jv9HS7HH0Rcxm/zKU59ITNcdoRiRet7nsmve09By0aJy9+2wSHZ4re0CJilvXTr/PtbY3tuXi/lyNXdJJHBekcTsPVItjoz+mXkxx+axsOpdIz7jjKsot4S7BACcFTW5ZArOsbOz3lmXz9ao98tU2sM/VEAl0VFq75oefcK7tRfJ9Pesy44EZHaYNeGGUgcF8ITC8aO4ItAsPgBJNiqXW4fC+DRRnkO8NDMHwnoITVWhWhwOQEwu5wjK2Oop9K/YXhpXAJBMNGqPpOV2m32LESfFGrSIRHTZC1Rejn4/VTWBSJ5+cpEb/1i8aj2aOqr08CpV99GZf2L45Xnb9bjFU6ULvooPgoRAqDIurrh+2VuauXrhsXhdyckZbCRqcGGL7COY6KPr6OMd+Nx7gpLbt9a67OIgT9dcz/7tj+yv01z26k+c6KjVR4hHI0R8bTsxfGv5gxL+RVx5wfBqnP6VpeitJSxjjr5yycUAYNJvUMerC4OH/OM8KiavwLL5/4nYEkE34zXM3Yt9fA4pfi9UCHXziZzoks7brHX3bTm4flRLxeQNM3sNrtTd7mcq3Tgg4Ow39N/pM2WspadoxTqi5Dxolg1IqfRcP2A5DbTB150Jb3W5DrFy/yaORxInW8nLHRDa6jWVtkyNyj+by9vHI61/T3/Njz/TI85xlIHFL8F+Pf5P1V1TVmzkvt5Qhm2tAu3OgguMGVLnLudRxpfdc4k0EpHRVZXY0+1P78QpNHGTtzwKES2bu33luQMflO/9ABnFo6ovf5c3LyGNVjRGAmzE3+qvhKwTowMib1qfRqBILnKhoPZ0/mU6ftjm/13Kuu+7rAVgNnbbjfQdj8J+0nTSeac4+UpIhbOzlRyl47DsX53oZ+CFcXTNcputZG+jijA2XGIl32x01D7rpctEup6Eu/7u39X67Zfqnf+0Qbuq1BX7zve9fbmGDe6Gw4nO0iN8Yo0otj1Kt+vs5DlGN73K7RqZ3bLDfF42Lf7nUYo3E5fG+/YdTmtePtPKzL4F2Y94ttPvbvV/EyFuP+VrmIj+v42Rpwr335etsAq17H1Hdt+63Arv+GZT/nMpnFN+oWxmQu9cliyVRkhzW+yLud7t6fejV/Gsz/rjcjF2cjncmglSHNtOqDA5BalRnw2ehrcqzNZtgb/Y1edYwen3QeR+9Ze6G5j1UdfXcajbWXXqfGVTql7fHRf9Fl7MWLqG549HacseR1WjpAv5flr7XZcESDqZUFYfA9DudRR1m0V3lZmIyH5cyuC3ofnc77/ISJwAz96OFsPyQ99zn2p9ZX5rVUyCUD/9RA+LPxEoRucLoy8PlUy8DjZjN/Fa/vGfibtTxqP2YE6AxZNftpapPy2TLAY9Edw8A/Zu65Xdq6gb/209e32/1obSAwEBgI/FwIiIotH1g2EA/YU/FYjPvPhfQYzXURGAb+ukiNegOBgcBA4DsIyIoy6vYJSd2PMhB4aASGgX/oGRj9DwQGAj8NAm3pcxj3n2ZC/+EDeboLy//wiRvkDwQGAgOBgcBA4HsIDAP/PXTGtYHAQGAgMBAYCPxDERgG/h86cYPsgcBAYCAwEBgIfA+BqUcnRrmMAEwuHq4+ZZwuYtFx6J+XkRu/Oq98C7OBzkDgIRHwnoEhtw85A/ff99Szm6NcRoAQeBlEFwYYnb034HLFJ/Jr4HGziR543QyvUft+EGDg6bVRng4C0zHhf5xsCrq9VatF7v37H2s+jTMDj5vN88DrZniN2veDAL50POVg5X6Qfjy9TMeLGP44GYRA6cLw1DEaePyRR753ZuD1PXTGtYdCoPOl/oeRf6hZuN9+808cj3/d6CrkBGG8qvYclYHHORbX+Tbwug5Ko859IyATSa9dNPT3TcPo734RuPSvyd1v14+7Nx7u1eNxU3y31F3FYkQA38f7Il4yQAOv7+M1rt49Ap0PGfph5O8e78fQw3hM7jHMwqBhIDAQGAgMBAYCt4zAMPC3DOhobiAwEBgIDAQGAo8BgWHgH8MsDBoGAgOBgcBAYCBwywgMA3/LgI7mBgIDgYHAQGAg8BgQGAb+MczCoGEgMBAYCAwEBgK3jMAw8LcM6GhuIDAQGAgMBAYCjwGBYeAfwywMGgYCA4GBwEBgIHDLCExvub3R3EDgbyFw9hLBPDf+t5oZN98Qge89F/0Qz/BfpecmNPyde28I26g+EHjUCNQ/NuMFCA6C4d307Tgtwp2fm3PMVZ0+Gi9L6O+xb/fPfVXKdc3LFE6/1L2uXxVQdRyKa7Npv+v0TofPfq/Pi6Xuz/UvaaP1f7kP96rz5Ytj5isdF9u47e9tTCfpd/K1vz7uy7jCZe7rcZUO7fT6p8GQsWtjNAczNS7XTzPGydk/Btjr9HZ7v1fbvq/fnX6fSqdrbnYuE36ZijbeNmbfjXU6bfx2dd4v3/nP/9X5tOPVR2Tc5G42eP1VDLSt/IgX1Ds5Ppkcn83VTHgsQlP6wLxNp9M/tNF4/Vx+1VOM42K//XxdvMEf7R8dtbeu4YVv0fCt5mosoeE44yETne9+hMG32hrnBgL/dASmnz59nqysrkyWF5ci4MeT7e3tyVaOg4OjEurFhfnJ6urqZG1tdeK1tpTNycnpZG9vb7Kzs1PC7PrKykquzZSA7+/vp41ci5Cupu2VFfeeJwsogb3U2U8bMzOzk6Xl5cny0uJkpto+Sd+H1fbR0dFkcXGx2vDZhZTwHxwcTHZ392LsTs7uXyolYEIIuVcyur63vzdhVNC4lD7+qrL83kTrDx17e/tF90mM8mrwMHb9UTZo2d3dqbGpv7i4EEzXgs3yJeXVxnaYediabO/sTo6j5CjcpcKhzYGxbwffo+Oj9MvIU7Qzk8Wlhcmz9WdtrqKUS8N9j/A7uNawh8Vu0Y8XjMn84aHVM164OJf7Gc9OxrMbfjgNb1DKy8FF3buaszsY+l9qkozgjc3NzZIp+JGD6dy0xo5vl5fPefu6nTQDydiehr+aM9kxv9qGunsH5Hk3XDQzmUZWGXy0tHlYqTnp9zl/eJg52yF/p6Ev8hsanScD5hzf423zflOZa+0fBpOt8PjxZC0YrK+vXaKh03L1072dnxh4Mra0tPRVd1ytP34PBH5mBKb/739+m/z737+WkTmMYf3w4WMdvGeCzlBRDASYgSfQBwf7k/fv30/evXtfyug///lXGZcvX2ZLSbz/8GHy9u374PYlbf+77usGnnNAAXxMP5tbW2W4XkcZMHhpvF37+Gny+9t3USKHk9evXoa2f00WFhaKDgJ8kPOfP29MPn3+XMrj1asv1Y54RXCIxp3d3dDwbsKBWY6A/+c//04bzUG57QnlsOymv/fvP07ewiQdwBRexs2wv3v/YbJ1prD0T+m+iDJ888ubMnw90tEWx8n4NzY2M5Yv1UZXcMbPIBg/HEVdxzH05otC/fKfSeZiseYTHfddyljEUH/IHH7O/HDWOD/TufnJixfPJzO/zlxS1ubYWN4HH44Lms0jpfzm9aso9Zdf5/6+x3If/R1l/rYiB+SQYz09i5j1vTC/MHn16sXkzZs35aCK6JXO5/Xj7E871/6SsWaAd0sW8MXyMiP9bY4wZ7s7+5H7T5PZyDrsD48Oy8i/mryMbC1dMq5VPzxIvjjSb968zvXZmuuPnz5N9nKtOyXk9kYl/F0yHr7R1v7+QWUCtddl5GJ76pJ6xlzp/Pcx/EdvuQcNN3UyWmvj70Dgn43AVOTw6sWLCPNxKVhePKU83yP3inzPhYtC3ozhefvuQwz8uwjPYiluUWoSdJONtMfwu0a4nj1bjxJ4WYJH4A4Pj8pwcSQoke7hk0/KgpJ7n2uUx0kyCozy66NXJfSEWR1Zhg9xIkS46+vridBbClEbBJxS+PRpo9rYiPF4/vzZ5HWMhWu3XbRZRiqYvCun510Z7/Vna5OXoVVhqCkcdWU6qOgy0hsbyT4sVaTWlZc6siNbW9sVvawkOmrZgNXCitMAs/X11VJch8eHcRy2y7HiNJxWNC94/7YyL4Lu8E934ETkonHGwpxR+p8zXlE8g2O8xspZgw/nB89xTswfvlzgYIb/jPmhxnOHUFXTNd9x1LaSsTmKbKxGFjm7HMaNjc8lA4vBkJE6OZkpLNm02RhUzkDHEe7aIiPlJOb+zzGQxzn/Mo7VXDICZKnJkGUkKexmAM0Th2A3WRcRfEzshLPPeVw7XM09l+XGbxk+c0SeuzHnsH/8+LHaLWcztMjC6ROdjTZttaU3v9HBibWc5z/ZC06G+/AQGYeHbJgxciRaul4m0XLicZ3H7s7DgDzKBhkfTPUzykDgKSIwJUwEi5ARVoLF22VUnsV4XlTIBGo70eWnKGRGyBpwMuwlQCWsEUDKnGA1IWzXCLTCCZB6Fs1SBhQDY6Vuv16OQtplrNr6eag7k0/CKzL/kPsZcEpucbFFyQQcDeWApO2NRI8iXLQ4Og3V0a3+idNB0WTcligsaYgoSmGFHilGTpPUJaMsKoX3ycn7om8359XpGYquoKTfKTP4mweOQTOMFHVXeGk7hhNAovi+VLIQg/iQBf9I21r6sbSAV8yrseGPiwq3GRdR/mnVXU9K1Xybx8Pw4kkMwE9dMthuQMmCLIeliU9zn4tnONsHcXjwMtkkfzCcj8zAyvIWrJw/SRaHTGoPX8iSWXZTn4E1J9rAi+4hPytxHqbhJ3XMBVnBuyeZD3OS/2s+Ls6BPS01l6l/EMeAM1qyjYYzhwIv6ku63PLb0tJy7rF0sxfunyn60caRKeckbWkz/7zlhFOLPnKhvkwQx6M7gM/W1stZgQ1nXx8knIxwEIvXjCXyGJfnIunj+0DgSSEwlQa0Dq5QDISMIe/CQ3IobJ61cyJiQrkQw/pssl5Koq6nIkO9HuErY592KCUOhKJd6+FSse8T4UvHMmAEeCcpbMbRwbE4jRGkYKQuKaZ+PyX0qdL37yfbUSqrayvVDi/fZiRLCgSeQqAglqNUKk2eLEMfYzV2q3+ieNLvWtYIe6FAjeViaZi0jX+lHKP8SqkyYBd0EOOmblOySf0Hn1K6qcTpWVlpkZhozP0thZl0bpT082dZf49R7Zhd7P++vk+n1l5XihdkE+whaOM8rYjcHDWHC0XmfK6UPT7DL18/gwN+msN7l6G8r6HcWz8MpnnnzHCy5+ay9JK5JVfm2XyWcQ9vy5AVf8ErMvQsc04eLQ0x8H15xv4W2TCyzLBzAPDK9s526p855xmhPQ6McZsjkTawzxiymJFOQNdhnWVo8S8e1Xa1dfqhHFtZgpdZUnv16lXJnSydfl8kg/bq1VzaOEja/XPdy4jbhyPiPz0Jb4cvOBgmm0Nr7rUPj+3tllngvDDyx6+PJuvJDNJH1umNH/2yRc9fPMv3OAvhveQ37m0OR0cDgceIwFQ0SYAJLGUiFUbICAgFsRNFIYKQaieQn2Lg1SeglK+1X4LJOZCuf5bUNONWm8BixJp2bpvvGGWpakaLseK5M9iVRkvUQFnpn0KrTXjpj0JRKiqJIacgdqKknEbzxkZSm6HhKApoIak8v6V7ORYiSI4EhUVZUEy3XRgr437+LA5GFJyxUUoIzKVSVAyebIXzb5PGRyvFJNLmgJRBVjmF0yMq4yhRiCdHJ7WPoKW8bZiaT1tNcRm3jIZ6FLV1erScG9Bq8l7/1KbJ0MLpgT26NzPvB5nLxYUo7mDEcCmG3FKuLV0PEwbhNHzRDJu6xtqwqZt+wj+RwLMlsuxHKP5eiBEX2Z6UQYMlzBi9xcwvPmLUYu3rPIxlrOY42JHTtrkzMhh5Iat4D09wDhhdxTmbQUXf5HA2hp0uuFhE2hxtDgWjKR2OBjzrO3lCh8M6/asY99Usv5A7Mk0WLOehH13NWLeNufqx18SyzdLCUpz11aKV3rBkw1Gx0Y8ukQHQ7k7oMNb5yEBlvHKNzMugyfbIChqB/qIaRhkIPHkEplJ5UsiMqzTar//6tQSxGyFK4WMEiLe8nwjc7njGhKDv7yd9mA13jIxoQoqxIuYzo9Wjd4aYh02grbkS1pcvs3kugri91QSaoIo0FhetuVpri1JjAUq3u7+l90T8PVq1w1cEIdJ3Xd++H4aWlUQlX9In5aQZND5P3/PJWDAqt1UozrkcM1E6ZaxjkM4NbIvupV2NH5a7iUZaZHXcHBrRbnDoJgyuz6MMra8y4PDlVJmjhYXNGPFnwWjhzOHZrnVQ+HIIRGIcp4csF/WqrA/nxZgYKAaloqszRwvd0rDGqYjOKG/RqmLZAW7qnWNal36qP82J5RDmiNGahj9hBqueAcHzDDiM8AbjL+PBiYKRshr5seFtbXWtHCm73Dm3ZNv9BwcfmzFOpItXC/9gz3n+ctoek62Gvv5pGSf97Kat/cP9ipLtau/OsvlFt3S/c4z4cebPd04A2jgQMlKWAQUDrnE8OHLGbh+KzbToYdQ5BpMkczgXJevPn9fS1nwcwHdpW/vaXIiOsFThUGQZOEZfvmSzacYU97HOjz8DgaeKwJTR3d1t62UMN2WQ8D2Kt0XfLULMel0UdFO8bX1ud7c9EkbBrKzEwEcJSK8zoH8sTbFT5ozr+tqz7Gr/VxRDlEr64sW7vyvzbtTP25EWbMbAOY++/Prrr/UIjxTfu3cemdstpVVtpI7PWmbI+KJ/oqDa5sHl5factXO3Wf6sPVkOEZXrDLm1+t0966GJeOLkVLSVi11hokmqcT4KGTb7MfC1FhlHBv7WLZsi7enJvUR1CzH863Vfj45vc2w3aYsClwpmnM2v7AXlXc9ZZ+yWaTh5DAMjhX+M0e++/iyK3zzjCUrb3AfGn7hY3uIILYcnXmS5Z70iVZtVGTvyIUptDt9BRauMP++3jGe+MdgcZM6z6Bf/lLMXj6uyJpkLfMOIwrr2vuRT2rucSfMVGbxaiAme4liI8GWdulEny+ZX5ojcH2XTLFo563hSX/VfjG0Z9Xwy2s5XSeO1RJM20aOOtnNTvre9F4w3vbSUce0nyOD4o5m+ODycrcBCMELe++He3sXV8YzfA4GnhMCU8HajQIHULuwIGOVLYJRphJfxJtCHqcNYHWYXLaPa72+p1BjWGCC74wkdb1496bOuZAgwb78EMH+IemujedsUlnsP3Jv75g6n5Znz5EUKdf+Ztm8KS6pXxMOQel5/rRQFLSG679E6+vSDdsdtFgqrHIqiu20OO4BBjtPTtmO8IrCMXVQLy5dR5Hb2O89wM3qhLlFaDF8UHfyBA0PGUWQngpOyhFHLXGzXWDkJDg7EQxc42AchXcoYLGesaK8NT1HwUreyMMakmGfGCoaiVtmJvt6rziWD8NCDu6P+Z2Yy0Yxd8XH2WAS3wxhUmB0dJPOVrFk3XjNnGSJ87bpSkX/uJVfacNrhKueQPKrf8eUMSGPbANnllyOvnVb6ZzPAjDjZ6gZYPVky90qfS83LGnzOrn8pf8sA9oLgYfdw4ugKWT734XHy72CM0ec6WhnubEkoWufy2/01voym04r/ZbQqQ5A+usPR6G/7GUp4zkYzPgYCTxWB6cs8lmN9nfATRI++ULqEk7Apz+KhS/1RCLxnQsfA0Ac+PYZmTZ6AeRzKRjzrrjtJl81vJ22+6UUVWQJI1MpTF+H158Vbyj07Z88M1GGiOVHAVg5RN2G2NltKyfpzotvanPPpYwR7Wil4UfKLpPEYTQaT28A4SNdTgiLhZ8/Xq29K4rYLrOCwEZrhR/lIs9oPYLwLOTgrzbAdl7J8/TpKMeuOMGtrldk3kHtgTNHJrPT0rOsiGUbcpkj4W3o4yhhFbaJ3hrEvidz2+G7aHsXLyDPcxg8fa/DmcDo/lxcc7dcmSVHmTPjJejsHxx6NilLP+E4kKGV/dcPiTel51PUz/xxU5phceDpE5onRM8+iVziQA87eNLtmGDTY4WXf1WOwfSeUzpNnhtRTGta1RelkBw8p5sB95EW07WVQ7ikjGj6stiJHzSloeyrch1/NJ2fTuw2+JGGHB2Vf2tq36Dqb+VIXzcXfkQ1G33142075JoftnRbkRv/ooXtWoicsv3H61FeXHPtEl5cDCUTs4D/JBr2lpZwPPcUveCzjPj2Fh/EIHM4dFmMYZSDwVBCY/pIXrTTj59nbbBCLIeJNE0bCyXhLJT+PAaWIFYJHcfOSGduWHo6kp777Cal71fEp6lfWY9C0W05EnAmF0udA2GkrctHeYdb2ORKUD2F1D+GnSBjx2RhRSkTky7h7e5sooq01NhopFwqHUnBvX4dsiqW6vpU/sGjK136EPK5j3KKvfIrgGSxj/HKm7ERCHCqYOd/Hxih++RLFtNAcKM8hS2dLT1OysPM8czeYjJ7H7pqBz5pr6jyGQqnaJOhRL1E8pwZGnBy8JMMiipdynp7N6auXr4JXskMx8urnhox3rfhuZWWp5vAxjO0uaMCPDK9Hv7LFsAz7l50Yxpzvb3CzZMPo27vBWWW412PoyAcnkSPIaHqSoxtp9+D5bmTTYOT8WTP6kXP4n4ZfGcDlGMhanjvNUzHpF49p2xr50vJiDGU3+A2Bmk8bS+1YT999E2nxeaJyBpvMaZMM4mWGmqyaf+PSPsPLWOMHwQTaXSPjaGhpf8/Z52mYXNPe8zjqYY/Q2ZY1bABm9GWv2uN4eWdAsOBcltFPPz+1g3gXTDna/GkQmIrMCVOt10XgXp0pXWuplIZ0suevK0KMgPZC2BhVqUOCaHc3wROBMkRLoo6k36TmeePWnAlwf86VwhJpix4oiP7yExux1iPElBghrag2yoqQo8HjeQwIQ0CJEGb3eh0uB6QbcJ+Maa3ZlbLRf1sG6GO4jU+GnAKEhyyC8ZfxitIxLorMe/ati9ZadJQmLCjgTisFP3lB3bVdwRQrZXhwsBKE8mY6GGUsNlHVhrwoN05Cbx8u6HgMBRaMs1SxndF2+BsZHpO27Wu1zYi0tVdzy5Bw2jg8ojkYGd9idmdncI9haHdCA5kwl4GosjKMp0wMvjWvZdxivGpzaniAI4hvHGQJb+CXo5zHa8VvuQY/su1+6OE31zgEsmwccefxpTr6lEXDg2gyD2hxvUXz58NvsiVj90vJYJNtkfN86YTlzGWTXZG07E17Gx05wL/kFM0yc17iQ2YsVxUfpD/OoT7pDXpI+2jH42irku9tKe+wftYSRDDjZKBPv5YzGP2WITmnf3wbCDwVBGZioL80D9falWj0bN0zhtZ5iobwXDUg6jKwimuEqt1/tkM21xgnisN17eTjQp12r/u075OW0ybHgALQXmtb+9bQG42ieyl4DgJDSBm4/zo0ovdHRb8cF7Q0+lr7f3Zfx6JF46gKdlTlV9oa3erJelA4bbwND/0YE4Xbx9DnIdULn4tj7P2hp+Fz7ng5d9vlpnjov+g/4yXzasmiz1GnH+3mHiwiTUq5bahzHuY5MA1g/kHlKl6MUp/Xbw3D/HMKRbONRcIL4Z3Ge42vSy7UqQrm3fUmW9p0vuHZnNiOMVx9vyjDnU/xYufvb9Hl3J/xF3q0ixx0XOLn0Em6+7ShQV/OFA+kviWC337/vR4B5XTYNNv3+aBVXe0raHC0/to55xsmduKnTmHRMHGtlz+jv19/Sp/wk/U0/+SLMwSfUX4+BDKvNbFZAj2Top9vjH95RCC5iYH/yx39Q24ceNxsoq7i9SMDf7PWf47a9hNsbG6cvbd+uZYTZCxGuTsE8OUw8HeH72NquRv4x7Fw+5iQGbQMBAYCd46A5TJvrGtRu2hyqKI7B3108OQQGFL15KZ8DHgg8PAIyCBaV+/lLKPYf47PgcBA4BYQGAb+FkAcTQwEBgI3Q2AY9JvhNWoPBP4KAne7O+uvUDTuGQgMBAYCA4GBwEDgbyMwDPzfhnA0MBAYCAwEBgIDgceHwDDwj29OBkUDgYHAQGAgMBD42whMPToxymUEYOLwnK21wv77cq2n86uPf+BxvTm/ihfc+nPi12th1BoI3D4Cnn/Hm6M8HQSmnosc5TIChIAwKJSz3095U9DA4zJ//OjXwOtHCI3rD4EAXeYY5ekgMO2G7OkM+XojpaSV/vnUBaPj0D+fOh4/4qKOU/8ceP0IsXH9PhDAj085WLkPjB9TH/lHpm7//eyPaYB/lZaemq9XayZN33//1fb+6ff18Q88rjeTA6/r4TRq3S8CnS99jvLzI5B/r6L962s//1CvP0JersyGqItB4wQ9ZYEYeFyfd9S8ihcecowyEHhIBHoWqX8+JC2j7/tBYPqUDddNIB44XUZr4HEZj+/9gtXA63sIjWv3gcBFPuSEjvLzIzDCip9/jscIHxiBYdwfeAJG94UAPmTYh3F/OgwxDPzTmesx0oHAQGAgMBB4QggMA/+EJnsMdSAwEBgIDASeDgLDwD+duR4jHQgMBAYCA4EnhMAw8E9ossdQBwIDgYHAQODpIPD/A3QyYhrsE4EyAAAAAElFTkSuQmCC');
+      }
+
+      .charts-img {
+        background-size: cover;
+        width: 547px;
+        height: 340px;
+        background-image:
+        url('data:image/png;base64,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iX8Ol17rRUAEREAEREAE9l8CkyZNijvnn8Ptqd8/+Odw6bVeBERABERABERABERABERABCqFgD/3+GeueuUUWHkQ6uzsDLt37w4tLS2hq6srVx5aLgIiIAIiIAIicIAQqK6uDo2NjWHq1KmhpqYm5LrR0H3EAdIhtJsiIAIiIAIiIAIiIAIisB8TKPT5Z5I9APW5qCZgsKijoyNs2bIlNDQ0DDxEJZLoqwiIgAiIgAiIwAFIwF++tra2hrlz54ba2tohIqvuIw7AjqFdFgEREAEREAEREAEREIH9kEAhzz/sdqbA2tPTE7Zv3x4mT54cZs+evR/i0S6JgAiIgAiIgAiMhgD3CdwvzJo1K1RVVQ3KSvcRg3DohwiIgAiIgAiIgAiIgAiIwAQnkO/5h10bMskVXie9vb0xLADD/2QiIAIiIAIiIAIikCbQ1NQU7xW4Z0gOhtF9RJqUfouACIiACIiACIiACIiACEx0Armef3y/hgisrODhqLu7O8ZW84T6FAEREAEREAEREAEnQPxV7hWS4qqv032Ek9CnCIiACIiACIiACIiACIjA/kAg3/MP+zdEYOWhKOthaX+AoX0QAREQAREQAREoLYH0fUP6d2lLU24iIAIiIAIiIAIiIAIiIAIiMH4Ecj3vDBFYx6+KKlkEREAEREAEREAEREAEREAEREAEREAEREAEREAEJhYBCawTq71UWxEQAREQAREQAREQAREQAREQAREQAREQAREQgQoiIIG1ghpDVREBERABERABERABERABERABERABERABERABEZhYBCSwTqz2Um1FQAREQAREQAREQAREQAREQAREQAREQAREQAQqiIAE1gpqDFVFBERABERABERABERABERABERABERABERABERgYhGQwDqx2ku1FQEREAEREAEREAEREAEREAEREAEREAEREAERqCACElgrqDFUFREQAREQAREQAREQAREQAREQAREQAREQAREQgYlFQALrxGov1VYEREAEREAEREAEREAEREAEREAEREAEREAERKCCCIyJwLp3797gf4Xu+8YNG8LTTz0V9uzeXegmJUuXr+xVK1fGeo22MOfhn6XIb7R5ZG3v9eNzohl9hz5Ee8pEQAREQAQmNoHk9Wik16SnnnwycB0vl+W7fyhXmcXmeyBeG0faX4plq/QiIAIiIAIiIAIiIAIH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QAREQAREQAREQAREQAREQAREQAREQAREQAREoGACElgLRqWEIiACIiACIiACIiACIiACIiACIiACIiACIiACIjCYgATWwTz0SwREQAREQAREQAREQAREQAREQAREQAREQAREQAQKJiCBtWBUSigCIiACIiACIiACIiACIiACIiACIiACIiACIiACgwlIYB3MQ79EQAREQAREQAREQAREQAREQAREQAREQAREQAREoGACElgLRqWEIiACIiACIiACIiACIiACIiACIiACIiACIiACIjCYgATWwTz0SwREQAREQAREQAREQAREQAREQAREQAREQAREQAQKJjCl4JRKKAIiIAIiIAIiIAIVRGBvRl0mZSzTovEikGwhtcx4tYLKFQEREAEREAEREAERKD8BCazlZ6wSREAEREAEREAESkgA2e7BVa3h/pUtYc32ztDSuTc01kwKh8+qCRcsbQxvW9IQJOeVEHiRWa3c9GRYufHJsG3P+tDZ0x5qqurC7KZFYemC08PS+acXmZuSv/r85rDmuc1h5+aW0NXRE6prq8KMeY3h8BPnhcNOmCdAeQh0rlgR+OvZvDns7egIk2prQ9W8eaHm+OPjX55NtUoEREAEREAEREAEiiIggbUoXEosAiIgAiIgAiIwngQQU2+8b2t4fmPHoGqwnGX8Ibxef+GcKLoOSpTjx969SU/LvkSTJpVOot2ze3dYuXJlWLhwYVhgf2nz8ocr86knnwzTpk0LS5YuTWdREb87u9vCvSv+X9iwa/Wg+iCysow/hNeLjv/9UDOlflCaQn44J087HC9Pl/6sdI5eX8TUR3/wYtiyttkXxU+Ws4w/hNdzLz82iq6DEhXwIx9P1o2UbwFFlz0JYmrLf/1X6F67dlBZLGcZfwivjb/xG1F0HZQo44ezSjMpZHk+lhOlL2Yg0SIREAEREAEREIEUAcVgTQHRTxEQAREQAREQgcolkCWupmuLyEq6Quzpp54Kbz/33IG/dy1bFv702mvDV770pbBh/fpCshg2DeIqed55xx2Zad9/9dWBcjdu2JC53hf+2Yc/HG6+6Sb/WXGfWeJqupKIrKQrxhCo7rz99vCBa64ZaCe+3/KNbwTE62KtVBwRx0ZSfqH1zRJX09sispKuGNvd3BzZ/c6VVw7wpH/e1d8/H3n44bi8kvvacPubJa6mt0FkJV0hxjmC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6u88s/plKfoidfB+nOTM8rHqi5QlEwEREAEREIEDmUDW84/zmBACq1dWnyIgAiEOwWaoNh6flW4WuSO0RxUzhIYMj9BuE2K7LFG1xTudMobCahY3vFgnm/grD8wsOtnLWjstXIutkrdvNp8DYWnWDcZYCawHAt9S7eNHPvjBKOJ+97bbBgTHUuU9kfNBlHr/1VfHXXBBncme+I4Hq0wExoqA+uJYkVY5IiACIiACIjA6AlnPP55jRYcI8ErqUwREYB+BPgFw7Lw895Vc/DfmicoSVj0nRNXxFla9LhNBsPa6VspnvratlDqqHiJwoBPAa5DJcZiQx705D3Qmvv8efoBh8MTThQ9evuWIC+pl6lMEsgioL2ZR0TIREAEREAERmFgE5ME6sdpLtRUBERABERCBiiGQ9QZXHqwV0zyqiAiIgAiIgAiIgAiIgAiIQAkJZD3/ePaVP8bYa6pPERABERABERABERABERABERABERABERABERABEagwAhJYK6xBVB0REAEREAEREAEREAEREAEREAEREAEREAEREIGJQ0AC68RpK9VUBERABERABERABERABERABERABERABERABESgwghIYK2wBlF1REAEREAEREAEREAEREAEREAEREAEREAEREAEJg4BCawTp61UUxEQAREQAREQAREQAREQAREQAREQAREQAREQgQojMKXC6qPqiEBBBDq694bevXtj2vpqvScoCJoSiYAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIlJyABNaSI1WG5STQ3bM3tJu4evuLe8L21p5Y1IVLG8OhM6tD7ZRJ5SxaeYuACIiACIiACIiACIiACIiACIiACIiACIjAEAISWIcg0YJKJrCrvTfc9PD20NbVO1DNV7Z2hvOPbAwXH90okXWAir6IgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiMBQGNrR4LyiqjJATau/aG7z3TPEhc9YwffqUltHTuE119uT5FQAREQAREQAREQAREQAREQAREQAREQAREoJwEJLCWk67yLimBuupJAW/VXParzR25Vmm5CIiACIiACIiACIiACIiACIiACIiACIiACJSFgATWsmBVpuNBoH/Oq/EoWmWKgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgcoAQksB6gDV+q3e6wCaeIh5qMiVqqvNP5UNaRc2rSiwd+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1uZ6rPRZm5ubzSSNtc71tl4fsiNWmrrKX0kC0x6o096h9jzcxvubf/SCShRHbT675HfAfh/sNg5jpUjLlGw/t/NFO1+mL1Q+89rEslinxGeu3Z+4TPa7mZhHn0VABERgJQjwecVnkB3+z3NETOiVSCTs2PPcT/t9Phs+2fNzMc9ojgKgw0ztEif4k/26EneCyhSB9U0gWf/HtkgerJZEGi8lrqbnxdF1WfvrkiiuskbxRtva13Dz1YBGcbKOvq7L5rsX1GIRWI8Ekv2uxG9bjPiZKK6SgxVXuZ64ny9sW1pajWdsyZLEVVtWYnncnirFtyVVHm0XAREQgZUgwGdVoj3IOKku17QksZhnWbI88c+1ZM9ohie41t9vRrftXHKzEuu75AJ0gAiIwKYiIIF1U11uNVYEREAEREAEREAERCCdCFB83bGj/roRGelUR9VFBERABNYrAca/rq6uWq/VV71FQATWEQFNcrWOLpaqKgIiIAIiIAIiIAIisLEI0PM/3gNrY7VOrREBERCBtSWg5+va8tfZRWAzEZDAupmuttoqAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKwrAQksC4rThUmAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKwmQhIYN1MV1ttFQEREAEREAEREAEREAEREAEREAEREAEREAERWFYCEliXFacKEwEREAEREAEREAEREAEREAEREAEREAEREAER2EwEJLBupquttoqACIiACIiACIiACIiACIiACIiACIiACIiACCwrAQmsy4pThYmACIiACIiACIiACIiACIiACIiACIiACIiACGwmAhJYN9PVVltFQAREQAREQAREQAREQAREQAREQAREQAREQASWlYAE1mXFqcJEQAREQAREQAREQAREQAREQAREQAREQAREQAQ2EwEJrJvpaqutIiACIiACIiACIiACIiACIiACIiACIiACIiACy0pAAuuy4lRhIrBxCExOTi6pMYFAAO3t7Us6Zrkz9/X1YWhoaLmLVXkiIAIiIAIiIAIiIAJrQGBqagq0MdM5hUIhXLlyBeFweN5qRiIR8E9JBERABERgYxLI3JjNUqtEQARulMDp06fx3nvvgcZiZmYmGhoacPjwYWd9vjIHBgbwwgsv4Gd+5mdSZuvs7ERJSQk8Hk/KPIk7Ll++jK1btyZuTvr5xIkTKC4uduqbNIM2ioAIiIAIiIAIiIAIpD2B5uZmnDp1CiMjI05d/X4/du/ejT179iAjI2NZ608blmUWFhbeULkTExN46aWX8KlPfQqsZ7IUjUbxta99DS6XCx//+Meva0Nrayu2bduW7FBtEwEREAERWCcEJLCukwulaorAahCgByrF1fvvvx/l5eWgwXn+/PnrjMAbrctbb72Fe++9d9ECK71o33jjjUULrDdaLx0nAiIgAiIgAiIgAiKQHgTefPNNXLx40XlhvmXLFmRlZaGnpwd0AqitrUV+fv6yVvTChQuOuHqjAutiKmNHedEjt6OjAzU1NbHDaO/SRpbAGkOiFREQARFYlwQksK7Ly6ZKi8DKEOjq6nKE1crKSucE9Da96667nHUOaaJR6PV6YyfnZ77xp6drfOIQKb7Nz83Njd+M0dHROZ/tB+YfGxtz8vPNvk2p8tMLgPtocPt8PptdSxEQAREQAREQAREQgXVMgEIqX+4/8MADc0RICqv8Y6JNStuRdiDFSX7Ozs529nEEFm3KvLw8x1vU2TjzD4+hR2xOTo5zrN1HmzKZuEp7c3h42Cmb50pMPC7ebk3cH/+ZIi5HZLEOTU1Nc9qWyt6NP17rIiACIiAC6U9griqS/vVVDUVABFaQAAVRGn18s15dXT3nTG1tbY436RNPPBHb/uqrrzpDoW6//fbYtpMnTzplWIH1wQcfdPb94Ac/cIzK73//+44oS8OZw/nfffdd0OikUEqDeN++fTh06BAYGoAeDIy79fTTT8PtduMTn/iE49HAY2jo0khmfoYwUBIBERABERABERABEVjfBC5duuTYh/EenoktogjLEU4MY3Xs2DHQy/UDH/iA4wXK0AK0Lyla0j6tq6tzBFjajvSKZZgq2qh33323s+973/seGMO/t7fXGcW1f/9+7Nq1CyyHXqX0lmX++vr6mL05Pj6OF1980Rnpxf0LveynfUvb+siRI44tzHOyTIYTSGXvJrZZn0VABERABNKfgATW9L9GqqEIrBqBHTt2OAbg888/j4KCAmzfvh07d+6c85Z/ocrQyKQQSsPxRz/6kWP43nPPPXjsscfw1FNP4UMf+lDMS4DCKg3Lj33sY46R2d3d7cRx5bk5TIresa+//jo+/elPx07LbY888ojjmcD8FGxZ70Rv2dgBWhEBERABERABERABEVgXBAYHB2N24nwVpoDKF+2f+cxnnJfw586dw9WrV504qBRROekphcyKigpHVKVH6yc/+Uln1BXDYb399tuOwEqb8pvf/KZj79LmZbp27Zpjfz766KPO3AH0in322WedsuiAQOHVvvinSEpRmKPAUiU6L1D0LSoqcrLQzuW2AwcOxMJgUTCOt3dTlaXtIiACIiAC6Utgdixu+tZRNRMBEVglAjQW6VlKMZSeA2fOnMG3v/1tBIPBRdeAYicTDU4O5ZrP4GRAf3oE2AkBaAQzPAG3p0oUfWkkMzE/PVlpRCuJgAiIgAiIgAiIgAhsDgIMC3D06FHHDuQwfdqODG1Fu/PKlSuObUgbkWIpX85TPLUhrWjj0quUw/WTJb78p2cq87Asep/S9uSLfZ6Xo7poj1r7ledNlRhmgN6w1j5mPnrechv3KYmACIiACGwcAvJg3TjXUi0RgWUjQEORf5yp9V/+5V8cQ9IapUs5CY1RxmlNlWi4Jg6r4ht+GrapEr0VGJuLQ7mY6FUgAzUVLW0XAREQAREQAREQgfVDgN6dDAGwmBQfF5WxWGl3xscz5VB/OyEWxVGOnOJ+2o5MqexHlkW7N74sOgDQNuYILR5XWlq6mCqCk1vxmJaWFkes5UG0jW3YgPlCISzqBMokAiIgAiKQNgQksKbNpVBFRCD9CPDNvBVA6R3AN/00KukJsJhEA3m+ofvcR6HUDslimYyDleoYGrzf+c53cNtttzlxrFgnhh1QEgEREAEREAEREAERWP8EGCKKQig9Rxk/NT7NZ4NSXKWYSueAxEQPVM4bcN999znCKMMQfOtb30rMFvvMsvhCP1lZ9GBl4hwBi0kMBcAYsYllnTp16rrJrhZTnvKIgAiIgAikLwGFCEjfa6OaicCqE6B4yckCGLyfYQE4YRWXjDfF2VX5xt96l9ITIJmHAeNfMXGIFodQMQQAEz0BGIKAb+wplDJxiBTzMx8NVpbNcrmdyev1Om/5WQe+/edMrhR5aXBTXGXe+TxknUL0jwiIgAiIgAiIgAiIwLogUF5e7gynf/nll3H69GlnqD/tRtqKjJVKsTRZamxsBOOwDgwMOLtpO549e9axGxkmgKKp9TqlV2l8ojMB7VPamLQrOfyfx9DrlIk2KifIouhK+5PerAyjxfw8D2O6Jkssk3YuxVWGtYr/2717d8y7lefnea29m6wsbRMBERABEUh/AvJgTf9rpBqKwKoRuOOOO5zA/TQaaUxSVGVMVhtjisH4X3nlFWfmVoqu9DKwb/JZSRqvNCTpJUBDkeIqDUgmiqv0VH3ppZecyQYeeughx4Cl0fzaa6854i2HenGGVcZuZaKRTWP46aefdury8MMPO9u+8Y1vOHWyMVudzPpHBERABERABERABERg3RO48847nUmhKJjyxT8TQwfs3bvXeemfLL7/1q1bHQeBH/zgB7Gh/xRKOeqK9io9SSnQ8oU/xdj48AK0TzmpKj1naQszP+1fTjz15ptvOuXR5qyqqnLqwjy0Z5988kln1NXtt98eG/7vZJj5h+dkvXlsYmJZHLHFWKz79u2bY+9yLoTFjhZLLFefRUAEREAE1o5AhhlqMSe6NsUSCiN8S2i9yNauejqzCIjAWhDgc4B/yeKuWkGVb/BTJeahYZjMOKQXbLJy+dyJN3bjy07cxzf8LGO+OsQfr3UREIGVIcCOIV+I8Ltrv4/8/suOWBneKlUEREAENhsB2o38fbG/MYtpP+1E/i4l2qEc1u/xeK7bzjJT2bfznT+VTbuYOibLk2jvJsujbSIgAiIgAmtLIFn/x9ZIHqyWhJYiIAIxAvMZsosxcOfLk0xc5YlTiavJ9tE4VhIBERABERABERABEdjYBFLZjfO1OpWdyNBTqVIq23W+88+3L9V55ts+ny0833HaJwIiIAIikB4EUrugpUf9VAsREAEREAEREAEREAEREAEREAEREAEREAEREAERSFsCEljT9tKoYiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAulOQAJrul8h1U8EREAEREAEREAEREAEREAEREAEREAEREAERCBtCUhgTdtLo4qJgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAikOwEJrOl+hVQ/ERABERABERABERABERABERABERABERABERCBtCUggTVtL40qJgIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIikO4EJLCm+xVS/URABERABERABERABERABERABERABERABERABNKWgATWtL00qpgIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEC6E5DAmu5XSPUTAREQAREQAREQAREQAREQAREQAREQAREQARFIWwIpBdbMzEwEg8G0rbgqJgIiIAIiIAIisHYEaCPQVkiVZEekIqPtIiACIiACIiACIiACIiAC643AQv2f6wTWjIwM8C87OxsjIyPrrb2qrwiIgAiIgAiIwCoQGB0dhd/vd2wG2g02yY6wJLQUAREQAREQAREQAREQARHYKARS9X9s+64TWLmDnSN2msbGxtDf3y9PVktLSxEQAREQARHY5AT45pa2AQ0MvoyNF1ctGtkRloSWIiACIiACIiACIiACIiAC65nAYvo/bF9G1KTEhobDYYRCIQQCAUdk5ZKflURABERABERABDY3AQ799/l8jrjq9XqdMAFut3sOFNkRc3DogwiIgAiIgAiIgAiIgAiIwDolsJj+D5uWVGCl5srOkf3j5yQ67DpFo2qLgAiIgAiIgAjcKAEbAoCiqv1L9GKVHXGjdHWcCIiACIiACIiACIiACIhAOhFYTP+H9U0qsHIHO0eRSMT5k8BKIkoiIAIiIAIiIALWwHC5XOBforhqCcmOsCS0FAEREAEREAEREAEREAERWK8EFtv/SSmw2oazg8Rkl3a7liIgAiIgAiIgApuPgBVU7XIhAtZ+sMuF8mu/CIiACIiACIiACIiACIiACKQLAdvvsctU9VpQYE11oLaLgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIwGYn4NrsANR+ERABERABERABERABERABERABERABERABERABEbhRApkLHWiH9NnlQvm1XwREQAREQAREQAREQAREQATShYAd0meXC9XL9nvscqH82i8CIiACIiACIrBxCVj7wS5TtTSlwEqDIhgMYmRkBGNjY5iamkpVhraLgAiIgAiIgAiIgAiIgAiIQFoSyMrKQk5ODvLy8uDxeOadnE/9n7S8hKqUCIiACIiACKwZgcXaEUljsFJcDQQC6O3tRXZ2dswYWbPW6MQiIAIiIAIiIAIiIAIiIAIicAMErGg6Pj6OsrIyeL3e60RW9X9uAKwOEQEREAEREIFNQGAxdgQxJBVYw+Ew+vv74XK5UFJSsglwqYkiIAIiIAIiIAIiIAIiIAIbmQD7N+znFBcXw+12z2mq+h9MhyIAAEAASURBVD9zcOiDCIiACIiACIhAAoH57AhmvW6SK769jUQiTlgADqNREgEREAEREAEREAEREAEREIH1TiA3N9fp47Cvwz6PTer/WBJaioAIiIAIiIAIpCKQyo6w+a8TWLmDRkYoFHJiFNmMWoqACIiACIiACIiACIiACIjAeiXA+Kvs48SLq7Yt6v9YElqKgAiIgAiIgAgkIzCfHcH81wmsNC6SGR3JCtc2ERABERABERABERABERABEVhPBBL7O4mf11NbVFcREAEREAEREIHVJZDKbrhOYF3daulsIiACIiACIiACIiACIiACIiACIiACIiACIiACIrB+CUhgXb/XTjUXAREQAREQAREQAREQAREQAREQAREQAREQARFYYwISWNf4Auj0IiACIiACIiACIiACIiACIiACIiACIiACIiAC65eABNb1e+1UcxEQAREQAREQAREQAREQAREQAREQAREQAREQgTUmIIF1jS+ATi8CIiACIiACIiACIiACIiACIiACIiACIiACIrB+CUhgXb/XTjUXAREQAREQAREQAREQAREQAREQAREQAREQARFYYwISWNf4Auj0IiACIiACIiACIiACIiACIiACIiACIiACIiAC65eABNb1e+1UcxEQAREQAREQAREQAREQAREQAREQAREQAREQgTUmsKoCazQaXePmru3puzo7cezddzE6MrImFWluanLOvxYnn6/t777zDlg3JREQAREQAREQAREQARFY7wTY50n8W4422TKXo6yllLFctrqtv10upQ6JeZejjMQy9VkEREAEREAEbobAqgmsT3/lK7j/7rvxl3/+5zdT33V97He/8x385q/+KprWSEwke54/VaIIuhShk0IxBePFpPna/lu/9msrel/QKFysqL1UBotpu/KIgAiIgAiIgAiIgAhsHgK/8Su/4vR72Pd5/JFHHPv7maeeuikAtFFZ1r/5uZ+7qXJu5ODlsNX/7m/+JsaEXNgn+asvfQkjw8OLqlKiPW8Zk4uSCIiACIiACKQDgVUTWJ8xAivTc9/9bjq0W3VIQoCGz1IE8Jd//ON5Bdskp1j1TTS6aBQuVtReKoNVb5BOKAIiIAIiIAIiIAIisC4IHDp8GA07djgODBQTl2JnJ2vg2NhYss3ralt9QwPIhTY6ReffNHb6QimZPZ+RkQH+jY6OLnS49ouACIiACIjAqhBYFYGVXo7d3d3Izc11fgS/++yzscZxeEdiit/G9aYLF5y/xO38zD++0bSJb0F5vsS3oYnlxJfFY1MdZ8u1Sx7X2dFxXX24n/vsfuax22z9nQ0J/zA/68/8XLfJlsV6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vsbXuXXLFttFjRGTU8t9XMRNDSVgCHZGfcax+urOJuqPsd2xj3q80Sf1ptSxGX0yxENjv5bVvhrbtZxxjO5ztYmO03J6rJrWpxcRumjbxgWG7lP27up3PNboy2RsjH3GuI33hveonjs9F0Z/Hceo/VAzmOhTdj2nRl32vfYMqh8TYV2n9PyreENPZEbfXcdltG1sN86V1qP90XYdL7yMehz7aoxLj3H8zOl7GgmQAAmQAAmQAAmQQHQQOC3ejLNmzUJKSgoSE+2T+QJ5/6MUjOtG12tG4xpTtztej7pe+2odWtZ1u24zrme1jJpRp+t2o37X61k9xvF+y+irbnftr25T0zaMa2Z31+q6X0NwaXxVdx63WodxPe7YH91utO9Yv45FnXSM+wjH441xGsdpn93VbbDS2WcqzD6vIQykXjWdNajev1t37LC9538kQAIkQAIk4CkBd9cRxrFBFViNRsL9+vnPftb2421MHdcfZDWNOeRO/A13f9m+MwF90q8XRj8Wj9OJLvycj+A7EiABEiABEiABEiABEriYgLsbo0ALrBe3Gttb/u6++2z3Wo8++eQFETNSRqwCq3rJ6gw0ve9TxxO9F1SPYvUCppEACZAACZCANwTcXUcYxwc1RIDRSLhfdaq7JoMyYqDepYmzZBo7xdVwnxnP2lfvUn0iTnHVM14sRQIkQAIkQAIkQAIkQAKhIKCesppsS8MaGB6ioWjX0zY0HMKPJOSchofT+KsaBk3F1clCGXhaN8uRAAmQAAmQgCOBuPBgdRww10mABEiABEiABEiABEiABOKTgDvPE3qwxudngaMmARIgARIgAW8JuLuOMOqwBx4y3vGVBEiABEiABEiABEiABEiABEiABEiABEiABEiABEjAYwIUWD1GxYIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4EyAAqszD74jARIgARIgARIgARIgARIgARIgARIgARIgARIgAY8JUGD1GBULkgAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkIAzAQqszjz4jgRIgARIgARIgARIgARIgARIgARIgARIgARIgAQ8JkCB1WNULEgCJEACJEACJEACJEACJEACJEACJEACJEACJEACzgQosDrz4DsSIAESIAESIAESIAESIAESIAESIAESIAESIAES8JgABVaPUbEgCZAACZAACZAACZAACZAACZAACZAACZAACZAACTgToMDqzIPvSIAESIAESIAESIAESIAESIAESIAESIAESIAESMBjAhRYPUbFgiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgTIACqzMPviMBEiABEiABEiABEiABEiABEiABEiABEiABEiABjwlQYPUYFQuSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgDMBCqzOPPiOBEiABEiABEiABEiABEiABEiABEiABEiABEiABDwmQIHVY1QsSAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQALOBCiwOvPgOxIgARIgARIgARIgARIgARIgARIgARIgARIgARLwmAAFVo9RsSAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJOBOgwOrMg+9IgARIgARIgARIgARIgARIgARIgARIgARIgARIwGMCyR6XZEESIAESIAESIAESIAESIAESIAESIAESiCkCVjejSXDa5q6EFnAu5XQI35AACcQZAQqscXbCOVwSIAESIAESIAESIAESIAESIAESiD0CDjKouRdWUzdg6rG92tbN/YB5EFbrsLwOAZZhh/UhWOU9LLp9AKmLfgYk59sQdQyYce+jjchKTUR6SgIyZElPSURGsr7qe9luW5dtuk/Wbdts64nITE1AcVYySrKSbPVRlI29Tx5HRAJKgAIrPwckQAIkQAIkQAIkQAIkQAIkQAIkQAJRQEBEVIuIpMP1sA41wDraKkuniKhdY2KqvsoSBOsbsaBvxL+KZ+QmY3pOMsqy7a+lsj59bN2omQKsQYKvJBBdBCiwRtf5Ym9JgARIgARIgARIgARIgARIgARIIIYJjHmimsX7dLhRhNR6cTYVQXVYBFVZYOoMwdiDI3PWd5ugizsrzU6yia1lFwTYFOj6rDy7bBOcHrnrCbeRAAn4QoACqy/UeAwJkAAJkAAJkAAJkAAJkAAJkAAJkEAACIigOtIsjqlnYZXFMnhGRNU621T9AFQeNVU095qhCxokVIGLzclPweKSVCwpTUNlSZp4wCYx/qsLI74lgXAToMAa7jPA9kmABEiABEiABEiABEiABEiABEggLgiImGrukzCnIqKKkGoZrJbXatu2uBi+j4Os7RyFLq+elDiyYnkZiSK4ptlE10Uiui4qTrVtp5erDQP/I4GwEKDAGhbsbJQESIAESIAESIAESIAESIAESIAEYp2A1RYv1dJ3FNaBkzZBFaPtUTDosTAFEdrTrkEL3q8dtC3axRTJn7WgMBWLRWxVL9dF4u2anZZIL9cIPX/sVmwSoMAam+eVoyIBEiABEiABEiABEiABEiABEiCB0BOQJFQqqFr6DtmW6BBUXTFFly/oqEQWON4yYluePtxrG0xFYQoum52BS2WZW5BCsdX1FPM9CQSYAAXWAANldSRAAiRAAiRAAiRAAiRAAiRAAiQQPwTES3WoBpbewzZBVT1VaeEncKZ9FLo8sr8HRdOScOksFVvTsXpGOsXW8J8e9iAGCVBgjcGTyiGRAAmQAAmQAAmQAAmQAAmQAAmQQPAIiKg6WAVL9wcwywJTZ/CaYs1+E2jrN+PlE322JT05AWtnptu9W0V0zUyNLm9dv2GwAhIIEgEKrEECy2pJgARIgARIgARIgARIgARIgARIIHYIqKgqialUVO0RUTUqYqnGDv1AjWTIZMV7NYO2RetcVpYm3q3p2DAnE6XZEsyVRgIk4BMBCqw+YeNBJEACJEACJEACJEACJEACJEACJBDrBHT6/9lxT9XR1lgfcNyN72jTMHR5aHc3ZuYm22K2auzWxZIoi0YCJOA5AQqsnrNiSRIgARIgARIgARIgARIgARIgARKIeQLWoVoRVXeJp+ouYKQl5sfLAdoJ1HWbUCdJsjRR1kMfL0dueiLRkAAJeEiAAquHoFiMBEiABEiABEiABEiABEiABEiABGKWgGUYlq7tMHe+JV6r52J2mBzY1AQ0ZICjuNrUfRbNPbVYPP0ypCVnTl0BS5BAHBKgwBqHJ51DJgESIAESIAESIAESIAESIAESIAElYB2uh7njdRFXdwCWIUIhAWxaOM2JwvGG91HdehB7zr6CBSVrsKT8cpTkzHYqwzckEO8EKLDG+yeA4ycBEiABEiABEiABEiABEiABEog7ApbunSKsvgnrwMm4GzsHPDGBaakJuHxOxoUCJssIatuOXnh/umU/dCnMKhehdYNNcE1KTLmwnyskEK8EKLDG65nnuEmABEiABEiABEiABEiABEiABOKLwGi7TVQ1d74DCbAaX2PnaD0icHWFs/fqmeYDMFtNFx3b3teA7aeewq4zL6GybB2WildrTkbRReW4gQTihQAF1ng50xwnCZAACZAACZAACZAACZAACZBAXBKwhQFofUYSV70fl+PnoD0nsNklPMCp5r2THjxqHsLR+h22ZXbBEqyZcy2KsmdOegx3kkAsEqDAGotnlWMiARIgARIgARIgARIgARIgARKIewLWoRqYW56GpXdf3LMggKkJzMhNRkXh+HT/3qEOtEhyK0/tXMdx6DI9dz5Wz9mM8rwFnh7KciQQ9QQosEb9KeQASIAESIAESIAESIAESIAESIAESGCcgLX/OEytz8Haf2R8I9dIYAoC11U6hwc41bR7iiPc727srkbjoWqbJ+vq2Zswp3CZ+4LcSgIxRIACawydTA6FBEiABEiABEiABEiABEiABEggfglY+iRepgqrA1XxC4Ej95nApgWuAusen+vSA9t66/DG0d8jL7MEq0RoXVCyxq/6eDAJRDIBCqyRfHbYNxIgARIgARIgARIgARIgARIgARKYgoCl5wO7sDrk+XTuKark7jgjsHZmOnLTEy+MuqHrNAZGei+892ela6AF75x4FHtrXsPKWVdjyfQN/lTHY0kgIglQYI3I08JOkQAJkAAJkAAJkAAJkAAJkAAJkMDkBKwDJ2Bq+B2sw3WTF+ReEpiCwGYX79WqpsmTW01RndvdfUOdeK/qGRw89zYumXsjFpSudVuOG0kgGglQYI3Gs8Y+kwAJkAAJkAAJkAAJkAAJkAAJxC0B60gTTI2/h7XvUNwy4MADRyAtOQEb52VcqNBkGcHZ1sMX3gd6pX+4G++cfAyHzr+DjZUfQWnO3EA3wfpIIOQEKLCGHDkbJAESIAESIAESIAESIAESIAESIAEfCJh7YGp+HJbOrT4czENIwD2BayoynXZUtxyC2Wpy2haMN50DzXjhwAOYXbAEl1XcgtyMomA0wzpJICQEKLCGBDMbIQESIAESIAESIAESIAESIAESIAEfCVhHYG570bbAMuxjJTyMBNwT2LTQOblVVXPgwwO4b9m+9VzHceiisVnXzbsBacnOgu9kx3IfCUQKAQqskXIm2A8SIAESIAESIAESIAESIAESIAEScCGg3qqmlicBU5fLHr4lAf8JlGQlYVFx6oWKeoc60NR99sL7UK4cb3wfp1v2YdWsTVg+80okJVKyCiV/tuUfAX5a/ePHo0mABEiABEiABEiABEiABEiABEgg4ASsw+dhqnsA1qFzAa+bFZKAQeCG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');
+      }
+
+      .calendar-img {
+        background-size: cover;
+        width: 273px;
+        height: 321px;
+        background-image:
+        url('data:image/png;base64,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AAFBAAAAKAAAAUEAAAFBAABpXSe+jMIAAEAASURBVHgB7L0HkB3Hlh2YcN3w3ntvCEeQMARBgiRoATrQg/bTfP2RJlYbodmQNKvdUcTuzGolxcYoQqOY3ZlP8/lpQQ860AE0AGhAwntPgIT3Ht1wmyeb9yE7u6qey3qv3nunIrqrXlVWVubJW3lP3nszq9FFvSluRIAIEAEiQASIABEoAgKNSESKgDofSQSIABEgAkSACBgESEQoCESACBABIkAEiEDRECARKRr0fDARIAJEgAgQASJAIkIZIAJEgAgQASJABIqGAIlI0aDng4kAESACRIAIEAESEcoAESACRIAIEAEiUDQESESKBj0fTASIABEgAkSACJCIUAaIABEgAkSACBCBoiFAIlI06PlgIkAEiAARIAJEgESEMkAEiAARIAJEgAgUDQESkaJBzwcTASJABIgAESACJCKUASJABIgAESACRKBoCJCIFA16PpgIEAEiQASIABEgEaEMEAEiQASIABEgAkVDgESkaNDzwUSACBABIkAEiACJCGWACBABIkAEiAARKBoCJCJFg54PJgJEgAgQASJABEhEKlQGDhw4oGpra03t27Rpo/AXtNXU1KgNGzaoTp06qV69egUlKdi5H3/8MfWsCRMmpI55QASIABEgAqWLAIlI6bZdTiXftm2bWrhwoTp+/Hi9+0FEoNyHDx9e7/zs2bPVwYMHzbnp06erAQMG1LteyB//+I//mHrcX/7lX6aO4zoA8bHJT9BzOnfubDAZM2aMqq6uDkrCc0SACBABIhCBAIlIBDjldikTxQoiMm3aNFN1WE3eeOONFAw9e/ZUM2fOTP0u9EESiYhgUFVVpa655poGRE6u57K38b/77ruLbpHKpQ68hwgQASKQDgESkXQIlcl1W6mhSnC1DBw40NRu3bp16sSJE+Z42LBh6sYbbzTH+GdbRKZMmaLGjh2bulbog2ISkdatW6u2bdvWqzLcVmItkguwjICQ+NhWrFihFi1aZLIiEfGBKPMgAkQgiQiQiCSxVWIoE9wxK1euNDnDvQI3i72tX79e4Q8kxI4XgbLFebggih0jUkwiArdVUFwKXFzz5s1Tu3btSsHpy4VlW7BIRFLw8oAIEIEyQ4BEpMwaNKw67733XkpZZqPU7KBWWFHsOAi5JudBWqCQcR7EBa4cO31Q2ZAW9+De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')
+      }
+
+      .drill-through-img {
+        width: 732px;
+        height: 266px;
+        background-size: cover;
+        background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABbgAAAIUCAYAAADYJUo5AAAAAXNSR0IArs4c6QAAQABJREFUeAHs3VmMXOeZN/ZTzW5uEiVSNEWJojaK2q3dtmTPYo9nBpMLfbDyZaQk+IAsEPIht0FuchUguc1lgNzpKsjNKAlmEGEwMx6PbcxYXilroxZrtS2R2kiKkkmRErs773O639LpYnV1VXUtp6p+xy5W1Vnf83tPd6v/9fR7isJEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBidQGN0h3IkAgQIECBAgAABAgQIECBAgMBkCDz8xLHlyWipVg5C4KnHD8jIBgFpHwTGIDA3hmM6JAECBAgQIECAAAECBAgQIECAAAECBAgQ2LSAgHvThHZAgAABAgQIECBAgAABAgQIECBAgAABAuMQEHCPQ90xCRAgQIAAAQIECBAgQIAAAQIECBAgQGDTAgLuTRPaAQECBAgQIECAAAECBAgQIECAAAECBAiMQ0DAPQ51xyRAgAABAgQIECBAgAABAgQIECBAgACBTQsIuDdNaAcECBAgQIAAAQIECBAgQIAAAQIECBAgMA4BAfc41B2TAAECBAgQIECAAAECBAgQIECAAAECBDYtIODeNKEdECBAgAABAgQIECBAgAABAgQIECBAgMA4BATc41B3TAIECBAgQIAAAQIECBAgQIAAAQIECBDYtICAe9OEdkCAAAECBAgQIECAAAECBAgQIECAAAEC4xAQcI9D3TEJECBAgAABAgQIECBAgAABAgQIECBAYNMCAu5NE9oBAQIECBAgQIAAAQIECBAgQIAAAQIECIxDQMA9DnXHJECAAAECBAgQIECAAAECBAgQIECAAIFNCwi4N01oBwQIECBAgAABAgQIECBAgAABAgQIECAwDgEB9zjUHZMAAQIECBAgQIAAAQIECBAgQIAAAQIENi0wf+Lj08ud9rJ39+WNTsttz6/T9eH68fXT6frw/cP3j07Xh+8fvn90uj58//D9o9P14fuH7x+drg/fP3z/6HR9+P7h+0en68Oy2Rbw88PPj05fAX5+jPfnhwruTlenZQQIECBAgAABAgQIECBAgAABAgQIECBQW4GO1dm1bbWGESBAgAABAgQIECBAgAABAgSGKPDwE8c6/sX7EA9t12MQeOrxAzKyMbg7JIFBCKjgHoSifRAgQIAAAQIECBAgQIAAAQIECBAgQIDAyAUE3CMnd0ACBAgQIECAAAECBAgQIECAAAECBAgQGISAgHsQivZBgAABAgQIECBAgAABAgQIECBAgAABAiMXEHCPnNwBCRAgQIAAAQIECBAgQIAAAQIECBAgQGAQAgLuQSjaBwECBAgQIECAAAECBAgQIECAAAECBAiMXEDAPXJyByRAgAABAgQIECBAgAABAgQIECBAgACBQQgIuAehaB8ECBAgQIAAAQIECBAgQIAAAQIECBAgMHIBAffIyR2QAAECBAgQIECAAAECBAgQIECAAAECBAYhIOAehKJ9ECBAgAABAgQIECBAgAABAgQIECBAgMDIBQTcIyd3QAIECBAgQIAAAQIECBAgQIAAAQIECBAYhICAexCK9kGAAAECBAgQIECAAAECBAgQIECAAAECIxcQcI+c3AEJECBAgAABAgQIECBAgAABAgQIECBAYBACAu5BKNoHAQIECBAgQIAAAQIECBAgQIAAAQIECIxcQMA9cnIHJECAAAECBAgQIECAAAECBAgQIECAAIFBCAi4B6FoHwQIECBAgAABAgQIECBAgAABAgQIECAwcgEB98jJHZAAAQIECBAgQIAAAQIECBAgQIAAAQIEBiEg4B6Eon0QIECAAAECBAgQIECAAAECBAgQIECAwMgFBNwjJ3dAAgQIECBAgAABAgQIECBAgAABAgQIEBiEgIB7EIr2QYAAAQIECBAgQIAAAQIECBAgQIAAAQIjF5gf+REdkAABAgQIECBAgAABAgQIECBAgACBoQk8/MSx5aHt3I5rJ/DU4wcatWvUCBukgnuE2A5FgAABAgQIECBAgAABAgQIECBAgAABAoMTEHAPztKeCBAgQIAAAQIECBAgQIAAAQIECBAgQGCEAgLuEWI7FAECBAgQIECAAAECBAgQIECAAAECBAgMTkDAPThLeyJAgAABAgQIECBAgAABAgQIECBAgACBEQoIuEeI7VAECBAgQIAAAQIECBAgQIAAAQIECBAgMDgBAffgLO2JAAECBAgQIECAAAECBAgQIECAAAECBEYoIOAeIbZDESBAgAABAgQIECBAgAABAgQIECBAgMDgBATcg7O0JwIECBAgQIAAAQIECBAgQIAAAQIECBAYoYCAe4TYDkWAAAECBAgQIECAAAECBAgQIECAAAECgxMQcA/O0p4IECBAgAABAgQIECBAgAABAgQIECBAYIQCAu4RYjsUAQIECBAgQIAAAQIECBAgQIAAAQIECAxOQMA9OEt7IkCAAAECBAgQIECAAAECBAgQIECAAIERCgi4R4jtUAQIECBAgAABAgQIECBAgAABAgQIECAwOAEB9+As7YkAAQIECBAgQIAAAQIECBAgQIAAAQIERigg4B4htkMRIECAAAECBAgQIECAAAECBAgQIECAwOAEBNyDs7QnAgQIECBAgAABAgQIECBAgAABAgQIEBihgIB7hNgORYAAAQIECBAgQIAAAQIECBAgQIAAAQKDE5gf3K7siQABAgQIECBAgAABAgQIXCzw8BPHli+ea860Cjz1+IHGtJ6b8yJAgACB+gmo4K5fn2gRAQIECBAgQIAAAQIECBAgQIAAAQIECHQhIODuAskqBAgQIECAAAECBAgQIECAAAECBAgQIFA/AQF3/fpEiwgQIECAAAECBAgQIECAAAECBAgQIECgCwEBdxdIViFAgAABAgQIECBAgAABAgQIECBAgACB+gkIuOvXJ1pEgAABAgQIECBAgAABAgQIECBAgAABAl0ICLi7QLIKAQIECBAgQIAAAQIECBAgQIAAAQIECNRPQMBdvz7RIgIECBAgQIAAAQIECBAgQIAAAQIECBDoQkDA3QWSVQgQIECAAAECBAgQIECAAAECBAgQIECgfgIC7vr1iRYRIECAAAECBAgQIECAAAECBAgQIECAQBcCAu4ukKxCgAABAgQIECBAgAABAgQIECBAgAABAvUTEHDXr0+0iAABAgQIECBAgAABAgQIECBAgAABAgS6EBBwd4FkFQIECBAgQIAAAQIECBAgQIAAAQIECBCon4CAu359okUECBAgQIAAAQIECBAgQIAAAQIECBAg0IWAgLsLJKsQIECAAAECBAgQIECAAAECBAgQIECAQP0EBNz16xMtIkCAAAECBAgQIECAAAECBAgQIECAAIEuBATcXSBZhQABAgQIECBAgAABAgQIECBAgAABAgTqJyDgrl+faBEBAgQIECBAgAABAgQIECBAgAABAgQIdCEg4O4CySoECBAgQIAAAQIECBAgQIAAAQIECBAgUD8BAXf9+kSLCBAgQIAAAQIECBAgQIAAAQIECBAgQKALAQF3F0hWIUCAAAECBAgQIECAAAECBAgQIECAAIH6CQi469cnWkSAAAECBAgQIECAAAECBAgQIECAAAECXQjMn/j49HKn9fbuvrzRabnt+XW6Plw/vn46XR++f/j+0en68P3D949O14fvH75/dLo+fP/w/aPT9eH7x3i/f3TqG8umX2DSv/6mv4ecYScB128nHcvqLjDp1+9G7VfBXfcrUPsIECBAgAABAgQIECBAgAABAgQIECBAoK1Ax+rstluYSYAAAQIECBAgQIAAAQIEehB4+IljHf9yuIddWXUCBJ56/MBUZA2u2wm42AbYxGm5bjOJ6zdLzMbztF2/vfaaCu5exaxPgAABAgQIECBAgAABAgQIECBAgAABArUQEHDXohs0ggABAgQIECBAgAABAgQIECBAgAABAgR6FRBw9ypmfQIECBAgQIAAAQIECBAgQIAAAQIECBCohYCAuxbdoBEECBAgQIAAAQIECBAgQIAAAQIECBAg0KuAgLtXMesTIECAAAECBAgQIECAAAECBAgQIECAQC0EBNy16AaNIECAAAECBAgQIECAAAECBAgQIECAAIFeBQTcvYpZnwABAgQIECBAgAABAgQIECBAgAABAgRqISDgrkU3aAQBAgQIECBAgAABAgQIECBAgAABAgQI9Cog4O5VzPoECBAgQIAAAQIECBAgQIAAAQIECBAgUAsBAXctukEjCBAgQIAAAQIECBAgQIAAAQIECBAgQKBXAQF3r2LWJ0CAAAECBAgQIECAAAECBAgQIECAAIFaCAi4a9ENGkGAAAECBAgQIECAAAECBAgQIECAAAECvQoIuHsVsz4BAgQIECBAgAABAgQIECBAgAABAgQI1EJAwF2LbtAIAgQIECBAgAABAgQIECBAgAABAgQIEOhVQMDdq5j1CRAgQIAAAQIECBAgQIAAAQIECBAgQKAWAgLuWnSDRhAgQIAAAQIECBAgQIAAAQIECBAgQIBArwIC7l7FrE+AAAECBAgQIECAAAECBAgQIECAAAECtRAQcNeiGzSCAAECBAgQIECAAAECBAgQIECAAAECBHoVEHD3KmZ9AgQIECBAgAABAgQIECBAgAABAgQIEKiFgIC7Ft2gEQQIECBAgAABAgQIECBAgAABAgQIECDQq4CAu1cx6xMgQIAAAQIECBAgQIAAAQIECBAgQIBALQQE3LXoBo0gQIAAAQIECBAgQIAAAQIECBAgQIAAgV4FBNy9ilmfAAECBAgQIECAAAECBAgQIECAAAECBGohIOCuRTdoBAECBAgQIECAAAECBAgQIECAAAECBAj0KiDg7lXM+gQIECBAgAABAgQIECBAgAABAgQIECBQCwEBdy26QSMIECBAgAABAgQIECBAgAABAgQIECBAoFcBAXevYtYnQIAAAQIECBAgQIAAAQIECBAgQIAAgVoICLhr0Q0aQYAAAQIECBAgQIAAAQIECBAgQIAAAQK9Cgi4exWzPgECBAgQIECAAAECBAgQIECAAAECBAjUQkDAXYtu0AgCBAgQIECAAAECBAgQIECAAAECBAgQ6FVAwN2rmPUJECBAgAABAgQIECBAgAABAgQIECBAoBYCAu5adINGECBAgAABAgQIECBAgAABAgQIECBAgECvAgLuXsWsT4AAAQIECBAgQIAAAQIECBAgQIAAAQK1EBBw16IbNIIAAQIECBAgQIAAAQIECBAgQIAAAQIEehUQcPcqZn0CBAgQIECAAAECBAgQIECAAAECBAgQqIWAgLsW3aARBAgQIECAAAECBAgQIECAAAECBAgQINCrgIC7VzHrEyBAgAABAgQIECBAgAABAgQIECBAgEAtBATctegGjSBAgAABAgQIECBAgAABAgQIECBAgACBXgUE3L2KWZ8AAQIECBAgQIAAAQIECBAgQIAAAQIEaiEg4K5FN2gEAQIECBAgQIAAAQIECBAgQIAAAQIECPQqIODuVcz6BAgQIECAAAECBAgQIECAAAECBAgQIFALgflatEIjCBAgQIAAAQIECBBoK/DwE8eW2y4wcyoFnnr8QGMqT8xJESBAgAABAgSGJKCCe0iwdkuAAAECBAgQIECAAAECBAgQIECAAAECwxUQcA/X194JECBAgAABAgQIECBAgAABAgQIECBAYEgCAu4hwdotAQIECBAgQIAAAQIECBAgQIAAAQIECAxXQMA9XF97J0CAAAECBAgQIECAAAECBAgQIECAAIEhCQi4hwRrtwQIECBAgAABAgQIECBAgAABAgQIECAwXAEB93B97Z0AAQIECBAgQIAAAQIECBAgQIAAAQIEhiQg4B4SrN0SIECAAAECBAgQIECAAAECBAgQIECAwHAFBNzD9bV3AgQIECBAgAABAgQIECBAgAABAgQIEBiSgIB7SLB2S4AAAQIECBAgQIAAAQIECBAgQIAAAQLDFRBwD9fX3gkQIECAAAECBAgQIECAAAECBAgQIEBgSAIC7iHB2i0BAgQIECBAgAABAgQIECBAgAABAgQIDFdAwD1cX3snQIAAAQIECBAgQIAAAQIECBAgQIAAgSEJCLiHBGu3BAgQIECAAAECBAgQIECAAAECBAgQIDBcAQH3cH3tnQABAgQIECBAgAABAgQIECBAgAABAgSGJCDgHhKs3RIgQIAAAQIECBAgQIAAAQIECBAgQIDAcAUE3MP1tXcCBAgQIECAAAECBAgQIECAAAECBAgQGJKAgHtIsHZLgAABAgQIECBAgAABAgQIECBAgAABAsMVEHAP19feCRAgQIAAAQIECBAgQIAAAQIECBAgQGBIAgLuIcHaLQECBAgQIECAAAECBAgQIECAAAECBAgMV2D+xMenlzsdYu/uyxudltueX6frw/Xj66fT9eH7h+8fna4P3z98/+h0ffj+4ftHp+tj2r9/dDp3y6ZfYNK//01/DznDTgKu3046ltVdwPVb9x7Svk4Ck379btR+Fdydet8yAgQIECBAgAABAgQIECBAgAABAgQIEKitQMfq7Nq2WsMIECBAgAABAgQIzIjAw08c6/gXlzPCMDOn+dTjB6bydzTX8cxcwuWJTst17Lp13U6ygOt3knuv97ZPy/fd3s98ZQsV3P3K2Y4AAQIECBAgQIAAAQIECBAgQIAAAQIExiog4B4rv4MTIECAAAECBAgQIECAAAECBAgQIECAQL8CAu5+5WxHgAABAgQIECBAgAABAgQIECBAgAABAmMVEHCPld/BCRAgQIAAAQIECBAgQIAAAQIECBAgQKBfAQF3v3K2I0CAAAECBAgQIECAAAECBAgQIECAAIGxCgi4x8rv4AQIECBAgAABAgQIECBAgAABAgQIECDQr4CAu1852xEgQIAAAQIECBAgQIAAAQIECBAgQIDAWAUE3GPld3ACBAgQIECAAAECBAgQIECAAAECBAgQ6FdAwN2vnO0IECBAgAABAgQIECBAgAABAgQIECBAYKwCAu6x8js4AQIECBAgQIAAAQIECBAgQIAAAQIECPQrIODuV852BAgQIECAAAECBAgQIECAAAECBAgQIDBWAQH3WPkdnAABAgQIECBAgAABAgQIECBAgAABAgT6FRBw9ytnOwIECBAgQIAAAQIECBAgQIAAAQIECBAYq4CAe6z8Dk6AAAECBAgQIECAAAECBAgQIECAAAEC/QoIuPuVsx0BAgQIECBAgAABAgQIECBAgAABAgQIjFVAwD1WfgcnQIAAAQIECBAgQIAAAQIECBAgQIAAgX4FBNz9ytmOAAECBAgQIECAAAECBAgQIECAAAECBMYqIOAeK7+DEyBAgAABAgQIECBAgAABAgQIECBAgEC/AgLufuVsR4AAAQIECBAgQIAAAQIECBAgQIAAAQJjFRBwj5XfwQkQIECAAAECBAgQIECAAAECBAgQIECgXwEBd79ytiNAgAABAgQIECBAgAABAgQIECBAgACBsQoIuMfK7+AECBAgQIAAAQIECBAgQIAAAQIECBAg0K+AgLtfOdsRIECAAAECBAgQIECAAAECBAgQIECAwFgFBNxj5XdwAgQIECBAgAABAgQIECBAgAABAgQIEOhXQMDdr5ztCBAgQIAAAQIECBAgQIAAAQIECBAgQGCsAgLusfI7OAECBAgQIECAAAECBAgQIECAAAECBAj0KyDg7lfOdgQIECBAgAABAgQIECBAgAABAgQIECAwVgEB91j5HZwAAQIECBAgQIAAAQIECBAgQIAAAQIE+hUQcPcrZzsCBAgQIECAAAECBAgQIECAAAECBAgQGKuAgHus/A5OgAABAgQIECBAgAABAgQIECBAgAABAv0KCLj7lbMdAQIECBAgQIAAAQIECBAgQIAAAQIECIxVQMA9Vn4HJ0CAAAECBAgQIECAAAECBAgQIECAAIF+BQTc/crZjgABAgQIECBAgAABAgQIECBAgAABAgTGKjA/1qM7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gg8awf4IECBAgMBQBCLQnktV3OVzurFkcebMmfLH7A033FAcOXKkVkF3/vk/FAk7JUCAAAECBAgQIECAAAECQxMox+Be2fvKjSZjDO40Jnd508mhHdWOCRAgQIDAVAtEuL24uDi3sLCQXjYa58+fLzPkKOR+5513ahVuR0fMT3VvODkCBAgQIECAAAECBAgQmEKBL4cf+fK37BRrl7NTZXc644i5C8OUTGHfOyUCBAgQGIFA+aM0KrjTmNwrP1bTQSPszsd+8sknm6/zvHE9C7jHJe+4BAgQIECAAAECBAgQINC3wJe/YkeYXf7SXQ5LUs5vrITcfe/chgQIECBAYLYFIstupBtKlgpbtmwpUhV3M9BOQ5Y0X9eByRAldegFbSBAgAABAgQIECBAgACBngUu/u06SrhXwu1l1ds9e9qAAAECBAiEQLrJZPnZcargbnzxxRdrftymsHvN+zqICbjr0AvaQIAAAQIECBAgQIAAAQJ9CuRq7S+HLelzRzYjQIAAAQIE2gicO3eurOg+ffp07cLtaK6Au02nmUWAAAECBAgQIECAAAECkydQlputNjv9Jj55J6DFBAgQIECgBgIxJMnqVP3RmufV7lnAXbsu0SACBAgQIECAAAECBAgQIECAAAECBAgQ6EZAwN2NknUIECBAgAABAgQIECBAgAABAgQIECBAoHYCAu7adYkGESBAgAABAgQIECBAgAABAgQIECBAgEA3AgLubpSsQ4AAAQIECBAgQIAAAQIECBAgQIAAAQK1ExBw165LNIgAAQIECBAgQIAAAQIECBAgQIAAAQIEuhEQcHejZB0CBAgQIECAAAECBAgQIECAAAECBAgQqJ2AgLt2XaJBBAgQIECAAAECBAgQIECAAAECBAgQINCNgIC7GyXrECBAgAABAgQIECBAgAABAgQIECBAgEDtBATctesSDSJAgAABAgQIECBAgAABAgQIECBAgACBbgQE3N0oWYcAAQIECBAgQIAAAQIECBAgQIAAAQIEaicg4K5dl2gQAQIECBAgQIAAAQIECBAgQIAAAQIECHQjIODuRsk6BAgQIECAAAECBAgQIECAAAECBAgQIFA7AQF37bpEgwgQIECAAAECBAgQIECAAAECBAgQIECgGwEBdzdK1iFAgAABAgQIECBAgAABAgQIECBAgACB2gkIuGvXJRpEgAABAgQIECBAgAABAgQIECBAgAABAt0IzHezknUIECBAgAABAgQIECBAgACB4QucPXu2eO+994oPPvigiNfnz58vFhcXi23bthXbt28v9uzZU1x11VXF3r17i0ajMfwGOQIBAgQIEKi5gIC75h2keQQIECBAgAABAgQIECAw/QInT54sXnrppeKjjz5qe7IXLlwozpw5U5w4caJ4/fXXi61btxa33HJLcejQoWJuzh9nt0UzkwABAgRmQkDAPRPd7CQJECBAgAABAgQIECBAoI4CX3zxRfHMM88Ux48f76l5n3/+efHiiy+WYff9999fXHnllT1tb2UCBAgQIDAtAj7mnZaedB4ECBAgQIAAAQIECBAgMFECn376afGjH/2o53C7epLnzp0rnn766TLors73mgABAgQIzIqACu5Z6WnnSYAAAQIECBAgQIAAAQK1EYhw+8c//nERQ4+0TjHkyFe+8pXyEeNub9mypRyL+5NPPinH545Qu3WKau6Y/9WvfrV1kfcEmgJLS0uGtGlqeEGAwLQICLinpSedBwECBAgQIECAAAECBAhMhEAMS/Kzn/3sonA7gu2bbrqpHFt7YWFh3XOJm1AePXq0iJC8OsXY3Lt27Squv/766uypeP3mm2+WY5D3czJXX311+WFBP9tOyzbxQUpcczHGe1wjDz74YHHppZdOy+k5DwIEZlxAwD3jF4DTJ0CAAAECBAgQIECAAIHRChw5cuSisHbnzp3FQw89VFx22WUbNuaqq64q9u/fXzz//PPFW2+9tWb9Z599trjiiivKEHPNggl/8+6775Y32OznNHbs2DHzAfcbb7zRvIFpfDASFf9xvZkIECAwDQLG4J6GXnQOBAgQIECAAAECBAgQIDARAlFBGxXY1SnC7e985ztdhdt5u0ajUdxzzz3FbbfdlmeVz8vLy2V4uWbmjL/ZvXv3jAsURdyUtDqdP3+++tZrAgQITLSACu6J7j6NJ0CAAAECBAgQIECAAIFJEnjppZfWNDfG1/7mN79ZbN26dc38ePP73/+++OCDD8r5e/bsKQ4dOnTROhFwx9jcx44day57//33y2rdGMd7WqYbbrihuPLKKzc8nXfeeWfN0C15LPMNN5zyFW688cbid7/7XRHD48SHI7fccsuUn7HTI0BglgQE3LPU286VAAECBAgQIECAAAECBMYmEENDnDx5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3O1dzCVAgAABAgQIECBAgAABAiMViErzeFy4cKG8CeWnn35axA0WI0SNcaEvueSS8maJ8dxu6hRyxzjeN954Y7vNzCNAgAABAhMtIOCe6O7TeAIECBAgQIAAAQIECBCYNoEIo/fu3Vs+ej239ULuuHGlgLtXTesTIECAwCQIpNHKTAQIECBAgAABAgQIECBAgMC0CETIfffdd685nS1b0gDlJgIECBAgMIUCKrinsFOdEgECBAgQIECAAAECBAjMtkCE3FEJHmNwR7h93333zTaIsydAgACBqRUQcE9t1zoxAgQIECBAgAABAgQIEJhlgeuuu66Ih4kAAQIECEyzgCFKprl3nRsBAgQIECBAgAABAgQIECBAgAABAgSmWGD+xMenlzud397dlzc6Lbc9v07Xh+vH10+n68P3D98/Ol0fvn/4/tHp+tjs949O+7Zs+gU2e/2Me/vp7yFn2Elg3NffZo/f6dwsI0CAAAECBOopsLBt+1tFo1HsWthaxPP+HTuL/QeuKdJ/F5QNHvfv7yq463ndaBUBAgQIECBAgAABAgQIECBAgAABAgQIbCDQsTp7g20tJkCAAAECBAhMlMDDTxzr+JdrE3UyGruhwFOPH5iK/9Z13W7Y1VO1wrRct62dMujruFEsF3PpK3xLPFLZ1kJ6s7ClKLalx/Z0p6l47FhoFP/xnqWyKVdffXVrk7wnQIAAAQIEWgSOHz9ezllYWHh0eXn5dHp8Go8088zc3NxnZ8+ePb9t27bPT506dSHdxHjxscceW2zZxVjequAeC7uDEiBAgAABAgQIECBAgAABAgQIECBAgMBmBQTcmxW0PQECBAgQIECAAAECBAgQIECAAAECBAiMRUDAPRZ2ByVAgAABAgQIECBAgAABAgQIECBAgACBzQoIuDcraHsCBAgQIECAAAECBAgQIECAAAECBAgQGIuAgHss7A5KgAABAgQIECBAgAABAgQIECBAgAABApsVEHBvVtD2BAgQIECAAAECBAgQIECAAAECBAgQIDAWAQH3WNgdlAABAgQIECBAgAABAgQIECBAgAABAgQ2KyDg3qyg7QkQIECAAAECBAgQIECAAAECBAgQIEBgLAIC7rGwOygBAgQIECBAgAABAgQIECBAgAABAgQIbFZgfrM7sD0BAgQIzIbAw08cW56NM3WWIfDU4wcaJAgQIECAAAECBAgQIECAQN0FVHDXvYe0jwABAgQIECBAgAABAgQIECBAgAABAgTaCgi427KYSYAAAQIECBAgQIAAAQIECBAgQIAAAQJ1FxBw172HtI8AAQIECBAgQIAAAQIECBAgQIAAAQIE2goIuNuymEmAAAECBAgQIECAAAECBAgQIECAAAECdRcQcNe9h7SPAAECBAgQIECAAAECBAgQIECAAAECBNoKCLjbsphJgAABAgQIECBAgAABAgQIECBAgAABAnUXEHDXvYe0jwABAgQIECBAgAABAgQIECBAgAABAgTaCgi427KYSYAAAQIECIxyNSAAAEAASURBVBAgQIAAAQIECBAgQIAAAQJ1FxBw172HtI8AAQIECBAgQIAAAQIECBAgQIAAAQIE2goIuNuymEmAAAECBAgQIECAAAECBAgQIECAAAECdRcQcNe9h7SPAAECBAgQIECAAAECBAgQIECAAAECBNoKCLjbsphJgAABAgQIECBAgAABAgQIECBAgAABAnUXEHDXvYe0jwABAgQIECBAgAABAgQIECBAgAABAgTaCgi427KYSYAAAQIECBAgQIAAAQIECBAgQIAAAQJ1FxBw172HtI8AAQIECBAgQIAAAQIECBAgQIAAAQIE2goIuNuymEmAAAECBAgQIECAAAECBAgQIECAAAECdRcQcNe9h7SPAAECBAgQIECAAAECBAgQIECAAAECBNoKzLedayYBAgQIECBAgAABAgQIEJgSgQ8//HBKzsRpECBAgAABAq0CKrhbRbwnQIAAAQIECBAgQIAAAQIECBAgQIAAgYkQUME9Ed2kkQQIECBAgAABAgQIECDQr8C+ffv63dR2BAgQIEBgZgSOHz8+keeqgnsiu02jCRAgQIAAAQIECBAgQIAAAQIECBAgQEDA7RogQIAAAQIECBAgQIAAAQIECBAgQIAAgYkUEHBPZLdpNAECBAgQIECAAAECBAgQIECAAAECBAgIuF0DBAgQIECAAAECBAgQIECAAAECBAgQIDCRAgLuiew2jSZAgAABAgQIECBAgAABAgQIECBAgAABAbdrgAABAgQIECBAgAABAgQIECBAgAABAgQmUkDAPZHdptEECBAgQIAAAQIECBAgQIAAAQIECBAgIOB2DRAgQIAAAQIECBAgQIAAAQIECBAgQIDARAoIuCey2zSaAAECBAgQIECAAAECBAgQIECAAAECBATcrgECBAgQIECAAAECBAgQIECAAAECBAgQmEgBAfdEdptGEyBAgAABAgQIECBAgAABAgQIECBAgICA2zVAgAABAgQIECBAgAABAgQIECBAgAABAhMpIOCeyG7TaAIECBAgQIAAAQIECBAgQIAAAQIECBAQcLsGCBAgQIAAAQIECBAgQIAAAQIECBAgQGAiBQTcE9ltGk2AAAECBAgQIECAAAECBAgQIECAAAECAm7XAAECBAgQIECAAAECBAgQIECAAAECBAhMpICAeyK7TaMJECBAgAABAgQIECBAgAABAgQIECBAQMDtGiBAgAABAgQIECBAgAABAgQIECBAgACBiRQQcE9kt2k0AQIECBAgQIAAAQIECBAgQIAAAQIECAi4XQMECBAgQIAAAQIECBAgQIAAAQIECBAgMJECAu6J7DaNJkCAAAECBAgQIECAAAECBAgQIECAAAEBt2uAAAECBAgQIECAAAECBAgQIECAAAECBCZSQMA9kd2m0QQIECBAgAABAgQIECBAgAABAgQIECAg4HYNECBAgAABAgQIECBAgAABAgQIECBAgMBECgi4J7LbNJoAAQIECBAgQIAAAQIECBAgQIAAAQIEBNyuAQIECBAgQIAAAQIECBAgQIAAAQIECBCYSAEB90R2m0YTIECAAAECBAgQIECAAAECBAgQIECAgIDbNUCAAAECBAgQIECAAAECBAgQIECAAAECEykg4J7IbtNoAgQIECBAgAABAgQIECBAgAABAgQIEJg/8fHp5U4Me3df3ui03Pb8Ol0frh9fP52uD98/Jvv7R6e+tWz6BSb963f6e8gZdhJw/XbSsazuAq7fuveQ9hEgQIAAgekTWNi2/a2i0Sh2LWwt4nn/jp3F/gPXFOm/S8qTHXf+p4J7+q45Z0SAAAECBAgQIECAAAECBAgQIECAAIGZEJjfKGHfSMH2nSt0+XUWcP24fjpfIZ2Xun7Ge/107h1Lp11g0r/+pr1/nF9nAddvZx9L6y3g+q13/2gdAQIECBCYRoEvzp+7cW5u7rOzZ8+e37Zt2+enTp26cPTo0cXHHntssZvzHfZ/v6jg7qYXrEOAAAECBAgQIECAAAECBAgQIECAAAECtRMQcNeuSzSIAAECBAgQIECAAAECBAgQIECAAAECBLoREHB3o2QdAgQIECBAgAABAgQIECBAgAABAgQIEKidwHztWqRBBAgQIECAAAECBAgQIEBgCgX+9m//dqxn9cgjj4z1+A5OgAABAgSGIaCCexiq9kmAAAECBAgQIECAAAECBAgQIECAAAECQxdQwT10YgcgQIAAAQIECBAgQIAAAQIE6iiwvLxcNBqNOjZtKG06f/58sbi4WO57y5YtxbZt24ZyHDsdjMDZs2ebO9q6dWsxPy/Ga4J4QaAi4CujguElAQIECBAgQIAAAQIECBAYhcCohgsZ97Aom7VcWloqjh492tzNnj17ioMHDzbfb/Qitn/zzTeLzz77rFx1x44dxeHDh4t33nmnePbZZ8uw95Zbbiluv/32jXY1Fct/8YtfFCdOnCjP5Stf+Urxx3/8x1NxXoM6iTNnzhSnT59uPuLDgEsuuaTYuXNnsX///uLyyy8f1KE23M+5c+eKf/qnf2qud++99xY33HBD870XBAh8KSDg/tLCKwIECBAgQIAAAQIECBAgQKBGAnNzc8Unn3xSfPjhh81Wbd++vYhwtpvpN7/5TfHKK680V73jjjuKqNr+9a9/3axkfvXVV4urr7662L17d3O9SX0RgWycn0rf3nowQu0jR46U11rrlvnae+mll8pr5Oabby6uueaa1tW8J0BgjAIC7jHiOzQBAgQIECBAgAABAgQIECDQWeDGG29cE3C/9dZbXQfcb7/9dnPnMRTJ9ddfXwbbeZiOvPDzzz/PLyf2OarSf/WrX5Xt//M///Ni165dE3suo2p4fBgQH3DEI15vNH388cfFL3/5y/J6vPvuu4v4AMZEgMD4BQTc4+8DLSBAgAABAgQIECBAgAABAgTWEYjq6hgrOsaPjun48ePFF198USwsLKyzxcrs999/v4hhHvKU9xPvIzSPoDymK664oti3b1/5epL/yZXGk3wOo277008/vebDkzh+XFcxFEkejiQPWRLXXJ7ig5MYzuSP/uiP8izPBAiMUUDAPUZ8hyZAgAABAgQIECBAgACB2RSY9LGxR9lrUXl9Qxp7OKpsY4pxtX//+98Xhw4d6tiM3/72t2uWR6idp3vuuae49tpriwsXLpTh9jTcaDKCWFP3AnF9tH4ocOuttxa33XbbRTcejerul19+uYghb/IU28Y1GduYCBAYr4CAe7z+jj5jAg8/cWzjv3maMZNpPt2nHj/QmObz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uGeko50mAQIECBAgQIAAAQIECBAgQIAAAQIEpk1g/sTHp5c7ndTe3Zc3Oi23Pb9O14frp/PXTyc7y6ZfYNK/f05/DznDTgKu3046ltVdwPVb9x7Svk4Crt9OOpYRIECAAAECwxBY2Lb9raLRKHYtbC3ief+OncX+A9cU6b9LysONO/9TwT2MXrdPAgQIECBAgAABAgQIECBAgAABAgQIEBi6wPxGCftGLbD95ip0+c2230ZfX5ZPt8Ckf/1Pd+84u40EXL8bCVleZwHXb517R9s2EnD9biRkOQECBAgQIDBogS/On7txbm7us7Nnz57ftm3b56dOnbpw9OjRxccee2yxm2MN+79fVHB30wvWIUCAAAECBAgQIECAAAECBAgQIECAAIHaCczXrkUaRIAAAQIECBAgQIAAAQIEBijw4YcfDnBvdkWAAAECBAjUSUAFd516Q1sIECBAgAABAgQIECBAgAABAgQIECBAoGsBFdxdU1mRAAECBAgQIECAAAECBCZRYN++fZPYbG0mQIAAAQIjFTh+/PhIjzeog6ngHpSk/RAgQIAAAQIECBAgQIAAAQIECBAgQIDASAUE3CPldjACBAgQIECAAAECBAgQIECAAAECBAgQGJSAgHtQkvZDgAABAgQIECBAgAABAgQIECBAgAABAiMVEHCPlNvBCBAgQIAAAQIECBAgQIAAAQIECBAgQGBQAgLuQUnaDwECBAgQIECAAAECBAgQIECAAAECBAiMVGB+pEfbxMEefuLY8iY2t+mECTz1+IHGhDVZcwkQIECAAAECBAgQIECAAAECBAgQGLGACu4RgzscAQIECBAgQIAAAQIECBAgQIAAAQIECAxGQMA9GEd7IUCAAAECBAgQIECAAAECBAgQIECAAIERCwi4RwzucAQIECBAgAABAgQIECBAgAABAgQIECAwGAEB92Ac7YUAAQIECBAgQIAAAQIECBAgQIAAAQIERiwg4B4xuMMRIECAAAECBAgQIECAAAECBAgQIECAwGAEBNyDcbQXAgQIECBAgAABAgQIECBAgAABAgQIEBixgIB7xOAOR4AAAQIECBAgQIAAAQIECBAgQIAAAQKDERBwD8bRXggQIECAAAECBAgQIECAAAECBAgQIEBgxAIC7hGDOxwBAgQIECBAgAABAgQIECBAgAABAgQIDEZAwD0YR3shQIAAAQIECBAgQIAAAQIECBAgQIAAgRELCLhHDO5wBAgQIECAAAECBAgQIECAAAECBAgQIDAYAQH3YBzthQABAgQIECBAgAABAgQIECBAgAABAgRGLCDgHjG4wxEgQIAAAQIECBAg8P+3d69dclT1HsdrrplcIAkhakLEgBEwgkbDLRoVEY88zBN8et7EeRnnwXkLZ63zSJ5kneUDPUtQlwRRwIWACZeIQaNRY0xi7nPpPv/vZna7p+ieS6anp7vnu9fqVHVVddWuT1WnVv1qz24FFFBAAQUUUEABBRTojoABd3ccXYsCCiiggAIKKKCAAgoooIACCiiggAIKKKBAjwUMuHsM7uYUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFuiNgwN0dR9eigAIKKKCAAgoooIACCiiggAIKKKCAAgoo0GMBA+4eg7s5BRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAge4IGHB3x9G1KKCAAgoooIACCiiggAIKKKCAAgoooIACCvRYwIC7x+BuTgEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUKA7Agbc3XF0LQoooIACCiiggAIKKKCAAgoooIACCiiggAI9FjDg7jG4m1NAAQUUUEABBRRQQAEFFFBAAQUUUEABBRTojoABd3ccXYsCCiiggAIKKKCAAgoooIACCiiggAIKKKBAjwUMuHsM7uYUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFuiNgwN0dR9eigAIKKKCAAgoooIACCiiggAIKKKCAAgoo0GMBA+4eg7s5BRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAge4IjHdnNa5FAQUUUEABBRRQQAEFFFBAAQUWEzh+/Phis1vzjh071hq/nZGltrPa9d9OnfyMAgoooIACayVgC+61knW9CiiggAIKKKCAAgoooIACCiiggAIKKKCAAmsqYMC9pryuXAEFFFBAAQUUUEABBRRQQAEFFFBAAQUUUGCtBAy410rW9SqggAIKKKCAAgoooIACCiiggAIKKKCAAgqsqYAB95ryunIFFFBAAQUUUEABBRRQQAEFFFBAAQUUUECBtRIw4F4rWdergAIKKKCAAgoooIACCiiggAIKKKCAAgoosKYC42u6dleugAIKKKCAAgoooIACCiiggAIKKLAsgUajUd28ebO17NTUVDU6atvEDKJPlhiMYbPZrGZmZqrJycnBqLC1HFgBA+6BPXRWXAEFFFBAAQUUUEABBRRQQIGNI3DmzJnqypUrbXeYEJgwePPmzdWWLVuqHTt2tF2u3ydeuHChOnHiRKuaR48ere6+++7W+40+0q8+9XPzoYceqiYmJjb04eJY/fKXv6ymp6er3bt3V0eOHPFhzYY+I9Z25w2419bXtSuggAIKKKCAAgoooIACCijQU4Fjx471dHu92ti5c+eqv/71r8va3NatW6vPfe5z1Wc+85lqZGRkWZ9xod4JzM7OprBzWFqn18/NAwcODH3AvdQxfOutt1K4zVl1/vz5iocA999/f+9OMre0oQQMuDfU4XZnFVBAAQUUUEABBRRQQAEFBlng97//ffW73/2uOnTokC17FzmQ165dq954442KVqSHDx9eZEln9Vrgxz/+cXX16tVq79691eOPP97rzbu9Lggs5xgSgJel/r6c57gCqxUw4F6toJ9XQAEFFFBAAQUUUEABBRRQoEcCtGAmHHzllVeqp556qtq2bVuPttx/m/nCF77QaiVLX7/0Xf33v/89hdq5tn/84x9T9wj33ntvnuRwHQU4Rpy/lsEVWO4xfPDBB6vXX3897SjdBu3fv39wd9qa972AAXffHyIrqIACCiiggAIKKKCAAgoooMBHAvyJ/1/+8peK1pA55B4f35i39vv27Ut9btfPjffee686efJkazLdRxhwtzjWdeTy5cvrun03vnqB5R7DT3/609WuXbuq69evVzt37qzGxsZWv3HXoEAHgY15FeyA4WQFFFBAAQUUUEABBRRQQAEF+lngE5/4RGoJSX+2tISlheQTTzyxoMrHjx9f8L7+Zlj76M77Sf/HZcC93EAuf97h2gl4LNbOtldrvnTp0rI3RcttXhYF1lrAgHuthV2/AgoooIACCiiggAIKKKCAAl0U+OIXv1j94x//qP75z39WtE5+9913K7oDsHwkwA8XTk5Otn7grvyRSR4K0Ic55VOf+lT1yU9+MrWG/9Of/lTx4rP8OCUtT8tCMEv3J4R79O/Nj1jeeeedFa1Up6amykUXjF+5ciX9wB7HinWw/u3bt6f+p+++++4Fyy73za1bt6rTp0+nevMZ6nHfffct9+MV3blw3lAfXjMzM2kd1AuTTvvz29/+trVNfGhBXy/0Ec++UjZv3lw98MADaZxpWPz5z39O7/mHY/H++++33u/YsSN1J9OasIIR1kt/6xwfAtW77rortdrPrYbZ9gcffJDWyPnAj4+yv+1Ko9FI36np6ek0m9b/tEBey3K7x6SsUz5HGWLLOco+7t69u+2+sk3c8rlJS2u6PGJfOZ/qfxnCcrw4d3KpH8M8vT7kvP/sZz9bn5zes46//e1v6VzkOHH+cU5TD76f7Qqfyd9j6sry/FXLhx9+mL5vfEfYF85Tf2i2neDwTTPgHr5j6h4poIACCiiggAIKKKCAAgoMgQCBK8FPu0KAm8upU6fSD07WQ9k8f6MNb9y40Qq32fcySGYeISzl/PnzKfw7ceJEdfHixTSNf2glny0JAWkNXgaxLMMDBgoPF+gLvB4wz83Npc/lEC4tPP8PQSxhK5/50pe+VM5acpz1vvTSSyksZmHOgxwiL/nhWICAklb/hKBloU4UQs2HH364bX/Jf/jDHyqCQwou7QJuus+hn3gK4Sp1Y9kXX3wxTSv/oS6E5rnQ/Q5h7EoK9eH4cSxzYV/oe53jfOTIkRS0E/byfcqhNd+rZ555Jn9kwZBjxnGlEJAfPHhwwfxuv1nNMaEu+OLIQ4+ycI7iQOGhzec///n0gIX3PKzhR1gJistCXQi9sXvsscdawf5yj2G5rnIcx3rAzTpx5sV4WfKDEL6LX/7ylz/WFVH5PeZ8+8pXvlK99tprqR/+vB6+0+w/5+2TTz6Zvit5nsPhExgdvl1yjxRQQAEFFFBAAQUUUEABBRQYfAHCGVoktnsRUJWFEMdSVQRfBF25EAA/9NBD+e2CIS2xf/Ob3ywIt1lg06ZNreV+/vOfLwi3aR1MYJ5bOdNqlHXU/X/yk5+0WpjmldGKtSyEiDlsL6cvNs6+0cqVwvoI7mgpvZzCOUO9ynCb1swTExOtj7M/BJ/sU7cK2yhNu7Ve1oNHDrfrvoS1hN8U5hGg50KwW/8O5Xl833KhhX7pk6d3a9iNY8I5Wg+3Oe9z63XqygOaHBrz/woPScpwu/wrB5anNferr75a0ZqdshbH8OWXX67eeeedBeF2+eCO7fIg4oUXXkj14X27Ql05zvz4JaW+LwT9ZZdF7dbhtMEXsAX34B9D90ABBRRQQAEFFFBAAQUUUGAIBeqB3WK7WO9OYLFlh2UeIWwO8WjZTLhdhrd0efHoo492DIBpNUqYSSC2Z8+eFFrTXUfujoLwObfUxowWrffcc0+Lj/k5CH777bdT9x45oCMYpWU94TMtZ/fu3ZtaR9PCmda2OaQmeNu/f//HQrnWRooRwsCyewhattIVx3IK+0pwnVvKEtoePnw4dQHB/hP2//rXv07dfLA+9o19WO76l6rDs88+m8JSAvYcrGLO8cllJed7/gz7Q3BNa/g77rjjY/vBts6ePZtam7NM2VqYVvRl637WSevvXD/e11sdM61bpRvHhL74y3OULmb4q4D80IMAnfOQ7jpyi3u6/eCBA63fOca07qaLD74/mOS/ViA45j192lOWcwxLG85zPt+uELLnBxPM53v1yCOPpO8g32WOWT5f80OXr371q+1WlaZhyV8L0B0JD6H4nvDdyscSJx505QdTHVfkjIEVMOAe2ENnxRVQQAEFFFBAAQUUUEABBYZZgK4R+BP9doVQK7caJuQtW6e2W34YpxEWdyqE24cOHUrBXqdlmI7d0aNHW6F2XpZQrWz1SXBYhtssR2BK9wjUg64vaCFLWE2hT3TCQ4LGskUp6yE4fPPNN9NyBOqEcISzixUCOwLuXAjzWP9yC91u5LCPzxAsl/0b04XH1772teqHP/xhqxsP6vjUU08tdxOLLodBfhiRF2w3Lc9b7pDQsmyhz37wo6vsR259TMhKuEuoi1n+3mBKyFu2Li9bbxN+L3VcllvPdsut9piwf+U5SpcwtOgvC/vw9a9/vZyUuur4zne+UxEkl/vOuUp3OxjkrlzK8Lzd8Wo3LW+Mee0K9X7rrbdas3igxMOjXDhPCKr5bvDgiEJLbr5r5Tmbl2dIFyX0lZ4LD5Ro0Z2/Z0ynRb8BdxYavuHCv48Zvv1zjxRQQAEFFFBAAQUUUEABBRQYSAFaXRKY1l+EdGX3CoRSBHuWfwnwY4M//elPq1/84hetsO5fc/81RuvV3GL7X1Or1BKcgC2X3Io1v8/Dss9oArSy0JK0XchXD+nK4Ln8POO0TKVVMf1m50J4t9J+oXMf26yDc6VeB6bTgppgMRcMc0icp/XbsN4Cm/rRir7cv9K3bJGNLS17c+GhBv1051Ium6d1c7jaY8L5loNo6rWS+vIXH2W4Xe5X+VCttCuXWc046yzr3enhHP/vld+f0qu+fb5r9VKeA8zjrxQswytgC+7hPbbumQIKKKCAAgoooIACCiigwBAK8Kf/tAKm8GOInQKiIdz1Bbv03e9+t9UVAzNokUqIRfcavCi0+nzllVeqb3zjG+l9/Z92ASnL1MPq3Jdz/fPl+9ztSDktjxMUc8xoMZyPXZ5HsNqp1LdLaFe2du30ufr0sm6LtUqmq4qy8DlaBg9aKQNPwlSMCXXZF455fkBEwE1rewrdYnAOUfg8XaisZVntMSk/Tz35q4XbLZyXtHhmWD7YWezcvN1t1b9b9XMur5fjRavy/H2pfy4v12mYuwvK8/Oxze8dDpeAAfdwHU/3RgEFFFBAAQUUUEABBRRQYIgFCOZyv7b8KT9/ml8vx44dq0/aEO/xICyjD2LCrNwVBd0s0MVB2TJ1KZD8g3V5OVr7LlXqgRpBIUE7IfvFixe70hqaVtWEkCvtaqFsibvYZ+vz+NwgBtz1H4bkWOR+6mnpnANu+p2mixm6jilbc9P9zFqX1R6Teovk+rFbqv60iGafscChV6Xcb7a5WL2ZlwPu+v72qr5uZzAEDLgH4zhZSwUUUEABBRRQQAEFFFBAAQUqfpwtF7smyRIfH9L6NgfczOXHJ1cScNe7fHn66ac/1od0fatlq2H64+ZHG+stYAnB6Rqi3vq2vq78nh+oJKylL2JagRNu010J/WWvpLDd3C1EvU7lesrWu0zv1I1F+Zl+HM/7St3o5qIMUTk3OFY5OOUhBO95eEDhQQndY6x1We0xqR8b9rn+kKXdPnD8X3311fTgpZxPFzU48XCI82ytSr3enHP1aXnb5bnaaZm8rMONLWDAvbGPv3uvgAIKKKCAAgoooIACCigwQAL0Gc2f6tPNwkbtmmQ5h6veHUFuvbucz7JMvRsP1tepK4X6Omkx/qtf/ao1mW5FOFYcM8JTQrsf/OAHrfmLjdAFDZ9j+3RNQzl//nxqxb+S40/dc6vlHOy22269JW+nfe73vrnLfSS8LvtyZr9pxZ1/6JDW/WUATh/39Rbg7axWO221x6R+jrLP9Nu/VOHcZJ8pfC/4kU5asOfP4sIPYK5VqZ9TnHN52/VtludjfX/ry/p+Ywv4I5Mb+/i79woooIACCiiggAIKKKCAAgMkQBD0zW9+s6L1tqWzQNnSnaVW2j9xPUwrW4N33upHc06fPt1ahID6yJEj6UcPCbdvt/Bg46677mp9nLC73tVDa2abkTJUJIAvg8Ny8fJHFmkNXLYIpj/kXFhHvxZaMucAlzqW+57rzI9p5ocedD/z4Ycf5lk9e3BU1ut2jkn5eSq/nHOUvxwobZ588smKH1DtFDC3ULo4Uv9u0fd5u8KDnPIvCur72+4zTtu4Arbg3rjH3j1XQAEFFFBAAQUUUEABBRQYQoHjx48vulfD2kc3LaMJ8N5///0F3S/Qgnel/UgTfhL85bCabiwIq/ft27fAlu299957KUQlhKaU3WO0C7XLMHXBypZ4Q3/rL774YuqqhBbddFXCw47lFPaF/pZzy+s33nijevzxxxd0u8L8Mrh+4IEHFqyaEDR340G4Tr/iO3fubC2DVRmetmYUIzlUZlL5o4GEzPVW1sXHOo7yIIPjkj/LenJ3LvlD7Hu9UA9C7npLZVrLdyNIpb/o+l8RlHWgxfhqjwkPHzgfc0DMcO/evemVt8Xxfuedd9Jxf/jhhz/W9QjdkpSFBx8Ey4uV1R5D6k0XMJxvFI7hPffcs6ALIbpI4Tjmghct6y0KdBIw4O4k43QFFFBAAQUUUEABBRRQQAEFFOhbgR/96EdL1o3gkyC3HuQt+cFYgP6vadGcWzu/9tprKRAl1CVIJaDlh/pyoYUzgSMtVHN3IAS+7777bgphCT3PnTuXftQwf2YlQwJmWu7nrjUImFn3gw8+uORqCPlZ7tSpU2lZfvjyhRdeSN2f0B0HwXW5L4S8dONRlnvvvbcVpjL9Zz/7Wfo86+azy/kRQGzKkJx1sH325ZlnnunYF3NZj3KchwWE8rt3707HGO8yOGc6AXi7Qhcv9YB7Jd2+tFtnnvbSSy/l0bbDxx57LIW6qz0mhNacUzlMp/sRusThLxZ40MIPaObzlz6sCfXLwrlE0E5ozTHgB2zLBzTlsnm8G8eQ85h+6tkWIfzLL7+cAm7OO37gleNY1uORRx5ptbjP9XCoQCkwfvrDs0v/FHD5iXUbb6zblt1w7wX+a2DOy5XaeB6vVGyQlx++89jzd5DPx5XWffjO3yzgeZwlNsJweM5jz9uNcL7mfRye8zbvUR529zwmXKSkVptly8+RmDY/faQakFvdtCf+sxYCBMIEYyvtniTXhdbXdOFAsJ1/FJIQkFe9EHrnH7EkJCV4za2lc6icP8OyhLpLtXbOy5dDQmeCwRxG0zqX/pOX00KdFtl0+ZBbpdNnc7tuLegK5fDhw61W0Xn77B/bIjTNJQf5vKeVLeHqYi3UsSm7jyktCVsfffTRvOplDQmvscjHp/wQx5396FT4IdFyf3hAQQvoXpbVHhPMeYBDa/4cCPPwgldZeAjBvtF6mpbQ+Rjgzw9O5sL/qdSJv0roVLpxDDn/6bqHeueudvg+1L8TPJg6ePBgehjQqT5OXxuB67dmnucqyvU2XU3TP3NVc2S8uj7TqCa33ll9+fEjVeTKa1OBFa7VFtwrBHNxBRRQQAEFFFBAAQUUUEABBRToPwFCM0JLgm1a7tLiOHddcbu1JTj+1re+lVpKEywTxpUPWAhR77vvvhQa5m3RwpXw7s0331wQvBJGElDTYpZWx7zoVmWlhdD2xIkTqcU0dSGAp45LtVKnfrT4JegkGKcldQ5F+Sz1xqzecrus3xNPPJFagdNlS+4fmZbBBNusm1CfwDmHluVnGSfcJ8TGJm+behGe17tEqX+2/p7uRHCmP3JC9dyKmTB3z549qbX7Uia0Fs6lW6238/qWM+zGMcH+29/+djKle5Hsyvb5PnBMOedydzmHDh1KD1g4huW5zDGgZTWtqHlgQMvwdqVbx5D1PP300+lcZFvld4vvCvOpD99niwJLCfBw26KAAgoooIACCiiggAIKKKDAwAh8//vfH4vgYywCkPHoq3UyAq1NEazxC3hbIzC6Y/61PQK459kpwq5+KEv1jZ3ruNo+spfazmrXn+u5EYcEuHTFQTBJi98cGnayIGykiwjCd4LXfiv0dUxQfTshIi3As8Pt7BefJ5Rm26xnNSUfF8L28ocxF1snrc9zVyIE4c8+++yyP7vYelc7bzXHhG0T2nPeERIvZkG4nR9EcC6XfWsvdx+6eQxzfag33xfL+gjkBxtxDJ6LY3I5Xld4RW2uxffkRhzzW/E9m47W/7PxcGnue9/73tz61HThVm3BvdDDdwoooIACCiiggAIKKKCAAgoooEBbgdzSue3MNhMJGBcLGdt8pKeTCIR53U5ZbWC/2s+XdV7pceGzZTccdNvRL8dpNceE/SIg5rVU4aECrfZXU7p5DLtRn9Xsi58dbIGFP5c62Pti7RVQQAEFFFBAAQUUUEABBRRQQAEFFFhU4PLlywv6e16sW5ZFV+RMBRToCwED7r44DFZCAQUUUEABBRRQQAEFFFBAAQUUUKAXAmXrbX6okn6nLQooMLgCdlEyuMfOmiuggAIKKKCAAgoooIACCgyQQK/6vu7VdgaI3qoq0BKgz3H6uSbYpt/pgwcPtuY5ooACgylgwD2Yx81aK6CAAgoooIACCiiggAIKKKCAAgqsUIAfMDx69OgKP+XiCijQzwJ2UdLPR8e6KaCAAgoooIACCiiggAIKKKCAAgoooIACCnQUMODuSOMMBRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAgX4WMODu56Nj3RRQQAEFFFBAAQUUUEABBRRQQAEFFFBAAQU6Chhwd6RxhgIKKKCAAgoooIACCiiggAIKKKCAAgoooEA/Cxhw9/PRsW4KKKCAAgoooIACCiiggAIKKKCAAgoooIACHQUMuDvSOEMBBRRQQAEFFFBAAQUUUEABBRRQQAEFFFCgnwUMuPv56Fg3BRRQQAEFFFBAAQUUUEABBRRQQAEFFFBAgY4CBtwdaZyhgAIKKKCAAgoooIACCiiggAIKKKCAAgoo0M8CBtz9fHSsmwIKKKCAAgoooIACCiiggAIKKKCAAgoooEBHAQPujjTOUEABBRRQQAEFFFBAAQUUUEABBRRQQAEFFOhnAQPufj461k0BBRRQQAEFFFBAAQUUUEABBRRQQAEFFFCgo4ABd0caZyiggAIKKKCAAgoooIACCiiggAIKKKCAAgr0s4ABdz8fHeumgAIKKKCAAgoooIACCiiggAIKKKCAAgoo0FHAgLsjjTMUUEABBRRQQAEFFFBAAQUUUEABBRRQQAEF+lnAgLufj451U0ABBRRQQAEFFFBAAQUUUEABBRRQQAEFFOgoYMDdkcYZCiiggAIKKKCAAgoooIACCiiggAIKKKCAAv0sYMDdz0fHuimggAIKKKCAAgoooIACCiiggAIKKKCAAgp0FDDg7kjjDAUUUEABBRRQQAEFFFBAAQUUUEABBRRQQIF+FjDg7uejY90UUEABBRRQQAEFFFBAAQVWKtDkA3Nzcyv9nMsroIACCiigQAgU19B0Te13FAPufj9C1k8BBRRQQAEFFFBAAQUUUGBJgampKW7CB+JGfMmdcQEFFFBAAQX6R6A5f43tnxrVamLAXQPxrQIKKKCAAgoooIACCiigwGAIRAuz5vbt25uUXOPx8fEUdI+Ojram5XkOFVBAAQUUUGBpgflraHP+mpo+wLWWay7X3qXX0NslDLh76+3WFFBAAQUUUEABBRRQQAEFuiBw48aNBTfY8b6amJhozszMVPOB94L5Xdikq1BAAQUUUGCjCHApTddUrq1cY8tSvwaX89Zj3IB7PdTdpgIKKKCAAgoooIACCiigQFcE0h14/BMra05PT7POHGw3R0ZGZruyEVeigAIKKKDABhGIa+dM7GrrWpqvrcX1tu8kDLj77pBYIQUUUEABBRRQQAEFFFBAgcUEnnvuuXTjvW/fvmaj0UjjmzZtakYrs0b8OXUjbsIbY2NjjVjHJdZT/FjWYqt1ngIKKKCAAhtWoLhWXuYayrWUayrXVq6xwHDN5drLeL4WM77exYB7vY+A21dAAQUUUEABBRRQQAEFFFiVAK3K5v9cmlGC7cbs7CzDC6w4xhlYFFBAAQUUUKCDQHGtvDB/DU0hdyyerrFcYDt8dN0nG3Cv+yGwAgoooIACCiiggAIKKKCAAisVOHz4cPPMmTOpv+2tW7fSuizdiBNwR8uzuRjOxTrfZr03b95c6epdXgEFFFBAgQ0lUFwr3+YaOn8tTddWrrFca2N6uvZyDe4nHAPufjoa1kUBBRRQQAEFFFBAAQUUUGDZAtHCLHVRwg13fIhBDrnnRkdHZ+Pm/BVWFjft84sse9UuqIACCih/tsVpAAALNUlEQVSgwIYR4DJ669atFFpz7eQaGtN4WJyuqwHBdTRdc7n29huMAXe/HRHro4ACCiiggAIKKKCAAgoosJRACrQPHDiQbrIvXrzITXdjcnJyLvoLnY3R3IL7dPxY1ql4P3L16tWl1ul8BRRQQAEFNqQA18jogzsumSOnAuB0ZNlzXEu5pnJtjfEG11pw5q+96TrcL1gG3P1yJKyHAgoooIACCiiggAIKKKDAigROnjxZzczMNO68807uvSlz0QKNLkpmovXZdNyoT8fwf2LYvHbtWnN6enpF63dhBRRQQAEFhl2AayPXSK6V89dMrp3TXEu5pnJt5R+utVxzufb2WzHg7rcjYn0UUEABBRRQQAEFFFBAAQWWFHj++ecrflhy37596U+mt2zZMhc36I35Ftx0TzITLdBm4ob9nVjZ/8b4CK3P4uZ8yXW7gAIKKKCAAhtBgGsi10aukbG//8s1k2sn19DItGe5pnJt5Rob79M1l2sv1+B+KlTeooACCiiggAIKKKCAAgoooMDACMzfiHM/O3r69OmxO+64Yzx+AGsiWqFtij+xnoo/p94c41vjxnxrLLMtpm2L4X/EzfljtFCL5Ufix7IGZn+tqAIKKKCAAt0WiOC6unLlSgq3o8X2q7H+/4xgm/68rkY/29fiWnotrqU3YtrNGI/G3LdmYvnZ6KKEH3FuxCu1+o7huhcD7nU/BFZAAQUUUEABBRRQQAEFFFBgJQJFwM097djZs2fHonXZRNx8xz34ZAq5Y5ktMY/Xtrg5Z3hHtFT795j+bzFexbRq27Zt1dTUVBU39kyyKKCAAgooMNQC8aCXH16u5vvcTvsaD37/b2Ji4r/jzZV4IHw9hoTc12P6dcLtCLlvxUPk6evXr8/EX00RbvNKfXDz0DjG170YcK/7IbACCiiggAIKKKCAAgoooIACKxWIoHo0/kR65P777x/dtWvX2ObNm8cirKaJ2WTcoG+K+Zvjhn1zDAm3tzIk6I55R+L1vZj2SbbJzXm8Rgi8Y8AkiwIKKKCAAkMlENdAfkSyiiElX+z+Gte+78frFzEvBdqx09fiWng9HgjfiCGtt1O4HaH4dHRNMnfhwoW5Dz74oPHcc89x7aQVd1+UvEN9URkroYACCiiggAIKKKCAAgoooMByBOZv0Lmnpfn16Llz5+imZDxC7YlLly5toiV3tFSbIuSO4eZYZkt8ZnO01k7j8efXX4tph2Pa52O4KV4WBRRQQAEFhlogQulbsYOn4vV6dON1IobX4xqZwmzG4xp5g3A7hqnl9o4dO27Fe35scnbPnj2zsQyhdl91TxL1qQy4UbAooIACCiiggAIKKKCAAgoMlEARcI+8/vrrrVbc0cJsIlpyk3OnltyE3HETP0XIHZ+ZitZojE/FzftkvKel92Tc8O+K1mt3xXAq3hOYj8R8PD52zxzzPzZtoOCsrAIKKKDAUAnEtatdNyH8ADP7mVpax7XrZlz//hHDC7H8dLxuxfxpguy4/t2M9zdj/EY8/GXIsgTb09Fyeyb+Qmomt94+fPhwCrfn19tuu+ti64V5XdjdqAIKKKCAAgoooIACCiigwGoEctAc3ZSMxp9Kc2+bWnKfP3+eVtzjdFUSN+qTBN1xo74p3hNuE2hvipv3NIwb+gleMW08bvTHY/5oDMdiXTF5QX8l3juv5mD5WQUUUECBXgm0Que4tjHejGteZNhzjRjOxqVtNibP8IpxQu5bDGM+XZEQdqdgOx4MT9PvdoTcs7t372613I5rbjOuuSk5j8+1ttWrneu0HS/SnWScroACCiiggAIKKKCAAgoo0NcCcYPOPe1I7ot7+/bto9F6m1cKuaPl2UTcpE8QdEd4PRk38oTbDNMrxgm4U7gdQ4Lt0RiSBDDMrbirWN57574+E6ycAgoooAACcV1LoXNct1J/23Hta8S1kkCa4RwhdwxnY/5MjNOCezrGGRJyTxNsxzVzJq6j9EwyG9dRXo3Lly83ct/bsS5ahfdNuM1+e5FGwaKAAgoooIACCiiggAIKKDBwAvMBN/VOQTddlRByb926dSxabvMajz+rHo+b9BR0E3bHTfxE3MS3hnGTPhY39+MMybTn10XIPRLL53UztCiggAIKKDAIAs0IqasItwmhU5cihNxFwD0X82YIufOQUJtXXDfpkmSWcDtec9euXZsj3C67JgGg3wLudLUehCNjHRVQQAEFFFBAAQUUUEABBRQoBbjBziF3tOKu+LPpCLnTIhFyp2G0PGvu2rWrQf+h09PT3NTPckMfn+V+mNdYBNmt1ttxg59ab8cyrNxGYUnRfxRQQAEFBkkgrmGE21wjm3GNa7XijlB7LqbPxTUwdVdCkB0PdGcJtrdt2zZ74cKFuVh+rh5uz19jE0G/hdtUyot1OjT+o4ACCiiggAIKKKCAAgooMKgC80F06qokQu4qt+Smu5K4aecV9/pjY7TmjhbcozE6HmE3k2i5PRo38mPR1+hIDFMXJfMOMWtBP9yDymO9FVBAAQU2mADBduxy6kYkRhtxHWzEb1E0YzjH+wi15yYnJ+mqhNE5Wm0zJNiOVyN3S0LL7flwO60vLotpnf3GacDdb0fE+iiggAIKKKCAAgoooIACCqxIIG7W873tgpA7bsxHzpw5Mxrh9Wi0SOM1RsB9/fr1NGQ8btYZjMaN/2jc4I/ETT25diq1SuRt1Cb7VgEFFFBAgb4QWBA+x7UxlXjY24wHvM24Fkae3UitudNI/LNly5Y5xuOvl+biRQje2L9/P38N1ayH2+xhXBwXbKMv9pp69UtFrIcCCiiggAIKKKCAAgoooIACtysQd/H5/rYcjpw8eXI0WqmNHDhwYOTcuXMp6Ca9vnr16tjOnTtTkB19jKZuSdKb+Ic6lOO3Wyc/p4ACCiigwHoIzGfbKYzO4wyj+y4C7ubFixeb0SUJrbnpr7uxZ8+exunTp5vx103NgwcPpn67o945zE7DuC7m9+uxS4tuM1/4F13ImQoooIACCiiggAIKKKCAAgoMgkDcq+f73FZr7qh3Crrjpr2iRXe05B6J7klous2QH5asGKfEj2mN7NixI+0q79OI/yiggAIKKDBAAgTXVPfSpUtV/Pgyb5vRUDtNi55IaLTdjCHhdpMW2/EwuMrBdtklCeuIS2HfBtvUj+LF+iMH/1VAAQUUUEABBRRQQAEFFBgSgbiPL+91FwTd8WfXI3RFQtgdrdVGCLvj5r46e/ZsCr0hIOweEgp3QwEFFFBgAwsUoXZz3759zXjIWxFqx181NQm16bokuiIhwG7Wg23YBiHcTvXkH4sCCiiggAIKKKCAAgoooIACwyZQD7rZv7iBT+E1P0YZJY3n0JsJFMJviwIKKKCAAoMuQIidSxFmMykF2ozE9TC30M7DgQm2qT/Fp9IfOfivAgoooIACCiiggAIKKKDAEAvUwm72dMH9cA6+M8F8AJ7fOlRAAQUUUGCgBGiRXZYiyM6TW4E2EwaltXaufDlccEEvZziugAIKKKCAAgoooIACCiigwEYTaBOEbzQC91cBBRRQYIgEBjm4HqLD4K4ooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo0C2B/wdCJ+HEJFvu5wAAAABJRU5ErkJggg==');
+      }
+
+      .metabot-img {
+        width: 349px;
+        height: 280px;
+        min-height: 280px;
+        border-radius: 5px;
+        background-repeat: no-repeat;
+        background-image: url('data:image/png;base64,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');
       }
     </style>
   </head>
+
   <body>
     <div id="container">
-      <svg viewBox="0 0 66 85" width="94" height="116" fill="#509EE3">
-          <path d="M46.8253288,70.4935014 C49.5764899,70.4935014 51.8067467,68.1774705 51.8067467,65.3205017 C51.8067467,62.4635329 49.5764899,60.147502 46.8253288,60.147502 C44.0741676,60.147502 41.8439108,62.4635329 41.8439108,65.3205017 C41.8439108,68.1774705 44.0741676,70.4935014 46.8253288,70.4935014 Z M32.8773585,84.9779005 C35.6285197,84.9779005 37.8587764,82.6618697 37.8587764,79.8049008 C37.8587764,76.947932 35.6285197,74.6319011 32.8773585,74.6319011 C30.1261973,74.6319011 27.8959405,76.947932 27.8959405,79.8049008 C27.8959405,82.6618697 30.1261973,84.9779005 32.8773585,84.9779005 Z M32.8773585,70.4935014 C35.6285197,70.4935014 37.8587764,68.1774705 37.8587764,65.3205017 C37.8587764,62.4635329 35.6285197,60.147502 32.8773585,60.147502 C30.1261973,60.147502 27.8959405,62.4635329 27.8959405,65.3205017 C27.8959405,68.1774705 30.1261973,70.4935014 32.8773585,70.4935014 Z M18.9293882,70.4935014 C21.6805494,70.4935014 23.9108062,68.1774705 23.9108062,65.3205017 C23.9108062,62.4635329 21.6805494,60.147502 18.9293882,60.147502 C16.1782271,60.147502 13.9479703,62.4635329 13.9479703,65.3205017 C13.9479703,68.1774705 16.1782271,70.4935014 18.9293882,70.4935014 Z M46.8253288,56.0091023 C49.5764899,56.0091023 51.8067467,53.6930714 51.8067467,50.8361026 C51.8067467,47.9791337 49.5764899,45.6631029 46.8253288,45.6631029 C44.0741676,45.6631029 41.8439108,47.9791337 41.8439108,50.8361026 C41.8439108,53.6930714 44.0741676,56.0091023 46.8253288,56.0091023 Z M18.9293882,56.0091023 C21.6805494,56.0091023 23.9108062,53.6930714 23.9108062,50.8361026 C23.9108062,47.9791337 21.6805494,45.6631029 18.9293882,45.6631029 C16.1782271,45.6631029 13.9479703,47.9791337 13.9479703,50.8361026 C13.9479703,53.6930714 16.1782271,56.0091023 18.9293882,56.0091023 Z M46.8253288,26.8995984 C49.5764899,26.8995984 51.8067467,24.5835675 51.8067467,21.7265987 C51.8067467,18.8696299 49.5764899,16.553599 46.8253288,16.553599 C44.0741676,16.553599 41.8439108,18.8696299 41.8439108,21.7265987 C41.8439108,24.5835675 44.0741676,26.8995984 46.8253288,26.8995984 Z M32.8773585,41.5247031 C35.6285197,41.5247031 37.8587764,39.2086723 37.8587764,36.3517034 C37.8587764,33.4947346 35.6285197,31.1787037 32.8773585,31.1787037 C30.1261973,31.1787037 27.8959405,33.4947346 27.8959405,36.3517034 C27.8959405,39.2086723 30.1261973,41.5247031 32.8773585,41.5247031 Z M32.8773585,10.3459994 C35.6285197,10.3459994 37.8587764,8.02996853 37.8587764,5.17299969 C37.8587764,2.31603085 35.6285197,0 32.8773585,0 C30.1261973,0 27.8959405,2.31603085 27.8959405,5.17299969 C27.8959405,8.02996853 30.1261973,10.3459994 32.8773585,10.3459994 Z M32.8773585,26.8995984 C35.6285197,26.8995984 37.8587764,24.5835675 37.8587764,21.7265987 C37.8587764,18.8696299 35.6285197,16.553599 32.8773585,16.553599 C30.1261973,16.553599 27.8959405,18.8696299 27.8959405,21.7265987 C27.8959405,24.5835675 30.1261973,26.8995984 32.8773585,26.8995984 Z M18.9293882,26.8995984 C21.6805494,26.8995984 23.9108062,24.5835675 23.9108062,21.7265987 C23.9108062,18.8696299 21.6805494,16.553599 18.9293882,16.553599 C16.1782271,16.553599 13.9479703,18.8696299 13.9479703,21.7265987 C13.9479703,24.5835675 16.1782271,26.8995984 18.9293882,26.8995984 Z" opacity="0.2"></path>
-          <path d="M60.773299,70.4935014 C63.5244602,70.4935014 65.754717,68.1774705 65.754717,65.3205017 C65.754717,62.4635329 63.5244602,60.147502 60.773299,60.147502 C58.0221379,60.147502 55.7918811,62.4635329 55.7918811,65.3205017 C55.7918811,68.1774705 58.0221379,70.4935014 60.773299,70.4935014 Z M4.98141795,70.3527958 C7.73257912,70.3527958 9.96283591,68.0367649 9.96283591,65.1797961 C9.96283591,62.3228273 7.73257912,60.0067964 4.98141795,60.0067964 C2.23025679,60.0067964 0,62.3228273 0,65.1797961 C0,68.0367649 2.23025679,70.3527958 4.98141795,70.3527958 Z M60.773299,56.0091023 C63.5244602,56.0091023 65.754717,53.6930714 65.754717,50.8361026 C65.754717,47.9791337 63.5244602,45.6631029 60.773299,45.6631029 C58.0221379,45.6631029 55.7918811,47.9791337 55.7918811,50.8361026 C55.7918811,53.6930714 58.0221379,56.0091023 60.773299,56.0091023 Z M32.8773585,56.0091023 C35.6285197,56.0091023 37.8587764,53.6930714 37.8587764,50.8361026 C37.8587764,47.9791337 35.6285197,45.6631029 32.8773585,45.6631029 C30.1261973,45.6631029 27.8959405,47.9791337 27.8959405,50.8361026 C27.8959405,53.6930714 30.1261973,56.0091023 32.8773585,56.0091023 Z M4.98141795,55.8683967 C7.73257912,55.8683967 9.96283591,53.5523658 9.96283591,50.695397 C9.96283591,47.8384281 7.73257912,45.5223973 4.98141795,45.5223973 C2.23025679,45.5223973 0,47.8384281 0,50.695397 C0,53.5523658 2.23025679,55.8683967 4.98141795,55.8683967 Z M60.773299,41.5247031 C63.5244602,41.5247031 65.754717,39.2086723 65.754717,36.3517034 C65.754717,33.4947346 63.5244602,31.1787037 60.773299,31.1787037 C58.0221379,31.1787037 55.7918811,33.4947346 55.7918811,36.3517034 C55.7918811,39.2086723 58.0221379,41.5247031 60.773299,41.5247031 Z M46.8253288,41.5247031 C49.5764899,41.5247031 51.8067467,39.2086723 51.8067467,36.3517034 C51.8067467,33.4947346 49.5764899,31.1787037 46.8253288,31.1787037 C44.0741676,31.1787037 41.8439108,33.4947346 41.8439108,36.3517034 C41.8439108,39.2086723 44.0741676,41.5247031 46.8253288,41.5247031 Z M60.773299,26.8995984 C63.5244602,26.8995984 65.754717,24.5835675 65.754717,21.7265987 C65.754717,18.8696299 63.5244602,16.553599 60.773299,16.553599 C58.0221379,16.553599 55.7918811,18.8696299 55.7918811,21.7265987 C55.7918811,24.5835675 58.0221379,26.8995984 60.773299,26.8995984 Z M18.9293882,41.5247031 C21.6805494,41.5247031 23.9108062,39.2086723 23.9108062,36.3517034 C23.9108062,33.4947346 21.6805494,31.1787037 18.9293882,31.1787037 C16.1782271,31.1787037 13.9479703,33.4947346 13.9479703,36.3517034 C13.9479703,39.2086723 16.1782271,41.5247031 18.9293882,41.5247031 Z M4.98141795,41.3839975 C7.73257912,41.3839975 9.96283591,39.0679667 9.96283591,36.2109978 C9.96283591,33.354029 7.73257912,31.0379981 4.98141795,31.0379981 C2.23025679,31.0379981 0,33.354029 0,36.2109978 C0,39.0679667 2.23025679,41.3839975 4.98141795,41.3839975 Z M4.98141795,26.8995984 C7.73257912,26.8995984 9.96283591,24.5835675 9.96283591,21.7265987 C9.96283591,18.8696299 7.73257912,16.553599 4.98141795,16.553599 C2.23025679,16.553599 0,18.8696299 0,21.7265987 C0,24.5835675 2.23025679,26.8995984 4.98141795,26.8995984 Z"></path>
-      </svg>
-      <progress id="progress" max="100" value="0"></progress>
-      <div id="status">
-        Starting Metabase...
+      <div id="logo">
+        <svg viewBox="0 0 66 85" width="81.67" height="100" fill="#509EE3">
+            <path d="M46.8253288,70.4935014 C49.5764899,70.4935014 51.8067467,68.1774705 51.8067467,65.3205017 C51.8067467,62.4635329 49.5764899,60.147502 46.8253288,60.147502 C44.0741676,60.147502 41.8439108,62.4635329 41.8439108,65.3205017 C41.8439108,68.1774705 44.0741676,70.4935014 46.8253288,70.4935014 Z M32.8773585,84.9779005 C35.6285197,84.9779005 37.8587764,82.6618697 37.8587764,79.8049008 C37.8587764,76.947932 35.6285197,74.6319011 32.8773585,74.6319011 C30.1261973,74.6319011 27.8959405,76.947932 27.8959405,79.8049008 C27.8959405,82.6618697 30.1261973,84.9779005 32.8773585,84.9779005 Z M32.8773585,70.4935014 C35.6285197,70.4935014 37.8587764,68.1774705 37.8587764,65.3205017 C37.8587764,62.4635329 35.6285197,60.147502 32.8773585,60.147502 C30.1261973,60.147502 27.8959405,62.4635329 27.8959405,65.3205017 C27.8959405,68.1774705 30.1261973,70.4935014 32.8773585,70.4935014 Z M18.9293882,70.4935014 C21.6805494,70.4935014 23.9108062,68.1774705 23.9108062,65.3205017 C23.9108062,62.4635329 21.6805494,60.147502 18.9293882,60.147502 C16.1782271,60.147502 13.9479703,62.4635329 13.9479703,65.3205017 C13.9479703,68.1774705 16.1782271,70.4935014 18.9293882,70.4935014 Z M46.8253288,56.0091023 C49.5764899,56.0091023 51.8067467,53.6930714 51.8067467,50.8361026 C51.8067467,47.9791337 49.5764899,45.6631029 46.8253288,45.6631029 C44.0741676,45.6631029 41.8439108,47.9791337 41.8439108,50.8361026 C41.8439108,53.6930714 44.0741676,56.0091023 46.8253288,56.0091023 Z M18.9293882,56.0091023 C21.6805494,56.0091023 23.9108062,53.6930714 23.9108062,50.8361026 C23.9108062,47.9791337 21.6805494,45.6631029 18.9293882,45.6631029 C16.1782271,45.6631029 13.9479703,47.9791337 13.9479703,50.8361026 C13.9479703,53.6930714 16.1782271,56.0091023 18.9293882,56.0091023 Z M46.8253288,26.8995984 C49.5764899,26.8995984 51.8067467,24.5835675 51.8067467,21.7265987 C51.8067467,18.8696299 49.5764899,16.553599 46.8253288,16.553599 C44.0741676,16.553599 41.8439108,18.8696299 41.8439108,21.7265987 C41.8439108,24.5835675 44.0741676,26.8995984 46.8253288,26.8995984 Z M32.8773585,41.5247031 C35.6285197,41.5247031 37.8587764,39.2086723 37.8587764,36.3517034 C37.8587764,33.4947346 35.6285197,31.1787037 32.8773585,31.1787037 C30.1261973,31.1787037 27.8959405,33.4947346 27.8959405,36.3517034 C27.8959405,39.2086723 30.1261973,41.5247031 32.8773585,41.5247031 Z M32.8773585,10.3459994 C35.6285197,10.3459994 37.8587764,8.02996853 37.8587764,5.17299969 C37.8587764,2.31603085 35.6285197,0 32.8773585,0 C30.1261973,0 27.8959405,2.31603085 27.8959405,5.17299969 C27.8959405,8.02996853 30.1261973,10.3459994 32.8773585,10.3459994 Z M32.8773585,26.8995984 C35.6285197,26.8995984 37.8587764,24.5835675 37.8587764,21.7265987 C37.8587764,18.8696299 35.6285197,16.553599 32.8773585,16.553599 C30.1261973,16.553599 27.8959405,18.8696299 27.8959405,21.7265987 C27.8959405,24.5835675 30.1261973,26.8995984 32.8773585,26.8995984 Z M18.9293882,26.8995984 C21.6805494,26.8995984 23.9108062,24.5835675 23.9108062,21.7265987 C23.9108062,18.8696299 21.6805494,16.553599 18.9293882,16.553599 C16.1782271,16.553599 13.9479703,18.8696299 13.9479703,21.7265987 C13.9479703,24.5835675 16.1782271,26.8995984 18.9293882,26.8995984 Z" opacity="0.2"></path>
+            <path d="M60.773299,70.4935014 C63.5244602,70.4935014 65.754717,68.1774705 65.754717,65.3205017 C65.754717,62.4635329 63.5244602,60.147502 60.773299,60.147502 C58.0221379,60.147502 55.7918811,62.4635329 55.7918811,65.3205017 C55.7918811,68.1774705 58.0221379,70.4935014 60.773299,70.4935014 Z M4.98141795,70.3527958 C7.73257912,70.3527958 9.96283591,68.0367649 9.96283591,65.1797961 C9.96283591,62.3228273 7.73257912,60.0067964 4.98141795,60.0067964 C2.23025679,60.0067964 0,62.3228273 0,65.1797961 C0,68.0367649 2.23025679,70.3527958 4.98141795,70.3527958 Z M60.773299,56.0091023 C63.5244602,56.0091023 65.754717,53.6930714 65.754717,50.8361026 C65.754717,47.9791337 63.5244602,45.6631029 60.773299,45.6631029 C58.0221379,45.6631029 55.7918811,47.9791337 55.7918811,50.8361026 C55.7918811,53.6930714 58.0221379,56.0091023 60.773299,56.0091023 Z M32.8773585,56.0091023 C35.6285197,56.0091023 37.8587764,53.6930714 37.8587764,50.8361026 C37.8587764,47.9791337 35.6285197,45.6631029 32.8773585,45.6631029 C30.1261973,45.6631029 27.8959405,47.9791337 27.8959405,50.8361026 C27.8959405,53.6930714 30.1261973,56.0091023 32.8773585,56.0091023 Z M4.98141795,55.8683967 C7.73257912,55.8683967 9.96283591,53.5523658 9.96283591,50.695397 C9.96283591,47.8384281 7.73257912,45.5223973 4.98141795,45.5223973 C2.23025679,45.5223973 0,47.8384281 0,50.695397 C0,53.5523658 2.23025679,55.8683967 4.98141795,55.8683967 Z M60.773299,41.5247031 C63.5244602,41.5247031 65.754717,39.2086723 65.754717,36.3517034 C65.754717,33.4947346 63.5244602,31.1787037 60.773299,31.1787037 C58.0221379,31.1787037 55.7918811,33.4947346 55.7918811,36.3517034 C55.7918811,39.2086723 58.0221379,41.5247031 60.773299,41.5247031 Z M46.8253288,41.5247031 C49.5764899,41.5247031 51.8067467,39.2086723 51.8067467,36.3517034 C51.8067467,33.4947346 49.5764899,31.1787037 46.8253288,31.1787037 C44.0741676,31.1787037 41.8439108,33.4947346 41.8439108,36.3517034 C41.8439108,39.2086723 44.0741676,41.5247031 46.8253288,41.5247031 Z M60.773299,26.8995984 C63.5244602,26.8995984 65.754717,24.5835675 65.754717,21.7265987 C65.754717,18.8696299 63.5244602,16.553599 60.773299,16.553599 C58.0221379,16.553599 55.7918811,18.8696299 55.7918811,21.7265987 C55.7918811,24.5835675 58.0221379,26.8995984 60.773299,26.8995984 Z M18.9293882,41.5247031 C21.6805494,41.5247031 23.9108062,39.2086723 23.9108062,36.3517034 C23.9108062,33.4947346 21.6805494,31.1787037 18.9293882,31.1787037 C16.1782271,31.1787037 13.9479703,33.4947346 13.9479703,36.3517034 C13.9479703,39.2086723 16.1782271,41.5247031 18.9293882,41.5247031 Z M4.98141795,41.3839975 C7.73257912,41.3839975 9.96283591,39.0679667 9.96283591,36.2109978 C9.96283591,33.354029 7.73257912,31.0379981 4.98141795,31.0379981 C2.23025679,31.0379981 0,33.354029 0,36.2109978 C0,39.0679667 2.23025679,41.3839975 4.98141795,41.3839975 Z M4.98141795,26.8995984 C7.73257912,26.8995984 9.96283591,24.5835675 9.96283591,21.7265987 C9.96283591,18.8696299 7.73257912,16.553599 4.98141795,16.553599 C2.23025679,16.553599 0,18.8696299 0,21.7265987 C0,24.5835675 2.23025679,26.8995984 4.98141795,26.8995984 Z"></path>
+        </svg>
+      </div>
+
+      <div id="feature-image" class="drill-through-img">&nbsp;</div>
+      <p id="heading">Click on your charts to dive deeper.</p>
+
+      <div id="footer">
+        <progress id="progress" max="100" value="0"></progress>
+        <div id="status">
+          Starting Metabase...
+        </div>
       </div>
     </div>
 
     <script type="text/javascript">
+      var content =
+        [
+          ['drill-through-img', 'Click on your charts to dive deeper.'],
+          ['metabot-img shadow', 'Bring your charts and data into Slack.'],
+          ['calendar-img', 'Dashboard filters let you filter all your charts at once.'],
+          ['charts-img shadow', 'Easily create and share beautiful dashboards.'],
+          ['column-heading-img', 'Click on column headings in your tables to explore them.']
+        ];
+
+      var featureImage = document.getElementById("feature-image");
+      var heading = document.getElementById("heading");
+
+      var counter = 0;
+
+      function switcher() {
+        setInterval(function() {
+          counter++;
+          if (counter == content.length) counter = 0;
+          featureImage.className = featureImage.className.replace(" opaque", "") + " transparent";
+          heading.className = "transparent";
+
+          // Need to somehow wait here for a sec before fading things back in
+          setTimeout(function() {
+            featureImage.className = content[counter][0] + " opaque";
+            heading.innerHTML = content[counter][1];
+            heading.className = "opaque";
+          }, 200);
+        }, 4000);
+      }
+
       var messages = [
         "Polishing tables…",
         "Scaling scalars…",
@@ -90,6 +201,8 @@
         }
         req.send();
       }
+
+      switcher();
       poll();
     </script>
   </body>
diff --git a/resources/migrations/000_migrations.yaml b/resources/migrations/000_migrations.yaml
index 8632de63fab46d6ad27dc26a97aa3c1d5b2435ca..f03ee95b114c973620a012f076b8174b2b8ea359 100644
--- a/resources/migrations/000_migrations.yaml
+++ b/resources/migrations/000_migrations.yaml
@@ -3021,7 +3021,7 @@ databaseChangeLog:
             columnNames: group_id, object
         ############################################################ Tweaks to metabase_table ############################################################
         # Modify the length of metabase_table.schema from 256 -> 254
-        # It turns out MySQL InnoDB indecies have to be 767 bytes or less (at least for older versions of MySQL)
+        # It turns out MySQL InnoDB indices have to be 767 bytes or less (at least for older versions of MySQL)
         # and 'utf8' text columns can use up to 3 bytes per character in MySQL -- see http://stackoverflow.com/a/22515986/1198455
         # So 256 * 3 = 768 bytes (too large to index / add unique constraints)
         # Drop this to 254; 254 * 3 = 762, which should give us room to index it along with a 4-byte integer as well if need be
@@ -3323,7 +3323,7 @@ databaseChangeLog:
       id: 49
       author: camsaul
       changes:
-        ######################################## Card public_uuid & indecies ########################################
+        ######################################## Card public_uuid & indices ########################################
         - addColumn:
             tableName: report_card
             columns:
@@ -3346,7 +3346,7 @@ databaseChangeLog:
             columns:
               column:
                 name: public_uuid
-        ######################################## Dashboard public_uuid & indecies ########################################
+        ######################################## Dashboard public_uuid & indices ########################################
         - addColumn:
             tableName: report_dashboard
             columns:
@@ -3648,6 +3648,30 @@ databaseChangeLog:
                   name: dashboard_id
   - changeSet:
       id: 56
+      author: wwwiiilll
+      changes:
+        - addColumn:
+            tableName: core_user
+            columns:
+              - column:
+                  name: ldap_auth
+                  type: boolean
+                  defaultValueBoolean: false
+                  constraints:
+                    nullable: false
+  - changeSet:
+      id: 57
+      author: camsaul
+      changes:
+        - addColumn:
+            tableName: report_card
+            columns:
+              - column:
+                  name: result_metadata
+                  type: text
+                  remarks: 'Serialized JSON containing metadata about the result columns from running the query.'
+  - changeSet:
+      id: 58
       author: senior
       changes:
         - addColumn:
diff --git a/src/metabase/api/card.clj b/src/metabase/api/card.clj
index 53df71031d685b3f36db501ab2a73c826276eed1..69b37ea253e11aaca871e5d52cc6f7bf916d9e13 100644
--- a/src/metabase/api/card.clj
+++ b/src/metabase/api/card.clj
@@ -29,7 +29,9 @@
             [metabase.query-processor
              [interface :as qpi]
              [util :as qputil]]
-            [metabase.query-processor.middleware.cache :as cache]
+            [metabase.query-processor.middleware
+             [cache :as cache]
+             [results-metadata :as results-metadata]]
             [metabase.util.schema :as su]
             [ring.util.codec :as codec]
             [schema.core :as s]
@@ -206,14 +208,44 @@
 
 
 ;;; ------------------------------------------------------------ Saving Cards ------------------------------------------------------------
+
+;; When a new Card is saved, we wouldn't normally have the results metadata for it until the first time its query is ran.
+;; As a workaround, we'll calculate this metadata and return it with all query responses, and then let the frontend
+;; pass it back to us when saving or updating a Card.
+;; As a basic step to make sure the Metadata is valid we'll also pass a simple checksum and have the frontend pass it back to us.
+;; See the QP `results-metadata` middleware namespace for more details
+
+(s/defn ^:private ^:always-validate result-metadata-for-query :- results-metadata/ResultsMetadata
+  "Fetch the results metadata for a QUERY by running the query and seeing what the QP gives us in return.
+   This is obviously a bit wasteful so hopefully we can avoid having to do this."
+  [query]
+  (binding [qpi/*disable-qp-logging* true]
+    (get-in (qp/process-query query) [:data :results_metadata :columns])))
+
+(s/defn ^:private ^:always-validate result-metadata :- (s/maybe results-metadata/ResultsMetadata)
+  "Get the right results metadata for this CARD. We'll check to see whether the METADATA passed in seems valid;
+   otherwise we'll run the query ourselves to get the right values."
+  [query metadata checksum]
+  (let [valid-metadata? (and (results-metadata/valid-checksum? metadata checksum)
+                             (s/validate results-metadata/ResultsMetadata metadata))]
+    (log/info (str "Card results metadata passed in to API is " (cond
+                                                                  valid-metadata? "VALID. Thanks!"
+                                                                  metadata        "INVALID. Running query to fetch correct metadata."
+                                                                  :else           "MISSING. Running query to fetch correct metadata.")))
+    (if valid-metadata?
+      metadata
+      (result-metadata-for-query query))))
+
 (api/defendpoint POST "/"
   "Create a new `Card`."
-  [:as {{:keys [dataset_query description display name visualization_settings collection_id]} :body}]
+  [:as {{:keys [dataset_query description display name visualization_settings collection_id result_metadata metadata_checksum]} :body}]
   {name                   su/NonBlankString
    description            (s/maybe su/NonBlankString)
    display                su/NonBlankString
    visualization_settings su/Map
-   collection_id          (s/maybe su/IntGreaterThanZero)}
+   collection_id          (s/maybe su/IntGreaterThanZero)
+   result_metadata        (s/maybe results-metadata/ResultsMetadata)
+   metadata_checksum      (s/maybe su/NonBlankString)}
   ;; check that we have permissions to run the query that we're trying to save
   (api/check-403 (perms/set-has-full-permissions-for-set? @api/*current-user-permissions-set* (card/query-perms-set dataset_query :write)))
   ;; check that we have permissions for the collection we're trying to save this card to, if applicable
@@ -227,7 +259,8 @@
          :display                display
          :name                   name
          :visualization_settings visualization_settings
-         :collection_id          collection_id)
+         :collection_id          collection_id
+         :result_metadata        (result-metadata dataset_query result_metadata metadata_checksum))
        (events/publish-event! :card-create)))
 
 
@@ -275,6 +308,17 @@
     (api/check-embedding-enabled)
     (api/check-superuser)))
 
+
+(defn- result-metadata-for-updating
+  "If CARD's query is being updated, return the value that should be saved for `result_metadata`. This *should* be passed
+   in to the API; if so, verifiy that it was correct (the checksum is valid); if not, go fetch it.
+   If the query has not changed, this returns `nil`, which means the value won't get updated below."
+  [card query metadata checksum]
+  (when (and query
+             (not= query (:dataset_query card)))
+
+    (result-metadata query metadata checksum)))
+
 (defn- publish-card-update!
   "Publish an event appropriate for the update(s) done to this CARD (`:card-update`, or archiving/unarchiving events)."
   [card archived?]
@@ -290,7 +334,7 @@
 
 (api/defendpoint PUT "/:id"
   "Update a `Card`."
-  [id :as {{:keys [dataset_query description display name visualization_settings archived collection_id enable_embedding embedding_params], :as body} :body}]
+  [id :as {{:keys [dataset_query description display name visualization_settings archived collection_id enable_embedding embedding_params result_metadata metadata_checksum], :as body} :body}]
   {name                   (s/maybe su/NonBlankString)
    dataset_query          (s/maybe su/Map)
    display                (s/maybe su/NonBlankString)
@@ -299,19 +343,23 @@
    archived               (s/maybe s/Bool)
    enable_embedding       (s/maybe s/Bool)
    embedding_params       (s/maybe su/EmbeddingParams)
-   collection_id          (s/maybe su/IntGreaterThanZero)}
+   collection_id          (s/maybe su/IntGreaterThanZero)
+   result_metadata        (s/maybe results-metadata/ResultsMetadata)
+   metadata_checksum      (s/maybe su/NonBlankString)}
   (let [card (api/write-check Card id)]
     ;; Do various permissions checks
     (check-allowed-to-change-collection card collection_id)
     (check-allowed-to-modify-query card dataset_query)
     (check-allowed-to-unarchive card archived)
     (check-allowed-to-change-embedding card enable_embedding embedding_params)
-    ;; ok, now save the Card
-    (db/update! Card id
-      ;; `collection_id` and `description` can be `nil` (in order to unset them). Other values should only be modified if they're passed in as non-nil
-      (u/select-keys-when body
-        :present #{:collection_id :description}
-        :non-nil #{:dataset_query :display :name :visualization_settings :archived :enable_embedding :embedding_params}))
+    ;; make sure we have the correct `result_metadata`
+    (let [body (assoc body :result_metadata (result-metadata-for-updating card dataset_query result_metadata metadata_checksum))]
+      ;; ok, now save the Card
+      (db/update! Card id
+        ;; `collection_id` and `description` can be `nil` (in order to unset them). Other values should only be modified if they're passed in as non-nil
+        (u/select-keys-when body
+          :present #{:collection_id :description}
+          :non-nil #{:dataset_query :display :name :visualization_settings :archived :enable_embedding :embedding_params :result_metadata})))
     ;; Fetch the updated Card from the DB
     (let [card (Card id)]
       (publish-card-update! card archived)
diff --git a/src/metabase/api/common/internal.clj b/src/metabase/api/common/internal.clj
index 41861e3909c1b1be8703c86941fce2404126f68e..1a265950edd8b3cfebe6136c4df236f674e417a1 100644
--- a/src/metabase/api/common/internal.clj
+++ b/src/metabase/api/common/internal.clj
@@ -112,12 +112,10 @@
 
     (arg-type :id) -> :int"
   [arg]
-  (-> auto-parse-arg-name-patterns
-      ((fn [[[pattern type] & rest-patterns]]
-         (or (when (re-find pattern (name arg))
-               type)
-             (when rest-patterns
-               (recur rest-patterns)))))))
+  (some (fn [[pattern type]]
+          (when (re-find pattern (name arg))
+            type))
+        auto-parse-arg-name-patterns))
 
 
 ;;; ## TYPIFY-ROUTE
diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj
index e6e3808ee17a9df05d497388f9de07d93ddcf9bd..6de82e7a9b365cffa78122d0155f63088f75990a 100644
--- a/src/metabase/api/database.clj
+++ b/src/metabase/api/database.clj
@@ -9,13 +9,17 @@
              [events :as events]
              [sample-data :as sample-data]
              [util :as u]]
-            [metabase.api.common :as api]
+            [metabase.api
+             [common :as api]
+             [table :as table-api]]
             [metabase.models
+             [card :refer [Card]]
              [database :as database :refer [Database protected-password]]
              [field :refer [Field]]
              [interface :as mi]
              [permissions :as perms]
              [table :refer [Table]]]
+            [metabase.query-processor.util :as qputil]
             [metabase.util.schema :as su]
             [schema.core :as s]
             [toucan
@@ -30,16 +34,18 @@
 
 ;;; ------------------------------------------------------------ GET /api/database ------------------------------------------------------------
 
-
 (defn- add-tables [dbs]
   (let [db-id->tables (group-by :db_id (filter mi/can-read? (db/select Table
-                                                                  :active true
-                                                                  :db_id  [:in (map :id dbs)]
-                                                                  {:order-by [[:%lower.display_name :asc]]})))]
+                                                              :active true
+                                                              :db_id  [:in (map :id dbs)]
+                                                              {:order-by [[:%lower.display_name :asc]]})))]
     (for [db dbs]
       (assoc db :tables (get db-id->tables (:id db) [])))))
 
-(defn- add-native-perms-info [dbs]
+(defn- add-native-perms-info
+  "For each database in DBS add a `:native_permissions` field describing the current user's permissions for running native (e.g. SQL) queries.
+   Will be one of `:write`, `:read`, or `:none`."
+  [dbs]
   (for [db dbs]
     (let [user-has-perms? (fn [path-fn] (perms/set-has-full-permissions? @api/*current-user-permissions-set* (path-fn (u/get-id db))))]
       (assoc db :native_permissions (cond
@@ -47,16 +53,89 @@
                                       (user-has-perms? perms/native-read-path)      :read
                                       :else                                         :none)))))
 
-(defn- dbs-list [include-tables?]
+(defn- card-database-supports-nested-queries? [{{database-id :database} :dataset_query, :as card}]
+  (when database-id
+    (when-let [driver (driver/database-id->driver database-id)]
+      (driver/driver-supports? driver :nested-queries)
+      (mi/can-read? card))))
+
+(defn- card-has-ambiguous-columns?
+  "We know a card has ambiguous columns if any of the columns that come back end in `_2` (etc.) because that's what
+   clojure.java.jdbc 'helpfully' does for us automatically.
+   Presence of ambiguous columns disqualifies a query for use as a source query because something like
+
+     SELECT name
+     FROM (
+       SELECT x.name, y.name
+       FROM x
+       LEFT JOIN y on x.id = y.id
+     )
+
+   would be ambiguous. Too many things break when attempting to use a query like this. In the future, this may be
+   supported, but it will likely require rewriting the source SQL query to add appropriate aliases (this is even
+   trickier if the source query uses `SELECT *`)."
+  [{result-metadata :result_metadata}]
+  (some (partial re-find #"_2$")
+        (map (comp name :name) result-metadata)))
+
+(defn- card-uses-unnestable-aggregation?
+  "Since cumulative count and cumulative sum aggregations are done in Clojure-land we can't use Cards that
+   use queries with those aggregations as source queries. This function determines whether CARD is using one
+   of those queries so we can filter it out in Clojure-land."
+  [{{{aggregations :aggregation} :query} :dataset_query}]
+  (when (seq aggregations)
+    (some (fn [[ag-type]]
+            (contains? #{:cum-count :cum-sum} (qputil/normalize-token ag-type)))
+          ;; if we were passed in old-style [ag] instead of [[ag1], [ag2]] convert to new-style so we can iterate over list of ags
+          (if-not (sequential? (first aggregations))
+            [aggregations]
+            aggregations))))
+
+(defn- source-query-cards
+  "Fetch the Cards that can be used as source queries (e.g. presented as virtual tables)."
+  []
+  (as-> (db/select [Card :name :description :database_id :dataset_query :id :collection_id :result_metadata]
+          :result_metadata [:not= nil]
+          {:order-by [[:%lower.name :asc]]}) <>
+    (filter card-database-supports-nested-queries? <>)
+    (remove card-uses-unnestable-aggregation? <>)
+    (remove card-has-ambiguous-columns? <>)
+    (hydrate <> :collection)))
+
+(defn- cards-virtual-tables
+  "Return a sequence of 'virtual' Table metadata for eligible Cards.
+   (This takes the Cards from `source-query-cards` and returns them in a format suitable for consumption by the Query Builder.)"
+  [& {:keys [include-fields?]}]
+  (for [card (source-query-cards)]
+    (table-api/card->virtual-table card :include-fields? include-fields?)))
+
+(defn- saved-cards-virtual-db-metadata [& {:keys [include-fields?]}]
+  (when-let [virtual-tables (seq (cards-virtual-tables :include-fields? include-fields?))]
+    {:name               "Saved Questions"
+     :id                 database/virtual-id
+     :features           #{:basic-aggregations}
+     :tables             virtual-tables
+     :is_saved_questions true}))
+
+;; "Virtual" tables for saved cards simulate the db->schema->table hierarchy by doing fake-db->collection->card
+(defn- add-virtual-tables-for-saved-cards [dbs]
+  (if-let [virtual-db-metadata (saved-cards-virtual-db-metadata)]
+    ;; only add the 'Saved Questions' DB if there are Cards that can be used
+    (conj (vec dbs) virtual-db-metadata)
+    dbs))
+
+(defn- dbs-list [include-tables? include-cards?]
   (when-let [dbs (seq (filter mi/can-read? (db/select Database {:order-by [:%lower.name]})))]
-    (add-native-perms-info (if-not include-tables?
-                             dbs
-                             (add-tables dbs)))))
+    (cond-> (add-native-perms-info dbs)
+      include-tables? add-tables
+      include-cards?  add-virtual-tables-for-saved-cards)))
 
 (api/defendpoint GET "/"
   "Fetch all `Databases`."
-  [include_tables]
-  (or (dbs-list include_tables)
+  [include_tables include_cards]
+  {include_tables (s/maybe su/BooleanString)
+   include_cards  (s/maybe su/BooleanString)}
+  (or (dbs-list include_tables include_cards)
       []))
 
 
@@ -70,6 +149,17 @@
 
 ;;; ------------------------------------------------------------ GET /api/database/:id/metadata ------------------------------------------------------------
 
+;; Since the normal `:id` param in the normal version of the endpoint will never match with negative numbers
+;; we'll create another endpoint to specifically match the ID of the 'virtual' database. The `defendpoint` macro
+;; requires either strings or vectors for the route so we'll have to use a vector and create a regex to only
+;; match the virtual ID (and nothing else).
+(api/defendpoint GET ["/:virtual-db/metadata" :virtual-db (re-pattern (str database/virtual-id))]
+  "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend
+   and allowing it to treat the Saved Questions virtual DB just like any other database."
+  []
+  (saved-cards-virtual-db-metadata :include-fields? true))
+
+
 (defn- db-metadata [id]
   (-> (api/read-check Database id)
       (hydrate [:tables [:fields :target :values] :segments :metrics])
diff --git a/src/metabase/api/dataset.clj b/src/metabase/api/dataset.clj
index 913c177238aca7600ac3581214c5b264b6910bff..22e476c51aac6a9c5ca20aeb0c85e364ff1a5106 100644
--- a/src/metabase/api/dataset.clj
+++ b/src/metabase/api/dataset.clj
@@ -3,6 +3,7 @@
   (:require [cheshire.core :as json]
             [clojure.data.csv :as csv]
             [clojure.string :as str]
+            [clojure.tools.logging :as log]
             [compojure.core :refer [POST]]
             [dk.ative.docjure.spreadsheet :as spreadsheet]
             [metabase
@@ -12,7 +13,8 @@
             [metabase.api.common :as api]
             [metabase.api.common.internal :refer [route-fn-name]]
             [metabase.models
-             [database :refer [Database]]
+             [card :refer [Card]]
+             [database :as database :refer [Database]]
              [query :as query]]
             [metabase.query-processor.util :as qputil]
             [metabase.util.schema :as su]
@@ -37,14 +39,28 @@
 
 ;;; ------------------------------------------------------------ Running a Query Normally ------------------------------------------------------------
 
+(defn- query->source-card-id
+  "Return the ID of the Card used as the \"source\" query of this query, if applicable; otherwise return `nil`.
+   Used so `:card-id` context can be passed along with the query so Collections perms checking is done if appropriate."
+  [outer-query]
+  (let [source-table (qputil/get-in-normalized outer-query [:query :source-table])]
+    (when (string? source-table)
+      (when-let [[_ card-id-str] (re-matches #"^card__(\d+$)" source-table)]
+        (log/info (str "Source query for this query is Card " card-id-str))
+        (u/prog1 (Integer/parseInt card-id-str)
+          (api/read-check Card <>))))))
+
 (api/defendpoint POST "/"
   "Execute a query and retrieve the results in the usual format."
   [:as {{:keys [database], :as query} :body}]
   {database s/Int}
-  (api/read-check Database database)
+  ;; don't permissions check the 'database' if it's the virtual database. That database doesn't actually exist :-)
+  (when-not (= database database/virtual-id)
+    (api/read-check Database database))
   ;; add sensible constraints for results limits on our query
-  (let [query (assoc query :constraints default-query-constraints)]
-    (qp/process-query-and-save-execution! query {:executed-by api/*current-user-id*, :context :ad-hoc})))
+  (let [source-card-id (query->source-card-id query)]
+    (qp/process-query-and-save-execution! (assoc query :constraints default-query-constraints)
+      {:executed-by api/*current-user-id*, :context :ad-hoc, :card-id source-card-id, :nested? (boolean source-card-id)})))
 
 
 ;;; ------------------------------------------------------------ Downloading Query Results in Other Formats ------------------------------------------------------------
diff --git a/src/metabase/api/embed.clj b/src/metabase/api/embed.clj
index 23aff5a7924c4a1dda898c04c69cfdd66ab54e2d..f1b9d8baff37e3a346ba14f5ad87cfa343679810 100644
--- a/src/metabase/api/embed.clj
+++ b/src/metabase/api/embed.clj
@@ -108,13 +108,13 @@
   "Remove the `:parameters` for DASHBOARD-OR-CARD that listed as `disabled` or `locked` in the EMBEDDING-PARAMS whitelist,
    or not present in the whitelist. This is done so the frontend doesn't display widgets for params the user can't set."
   [dashboard-or-card, embedding-params :- su/EmbeddingParams]
-  (let [params-to-remove (into #{} (concat (for [[param status] embedding-params
-                                                 :when          (not= status "enabled")]
-                                             param)
-                                           (for [{slug :slug} (:parameters dashboard-or-card)
-                                                 :let         [param (keyword slug)]
-                                                 :when        (not (contains? embedding-params param))]
-                                             param)))]
+  (let [params-to-remove (set (concat (for [[param status] embedding-params
+                                            :when          (not= status "enabled")]
+                                        param)
+                                      (for [{slug :slug} (:parameters dashboard-or-card)
+                                            :let         [param (keyword slug)]
+                                            :when        (not (contains? embedding-params param))]
+                                        param)))]
     (update dashboard-or-card :parameters remove-params-in-set params-to-remove)))
 
 (defn- remove-token-parameters
diff --git a/src/metabase/api/field.clj b/src/metabase/api/field.clj
index e1e0949e8e5ec761c6326e3ccaa9be0e6c89d5db..d513a6d80618b605d56b423a8c2a47822634e829 100644
--- a/src/metabase/api/field.clj
+++ b/src/metabase/api/field.clj
@@ -64,6 +64,8 @@
     [[:count     (metadata/field-count field)]
      [:distincts (metadata/field-distinct-count field)]]))
 
+(def ^:private empty-field-values
+  {:values {} :human_readable_values {}})
 
 (api/defendpoint GET "/:id/values"
   "If `Field`'s special type derives from `type/Category`, or its base type is `type/Boolean`, return
@@ -71,9 +73,19 @@
   [id]
   (let [field (api/read-check Field id)]
     (if-not (field-should-have-field-values? field)
-      {:values {} :human_readable_values {}}
+      empty-field-values
       (create-field-values-if-needed! field))))
 
+;; match things like GET /field-literal%2Ccreated_at%2Ctype%2FDatetime/values
+;; (this is how things like [field-literal,created_at,type/Datetime] look when URL-encoded)
+(api/defendpoint GET "/field-literal%2C:field-name%2Ctype%2F:field-type/values"
+  "Implementation of the field values endpoint for fields in the Saved Questions 'virtual' DB.
+   This endpoint is just a convenience to simplify the frontend code. It just returns the standard
+   'empty' field values response."
+  ;; we don't actually care what field-name or field-type are, so they're ignored
+  [_ _]
+  empty-field-values)
+
 
 ;; TODO - not sure this is used anymore
 (api/defendpoint POST "/:id/value_map_update"
diff --git a/src/metabase/api/ldap.clj b/src/metabase/api/ldap.clj
new file mode 100644
index 0000000000000000000000000000000000000000..5ef5571dc71661c041c590e0e437b0d07908d74c
--- /dev/null
+++ b/src/metabase/api/ldap.clj
@@ -0,0 +1,111 @@
+(ns metabase.api.ldap
+  "/api/ldap endpoints"
+  (:require [clojure.tools.logging :as log]
+            [clojure.set :as set]
+            [compojure.core :refer [PUT]]
+            [metabase.api.common :refer :all]
+            [metabase.config :as config]
+            [metabase.integrations.ldap :as ldap]
+            [metabase.models.setting :as setting]
+            [metabase.util.schema :as su]))
+
+(def ^:private ^:const mb-settings->ldap-details
+  {:ldap-enabled             :enabled
+   :ldap-host                :host
+   :ldap-port                :port
+   :ldap-bind-dn             :bind-dn
+   :ldap-password            :password
+   :ldap-security            :security
+   :ldap-user-base           :user-base
+   :ldap-user-filter         :user-filter
+   :ldap-attribute-email     :attribute-email
+   :ldap-attribute-firstname :attribute-firstname
+   :ldap-attribute-lastname  :attribute-lastname
+   :ldap-group-sync          :group-sync
+   :ldap-group-base          :group-base})
+
+(defn- humanize-error-messages
+  "Convert raw error message responses from our LDAP tests into our normal api error response structure."
+  [{:keys [status message]}]
+  (when (not= :SUCCESS status)
+    (log/warn "Problem connecting to LDAP server:" message)
+    (let [conn-error     {:errors {:ldap-host "Wrong host or port"
+                                   :ldap-port "Wrong host or port"}}
+          security-error {:errors {:ldap-port     "Wrong port or security setting"
+                                   :ldap-security "Wrong port or security setting"}}
+          bind-dn-error  {:errors {:ldap-bind-dn "Wrong bind DN"}}
+          creds-error    {:errors {:ldap-bind-dn  "Wrong bind DN or password"
+                                   :ldap-password "Wrong bind DN or password"}}]
+      (condp re-matches message
+        #".*UnknownHostException.*"
+        conn-error
+
+        #".*ConnectException.*"
+        conn-error
+
+        #".*SocketException.*"
+        security-error
+
+        #".*SSLException.*"
+        security-error
+
+        #"^For input string.*"
+        {:errors {:ldap-host "Invalid hostname, do not add the 'ldap://' or 'ldaps://' prefix"}}
+
+        #".*password was incorrect.*"
+        {:errors {:ldap-password "Password was incorrect"}}
+
+        #"^Unable to bind as user.*"
+        bind-dn-error
+
+        #"^Unable to parse bind DN.*"
+        {:errors {:ldap-bind-dn "Invalid bind DN"}}
+
+        #".*AcceptSecurityContext error, data 525,.*"
+        bind-dn-error
+
+        #".*AcceptSecurityContext error, data 52e,.*"
+        creds-error
+
+        #".*AcceptSecurityContext error, data 532,.*"
+        {:errors {:ldap-password "Password is expired"}}
+
+        #".*AcceptSecurityContext error, data 533,.*"
+        {:errors {:ldap-bind-dn "Account is disabled"}}
+
+        #".*AcceptSecurityContext error, data 701,.*"
+        {:errors {:ldap-bind-dn "Account is expired"}}
+
+        #"^User search base does not exist .*"
+        {:errors {:ldap-user-base "User search base does not exist or is unreadable"}}
+
+        #"^Group search base does not exist .*"
+        {:errors {:ldap-group-base "Group search base does not exist or is unreadable"}}
+
+        ;; everything else :(
+        #"(?s).*"
+        {:message message}))))
+
+(defendpoint PUT "/settings"
+  "Update LDAP related settings. You must be a superuser to do this."
+  [:as {settings :body}]
+  {settings su/Map}
+  (check-superuser)
+  (let [ldap-settings (select-keys settings (keys mb-settings->ldap-details))
+        ldap-details  (-> (set/rename-keys ldap-settings mb-settings->ldap-details)
+                          (assoc :port
+                            (when (seq (:ldap-port settings))
+                              (Integer/parseInt (:ldap-port settings)))))
+        results       (if-not (:ldap-enabled settings)
+                        ;; when disabled just respond with a success message
+                        {:status :SUCCESS}
+                        ;; otherwise validate settings
+                        (ldap/test-ldap-connection ldap-details))]
+    (if (= :SUCCESS (:status results))
+      ;; test succeeded, save our settings
+      (setting/set-many! ldap-settings)
+      ;; test failed, return result message
+      {:status 500
+       :body   (humanize-error-messages results)})))
+
+(define-routes)
diff --git a/src/metabase/api/routes.clj b/src/metabase/api/routes.clj
index 78e16f295229f6e846b8a0fb1a97f1b0805395cf..90b1b20751da34b986d2c1ab3526e4239a6eb504 100644
--- a/src/metabase/api/routes.clj
+++ b/src/metabase/api/routes.clj
@@ -15,6 +15,7 @@
              [geojson :as geojson]
              [getting-started :as getting-started]
              [label :as label]
+             [ldap :as ldap]
              [metric :as metric]
              [notify :as notify]
              [permissions :as permissions]
@@ -63,6 +64,7 @@
   (context "/getting_started" [] (+auth getting-started/routes))
   (context "/geojson"         [] (+auth geojson/routes))
   (context "/label"           [] (+auth label/routes))
+  (context "/ldap"            [] (+auth ldap/routes))
   (context "/metric"          [] (+auth metric/routes))
   (context "/notify"          [] (+apikey notify/routes))
   (context "/permissions"     [] (+auth permissions/routes))
diff --git a/src/metabase/api/session.clj b/src/metabase/api/session.clj
index 8432ae542678b85c31ae247352b8add6e707af41..dfe3116f2e33ac4a45f23dd8b42f56eebcc9e68c 100644
--- a/src/metabase/api/session.clj
+++ b/src/metabase/api/session.clj
@@ -11,6 +11,7 @@
              [util :as u]]
             [metabase.api.common :as api]
             [metabase.email.messages :as email]
+            [metabase.integrations.ldap :as ldap]
             [metabase.models
              [session :refer [Session]]
              [setting :refer [defsetting]]
@@ -33,28 +34,42 @@
       :user_id (:id user))
     (events/publish-event! :user-login {:user_id (:id user), :session_id <>, :first_login (not (boolean (:last_login user)))})))
 
-
 ;;; ## API Endpoints
 
 (def ^:private login-throttlers
-  {:email      (throttle/make-throttler :email)
-   :ip-address (throttle/make-throttler :email, :attempts-threshold 50)}) ; IP Address doesn't have an actual UI field so just show error by email
+  {:username   (throttle/make-throttler :username)
+   :ip-address (throttle/make-throttler :username, :attempts-threshold 50)}) ; IP Address doesn't have an actual UI field so just show error by username
 
 (api/defendpoint POST "/"
   "Login."
-  [:as {{:keys [email password]} :body, remote-address :remote-addr}]
-  {email    su/Email
+  [:as {{:keys [username password]} :body, remote-address :remote-addr}]
+  {username su/NonBlankString
    password su/NonBlankString}
   (throttle/check (login-throttlers :ip-address) remote-address)
-  (throttle/check (login-throttlers :email)      email)
-  (let [user (db/select-one [User :id :password_salt :password :last_login], :email email, :is_active true)]
+  (throttle/check (login-throttlers :username)   username)
+  ;; Primitive "strategy implementation", should be reworked for modular providers in #3210
+  (or
+    ;; First try LDAP if it's enabled
+    (when (ldap/ldap-configured?)
+      (try
+        (when-let [user-info (ldap/find-user username)]
+          (if (ldap/verify-password user-info password)
+            {:id (create-session! (ldap/fetch-or-create-user! user-info password))}
+            ;; Since LDAP knows about the user, fail here to prevent the local strategy to be tried with a possibly outdated password
+            (throw (ex-info "Password did not match stored password." {:status-code 400
+                                                                       :errors      {:password "did not match stored password"}}))))
+        (catch com.unboundid.util.LDAPSDKException e
+          (log/error (u/format-color 'red "Problem connecting to LDAP server, will fallback to local authentication") (.getMessage e)))))
+
+    ;; Then try local authentication
+    (when-let [user (db/select-one [User :id :password_salt :password :last_login], :email username, :is_active true)]
+      (when (pass/verify-password password (:password_salt user) (:password user))
+        {:id (create-session! user)}))
+
+    ;; If nothing succeeded complain about it
     ;; Don't leak whether the account doesn't exist or the password was incorrect
-    (when-not (and user
-                   (pass/verify-password password (:password_salt user) (:password user)))
-      (throw (ex-info "Password did not match stored password." {:status-code 400
-                                                                 :errors      {:password "did not match stored password"}})))
-    {:id (create-session! user)}))
-
+    (throw (ex-info "Password did not match stored password." {:status-code 400
+                                                               :errors      {:password "did not match stored password"}}))))
 
 (api/defendpoint DELETE "/"
   "Logout."
@@ -192,7 +207,7 @@
   (throttle/check (login-throttlers :ip-address) remote-address)
   ;; Verify the token is valid with Google
   (let [{:keys [given_name family_name email]} (google-auth-token-info token)]
-    (log/info "Successfully authenicated Google Auth token for:" given_name family_name)
+    (log/info "Successfully authenticated Google Auth token for:" given_name family_name)
     (google-auth-fetch-or-create-user! given_name family_name email)))
 
 
diff --git a/src/metabase/api/setup.clj b/src/metabase/api/setup.clj
index 078f7a1615f7347d47f229bf80143bf558b7f27e..ebb8d6cf7039f5b9e6f06dc27ee5c9dd2f2e6dff 100644
--- a/src/metabase/api/setup.clj
+++ b/src/metabase/api/setup.clj
@@ -153,7 +153,7 @@
       :triggered   (>= num-cards 30)}
      {:title       "Create segments"
       :group       "Curate your data"
-      :description "Keep everyone on the same page by creating canonnical sets of filters anyone can use while asking questions."
+      :description "Keep everyone on the same page by creating canonical sets of filters anyone can use while asking questions."
       :link        "/admin/datamodel/database"
       :completed   has-segments?
       :triggered   (>= num-cards 30)}]))
diff --git a/src/metabase/api/table.clj b/src/metabase/api/table.clj
index b9fe63cecd45c845342ca673c74956c66264a2ce..3a91877caac7d3af9074325fba84542d066f4d4b 100644
--- a/src/metabase/api/table.clj
+++ b/src/metabase/api/table.clj
@@ -4,10 +4,13 @@
             [compojure.core :refer [GET PUT]]
             [medley.core :as m]
             [metabase
+             [driver :as driver]
              [sync-database :as sync-database]
              [util :as u]]
             [metabase.api.common :as api]
             [metabase.models
+             [card :refer [Card]]
+             [database :as database :refer [Database]]
              [field :refer [Field]]
              [interface :as mi]
              [table :as table :refer [Table]]]
@@ -138,29 +141,35 @@
 (def ^:private coordinate-dimension-indexes
   (create-dim-index-seq :type/Coordinate))
 
-(defn- assoc-dimension-options [resp]
-  (-> resp
-      (assoc :dimension_options dimension-options-for-response)
-      (update :fields (fn [fields]
-                        (for [{:keys [base_type special_type min_value max_value] :as field} fields]
-                          (assoc field
-                            :dimension_options
-                            (cond
+(defn- assoc-field-dimension-options [{:keys [base_type special_type min_value max_value] :as field}]
+  (assoc field
+    :dimension_options
+    (cond
 
-                              (isa? base_type :type/DateTime)
-                              datetime-dimension-indexes
+      (isa? base_type :type/DateTime)
+      datetime-dimension-indexes
 
-                              (and min_value max_value
-                                   (isa? special_type :type/Coordinate))
-                              coordinate-dimension-indexes
+      (and min_value max_value
+           (isa? special_type :type/Coordinate))
+      coordinate-dimension-indexes
 
-                              (and min_value max_value
-                                   (isa? base_type :type/Number)
-                                   (or (nil? special_type) (isa? special_type :type/Number)))
-                              numeric-dimension-indexes
+      (and min_value max_value
+           (isa? base_type :type/Number)
+           (or (nil? special_type) (isa? special_type :type/Number)))
+      numeric-dimension-indexes
 
-                              :else
-                              [])))))))
+      :else
+      [])))
+
+(defn- assoc-dimension-options [resp driver]
+  (if (and driver (contains? (driver/features driver) :binning))
+    (-> resp
+        (assoc :dimension_options dimension-options-for-response)
+        (update :fields #(mapv assoc-field-dimension-options %)))
+    (-> resp
+        (assoc :dimension_options [])
+        (update :fields (fn [fields]
+                          (mapv #(assoc % :dimension_options []) fields))))))
 
 (api/defendpoint GET "/:id/query_metadata"
   "Get metadata about a `Table` useful for running queries.
@@ -170,16 +179,56 @@
   will any of its corresponding values be returned. (This option is provided for use in the Admin Edit Metadata page)."
   [id include_sensitive_fields]
   {include_sensitive_fields (s/maybe su/BooleanString)}
-  (-> (api/read-check Table id)
-      (hydrate :db [:fields :target] :field_values :segments :metrics)
-      (m/dissoc-in [:db :details])
-      assoc-dimension-options
-      (update-in [:fields] (if (Boolean/parseBoolean include_sensitive_fields)
-                             ;; If someone passes include_sensitive_fields return hydrated :fields as-is
-                             identity
-                             ;; Otherwise filter out all :sensitive fields
-                             (partial filter (fn [{:keys [visibility_type]}]
-                                               (not= (keyword visibility_type) :sensitive)))))))
+  (let [table (api/read-check Table id)
+        driver (driver/engine->driver (db/select-one-field :engine Database :id (:db_id table)))]
+    (-> table
+        (hydrate :db [:fields :target] :field_values :segments :metrics)
+        (m/dissoc-in [:db :details])
+        (assoc-dimension-options driver)
+        (update-in [:fields] (if (Boolean/parseBoolean include_sensitive_fields)
+                               ;; If someone passes include_sensitive_fields return hydrated :fields as-is
+                               identity
+                               ;; Otherwise filter out all :sensitive fields
+                               (partial filter (fn [{:keys [visibility_type]}]
+                                                 (not= (keyword visibility_type) :sensitive))))))))
+
+(defn- card-result-metadata->virtual-fields
+  "Return a sequence of 'virtual' fields metadata for the 'virtual' table for a Card in the Saved Questions 'virtual' database."
+  [card-id metadata]
+  (for [col metadata]
+    (assoc col
+      :table_id     (str "card__" card-id)
+      :id           [:field-literal (:name col) (or (:base_type col) :type/*)]
+      ;; don't return :special_type if it's a PK or FK because it confuses the frontend since it can't actually be used that way IRL
+      :special_type (when-let [special-type (keyword (:special_type col))]
+                      (when-not (or (isa? special-type :type/PK)
+                                    (isa? special-type :type/FK))
+                        special-type)))))
+
+(defn card->virtual-table
+  "Return metadata for a 'virtual' table for a CARD in the Saved Questions 'virtual' database. Optionally include 'virtual' fields as well."
+  [card & {:keys [include-fields?]}]
+  ;; if collection isn't already hydrated then do so
+  (let [card (hydrate card :colllection)]
+    (cond-> {:id           (str "card__" (u/get-id card))
+             :db_id        database/virtual-id
+             :display_name (:name card)
+             :schema       (get-in card [:collection :name] "All questions")
+             :description  (:description card)}
+      include-fields? (assoc :fields (card-result-metadata->virtual-fields (u/get-id card) (:result_metadata card))))))
+
+(api/defendpoint GET "/card__:id/query_metadata"
+  "Return metadata for the 'virtual' table for a Card."
+  [id]
+  (-> (db/select-one [Card :id :dataset_query :result_metadata :name :description :collection_id], :id id)
+      api/read-check
+      (card->virtual-table :include-fields? true)))
+
+(api/defendpoint GET "/card__:id/fks"
+  "Return FK info for the 'virtual' table for a Card. This is always empty, so this endpoint
+   serves mainly as a placeholder to avoid having to change anything on the frontend."
+  []
+  []) ; return empty array
 
 
 (api/defendpoint GET "/:id/fks"
diff --git a/src/metabase/api/user.clj b/src/metabase/api/user.clj
index 8358b439365942f93d99e34d8119fa637e6e3672..73fcd511c230f21d8b2984725ee0c14437825c67 100644
--- a/src/metabase/api/user.clj
+++ b/src/metabase/api/user.clj
@@ -5,6 +5,7 @@
              [common :as api]
              [session :as session-api]]
             [metabase.email.messages :as email]
+            [metabase.integrations.ldap :as ldap]
             [metabase.models.user :as user :refer [User]]
             [metabase.util :as u]
             [metabase.util.schema :as su]
@@ -21,7 +22,7 @@
 (api/defendpoint GET "/"
   "Fetch a list of all active `Users` for the admin People page."
   []
-  (db/select [User :id :first_name :last_name :email :is_superuser :google_auth :last_login], :is_active true))
+  (db/select [User :id :first_name :last_name :email :is_superuser :google_auth :ldap_auth :last_login], :is_active true))
 
 (defn- reactivate-user! [existing-user first-name last-name]
   (when-not (:is_active existing-user)
@@ -32,7 +33,9 @@
       :is_superuser  false
       ;; if the user orignally logged in via Google Auth and it's no longer enabled, convert them into a regular user (see Issue #3323)
       :google_auth   (boolean (and (:google_auth existing-user)
-                                   (session-api/google-auth-client-id))))) ; if google-auth-client-id is set it means Google Auth is enabled
+                                   (session-api/google-auth-client-id))) ; if google-auth-client-id is set it means Google Auth is enabled
+      :ldap_auth     (boolean (and (:ldap_auth existing-user)
+                                   (ldap/ldap-configured?)))))
   ;; now return the existing user whether they were originally active or not
   (User (u/get-id existing-user)))
 
diff --git a/src/metabase/db.clj b/src/metabase/db.clj
index d122d4c44b10daa9b9869c53822249613da4db1b..5a33009f5329cd3e3a9f01bd597fba0ee5a016b2 100644
--- a/src/metabase/db.clj
+++ b/src/metabase/db.clj
@@ -34,7 +34,7 @@
            ;; File-based DB
            (let [db-file-name (config/config-str :mb-db-file)
                  db-file      (io/file db-file-name)
-                 options      ";AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1"]
+                 options      ";DB_CLOSE_DELAY=-1"]
              (apply str "file:" (if (.isAbsolute db-file)
                                   ;; when an absolute path is given for the db file then don't mess with it
                                   [db-file-name options]
diff --git a/src/metabase/driver.clj b/src/metabase/driver.clj
index 5f88f50cd51c706bf9503d41ad27adbaf0c0e3d6..ae8af15930d621d83489f1aa91a64aa04306185a 100644
--- a/src/metabase/driver.clj
+++ b/src/metabase/driver.clj
@@ -138,7 +138,8 @@
   *  `:expressions` - Does this driver support [expressions](https://github.com/metabase/metabase/wiki/Query-Language-'98#expressions) (e.g. adding the values of 2 columns together)?
   *  `:dynamic-schema` -  Does this Database have no fixed definitions of schemas? (e.g. Mongo)
   *  `:native-parameters` - Does the driver support parameter substitution on native queries?
-  *  `:expression-aggregations` - Does the driver support using expressions inside aggregations? e.g. something like \"sum(x) + count(y)\" or \"avg(x + y)\"")
+  *  `:expression-aggregations` - Does the driver support using expressions inside aggregations? e.g. something like \"sum(x) + count(y)\" or \"avg(x + y)\"
+  *  `:nested-queries` - Does the driver support using a query as the `:source-query` of another MBQL query? Examples are CTEs or subselects in SQL queries.")
 
   (field-values-lazy-seq ^clojure.lang.Sequential [this, ^FieldInstance field]
     "Return a lazy sequence of all values of FIELD.
@@ -283,7 +284,10 @@
   []
   (doseq [ns-symb @u/metabase-namespace-symbols
           :when   (re-matches #"^metabase\.driver\.[a-z0-9_]+$" (name ns-symb))]
-    (require ns-symb :reload)))
+    (require ns-symb)
+    (if-let [register-driver-fn (ns-resolve ns-symb (symbol "-init-driver"))]
+      (register-driver-fn)
+      (log/warn (format "No -init-driver function found for '%s'" (name ns-symb))))))
 
 (defn is-engine?
   "Is ENGINE a valid driver name?"
@@ -361,7 +365,8 @@
   (let [db-id->engine (memoize (fn [db-id] (db/select-one-field :engine Database, :id db-id)))]
     (fn [db-id]
       {:pre [db-id]}
-      (engine->driver (db-id->engine db-id)))))
+      (when-let [engine (db-id->engine db-id)]
+        (engine->driver engine)))))
 
 
 ;; ## Implementation-Agnostic Driver API
diff --git a/src/metabase/driver/bigquery.clj b/src/metabase/driver/bigquery.clj
index 3433b30a4fb797640912b08b6142a1b77c08da1c..8f1aa2622123737f56653a1f942441181e4b289d 100644
--- a/src/metabase/driver/bigquery.clj
+++ b/src/metabase/driver/bigquery.clj
@@ -210,15 +210,15 @@
 (defn- date-add [unit timestamp interval]
   (hsql/call :date_add timestamp interval (hx/literal unit)))
 
-;; µs = unix timestamp in microseconds. Most BigQuery functions like strftime require timestamps in this format
+;; microseconds = unix timestamp in microseconds. Most BigQuery functions like strftime require timestamps in this format
 
-(def ^:private ->µs (partial hsql/call :timestamp_to_usec))
+(def ^:private ->microseconds (partial hsql/call :timestamp_to_usec))
 
-(defn- µs->str [format-str µs]
+(defn- microseconds->str [format-str µs]
   (hsql/call :strftime_utc_usec µs (hx/literal format-str)))
 
 (defn- trunc-with-format [format-str timestamp]
-  (hx/->timestamp (µs->str format-str (->µs timestamp))))
+  (hx/->timestamp (microseconds->str format-str (->microseconds timestamp))))
 
 (defn- date [unit expr]
   {:pre [expr]}
@@ -503,7 +503,8 @@
           :features                 (constantly (set/union #{:basic-aggregations
                                                              :standard-deviation-aggregations
                                                              :native-parameters
-                                                             :expression-aggregations}
+                                                             :expression-aggregations
+                                                             :binning}
                                                            (when-not config/is-test?
                                                              ;; during unit tests don't treat bigquery as having FK support
                                                              #{:foreign-keys})))
@@ -511,4 +512,7 @@
           :format-custom-field-name (u/drop-first-arg format-custom-field-name)
           :mbql->native             (u/drop-first-arg mbql->native)}))
 
-(driver/register-driver! :bigquery driver)
+(defn -init-driver
+  "Register the BigQuery driver"
+  []
+  (driver/register-driver! :bigquery driver))
diff --git a/src/metabase/driver/crate.clj b/src/metabase/driver/crate.clj
index 1332754e049310b285a6c693e79ecaee5b8fc134..a322b2985e742f1fa63f4d4a26b189a2fd648eb3 100644
--- a/src/metabase/driver/crate.clj
+++ b/src/metabase/driver/crate.clj
@@ -117,5 +117,7 @@
           :unix-timestamp->timestamp crate-util/unix-timestamp->timestamp
           :current-datetime-fn       (constantly now)}))
 
-
-(driver/register-driver! :crate (CrateDriver.))
+(defn -init-driver
+  "Register the Crate driver"
+  []
+  (driver/register-driver! :crate (CrateDriver.)))
diff --git a/src/metabase/driver/druid.clj b/src/metabase/driver/druid.clj
index 26380b68295a4e401ed6319f944b3fac1c0b466c..1570bfeadba3d0dc9e81f23de74065a8bdf4d2ac 100644
--- a/src/metabase/driver/druid.clj
+++ b/src/metabase/driver/druid.clj
@@ -179,4 +179,7 @@
           :field-values-lazy-seq (u/drop-first-arg field-values-lazy-seq)
           :mbql->native          (u/drop-first-arg qp/mbql->native)}))
 
-(driver/register-driver! :druid (DruidDriver.))
+(defn -init-driver
+  "Register the druid driver1"
+  []
+  (driver/register-driver! :druid (DruidDriver.)))
diff --git a/src/metabase/driver/generic_sql.clj b/src/metabase/driver/generic_sql.clj
index a2157fa9076811d95f4403b76c97ff81cd1f7d8d..f7582549279341c33a8ad9afc8dccd990daa93a5 100644
--- a/src/metabase/driver/generic_sql.clj
+++ b/src/metabase/driver/generic_sql.clj
@@ -338,7 +338,9 @@
             :foreign-keys
             :expressions
             :expression-aggregations
-            :native-parameters}
+            :native-parameters
+            :nested-queries
+            :binning}
     (set-timezone-sql driver) (conj :set-timezone)))
 
 
diff --git a/src/metabase/driver/generic_sql/query_processor.clj b/src/metabase/driver/generic_sql/query_processor.clj
index ef2ec517ad29b6d893f98050fe9fe0551fcf2afd..8f1876938a95807418f2ab99feed9bd89268ccbd 100644
--- a/src/metabase/driver/generic_sql/query_processor.clj
+++ b/src/metabase/driver/generic_sql/query_processor.clj
@@ -1,6 +1,7 @@
 (ns metabase.driver.generic-sql.query-processor
   "The Query Processor is responsible for translating the Metabase Query Language into HoneySQL SQL forms."
   (:require [clojure.java.jdbc :as jdbc]
+            [clojure.string :as str]
             [clojure.tools.logging :as log]
             [honeysql
              [core :as hsql]
@@ -17,12 +18,19 @@
             [metabase.util.honeysql-extensions :as hx])
   (:import clojure.lang.Keyword
            java.sql.SQLException
-           [metabase.query_processor.interface AgFieldRef BinnedField DateTimeField DateTimeValue Expression ExpressionRef Field RelativeDateTimeValue Value]))
+           [metabase.query_processor.interface AgFieldRef BinnedField DateTimeField DateTimeValue Expression ExpressionRef Field FieldLiteral RelativeDateTimeValue Value]))
 
 (def ^:dynamic *query*
   "The outer query currently being processed."
   nil)
 
+(def ^:private ^:dynamic *nested-query-level*
+  "How many levels deep are we into nested queries? (0 = top level.)
+   We keep track of this so we know what level to find referenced aggregations
+  (otherwise something like [:aggregate-field 0] could be ambiguous in a nested query).
+  Each nested query increments this counter by 1."
+  0)
+
 (defn- driver [] {:pre [(map? *query*)]} (:driver *query*))
 
 ;; register the function "distinct-count" with HoneySQL
@@ -33,7 +41,7 @@
 
 ;;; ## Formatting
 
-(defn qualified-alias
+(defn- qualified-alias
   "Convert the given `FIELD` to a stringified alias"
   [field]
   (some->> field
@@ -54,6 +62,17 @@
   (or (get-in *query* [:query :expressions (keyword expression-name)]) (:expressions (:query *query*))
       (throw (Exception. (format "No expression named '%s'." (name expression-name))))))
 
+(defn- aggregation-at-index
+  "Fetch the aggregation at index. This is intended to power aggregate field references (e.g. [:aggregate-field 0]).
+   This also handles nested queries, which could be potentially ambiguous if multiple levels had aggregations."
+  ([index]
+   (aggregation-at-index index (:query *query*) *nested-query-level*))
+  ;; keep recursing deeper into the query until we get to the same level the aggregation reference was defined at
+  ([index query aggregation-level]
+   (if (zero? aggregation-level)
+     (nth (:aggregation query) index)
+     (recur index (:source-query query) (dec aggregation-level)))))
+
 ;; TODO - maybe this fn should be called `->honeysql` instead.
 (defprotocol ^:private IGenericSQLFormattable
   (formatted [this]
@@ -84,6 +103,10 @@
         (isa? special-type :type/UNIXTimestampMilliseconds) (sql/unix-timestamp->timestamp (driver) field :milliseconds)
         :else                                               field)))
 
+  FieldLiteral
+  (formatted [{:keys [field-name]}]
+    (keyword (hx/escape-dots (name field-name))))
+
   DateTimeField
   (formatted [{unit :unit, field :field}]
     (sql/date (driver) unit (formatted field)))
@@ -106,7 +129,7 @@
   ;; e.g. the ["aggregation" 0] fields we allow in order-by
   AgFieldRef
   (formatted [{index :index}]
-    (let [{:keys [aggregation-type]} (nth (:aggregation (:query *query*)) index)]
+    (let [{:keys [aggregation-type]} (aggregation-at-index index)]
       ;; For some arcane reason we name the results of a distinct aggregation "count",
       ;; everything else is named the same as the aggregation
       (if (= aggregation-type :distinct)
@@ -267,12 +290,24 @@
   {:pre [table-name]}
   (h/from honeysql-form (hx/qualify-and-escape-dots schema table-name)))
 
+(declare apply-clauses)
+
+(defn- apply-source-query [driver honeysql-form {{:keys [native], :as source-query} :source-query}]
+  ;; TODO - what alias should we give the source query?
+  (assoc honeysql-form
+    :from [[(if native
+              (hsql/raw (str "(" (str/replace native #";+\s*$" "") ")")) ; strip off any trailing slashes
+              (binding [*nested-query-level* (inc *nested-query-level*)]
+                (apply-clauses driver {} source-query)))
+            :source]]))
+
 (def ^:private clause-handlers
   ;; 1) Use the vars rather than the functions themselves because them implementation
   ;;    will get swapped around and  we'll be left with old version of the function that nobody implements
   ;; 2) This is a vector rather than a map because the order the clauses get handled is important for some drivers.
   ;;    For example, Oracle needs to wrap the entire query in order to apply its version of limit (`WHERE ROWNUM`).
   [:source-table (u/drop-first-arg apply-source-table)
+   :source-query apply-source-query
    :aggregation  #'sql/apply-aggregation
    :breakout     #'sql/apply-breakout
    :fields       #'sql/apply-fields
@@ -291,7 +326,8 @@
                           honeysql-form)]
       (if (seq more)
         (recur honeysql-form more)
-        honeysql-form))))
+        ;; ok, we're done; if no `:select` clause was specified (for whatever reason) put a default (`SELECT *`) one in
+        (update honeysql-form :select #(if (seq %) % [:*]))))))
 
 
 (defn build-honeysql-form
diff --git a/src/metabase/driver/googleanalytics.clj b/src/metabase/driver/googleanalytics.clj
index e2b0cb51af1dfaee89d85ee8add22c9e050de779..0fff9fe3927e35425a1e01d6f3093996aff6827b 100644
--- a/src/metabase/driver/googleanalytics.clj
+++ b/src/metabase/driver/googleanalytics.clj
@@ -247,5 +247,7 @@
           :mbql->native             (u/drop-first-arg qp/mbql->native)
           :table-rows-seq           (u/drop-first-arg table-rows-seq)}))
 
-
-(driver/register-driver! :googleanalytics (GoogleAnalyticsDriver.))
+(defn -init-driver
+  "Register the Google Analytics driver"
+  []
+  (driver/register-driver! :googleanalytics (GoogleAnalyticsDriver.)))
diff --git a/src/metabase/driver/h2.clj b/src/metabase/driver/h2.clj
index ff35bb0c5b0bc6f4e877983706d367f18cba9d45..17cd9360d55e2fe6a2e06f4e56832241f69ee11a 100644
--- a/src/metabase/driver/h2.clj
+++ b/src/metabase/driver/h2.clj
@@ -225,4 +225,7 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-(driver/register-driver! :h2 (H2Driver.))
+(defn -init-driver
+  "Register the H2 driver"
+  []
+  (driver/register-driver! :h2 (H2Driver.)))
diff --git a/src/metabase/driver/mongo.clj b/src/metabase/driver/mongo.clj
index 3b51ad2964b71c8a3603da2ae268fed2dad8fcdb..176593d4f20820a750d7d7786e142f6cefbe472f 100644
--- a/src/metabase/driver/mongo.clj
+++ b/src/metabase/driver/mongo.clj
@@ -218,5 +218,7 @@
           :process-query-in-context          (u/drop-first-arg process-query-in-context)
           :sync-in-context                   (u/drop-first-arg sync-in-context)}))
 
-
-(driver/register-driver! :mongo (MongoDriver.))
+(defn -init-driver
+  "Register the MongoDB driver"
+  []
+  (driver/register-driver! :mongo (MongoDriver.)))
diff --git a/src/metabase/driver/mysql.clj b/src/metabase/driver/mysql.clj
index 0c4c4a02b20da857011a5b95d24e5926f45a0e4e..7b2f6faad108b7cfdf5d097bad5ca4d6018288e9 100644
--- a/src/metabase/driver/mysql.clj
+++ b/src/metabase/driver/mysql.clj
@@ -198,4 +198,7 @@
           :set-timezone-sql          (constantly "SET @@session.time_zone = %s;")
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-(driver/register-driver! :mysql (MySQLDriver.))
+(defn -init-driver
+  "Register the MySQL driver"
+  []
+  (driver/register-driver! :mysql (MySQLDriver.)))
diff --git a/src/metabase/driver/oracle.clj b/src/metabase/driver/oracle.clj
index 8b1bb29f3d5a4780bbcac8cc5acd01f5602f21ee..2309c2fa228dd78ff3357f114d44d0e92ca55ff7 100644
--- a/src/metabase/driver/oracle.clj
+++ b/src/metabase/driver/oracle.clj
@@ -156,7 +156,8 @@
 (defn- apply-limit [honeysql-query {value :limit}]
   {:pre [(integer? value)]}
   {:select [:*]
-   :from   [honeysql-query]
+   :from   [(merge {:select [:*]}   ; if `honeysql-query` doesn't have a `SELECT` clause yet (which might be the case when using a source query)
+                   honeysql-query)] ; fall back to including a `SELECT *` just to make sure a valid query is produced
    :where  [:<= (hsql/raw "rownum") value]})
 
 (defn- apply-page [honeysql-query {{:keys [items page]} :page}]
@@ -167,7 +168,9 @@
       ;; if we need to do an offset we have to do double-nesting
       {:select [:*]
        :from   [{:select [:__table__.* [(hsql/raw "rownum") :__rownum__]]
-                 :from   [[honeysql-query :__table__]]
+                 :from   [[(merge {:select [:*]}
+                                  honeysql-query)
+                           :__table__]]
                  :where  [:<= (hsql/raw "rownum") (+ offset items)]}]
        :where  [:> :__rownum__ offset]})))
 
@@ -281,11 +284,14 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-;; only register the Oracle driver if the JDBC driver is available
-(when (u/ignore-exceptions
-        (Class/forName "oracle.jdbc.OracleDriver"))
-  ;; By default the Oracle JDBC driver isn't compliant with JDBC standards -- instead of returning types like java.sql.Timestamp
-  ;; it returns wacky types like oracle.sql.TIMESTAMPT. By setting this System property the JDBC driver will return the appropriate types.
-  ;; See this page for more details: http://docs.oracle.com/database/121/JJDBC/datacc.htm#sthref437
-  (.setProperty (System/getProperties) "oracle.jdbc.J2EE13Compliant" "TRUE")
-  (driver/register-driver! :oracle (OracleDriver.)))
+(defn -init-driver
+  "Register the oracle driver when the JAR is found on the classpath"
+  []
+  ;; only register the Oracle driver if the JDBC driver is available
+  (when (u/ignore-exceptions
+         (Class/forName "oracle.jdbc.OracleDriver"))
+    ;; By default the Oracle JDBC driver isn't compliant with JDBC standards -- instead of returning types like java.sql.Timestamp
+    ;; it returns wacky types like oracle.sql.TIMESTAMPT. By setting this System property the JDBC driver will return the appropriate types.
+    ;; See this page for more details: http://docs.oracle.com/database/121/JJDBC/datacc.htm#sthref437
+    (.setProperty (System/getProperties) "oracle.jdbc.J2EE13Compliant" "TRUE")
+    (driver/register-driver! :oracle (OracleDriver.))))
diff --git a/src/metabase/driver/postgres.clj b/src/metabase/driver/postgres.clj
index d823191bb9b698dc82e169358547cb95e3e2d030..b81eaf4534a3798eb89ca1cf57095645f903fce9 100644
--- a/src/metabase/driver/postgres.clj
+++ b/src/metabase/driver/postgres.clj
@@ -233,4 +233,7 @@
 
   sql/ISQLDriver PostgresISQLDriverMixin)
 
-(driver/register-driver! :postgres (PostgresDriver.))
+(defn -init-driver
+  "Register the PostgreSQL driver"
+  []
+  (driver/register-driver! :postgres (PostgresDriver.)))
diff --git a/src/metabase/driver/presto.clj b/src/metabase/driver/presto.clj
index 87efc4f5c99948683d29205e302d23ab193e1192..aa4bf5fbaa99e08683f3ae6571cf0f34efe6f9f6 100644
--- a/src/metabase/driver/presto.clj
+++ b/src/metabase/driver/presto.clj
@@ -62,21 +62,20 @@
   (let [parsers (map (comp field-type->parser :type) columns)]
     (for [row data]
       (for [[value parser] (partition 2 (interleave row parsers))]
-        (when value
+        (when (some? value)
           (parser value))))))
 
 (defn- fetch-presto-results! [details {prev-columns :columns, prev-rows :rows} uri]
-  (ssh/with-ssh-tunnel [details-with-tunnel details]
-    (let [{{:keys [columns data nextUri error]} :body} (http/get uri (assoc (details->request details-with-tunnel) :as :json))]
-      (when error
-        (throw (ex-info (or (:message error) "Error running query.") error)))
-      (let [rows    (parse-presto-results columns data)
-            results {:columns (or columns prev-columns)
-                     :rows    (vec (concat prev-rows rows))}]
-        (if (nil? nextUri)
-          results
-          (do (Thread/sleep 100) ; Might not be the best way, but the pattern is that we poll Presto at intervals
-              (fetch-presto-results! details-with-tunnel results nextUri)))))))
+  (let [{{:keys [columns data nextUri error]} :body} (http/get uri (assoc (details->request details) :as :json))]
+    (when error
+      (throw (ex-info (or (:message error) "Error running query.") error)))
+    (let [rows    (parse-presto-results columns data)
+          results {:columns (or columns prev-columns)
+                   :rows    (vec (concat prev-rows rows))}]
+      (if (nil? nextUri)
+        results
+        (do (Thread/sleep 100) ; Might not be the best way, but the pattern is that we poll Presto at intervals
+            (fetch-presto-results! details results nextUri))))))
 
 (defn- execute-presto-query! [details query]
   (ssh/with-ssh-tunnel [details-with-tunnel details]
@@ -100,6 +99,13 @@
 (defn- quote+combine-names [& names]
   (str/join \. (map quote-name names)))
 
+(defn- rename-duplicates [values]
+  ;; Appends _2, _3 and so on to duplicated values
+  (loop [acc [], [h & tail] values, seen {}]
+    (let [value (if (seen h) (str h "_" (inc (seen h))) h)]
+      (if tail
+        (recur (conj acc value) tail (assoc seen h (inc (get seen h 0))))
+        (conj acc value)))))
 
 ;;; IDriver implementation
 
@@ -192,10 +198,13 @@
 
 (defn- execute-query [{:keys [database settings], {sql :query, params :params} :native, :as outer-query}]
   (let [sql                    (str "-- " (qputil/query->remark outer-query) "\n"
-                                          (unprepare/unprepare (cons sql params) :quote-escape "'", :iso-8601-fn  :from_iso8601_timestamp))
+                                          (unprepare/unprepare (cons sql params) :quote-escape "'", :iso-8601-fn :from_iso8601_timestamp))
         details                (merge (:details database) settings)
-        {:keys [columns rows]} (execute-presto-query! details sql)]
-    {:columns (map (comp keyword :name) columns)
+        {:keys [columns rows]} (execute-presto-query! details sql)
+        columns                (for [[col name] (map vector columns (rename-duplicates (map :name columns)))]
+                                 {:name name, :base_type (presto-type->base-type (:type col))})]
+    {:cols    columns
+     :columns (map (comp keyword :name) columns)
      :rows    rows}))
 
 (defn- field-values-lazy-seq [{field-name :name, :as field}]
@@ -325,7 +334,8 @@
                                                                       :standard-deviation-aggregations
                                                                       :expressions
                                                                       :native-parameters
-                                                                      :expression-aggregations}
+                                                                      :expression-aggregations
+                                                                      :binning}
                                                                     (when-not config/is-test?
                                                                       ;; during unit tests don't treat presto as having FK support
                                                                       #{:foreign-keys})))
@@ -348,5 +358,7 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-
-(driver/register-driver! :presto (PrestoDriver.))
+(defn -init-driver
+  "Register the Presto driver"
+  []
+  (driver/register-driver! :presto (PrestoDriver.)))
diff --git a/src/metabase/driver/redshift.clj b/src/metabase/driver/redshift.clj
index b477443110670cbcb6f5d2150d33b2ccc0abaf2e..0379e2524582a853eab52bf6b1672c36d240aaa1 100644
--- a/src/metabase/driver/redshift.clj
+++ b/src/metabase/driver/redshift.clj
@@ -108,4 +108,7 @@
                                                 (str "schema_" i))
                                               "public")))))})))
 
-(driver/register-driver! :redshift (RedshiftDriver.))
+(defn -init-driver
+  "Register the Redshift driver"
+  []
+  (driver/register-driver! :redshift (RedshiftDriver.)))
diff --git a/src/metabase/driver/sqlite.clj b/src/metabase/driver/sqlite.clj
index 9b07a7c53d063ca558c395e979db989e4c970ee3..e1ef8fae02615c3e6a6a24e48c68aacab6bbc829 100644
--- a/src/metabase/driver/sqlite.clj
+++ b/src/metabase/driver/sqlite.clj
@@ -179,4 +179,7 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-(driver/register-driver! :sqlite (SQLiteDriver.))
+(defn -init-driver
+  "Register the SQLite driver"
+  []
+  (driver/register-driver! :sqlite (SQLiteDriver.)))
diff --git a/src/metabase/driver/sqlserver.clj b/src/metabase/driver/sqlserver.clj
index 1176251abf18bd1196c7463345eabaf42444906d..0190f65567e841ae30b7fab21f371fa01538b09c 100644
--- a/src/metabase/driver/sqlserver.clj
+++ b/src/metabase/driver/sqlserver.clj
@@ -192,4 +192,7 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-(driver/register-driver! :sqlserver (SQLServerDriver.))
+(defn -init-driver
+  "Register the SQLServer driver"
+  []
+  (driver/register-driver! :sqlserver (SQLServerDriver.)))
diff --git a/src/metabase/driver/vertica.clj b/src/metabase/driver/vertica.clj
index 855710c32efc68f2eef4423b81e42fe80f3430e6..3c117d27e427914350ab6994b9d907c6e50d3160 100644
--- a/src/metabase/driver/vertica.clj
+++ b/src/metabase/driver/vertica.clj
@@ -47,7 +47,17 @@
     :seconds      (hsql/call :to_timestamp expr)
     :milliseconds (recur (hx// expr 1000) :seconds)))
 
-(defn- date-trunc [unit expr] (hsql/call :date_trunc (hx/literal unit) expr))
+(defn- cast-timestamp
+  "Vertica requires stringified timestamps (what
+  Date/DateTime/Timestamps are converted to) to be cast as timestamps
+  before date operations can be performed. This function will add that
+  cast if it is a timestamp, otherwise this is a noop."
+  [expr]
+  (if (u/is-temporal? expr)
+    (hx/cast :timestamp expr)
+    expr))
+
+(defn- date-trunc [unit expr] (hsql/call :date_trunc (hx/literal unit) (cast-timestamp expr)))
 (defn- extract    [unit expr] (hsql/call :extract    unit              expr))
 
 (def ^:private extract-integer (comp hx/->integer extract))
@@ -65,7 +75,8 @@
     :day-of-week     (hx/inc (extract-integer :dow expr))
     :day-of-month    (extract-integer :day expr)
     :day-of-year     (extract-integer :doy expr)
-    :week            (hx/- (date-trunc :week (hx/+ expr one-day))
+    :week            (hx/- (date-trunc :week (hx/+ (cast-timestamp expr)
+                                                   one-day))
                            one-day)
     ;:week-of-year    (extract-integer :week (hx/+ expr one-day))
     :week-of-year    (hx/week expr)
@@ -134,8 +145,10 @@
           :string-length-fn          (u/drop-first-arg string-length-fn)
           :unix-timestamp->timestamp (u/drop-first-arg unix-timestamp->timestamp)}))
 
-
-;; only register the Vertica driver if the JDBC driver is available
-(when (u/ignore-exceptions
-        (Class/forName "com.vertica.jdbc.Driver"))
-  (driver/register-driver! :vertica (VerticaDriver.)))
+(defn -init-driver
+  "Register the Vertica driver when found on the classpath"
+  []
+  ;; only register the Vertica driver if the JDBC driver is available
+  (when (u/ignore-exceptions
+         (Class/forName "com.vertica.jdbc.Driver"))
+    (driver/register-driver! :vertica (VerticaDriver.))))
diff --git a/src/metabase/events/activity_feed.clj b/src/metabase/events/activity_feed.clj
index 878a30038731898ea14f5b62647146dbd450986a..f233c5d4d7106459637bb3bda6666d969291fb91 100644
--- a/src/metabase/events/activity_feed.clj
+++ b/src/metabase/events/activity_feed.clj
@@ -1,12 +1,16 @@
 (ns metabase.events.activity-feed
   (:require [clojure.core.async :as async]
             [clojure.tools.logging :as log]
-            [metabase.events :as events]
+            [metabase
+             [events :as events]
+             [query-processor :as qp]
+             [util :as u]]
             [metabase.models
              [activity :as activity :refer [Activity]]
              [card :refer [Card]]
              [dashboard :refer [Dashboard]]
              [table :as table]]
+            [metabase.query-processor.util :as qputil]
             [toucan.db :as db]))
 
 (def ^:const activity-feed-topics
@@ -36,11 +40,20 @@
 
 ;;; ## ---------------------------------------- EVENT PROCESSING ----------------------------------------
 
+(defn- inner-query->source-table-id
+  "Recurse through INNER-QUERY source-queries as needed until we can return the ID of this query's source-table."
+  [inner-query]
+  (or (when-let [source-table (qputil/get-normalized inner-query :source-table)]
+        (u/get-id source-table))
+      (when-let [source-query (qputil/get-normalized inner-query :source-query)]
+        (recur source-query))))
 
 (defn- process-card-activity! [topic object]
   (let [details-fn  #(select-keys % [:name :description])
-        database-id (get-in object [:dataset_query :database])
-        table-id    (get-in object [:dataset_query :query :source_table])]
+        query       (u/ignore-exceptions (qp/expand (:dataset_query object)))
+        database-id (when-let [database (:database query)]
+                      (u/get-id database))
+        table-id    (inner-query->source-table-id (:query query))]
     (activity/record-activity!
       :topic       topic
       :object      object
diff --git a/src/metabase/integrations/ldap.clj b/src/metabase/integrations/ldap.clj
new file mode 100644
index 0000000000000000000000000000000000000000..a94ff30f5f98160c122d002171fc10dd895c9639
--- /dev/null
+++ b/src/metabase/integrations/ldap.clj
@@ -0,0 +1,225 @@
+(ns metabase.integrations.ldap
+  (:require [clj-ldap.client :as ldap]
+            [clojure
+             [set :as set]
+             [string :as str]]
+            [metabase.models
+             [permissions-group :as group :refer [PermissionsGroup]]
+             [setting :as setting :refer [defsetting]]
+             [user :as user :refer [User]]]
+            [metabase.util :as u]
+            [toucan.db :as db])
+  (:import [com.unboundid.ldap.sdk LDAPConnectionPool LDAPException]))
+
+(def ^:private filter-placeholder
+  "{login}")
+
+(defsetting ldap-enabled
+  "Enable LDAP authentication."
+  :type    :boolean
+  :default false)
+
+(defsetting ldap-host
+  "Server hostname.")
+
+(defsetting ldap-port
+  "Server port, usually 389 or 636 if SSL is used."
+  :default "389")
+
+(defsetting ldap-security
+  "Use SSL, TLS or plain text."
+  :default "none"
+  :setter  (fn [new-value]
+             (when-not (nil? new-value)
+               (assert (contains? #{"none" "ssl" "starttls"} new-value)))
+             (setting/set-string! :ldap-security new-value)))
+
+(defsetting ldap-bind-dn
+  "The Distinguished Name to bind as (if any), this user will be used to lookup information about other users.")
+
+(defsetting ldap-password
+  "The password to bind with for the lookup user.")
+
+(defsetting ldap-user-base
+  "Search base for users. (Will be searched recursively)")
+
+(defsetting ldap-user-filter
+  "User lookup filter, the placeholder {login} will be replaced by the user supplied login."
+  :default "(&(objectClass=inetOrgPerson)(|(uid={login})(mail={login})))")
+
+(defsetting ldap-attribute-email
+  "Attribute to use for the user's email. (usually 'mail', 'email' or 'userPrincipalName')"
+  :default "mail")
+
+(defsetting ldap-attribute-firstname
+  "Attribute to use for the user's first name. (usually 'givenName')"
+  :default "givenName")
+
+(defsetting ldap-attribute-lastname
+  "Attribute to use for the user's last name. (usually 'sn')"
+  :default "sn")
+
+(defsetting ldap-group-sync
+  "Enable group membership synchronization with LDAP."
+  :type    :boolean
+  :default false)
+
+(defsetting ldap-group-base
+  "Search base for groups, not required if your LDAP directory provides a 'memberOf' overlay. (Will be searched recursively)")
+
+(defsetting ldap-group-mappings
+  ;; Should be in the form: {"cn=Some Group,dc=...": [1, 2, 3]} where keys are LDAP groups and values are lists of MB groups IDs
+  "JSON containing LDAP to Metabase group mappings."
+  :type    :json
+  :default {})
+
+(defn ldap-configured?
+  "Check if LDAP is enabled and that the mandatory settings are configured."
+  []
+  (boolean (and (ldap-enabled)
+                (ldap-host)
+                (ldap-user-base))))
+
+(defn- details->ldap-options [{:keys [host port bind-dn password security]}]
+  {:host      (str host ":" port)
+   :bind-dn   bind-dn
+   :password  password
+   :ssl?      (= security "ssl")
+   :startTLS? (= security "starttls")})
+
+(defn- settings->ldap-options []
+  (details->ldap-options {:host      (ldap-host)
+                          :port      (ldap-port)
+                          :bind-dn   (ldap-bind-dn)
+                          :password  (ldap-password)
+                          :security  (ldap-security)}))
+
+(defn- escape-value
+  "Escapes a value for use in an LDAP filter expression."
+  [value]
+  (str/replace value #"[\*\(\)\\\\0]" (comp (partial format "\\%02X") int first)))
+
+(defn- get-connection
+  "Connects to LDAP with the currently set settings and returns the connection."
+  ^LDAPConnectionPool []
+  (ldap/connect (settings->ldap-options)))
+
+(defn- with-connection
+  "Applies `f` with a connection and `args`"
+  [f & args]
+  (with-open [conn (get-connection)]
+    (apply f conn args)))
+
+(defn- ldap-groups->mb-group-ids
+  "Will translate a set of DNs to a set of MB group IDs using the configured mappings."
+  [ldap-groups]
+  (-> (ldap-group-mappings)
+      (select-keys (map keyword ldap-groups))
+      vals
+      flatten
+      set))
+
+(defn- get-user-groups
+  "Retrieve groups for a supplied DN."
+  ([dn]
+    (with-connection get-user-groups dn))
+  ([conn dn]
+    (when (ldap-group-base)
+      (let [results (ldap/search conn (ldap-group-base) {:scope      :sub
+                                                         :filter     (str "member=" (escape-value dn))
+                                                         :attributes [:dn :distinguishedName]})]
+        (filter some?
+          (for [result results]
+            (or (:dn result) (:distinguishedName result))))))))
+
+(def ^:private user-base-error  {:status :ERROR, :message "User search base does not exist or is unreadable"})
+(def ^:private group-base-error {:status :ERROR, :message "Group search base does not exist or is unreadable"})
+
+(defn test-ldap-connection
+  "Test the connection to an LDAP server to determine if we can find the search base.
+
+   Takes in a dictionary of properties such as:
+       {:host       \"localhost\"
+        :port       389
+        :bind-dn    \"cn=Directory Manager\"
+        :password   \"password\"
+        :security   \"none\"
+        :user-base  \"ou=Birds,dc=metabase,dc=com\"
+        :group-base \"ou=Groups,dc=metabase,dc=com\"}"
+  [{:keys [user-base group-base], :as details}]
+  (try
+    (with-open [^LDAPConnectionPool conn (ldap/connect (details->ldap-options details))]
+      (or
+       (try
+         (when-not (ldap/get conn user-base)
+           user-base-error)
+         (catch Exception e
+           user-base-error))
+       (when group-base
+         (try
+           (when-not (ldap/get conn group-base)
+             group-base-error)
+           (catch Exception e
+             group-base-error)))
+       {:status :SUCCESS}))
+    (catch LDAPException e
+      {:status :ERROR, :message (.getMessage e), :code (.getResultCode e)})
+    (catch Exception e
+      {:status :ERROR, :message (.getMessage e)})))
+
+(defn find-user
+  "Gets user information for the supplied username."
+  ([username]
+    (with-connection find-user username))
+  ([conn username]
+    (let [fname-attr (keyword (ldap-attribute-firstname))
+          lname-attr (keyword (ldap-attribute-lastname))
+          email-attr (keyword (ldap-attribute-email))]
+      (when-let [[result] (ldap/search conn (ldap-user-base) {:scope      :sub
+                                                              :filter     (str/replace (ldap-user-filter) filter-placeholder (escape-value username))
+                                                              :attributes [:dn :distinguishedName fname-attr lname-attr email-attr :memberOf]
+                                                              :size-limit 1})]
+        (let [dn    (or (:dn result) (:distinguishedName result))
+              fname (get result fname-attr)
+              lname (get result lname-attr)
+              email (get result email-attr)]
+          ;; Make sure we got everything as these are all required for new accounts
+          (when-not (or (empty? dn) (empty? fname) (empty? lname) (empty? email))
+            ;; ActiveDirectory (and others?) will supply a `memberOf` overlay attribute for groups
+            ;; Otherwise we have to make the inverse query to get them
+            (let [groups (when (ldap-group-sync)
+                           (or (:memberOf result) (get-user-groups dn) []))]
+              {:dn         dn
+               :first-name fname
+               :last-name  lname
+               :email      email
+               :groups     groups})))))))
+
+(defn verify-password
+  "Verifies if the supplied password is valid for the `user-info` (from `find-user`) or DN."
+  ([user-info password]
+    (with-connection verify-password user-info password))
+  ([conn user-info password]
+    (if (string? user-info)
+      (ldap/bind? conn user-info password)
+      (ldap/bind? conn (:dn user-info) password))))
+
+(defn fetch-or-create-user!
+  "Using the `user-info` (from `find-user`) get the corresponding Metabase user, creating it if necessary."
+  [{:keys [first-name last-name email groups]} password]
+  (let [user (or (db/select-one [User :id :last_login] :email email)
+             (user/create-new-ldap-auth-user! first-name last-name email password))]
+    (u/prog1 user
+      (when password
+        (user/set-password! (:id user) password))
+      (when (ldap-group-sync)
+        (let [special-ids #{(:id (group/admin)) (:id (group/all-users))}
+              current-ids (set (map :group_id (db/select ['PermissionsGroupMembership :group_id] :user_id (:id user))))
+              ldap-ids    (when-let [ids (seq (ldap-groups->mb-group-ids groups))]
+                            (set (map :id (db/select [PermissionsGroup :id] :id [:in ids]))))
+              to-remove   (set/difference current-ids ldap-ids special-ids)
+              to-add      (set/difference ldap-ids current-ids)]
+          (when (seq to-remove)
+            (db/delete! 'PermissionsGroupMembership :group_id [:in to-remove], :user_id (:id user)))
+          (doseq [id to-add]
+            (db/insert! 'PermissionsGroupMembership :group_id id, :user_id (:id user))))))))
diff --git a/src/metabase/middleware.clj b/src/metabase/middleware.clj
index 9ca52e30797b1ab6cade62ca6eda95ef22a6581a..5511be6662c28fbb09f209513c9ec947c27ce773 100644
--- a/src/metabase/middleware.clj
+++ b/src/metabase/middleware.clj
@@ -123,7 +123,7 @@
       response-unauthentic)))
 
 (def ^:private current-user-fields
-  (vec (concat [User :is_active :google_auth] (models/default-fields User))))
+  (vec (concat [User :is_active :google_auth :ldap_auth] (models/default-fields User))))
 
 (defn bind-current-user
   "Middleware that binds `metabase.api.common/*current-user*`, `*current-user-id*`, `*is-superuser?*`, and `*current-user-permissions-set*`.
diff --git a/src/metabase/models/card.clj b/src/metabase/models/card.clj
index 7e2e1de81a47bf7bd42c93d5ed6fcf1ce9abd60d..f276c68303fbca7250951ece0872c0f2f701b394 100644
--- a/src/metabase/models/card.clj
+++ b/src/metabase/models/card.clj
@@ -53,10 +53,12 @@
 
 (defn- query->source-and-join-tables
   "Return a sequence of all Tables (as TableInstance maps) referenced by QUERY."
-  [{:keys [source-table join-tables native], :as query}]
+  [{:keys [source-table join-tables source-query native], :as query}]
   (cond
     ;; if we come across a native query just put a placeholder (`::native`) there so we know we need to add native permissions to the complete set below.
     native       [::native]
+    ;; if we have a source-query just recur until we hit either the native source or the MBQL source
+    source-query (recur source-query)
     ;; for root MBQL queries just return source-table + join-tables
     :else        (cons source-table join-tables)))
 
@@ -86,6 +88,7 @@
 
 ;; it takes a lot of DB calls and function calls to expand/resolve a query, and since they're pure functions we can save ourselves some a lot of DB calls
 ;; by caching the results. Cache the permissions reqquired to run a given query dictionary for up to 6 hours
+;; TODO - what if the query uses a source query, and that query changes? Not sure if that will cause an issue or not. May need to revisit this
 (defn- query-perms-set* [{query-type :type, database :database, :as query} read-or-write]
   (cond
     (= query {})                     #{}
@@ -135,12 +138,15 @@
 ;;; ------------------------------------------------------------ Lifecycle ------------------------------------------------------------
 
 (defn- query->database-and-table-ids
-  "Return a map with `:database-id` and source `:table-id` that should be saved for a Card."
+  "Return a map with `:database-id` and source `:table-id` that should be saved for a Card. Handles queries that use other queries as their source
+   (ones that come in with a `:source-table` like `card__100`) recursively, as well as normal queries."
   [outer-query]
-  (let [database     (qputil/get-normalized outer-query :database)
+  (let [database-id  (qputil/get-normalized outer-query :database)
         source-table (qputil/get-in-normalized outer-query [:query :source-table])]
-    (when source-table
-      {:database-id (u/get-id database), :table-id (u/get-id source-table)})))
+    (cond
+      (integer? source-table) {:database-id database-id, :table-id source-table}
+      (string? source-table)  (let [[_ card-id] (re-find #"^card__(\d+)$" source-table)]
+                                (db/select-one [Card [:table_id :table-id] [:database_id :database-id]] :id (Integer/parseInt card-id))))))
 
 (defn- populate-query-fields [{{query-type :type, :as outer-query} :dataset_query, :as card}]
   (merge (when query-type
@@ -184,6 +190,7 @@
                                        :display                :keyword
                                        :embedding_params       :json
                                        :query_type             :keyword
+                                       :result_metadata        :json
                                        :visualization_settings :json})
           :properties     (constantly {:timestamped? true})
           :pre-update     (comp populate-query-fields pre-update)
diff --git a/src/metabase/models/database.clj b/src/metabase/models/database.clj
index f84d61e3a169d6ebfdd73290ecd40117a694b5db..18c311e28db5b19c9b08992ba5b0661746ef4ef1 100644
--- a/src/metabase/models/database.clj
+++ b/src/metabase/models/database.clj
@@ -12,6 +12,24 @@
              [db :as db]
              [models :as models]]))
 
+
+;;; ------------------------------------------------------------ Constants ------------------------------------------------------------
+
+;; TODO - should this be renamed `saved-cards-virtual-id`?
+(def ^:const ^Integer virtual-id
+  "The ID used to signify that a database is 'virtual' rather than physical.
+
+   A fake integer ID is used so as to minimize the number of changes that need to be made on the frontend -- by using something that would otherwise
+   be a legal ID, *nothing* need change there, and the frontend can query against this 'database' none the wiser. (This integer ID is negative
+   which means it will never conflict with a *real* database ID.)
+
+   This ID acts as a sort of flag. The relevant places in the middleware can check whether the DB we're querying is this 'virtual' database and
+   take the appropriate actions."
+  -1337)
+;; To the reader: yes, this seems sort of hacky, but one of the goals of the Nested Query Initiativeâ„¢ was to minimize if not completely eliminate
+;; any changes to the frontend. After experimenting with several possible ways to do this this implementation seemed simplest and best met the goal.
+;; Luckily this is the only place this "magic number" is defined and the entire frontend can remain blissfully unaware of its value.
+
 ;;; ------------------------------------------------------------ Entity & Lifecycle ------------------------------------------------------------
 
 (models/defmodel Database :metabase_database)
@@ -60,7 +78,7 @@
 (defn ^:hydrate tables
   "Return the `Tables` associated with this `Database`."
   [{:keys [id]}]
-  (db/select 'Table, :db_id id, :active true, {:order-by [[:%lower.display_name :asc]]}))
+  (db/select 'Table, :db_id id, :active true, {:order-by [[:%lower.display_name :asc]]})) ; TODO - do we want to include tables that should be `:hidden`?
 
 (defn schema-names
   "Return a *sorted set* of schema names (as strings) associated with this `Database`."
diff --git a/src/metabase/models/field.clj b/src/metabase/models/field.clj
index 1ff8fee88f1049ed8351cc402ec8734e2a0dec79..b12e97c9e482cb32cfd9ede84a12d1d6ae767a38 100644
--- a/src/metabase/models/field.clj
+++ b/src/metabase/models/field.clj
@@ -70,7 +70,12 @@
           :properties     (constantly {:timestamped? true})
           :pre-insert     pre-insert
           :pre-update     pre-update
-          :pre-delete     pre-delete})
+          :pre-delete     pre-delete
+          :post-select    (fn [{:keys [min_value max_value] :as row}]
+                            (let [round-value #(u/round-to-decimals 4 %)]
+                              (cond-> row
+                                min_value (update :min_value round-value)
+                                max_value (update :max_value round-value))))})
   i/IObjectPermissions
   (merge i/IObjectPermissionsDefaults
          {:perms-objects-set  perms-objects-set
diff --git a/src/metabase/models/permissions.clj b/src/metabase/models/permissions.clj
index 1f1523aa0bf9dc6f28274e654b8ed714841d2238..77088bb48d44978208c675f0ebcc8fe2b7d87328 100644
--- a/src/metabase/models/permissions.clj
+++ b/src/metabase/models/permissions.clj
@@ -339,7 +339,6 @@
    (grant-permissions! group-or-id (apply object-path db-id schema more)))
   ([group-or-id path]
    (try
-     (log/debug (u/format-color 'green "Granting permissions for group %d: %s" (u/get-id group-or-id) path))
      (db/insert! Permissions
        :group_id (u/get-id group-or-id)
        :object   path)
diff --git a/src/metabase/models/permissions_group.clj b/src/metabase/models/permissions_group.clj
index b3e04e75d68eb6f46c77ad0c5d3cb370182ebf11..a146b5a95596b370c8f42447ca4d4cc6a531e2b2 100644
--- a/src/metabase/models/permissions_group.clj
+++ b/src/metabase/models/permissions_group.clj
@@ -1,6 +1,7 @@
 (ns metabase.models.permissions-group
   (:require [clojure.string :as s]
             [clojure.tools.logging :as log]
+            [metabase.models.setting :as setting]
             [metabase.util :as u]
             [toucan
              [db :as db]
@@ -69,8 +70,14 @@
 
 (defn- pre-delete [{id :id, :as group}]
   (check-not-magic-group group)
-  (db/delete! 'Permissions                :group_id id)
-  (db/delete! 'PermissionsGroupMembership :group_id id))
+  (db/delete! 'Permissions                 :group_id id)
+  (db/delete! 'PermissionsGroupMembership  :group_id id)
+  ;; Remove from LDAP mappings
+  (setting/set-json! :ldap-group-mappings
+    (when-let [mappings (setting/get-json :ldap-group-mappings)]
+      (zipmap (keys mappings)
+              (for [val (vals mappings)]
+                (remove (partial = id) val))))))
 
 (defn- pre-update [{group-name :name, :as group}]
   (u/prog1 group
diff --git a/src/metabase/models/pulse.clj b/src/metabase/models/pulse.clj
index f9517962067f1ed83540e0faa197d12277a2f8ab..d4584e058c866c2d18aaf6359ecc8771b36159d1 100644
--- a/src/metabase/models/pulse.clj
+++ b/src/metabase/models/pulse.clj
@@ -77,6 +77,7 @@
   "Return the `Cards` associated with this PULSE."
   [{:keys [id]}]
   (db/select [Card :id :name :description :display]
+    :archived false
     (mdb/join [Card :id] [PulseCard :card_id])
     (db/qualify PulseCard :pulse_id) id
     {:order-by [[(db/qualify PulseCard :position) :asc]]}))
@@ -119,7 +120,7 @@
   (db/delete! PulseCard :pulse_id id)
   ;; now just insert all of the cards that were given to us
   (when (seq card-ids)
-    (let [cards (map-indexed (fn [idx itm] {:pulse_id id :card_id itm :position idx}) card-ids)]
+    (let [cards (map-indexed (fn [i card-id] {:pulse_id id, :card_id card-id, :position i}) card-ids)]
       (db/insert-many! PulseCard cards))))
 
 
@@ -207,7 +208,7 @@
   (db/transaction
     ;; update the pulse itself
     (db/update! Pulse id, :name name, :skip_if_empty skip-if-empty?)
-    ;; update cards (only if they changed)
+    ;; update cards (only if they changed). Order for the cards is important which is why we're not using select-field
     (when (not= cards (map :card_id (db/select [PulseCard :card_id], :pulse_id id, {:order-by [[:position :asc]]})))
       (update-pulse-cards! pulse cards))
     ;; update channels
diff --git a/src/metabase/models/raw_column.clj b/src/metabase/models/raw_column.clj
index 7a9e50eaf190e6af9528d51318462d50659eb757..ae91c006a15196df7762418de3fa4372cd6ada73 100644
--- a/src/metabase/models/raw_column.clj
+++ b/src/metabase/models/raw_column.clj
@@ -1,10 +1,10 @@
-(ns metabase.models.raw-column
+(ns ^:deprecated metabase.models.raw-column
   (:require [metabase.util :as u]
             [toucan
              [db :as db]
              [models :as models]]))
 
-(models/defmodel RawColumn :raw_column)
+(models/defmodel ^:deprecated RawColumn :raw_column)
 
 (defn- pre-insert [table]
   (let [defaults {:active  true
diff --git a/src/metabase/models/raw_table.clj b/src/metabase/models/raw_table.clj
index b462de633dd62910ac88b993ebcd5074ca92d997..880d5a90cfdff999e2127540846837127653fdea 100644
--- a/src/metabase/models/raw_table.clj
+++ b/src/metabase/models/raw_table.clj
@@ -1,11 +1,11 @@
-(ns metabase.models.raw-table
+(ns ^:deprecated metabase.models.raw-table
   (:require [metabase.models.raw-column :refer [RawColumn]]
             [metabase.util :as u]
             [toucan
              [db :as db]
              [models :as models]]))
 
-(models/defmodel RawTable :raw_table)
+(models/defmodel ^:deprecated RawTable :raw_table)
 
 (defn- pre-insert [table]
   (let [defaults {:details {}}]
diff --git a/src/metabase/models/table.clj b/src/metabase/models/table.clj
index afebba6ca0ff40ed7c1d8473582d03fc1b3e9aa0..c72a0eb0f45245c94336677f1c8b18771972a8a3 100644
--- a/src/metabase/models/table.clj
+++ b/src/metabase/models/table.clj
@@ -23,7 +23,8 @@
   #{:person :event :photo :place})
 
 (def ^:const visibility-types
-  "Valid values for `Table.visibility_type` (field may also be `nil`)."
+  "Valid values for `Table.visibility_type` (field may also be `nil`).
+   (Basically any non-nil value is a reason for hiding the table.)"
   #{:hidden :technical :cruft})
 
 
diff --git a/src/metabase/models/user.clj b/src/metabase/models/user.clj
index 6e147cda3c8ff6fdf27e327e2ffe2afe81c3ac74..488a39e7a29a85a2361c3ba499a510b8ad139b43 100644
--- a/src/metabase/models/user.clj
+++ b/src/metabase/models/user.clj
@@ -143,7 +143,15 @@
     ;; send an email to everyone including the site admin if that's set
     (email/send-user-joined-admin-notification-email! <>, :google-auth? true)))
 
-
+(defn create-new-ldap-auth-user!
+  "Convenience for creating a new user via LDAP. This account is considered active immediately; thus all active admins will recieve an email right away."
+  [first-name last-name email-address password]
+  {:pre [(string? first-name) (string? last-name) (u/is-email? email-address)]}
+  (db/insert! User :email      email-address
+                   :first_name first-name
+                   :last_name  last-name
+                   :password   password
+                   :ldap_auth  true))
 
 (defn set-password!
   "Updates the stored password for a specified `User` by hashing the password with a random salt."
diff --git a/src/metabase/public_settings.clj b/src/metabase/public_settings.clj
index 53896a9fc03e2447f8bbed36a445362583695e23..545ede867435bcb59d6a5e27e6d890faaad22c5b 100644
--- a/src/metabase/public_settings.clj
+++ b/src/metabase/public_settings.clj
@@ -133,6 +133,7 @@
    :engines               ((resolve 'metabase.driver/available-drivers))
    :ga_code               "UA-60817802-1"
    :google_auth_client_id (setting/get :google-auth-client-id)
+   :ldap_configured       ((resolve 'metabase.integrations.ldap/ldap-configured?))
    :has_sample_dataset    (db/exists? 'Database, :is_sample true)
    :map_tile_server_url   (map-tile-server-url)
    :password_complexity   password/active-password-complexity
@@ -141,6 +142,7 @@
    :report_timezone       (setting/get :report-timezone)
    :setup_token           ((resolve 'metabase.setup/token-value))
    :site_name             (site-name)
+   :site_url              (site-url)
    :timezone_short        (short-timezone-name (setting/get :report-timezone))
    :timezones             common/timezones
    :types                 (types/types->parents)
diff --git a/src/metabase/pulse.clj b/src/metabase/pulse.clj
index f4168a9998800eeb04e75d1d962fa0ffb5d07bc2..82beac6a13ab23bc0cfbc05509f4fcb44bb87d65 100644
--- a/src/metabase/pulse.clj
+++ b/src/metabase/pulse.clj
@@ -19,7 +19,7 @@
   "Execute the query for a single card with CARD-ID. OPTIONS are passed along to `dataset-query`."
   [card-id & {:as options}]
   {:pre [(integer? card-id)]}
-  (when-let [card (Card card-id)]
+  (when-let [card (Card :id card-id, :archived false)]
     (let [{:keys [creator_id dataset_query]} card]
       (try
         {:card   card
@@ -86,8 +86,10 @@
        (send-pulse! pulse :channel-ids [312])    Send only to Channel with :id = 312"
   [{:keys [cards], :as pulse} & {:keys [channel-ids]}]
   {:pre [(map? pulse) (every? map? cards) (every? :id cards)]}
-  (let [results     (for [card cards]
-                      (execute-card (:id card), :pulse-id (:id pulse))) ; Pulse ID may be `nil` if the Pulse isn't saved yet
+  (let [results     (for [card  cards
+                          :let  [result (execute-card (:id card), :pulse-id (:id pulse))] ; Pulse ID may be `nil` if the Pulse isn't saved yet
+                          :when result]                                                   ; some cards may return empty results, e.g. if the card has been archived
+                      result)
         channel-ids (or channel-ids (mapv :id (:channels pulse)))]
     (when-not (and (:skip_if_empty pulse) (are-all-cards-empty? results))
       (doseq [channel-id channel-ids]
diff --git a/src/metabase/query_processor.clj b/src/metabase/query_processor.clj
index 1594d6b26f240a30310e1ef63fcd0d6176367dee..702974ddd4453de105868c80c84e0b35195dd1ed 100644
--- a/src/metabase/query_processor.clj
+++ b/src/metabase/query_processor.clj
@@ -20,12 +20,14 @@
              [driver-specific :as driver-specific]
              [expand-macros :as expand-macros]
              [expand-resolve :as expand-resolve]
+             [fetch-source-query :as fetch-source-query]
              [format-rows :as format-rows]
              [limit :as limit]
              [log :as log-query]
              [mbql-to-native :as mbql-to-native]
              [parameters :as parameters]
              [permissions :as perms]
+             [results-metadata :as results-metadata]
              [resolve-driver :as resolve-driver]]
             [metabase.query-processor.util :as qputil]
             [metabase.util.schema :as su]
@@ -87,6 +89,7 @@
       implicit-clauses/add-implicit-clauses
       format-rows/format-rows
       binning/update-binning-strategy
+      results-metadata/record-and-return-metadata!
       expand-resolve/expand-resolve                    ; ▲▲▲ QUERY EXPANSION POINT  ▲▲▲ All functions *above* will see EXPANDED query during PRE-PROCESSING
       row-count-and-status/add-row-count-and-status    ; ▼▼▼ RESULTS WRAPPING POINT ▼▼▼ All functions *below* will see results WRAPPED in `:data` during POST-PROCESSING
       parameters/substitute-parameters
@@ -94,8 +97,10 @@
       driver-specific/process-query-in-context         ; (drivers can inject custom middleware if they implement IDriver's `process-query-in-context`)
       add-settings/add-settings
       resolve-driver/resolve-driver                    ; ▲▲▲ DRIVER RESOLUTION POINT ▲▲▲ All functions *above* will have access to the driver during PRE- *and* POST-PROCESSING
+      fetch-source-query/fetch-source-query
       log-query/log-initial-query
       cache/maybe-return-cached-results
+      log-query/log-results-metadata
       catch-exceptions/catch-exceptions))
 ;; ▲▲▲ PRE-PROCESSING ▲▲▲ happens from BOTTOM-TO-TOP, e.g. the results of `expand-macros` are (eventually) passed to `expand-resolve`
 
@@ -103,8 +108,10 @@
   "Return the native form for QUERY (e.g. for a MBQL query on Postgres this would return a map containing the compiled SQL form)."
   {:style/indent 0}
   [query]
-  (-> ((qp-pipeline identity) query)
-      (get-in [:data :native_form])))
+  (let [results ((qp-pipeline identity) query)]
+    (or (get-in results [:data :native_form])
+        (throw (ex-info "No native form returned."
+                 results)))))
 
 (defn process-query
   "A pipeline of various QP functions (including middleware) that are used to process MB queries."
@@ -118,7 +125,8 @@
   (->> identity
        expand-resolve/expand-resolve
        parameters/substitute-parameters
-       expand-macros/expand-macros))
+       expand-macros/expand-macros
+       fetch-source-query/fetch-source-query))
 ;; ▲▲▲ This only does PRE-PROCESSING, so it happens from bottom to top, eventually returning the preprocessed query instead of running it
 
 
@@ -232,7 +240,8 @@
                   (s/optional-key :executed-by)  (s/maybe su/IntGreaterThanZero)
                   (s/optional-key :card-id)      (s/maybe su/IntGreaterThanZero)
                   (s/optional-key :dashboard-id) (s/maybe su/IntGreaterThanZero)
-                  (s/optional-key :pulse-id)     (s/maybe su/IntGreaterThanZero)}
+                  (s/optional-key :pulse-id)     (s/maybe su/IntGreaterThanZero)
+                  (s/optional-key :nested?)      (s/maybe s/Bool)}
                  (fn [{:keys [executed-by]}]
                    (or (integer? executed-by)
                        *allow-queries-with-no-executor-id*))
diff --git a/src/metabase/query_processor/annotate.clj b/src/metabase/query_processor/annotate.clj
index 1deb8eebcd8009d38f3d6cd0e3c15200a1dcf932..b1915874e620cc1335d84c83ae2af3f3c70db482 100644
--- a/src/metabase/query_processor/annotate.clj
+++ b/src/metabase/query_processor/annotate.clj
@@ -21,6 +21,13 @@
 
 ;;; ## Field Resolution
 
+(defn- valid-collected-field? [keep-date-time-fields? f]
+  (or (instance? metabase.query_processor.interface.Field f)
+      (instance? metabase.query_processor.interface.FieldLiteral f)
+      (instance? metabase.query_processor.interface.ExpressionRef f)
+      (when keep-date-time-fields?
+        (instance? metabase.query_processor.interface.DateTimeField f))))
+
 (defn collect-fields
   "Return a sequence of all the `Fields` inside THIS, recursing as needed for collections.
    For maps, add or `conj` to property `:path`, recording the keypath used to reach each `Field.`
@@ -28,12 +35,9 @@
      (collect-fields {:name \"id\", ...})     -> [{:name \"id\", ...}]
      (collect-fields [{:name \"id\", ...}])   -> [{:name \"id\", ...}]
      (collect-fields {:a {:name \"id\", ...}) -> [{:name \"id\", :path [:a], ...}]"
+  {:style/indent 0}
   [this & [keep-date-time-fields?]]
-  {:post [(every? (fn [f]
-                    (or (instance? metabase.query_processor.interface.Field f)
-                        (instance? metabase.query_processor.interface.ExpressionRef f)
-                        (when keep-date-time-fields?
-                          (instance? metabase.query_processor.interface.DateTimeField f)))) %)]}
+  {:post [(every? (partial valid-collected-field? keep-date-time-fields?) %)]}
   (condp instance? this
     ;; For a DateTimeField we'll flatten it back into regular Field but include the :unit info for the frontend.
     ;; Recurse so it is otherwise handled normally
@@ -58,14 +62,37 @@
       [this parent]
       [this])
 
+    metabase.query_processor.interface.FieldLiteral
+    [(assoc this
+       :field-id           [:field-literal (:field-name this) (:base-type this)]
+       :field-display-name (humanization/name->human-readable-name (:field-name this)))]
+
     metabase.query_processor.interface.ExpressionRef
     [(assoc this :field-display-name (:expression-name this))]
 
+    ;; for every value in a map in the query we'll descend into the map and find all the fields contained therein and mark the key as each field's source.
+    ;; e.g. if we descend into the `:breakout` columns for a query each field returned will get a `:source` of `:breakout`
+    ;; The source is important since it is used to determine sort order for for columns
     clojure.lang.IPersistentMap
     (for [[k v] (seq this)
           field (collect-fields v keep-date-time-fields?)
           :when field]
-      (assoc field :source k))
+      (if (= k :source-query)
+        ;; For columns collected from a source query...
+        ;; 1) Make sure they didn't accidentally pick up an integer ID if the fields clause was added implicitly. If it does
+        ;;    the frontend won't know how to use the field since it won't match up with the same field in the "virtual" table metadata.
+        ;; 2) Keep the original `:source` rather than replacing it with `:source-query` since the frontend doesn't know what to do with that.
+        (if (= (:unit field) :year)
+          ;; if the field is broken out by year we don't want to advertise it as type/DateTime because you can't do a datetime breakout on the years that come back
+          ;; (they come back as text). So instead just tell people it's a Text column
+          (assoc field
+            :field-id [:field-literal (:field-name field) :type/Text]
+            :base-type :type/Text
+            :unit      nil)
+          (assoc field
+            :field-id [:field-literal (:field-name field) (:base-type field)]))
+        ;; For all other fields just add `:source` as described above
+        (assoc field :source k)))
 
     clojure.lang.Sequential
     (for [[i field] (m/indexed (mapcat (u/rpartial collect-fields keep-date-time-fields?) this))]
@@ -157,6 +184,18 @@
    :field-name         k
    :field-display-name (humanization/name->human-readable-name (name k))})
 
+;; TODO - I'm not 100% sure the code reaches this point any more since the `collect-fields` logic now handles nested queries
+;; maybe this is used for queries where the source query is native?
+(defn- info-for-column-from-source-query
+  "Return information about a column that comes back when we're using a source query.
+   (This is basically the same as the generic information, but we also add `:id` and `:source`
+   columns so drill-through operations can be done on it)."
+  [k & [initial-values]]
+  (let [col (generic-info-for-missing-key k initial-values)]
+    (assoc col
+      :id     [:field-literal k (:base-type col)]
+      :source :fields)))
+
 
 (defn- info-for-duplicate-field
   "The Clojure JDBC driver automatically appends suffixes like `count_2` to duplicate columns if multiple columns come back with the same name;
@@ -171,25 +210,27 @@
           fields)))
 
 (defn- info-for-missing-key
-  "Metadata for a field named K, which we weren't able to resolve normally.
-   If possible, we work around This defaults to generic information "
-  [fields k initial-values]
-  (or (info-for-duplicate-field fields k)
+  "Metadata for a field named K, which we weren't able to resolve normally."
+  [inner-query fields k initial-values]
+  (or (when (:source-query inner-query)
+        (info-for-column-from-source-query k initial-values))
+      (info-for-duplicate-field fields k)
       (generic-info-for-missing-key k initial-values)))
 
 (defn- add-unknown-fields-if-needed
   "When create info maps for any fields we didn't expect to come back from the query.
    Ideally, this should never happen, but on the off chance it does we still want to return it in the results."
-  [actual-keys initial-rows fields]
-  {:pre [(set? actual-keys) (every? keyword? actual-keys)]}
+  [inner-query actual-keys initial-rows fields]
+  {:pre [(sequential? actual-keys) (every? keyword? actual-keys)]}
   (let [expected-keys (u/prog1 (set (map :field-name fields))
                         (assert (every? keyword? <>)))
-        missing-keys  (set/difference actual-keys expected-keys)]
+        missing-keys  (set/difference (set actual-keys) expected-keys)]
     (when (seq missing-keys)
-      (log/warn (u/format-color 'yellow "There are fields we weren't expecting in the results: %s\nExpected: %s\nActual: %s"
-                  missing-keys expected-keys actual-keys)))
-    (concat fields (for [k missing-keys]
-                     (info-for-missing-key fields k (map k initial-rows))))))
+      (log/warn (u/format-color 'yellow "There are fields we (maybe) weren't expecting in the results: %s\nExpected: %s\nActual: %s"
+                  missing-keys expected-keys (set actual-keys))))
+    (concat fields (for [k     actual-keys
+                         :when (contains? missing-keys k)]
+                     (info-for-missing-key inner-query fields k (map k initial-rows))))))
 
 (defn- convert-field-to-expected-format
   "Rename keys, provide default values, etc. for FIELD so it is in the format expected by the frontend."
@@ -200,7 +241,7 @@
                   :id          nil
                   :table_id    nil}]
     (-> (merge defaults field)
-        (update :field-display-name name)
+        (update :field-display-name #(when % (name %)))
         (set/rename-keys {:base-type          :base_type
                           :field-display-name :display_name
                           :field-id           :id
@@ -219,7 +260,8 @@
   "Fetch fk info and return a function that returns the destination Field of a given Field."
   ([fields]
    (or (fk-field->dest-fn fields (for [{:keys [special_type id]} fields
-                                       :when (isa? special_type :type/FK)]
+                                       :when  (and (isa? special_type :type/FK)
+                                                   (integer? id))]
                                    id))
        (constantly nil)))
   ;; Fetch the foreign key fields whose origin is in the returned Fields, create a map of origin-field-id->destination-field-id
@@ -252,20 +294,29 @@
                         {}))))))
 
 (defn- resolve-sort-and-format-columns
-  "Collect the Fields referenced in QUERY, sort them according to the rules at the top
+  "Collect the Fields referenced in INNER-QUERY, sort them according to the rules at the top
    of this page, format them as expected by the frontend, and return the results."
-  [query result-keys initial-rows]
-  {:pre [(set? result-keys)]}
+  [inner-query result-keys initial-rows]
+  {:pre [(sequential? result-keys)]}
   (when (seq result-keys)
-    (->> (collect-fields (dissoc query :expressions))
+    (->> (collect-fields (dissoc inner-query :expressions))
+         ;; qualify the field name to make sure it matches what will come back. (For Mongo nested queries only)
          (map qualify-field-name)
-         (add-aggregate-fields-if-needed query)
+         ;; add entries for aggregate fields
+         (add-aggregate-fields-if-needed inner-query)
+         ;; make field-name a keyword
          (map (u/rpartial update :field-name keyword))
-         (add-unknown-fields-if-needed result-keys initial-rows)
-         (sort/sort-fields query)
+         ;; add entries for fields we weren't expecting
+         (add-unknown-fields-if-needed inner-query result-keys initial-rows)
+         ;; remove expected fields not present in the results, and make sure they're unique
+         (filter (comp (partial contains? (set result-keys)) :field-name))
+         ;; now sort the fields
+         (sort/sort-fields inner-query)
+         ;; remove any duplicate entires
+         (m/distinct-by :field-name)
+         ;; convert them to the format expected by the frontend
          (map convert-field-to-expected-format)
-         (filter (comp (partial contains? result-keys) :name))
-         (m/distinct-by :name)
+         ;; add FK info
          add-extra-info-to-fk-fields)))
 
 (defn annotate-and-sort
@@ -277,7 +328,7 @@
   [query {:keys [columns rows], :as results}]
   (let [row-maps (for [row rows]
                    (zipmap columns row))
-        cols    (resolve-sort-and-format-columns (:query query) (set columns) (take 10 row-maps))
+        cols    (resolve-sort-and-format-columns (:query query) (distinct columns) (take 10 row-maps))
         columns (mapv :name cols)]
     (assoc results
       :cols    (vec (for [col cols]
diff --git a/src/metabase/query_processor/expand.clj b/src/metabase/query_processor/expand.clj
index a5d159e9ba78741f1f9a2ef08e27d78e8ae9d5e4..d4c994ced272eae3874844adc7c7a616eb63d011 100644
--- a/src/metabase/query_processor/expand.clj
+++ b/src/metabase/query_processor/expand.clj
@@ -10,8 +10,8 @@
             [metabase.util :as u]
             [metabase.util.schema :as su]
             [schema.core :as s])
-  (:import [metabase.query_processor.interface AgFieldRef BetweenFilter ComparisonFilter CompoundFilter Expression ExpressionRef
-            FieldPlaceholder RelativeDatetime StringFilter Value ValuePlaceholder]))
+  (:import [metabase.query_processor.interface AgFieldRef BetweenFilter ComparisonFilter CompoundFilter DateTimeValue DateTimeField Expression
+            ExpressionRef FieldLiteral FieldPlaceholder RelativeDatetime RelativeDateTimeValue StringFilter Value ValuePlaceholder]))
 
 ;;; # ------------------------------------------------------------ Clause Handlers ------------------------------------------------------------
 
@@ -24,10 +24,17 @@
   [index :- s/Int]
   (i/map->AgFieldRef {:index index}))
 
-(s/defn ^:ql ^:always-validate field-id :- FieldPlaceholder
+(s/defn ^:ql ^:always-validate field-id :- i/AnyField
   "Create a generic reference to a `Field` with ID."
-  [id :- su/IntGreaterThanZero]
-  (i/map->FieldPlaceholder {:field-id id}))
+  [id]
+  ;; If for some reason we were passed a field literal (e.g. [field-id [field-literal ...]])
+  ;; we should technically barf but since we know what people meant we'll be nice for once and fix it for them :D
+  (if (instance? FieldLiteral id)
+    (do
+      (log/warn (u/format-color 'yellow (str "It doesn't make sense to use `field-literal` forms inside `field-id` forms.\n"
+                                             "Instead of [field-id [field-literal ...]], just do [field-literal ...].")))
+      id)
+    (i/map->FieldPlaceholder {:field-id id})))
 
 (s/defn ^:private ^:always-validate field :- i/AnyField
   "Generic reference to a `Field`. F can be an integer Field ID, or various other forms like `fk->` or `aggregation`."
@@ -37,6 +44,12 @@
         (field-id f))
     f))
 
+(s/defn ^:ql ^:always-validate field-literal :- FieldLiteral
+  "Generic reference to a Field by FIELD-NAME. This is intended for use when using nested queries so as to allow one to refer to the fields coming back from
+   the source query."
+  [field-name :- su/KeywordOrString, field-type :- su/KeywordOrString]
+  (i/map->FieldLiteral {:field-name (u/keyword->qualified-name field-name), :base-type (keyword field-type)}))
+
 (s/defn ^:ql ^:always-validate named :- i/Aggregation
   "Specify a CUSTOM-NAME to use for a top-level AGGREGATION-OR-EXPRESSION in the results.
    (This will probably be extended to support Fields in the future, but for now, only the `:aggregation` clause is supported.)"
@@ -44,12 +57,19 @@
   [aggregation-or-expression :- i/Aggregation, custom-name :- su/NonBlankString]
   (assoc aggregation-or-expression :custom-name custom-name))
 
-(s/defn ^:ql ^:always-validate datetime-field :- FieldPlaceholder
+(s/defn ^:ql ^:always-validate datetime-field :- i/AnyField
   "Reference to a `DateTimeField`. This is just a `Field` reference with an associated datetime UNIT."
-  ([f _ unit] (log/warn (u/format-color 'yellow (str "The syntax for datetime-field has changed in MBQL '98. [:datetime-field <field> :as <unit>] is deprecated. "
-                                                     "Prefer [:datetime-field <field> <unit>] instead.")))
-              (datetime-field f unit))
-  ([f unit]   (assoc (field f) :datetime-unit (qputil/normalize-token unit))))
+  ([f _ unit]
+   (log/warn (u/format-color 'yellow (str "The syntax for datetime-field has changed in MBQL '98. [:datetime-field <field> :as <unit>] is deprecated. "
+                                          "Prefer [:datetime-field <field> <unit>] instead.")))
+   (datetime-field f unit))
+  ([f unit]
+   (cond
+     (instance? DateTimeField f) f
+     (instance? FieldLiteral f)  (i/map->DateTimeField {:field f, :unit (qputil/normalize-token unit)})
+     ;; if it already has a datetime unit don't replace it with a new one (?)
+     ;; (:datetime-unit f)          f
+     :else                       (assoc (field f) :datetime-unit (qputil/normalize-token unit)))))
 
 (s/defn ^:ql ^:always-validate fk-> :- FieldPlaceholder
   "Reference to a `Field` that belongs to another `Table`. DEST-FIELD-ID is the ID of this Field, and FK-FIELD-ID is the ID of the foreign key field
@@ -62,18 +82,34 @@
   (i/assert-driver-supports :foreign-keys)
   (i/map->FieldPlaceholder {:fk-field-id fk-field-id, :field-id dest-field-id}))
 
+(defn- datetime-unit
+  "Determine the appropriate datetime unit that should be used for a field F and a value V.
+   (Sometimes the value may already have a 'default' value that should be replaced with the
+   value from the field it is being used with, e.g. in a filter clause.
+   For example when filtering by minute it is important both F and V are bucketed as minutes,
+   and thus both most have the same unit."
+  [f v]
+  (qputil/normalize-token (core/or (:datetime-unit f)
+                                   (:unit f)
+                                   (:unit v))))
 
-(s/defn ^:private ^:always-validate value :- (s/cond-pre Value ValuePlaceholder)
+(s/defn ^:private ^:always-validate value :- i/AnyValue
   "Literal value. F is the `Field` it relates to, and V is `nil`, or a boolean, string, numerical, or datetime value."
   [f v]
   (cond
-    (instance? ValuePlaceholder v) v
-    (instance? Value v)            v
-    :else                          (i/map->ValuePlaceholder {:field-placeholder (field f), :value v})))
+    (instance? ValuePlaceholder v)      v
+    (instance? Value v)                 v
+    (instance? RelativeDateTimeValue v) v
+    (instance? DateTimeValue v)         v
+    (instance? RelativeDatetime v)      (i/map->RelativeDateTimeValue (assoc v :unit (datetime-unit f v), :field (datetime-field f (datetime-unit f v))))
+    (instance? DateTimeField f)         (i/map->DateTimeValue {:value (u/->Timestamp v), :field f})
+    (instance? FieldLiteral f)          (i/map->Value {:value v, :field f})
+    :else                               (i/map->ValuePlaceholder {:field-placeholder (field f), :value v})))
 
 (s/defn ^:private ^:always-validate field-or-value
   "Use instead of `value` when something may be either a field or a value."
   [f v]
+
   (if (core/or (instance? FieldPlaceholder v)
                (instance? ExpressionRef v))
     v
@@ -379,12 +415,26 @@
 ;;; ## source-table
 
 (s/defn ^:ql ^:always-validate source-table
-  "Specify the ID of the table to query (required).
+  "Specify the ID of the table to query.
+   Queries must specify *either* `:source-table` or `:source-query`.
 
      (source-table {} 100)"
   [query, table-id :- s/Int]
   (assoc query :source-table table-id))
 
+(declare expand-inner)
+
+(s/defn ^:ql ^:always-validate source-query
+  "Specify a query to use as the source for this query (e.g., as a `SUBSELECT`).
+   Queries must specify *either* `:source-table` or `:source-query`.
+
+     (source-query {} (-> (source-table {} 100)
+                          (limit 10)))"
+  {:added "0.25.0"}
+  [query, source-query :- su/Map]
+  (assoc query :source-query (if (:native source-query)
+                               source-query
+                               (expand-inner source-query))))
 
 
 ;;; ## calculated columns
diff --git a/src/metabase/query_processor/interface.clj b/src/metabase/query_processor/interface.clj
index dfa1954c2baa1d7c1db7e72e9510f7f1d7c48f9a..eb9f4be1ef2db9ce375cd3f36e2d531040d936ee 100644
--- a/src/metabase/query_processor/interface.clj
+++ b/src/metabase/query_processor/interface.clj
@@ -75,8 +75,10 @@
 (defprotocol IField
   "Methods specific to the Query Expander `Field` record type."
   (qualified-name-components [this]
-    "Return a vector of name components of the form `[table-name parent-names... field-name]`"))
-
+    "Return a vector of name components of the form `[table-name parent-names... field-name]`
+     (This should always return AT LEAST 2 components. If no table name should be used, return
+     `nil` as the first part.)"))
+;; TODO - Yes, I know, that makes no sense. `annotate/qualify-field-name` expects it that way tho
 
 ;;; +----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 ;;; |                                                                             FIELDS                                                                             |
@@ -104,7 +106,7 @@
   (getName [_] field-name) ; (name <field>) returns the *unqualified* name of the field, #obvi
 
   IField
-  (qualified-name-components [this]
+  (qualified-name-components [_]
     (conj (if parent
             (qualified-name-components parent)
             [table-name])
@@ -134,9 +136,17 @@
   [unit]
   (contains? relative-datetime-value-units (keyword unit)))
 
+;; TODO - maybe we should figure out some way to have the schema validate that the driver supports field literals, like we do for some of the other clauses.
+;; Ideally we'd do that in a more generic way (perhaps in expand, we could make the clauses specify required feature metadata and have that get checked automatically?)
+(s/defrecord FieldLiteral [field-name    :- su/NonBlankString
+                           base-type     :- su/FieldType]
+  clojure.lang.Named
+  (getName [_] field-name)
+  IField
+  (qualified-name-components [_] [nil field-name]))
 
 ;; DateTimeField is just a simple wrapper around Field
-(s/defrecord DateTimeField [field :- Field
+(s/defrecord DateTimeField [field :- (s/cond-pre Field FieldLiteral)
                             unit  :- DatetimeFieldUnit]
   clojure.lang.Named
   (getName [_] (name field)))
@@ -169,21 +179,13 @@
                                fk-field-id      :- (s/maybe (s/constrained su/IntGreaterThanZero
                                                                         (fn [_] (or (assert-driver-supports :foreign-keys) true)) ; assert-driver-supports will throw Exception if driver is bound
                                                                         "foreign-keys is not supported by this driver."))         ; and driver does not support foreign keys
-                               datetime-unit    :- (s/maybe (apply s/enum datetime-field-units))
+                               datetime-unit    :- (s/maybe DatetimeFieldUnit)
                                binning-strategy :- (s/maybe (apply s/enum binning-strategies))
                                binning-param    :- (s/maybe s/Num)])
 
 (s/defrecord AgFieldRef [index :- s/Int])
 ;; TODO - add a method to get matching expression from the query?
 
-
-
-
-(def FieldPlaceholderOrExpressionRef
-  "Schema for either a `FieldPlaceholder` or `ExpressionRef`."
-  (s/named (s/cond-pre FieldPlaceholder ExpressionRef)
-           "Valid field or expression reference."))
-
 (s/defrecord RelativeDatetime [amount :- s/Int
                                unit   :- DatetimeValueUnit])
 
@@ -199,9 +201,11 @@
 
 
 (def AnyField
-  "Schema for a anything that is considered a valid 'field'."
+  "Schema for anything that is considered a valid 'field' including placeholders, expressions, and literals."
   (s/named (s/cond-pre Field
                        FieldPlaceholder
+                       DateTimeField
+                       FieldLiteral
                        AgFieldRef
                        Expression
                        ExpressionRef)
@@ -224,13 +228,13 @@
   "Schema for an MBQL datetime value: an ISO-8601 string, `java.sql.Date`, or a relative dateitme form."
   (s/named (s/cond-pre RelativeDatetime LiteralDatetime) "Valid datetime (must ISO-8601 string literal or a relative-datetime form)"))
 
-(def OrderableValue
+(def OrderableValueLiteral
   "Schema for something that is orderable value in MBQL (either a number or datetime)."
   (s/named (s/cond-pre s/Num Datetime) "Valid orderable value (must be number or datetime)"))
 
 (def AnyValueLiteral
   "Schema for anything that is a considered a valid value literal in MBQL - `nil`, a `Boolean`, `Number`, `String`, or relative datetime form."
-  (s/named (s/maybe (s/cond-pre s/Bool su/NonBlankString OrderableValue)) "Valid value (must be nil, boolean, number, string, or a relative-datetime form)"))
+  (s/named (s/maybe (s/cond-pre s/Bool su/NonBlankString OrderableValueLiteral)) "Valid value (must be nil, boolean, number, string, or a relative-datetime form)"))
 
 
 ;; Value is the expansion of a value within a QL clause
@@ -239,13 +243,28 @@
 (s/defrecord Value [value   :- AnyValueLiteral
                     field   :- (s/recursive #'AnyField)])
 
+(s/defrecord RelativeDateTimeValue [amount :- s/Int
+                                    unit   :- DatetimeValueUnit
+                                    field  :- (s/cond-pre DateTimeField
+                                                          FieldPlaceholder)])
+
 ;; e.g. an absolute point in time (literal)
 (s/defrecord DateTimeValue [value :- Timestamp
                             field :- DateTimeField])
 
-(s/defrecord RelativeDateTimeValue [amount :- s/Int
-                                    unit   :- DatetimeValueUnit
-                                    field  :- DateTimeField])
+(def OrderableValue
+  "Schema for an instance of `Value` whose `:value` property is itself orderable (a datetime or number, i.e. a `OrderableValueLiteral`)."
+  (s/named (s/cond-pre
+            DateTimeValue
+            RelativeDateTimeValue
+            (s/constrained Value (fn [{value :value}]
+                                   (nil? (s/check OrderableValueLiteral value)))))
+           "Value that is orderable (Value whose :value is something orderable, like a datetime or number)"))
+
+(def StringValue
+  "Schema for an instance of `Value` whose `:value` property is itself a string (a datetime or string, i.e. a `OrderableValueLiteral`)."
+  (s/named (s/constrained Value (comp string? :value))
+           "Value that is a string (Value whose :value is a string)"))
 
 (defprotocol ^:private IDateTimeValue
   (unit [this]
@@ -268,20 +287,34 @@
 
 ;; Replace values with these during first pass over Query.
 ;; Include associated Field ID so appropriate the info can be found during Field resolution
-(s/defrecord ValuePlaceholder [field-placeholder :- FieldPlaceholderOrExpressionRef
+(s/defrecord ValuePlaceholder [field-placeholder :- AnyField
                                value             :- AnyValueLiteral])
 
 (def OrderableValuePlaceholder
   "`ValuePlaceholder` schema with the additional constraint that the value be orderable (a number or datetime)."
-  (s/constrained ValuePlaceholder (comp (complement (s/checker OrderableValue)) :value) ":value must be orderable (number or datetime)"))
+  (s/constrained ValuePlaceholder (comp (complement (s/checker OrderableValueLiteral)) :value) ":value must be orderable (number or datetime)"))
+
+(def OrderableValueOrPlaceholder
+  "Schema for an `OrderableValue` (instance of `Value` whose `:value` is orderable) or a placeholder for one."
+  (s/named (s/cond-pre OrderableValue OrderableValuePlaceholder)
+           "Must be an OrderableValue or OrderableValuePlaceholder"))
 
 (def StringValuePlaceholder
   "`ValuePlaceholder` schema with the additional constraint that the value be a string/"
   (s/constrained ValuePlaceholder (comp string? :value) ":value must be a string"))
 
+(def StringValueOrPlaceholder
+  "Schema for an `StringValue` (instance of `Value` whose `:value` is a string) or a placeholder for one."
+  (s/named (s/cond-pre StringValue StringValuePlaceholder)
+           "Must be an StringValue or StringValuePlaceholder"))
+
+(def AnyValue
+  "Schema that accepts anything normally considered a value or value placeholder."
+  (s/named (s/cond-pre DateTimeValue RelativeDateTimeValue Value ValuePlaceholder) "Valid value"))
+
 (def AnyFieldOrValue
-  "Schema that accepts anything normally considered a field (including expressions and literals) *or* a value or value placehoder."
-  (s/named (s/cond-pre AnyField Value ValuePlaceholder) "Field or value"))
+  "Schema that accepts anything normally considered a field or value."
+  (s/named (s/cond-pre AnyField AnyValue) "Field or value"))
 
 
 ;;; +----------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -296,7 +329,7 @@
 
 (s/defrecord AggregationWithField [aggregation-type :- (s/named (s/enum :avg :count :cumulative-sum :distinct :max :min :stddev :sum)
                                                                 "Valid aggregation type")
-                                   field            :- (s/cond-pre FieldPlaceholderOrExpressionRef
+                                   field            :- (s/cond-pre AnyField
                                                                    Expression)
                                    custom-name      :- (s/maybe su/NonBlankString)])
 
@@ -316,21 +349,21 @@
 ;;; filter
 
 (s/defrecord EqualityFilter [filter-type :- (s/enum := :!=)
-                             field       :- FieldPlaceholderOrExpressionRef
+                             field       :- AnyField
                              value       :- AnyFieldOrValue])
 
 (s/defrecord ComparisonFilter [filter-type :- (s/enum :< :<= :> :>=)
-                               field       :- FieldPlaceholderOrExpressionRef
-                               value       :- OrderableValuePlaceholder])
+                               field       :- AnyField
+                               value       :- OrderableValueOrPlaceholder])
 
 (s/defrecord BetweenFilter [filter-type  :- (s/eq :between)
-                            min-val      :- OrderableValuePlaceholder
-                            field        :- FieldPlaceholderOrExpressionRef
-                            max-val      :- OrderableValuePlaceholder])
+                            min-val      :- OrderableValueOrPlaceholder
+                            field        :- AnyField
+                            max-val      :- OrderableValueOrPlaceholder])
 
 (s/defrecord StringFilter [filter-type :- (s/enum :starts-with :contains :ends-with)
-                           field       :- FieldPlaceholderOrExpressionRef
-                           value       :- StringValuePlaceholder])
+                           field       :- AnyField
+                           value       :- (s/cond-pre s/Str StringValueOrPlaceholder)]) ; TODO - not 100% sure why this is also allowed to accept a plain string
 
 (def SimpleFilterClause
   "Schema for a non-compound, non-`not` MBQL `filter` clause."
@@ -373,18 +406,39 @@
            "Valid page clause"))
 
 
+;;; source-query
+
+(declare Query)
+
+(def SourceQuery
+  "Schema for a valid value for a `:source-query` clause."
+  (s/if :native
+    {:native                         s/Any
+     (s/optional-key :template_tags) s/Any}
+    (s/recursive #'Query)))
+
 ;;; +----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 ;;; |                                                                             QUERY                                                                              |
 ;;; +----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 (def Query
   "Schema for an MBQL query."
-  {(s/optional-key :aggregation) [Aggregation]
-   (s/optional-key :breakout)    [FieldPlaceholderOrExpressionRef]
-   (s/optional-key :fields)      [AnyField]
-   (s/optional-key :filter)      Filter
-   (s/optional-key :limit)       su/IntGreaterThanZero
-   (s/optional-key :order-by)    [OrderBy]
-   (s/optional-key :page)        Page
-   (s/optional-key :expressions) {s/Keyword Expression}
-   :source-table                 su/IntGreaterThanZero})
+  (s/constrained
+   {(s/optional-key :aggregation)  [Aggregation]
+    (s/optional-key :breakout)     [AnyField]
+    (s/optional-key :fields)       [AnyField]
+    (s/optional-key :filter)       Filter
+    (s/optional-key :limit)        su/IntGreaterThanZero
+    (s/optional-key :order-by)     [OrderBy]
+    (s/optional-key :page)         Page
+    (s/optional-key :expressions)  {s/Keyword Expression}
+    (s/optional-key :source-table) su/IntGreaterThanZero
+    (s/optional-key :source-query) SourceQuery}
+   (fn [{:keys [source-table source-query native-source-query]}]
+     (and (or source-table
+              source-query
+              native-source-query)
+          (not (and source-table
+                    source-query
+                    native-source-query))))
+   "Query must specify either `:source-table` or `:source-query`, but not both."))
diff --git a/src/metabase/query_processor/middleware/add_implicit_clauses.clj b/src/metabase/query_processor/middleware/add_implicit_clauses.clj
index 705a461061f3224a9bf9bb770ea26ed6337fe64e..21483b4ca8499cce00e6137be0994fbaaf8d222a 100644
--- a/src/metabase/query_processor/middleware/add_implicit_clauses.clj
+++ b/src/metabase/query_processor/middleware/add_implicit_clauses.clj
@@ -5,60 +5,74 @@
             [metabase.query-processor
              [interface :as i]
              [resolve :as resolve]
+             [sort :as sort]
              [util :as qputil]]
             [toucan.db :as db]))
 
+(defn- fetch-fields-for-souce-table-id [source-table-id]
+  (map resolve/rename-mb-field-keys
+       (db/select [Field :name :display_name :base_type :special_type :visibility_type :table_id :id :position :description]
+         :table_id        source-table-id
+         :visibility_type [:not-in ["sensitive" "retired"]]
+         :parent_id       nil
+         {:order-by [[:position :asc]
+                     [:id :desc]]})))
+
 (defn- fields-for-source-table
   "Return the all fields for SOURCE-TABLE, for use as an implicit `:fields` clause."
-  [{source-table-id :id, :as source-table}]
-  (for [field (db/select [Field :name :display_name :base_type :special_type :visibility_type :table_id :id :position :description]
-                :table_id        source-table-id
-                :visibility_type [:not-in ["sensitive" "retired"]]
-                :parent_id       nil
-                {:order-by [[:position :asc]
-                            [:id :desc]]})]
-    (let [field (resolve/resolve-table (i/map->Field (resolve/rename-mb-field-keys field))
-                                       {[nil source-table-id] source-table})]
-      (if (qputil/datetime-field? field)
-        (i/map->DateTimeField {:field field, :unit :default})
-        field))))
+  [{{source-table-id :id, :as source-table} :source-table, :as inner-query}]
+  ;; Sort the implicit FIELDS so the SQL (or other native query) that gets generated (mostly) approximates the 'magic' sorting
+  ;; we do on the results. This is done so when the outer query we generate is a `SELECT *` the order doesn't change
+  (for [field (sort/sort-fields inner-query (fetch-fields-for-souce-table-id source-table-id))
+        :let  [field (resolve/resolve-table (i/map->Field field) {[nil source-table-id] source-table})]]
+    (if (qputil/datetime-field? field)
+      (i/map->DateTimeField {:field field, :unit :default})
+      field)))
 
-(defn- should-add-implicit-fields? [{{:keys [fields breakout], aggregations :aggregation} :query, :as query}]
-  (and (qputil/mbql-query? query)
+(defn- should-add-implicit-fields? [{:keys [fields breakout source-table], aggregations :aggregation}]
+  (and source-table ; if query is using another query as its source then there will be no table to add nested fields for
        (not (or (seq aggregations)
                 (seq breakout)
                 (seq fields)))))
 
-(defn- add-implicit-fields [{{:keys [source-table]} :query, :as query}]
-  (if-not (should-add-implicit-fields? query)
-    query
+(defn- add-implicit-fields [{:keys [source-table], :as inner-query}]
+  (if-not (should-add-implicit-fields? inner-query)
+    inner-query
     ;; this is a structured `:rows` query, so lets add a `:fields` clause with all fields from the source table + expressions
-    (let [fields      (fields-for-source-table source-table)
-          expressions (for [[expression-name] (get-in query [:query :expressions])]
+    (let [inner-query (assoc inner-query :fields-is-implicit true)
+          fields      (fields-for-source-table inner-query)
+          expressions (for [[expression-name] (:expressions inner-query)]
                         (i/strict-map->ExpressionRef {:expression-name (name expression-name)}))]
       (when-not (seq fields)
         (log/warn (format "Table '%s' has no Fields associated with it." (:name source-table))))
-      (-> query
-          (assoc-in [:query :fields-is-implicit] true)
-          (assoc-in [:query :fields] (concat fields expressions))))))
+      (assoc inner-query
+        :fields (concat fields expressions)))))
 
 
 
 (defn- add-implicit-breakout-order-by
   "`Fields` specified in `breakout` should add an implicit ascending `order-by` subclause *unless* that field is *explicitly* referenced in `order-by`."
-  [{{breakout-fields :breakout, order-by :order-by} :query, :as query}]
+  [{breakout-fields :breakout, order-by :order-by, :as inner-query}]
+  (let [order-by-fields                   (set (map :field order-by))
+        implicit-breakout-order-by-fields (filter (partial (complement contains?) order-by-fields)
+                                                  breakout-fields)]
+    (cond-> inner-query
+      (seq implicit-breakout-order-by-fields) (update :order-by concat (for [field implicit-breakout-order-by-fields]
+                                                                         {:field field, :direction :ascending})))))
+
+(defn- add-implicit-clauses-to-inner-query [inner-query]
+  (cond-> (add-implicit-fields (add-implicit-breakout-order-by inner-query))
+    ;; if query has a source query recursively add implicit clauses to that too as needed
+    (:source-query inner-query) (update :source-query add-implicit-clauses-to-inner-query)))
+
+(defn- maybe-add-implicit-clauses [query]
   (if-not (qputil/mbql-query? query)
     query
-    (let [order-by-fields                   (set (map :field order-by))
-          implicit-breakout-order-by-fields (filter (partial (complement contains?) order-by-fields)
-                                                    breakout-fields)]
-      (cond-> query
-        (seq implicit-breakout-order-by-fields) (update-in [:query :order-by] concat (for [field implicit-breakout-order-by-fields]
-                                                                                       {:field field, :direction :ascending}))))))
+    (update query :query add-implicit-clauses-to-inner-query)))
 
 
 (defn add-implicit-clauses
   "Add an implicit `fields` clause to queries with no `:aggregation`, `breakout`, or explicit `:fields` clauses.
    Add implicit `:order-by` clauses for fields specified in a `:breakout`."
   [qp]
-  (comp qp add-implicit-fields add-implicit-breakout-order-by))
+  (comp qp maybe-add-implicit-clauses))
diff --git a/src/metabase/query_processor/middleware/cache.clj b/src/metabase/query_processor/middleware/cache.clj
index de1c58bc69278932f4a20aa8ee413498c0ee8940..384d18f69636f933f47413c131cc943cbd91e5e9 100644
--- a/src/metabase/query_processor/middleware/cache.clj
+++ b/src/metabase/query_processor/middleware/cache.clj
@@ -58,10 +58,10 @@
   ([]
    (set-backend! (config/config-kw :mb-qp-cache-backend)))
   ([backend]
-   (let [backend-ns (symbol (str "metabase.query-processor.middleware.cache-backend." (munge (name backend))))]
-     (require backend-ns)
+   (let [backend-ns-symb (symbol (str "metabase.query-processor.middleware.cache-backend." (munge (name backend))))]
+     (require backend-ns-symb)
      (log/info "Using query processor cache backend:" (u/format-color 'blue backend) (u/emoji "💾"))
-     (reset! backend-instance (get-backend-instance-in-namespace backend-ns)))))
+     (reset! backend-instance (get-backend-instance-in-namespace backend-ns-symb)))))
 
 
 
diff --git a/src/metabase/query_processor/middleware/fetch_source_query.clj b/src/metabase/query_processor/middleware/fetch_source_query.clj
new file mode 100644
index 0000000000000000000000000000000000000000..fc3e6eeaceea475203c67bf178a85656bce0ccb2
--- /dev/null
+++ b/src/metabase/query_processor/middleware/fetch_source_query.clj
@@ -0,0 +1,61 @@
+(ns metabase.query-processor.middleware.fetch-source-query
+  (:require [clojure.tools.logging :as log]
+            [metabase.query-processor
+             [interface :as i]
+             [util :as qputil]]
+            [metabase.util :as u]
+            [toucan.db :as db]))
+
+(defn- card-id->source-query
+  "Return the source query info for Card with CARD-ID."
+  [card-id]
+  (let [card       (db/select-one ['Card :dataset_query :database_id] :id card-id)
+        card-query (:dataset_query card)]
+    (assoc (or (:query card-query)
+               (when-let [native (:native card-query)]
+                 {:native        (:query native)
+                  :template_tags (:template_tags native)})
+               (throw (Exception. (str "Missing source query in Card " card-id))))
+      ;; include database ID as well; we'll pass that up the chain so it eventually gets put in its spot in the outer-query
+      :database (:database card-query))))
+
+(defn- source-table-str->source-query
+  "Given a SOURCE-TABLE-STR like `card__100` return the appropriate source query."
+  [source-table-str]
+  (let [[_ card-id-str] (re-find #"^card__(\d+)$" source-table-str)]
+    (u/prog1 (card-id->source-query (Integer/parseInt card-id-str))
+      (when-not i/*disable-qp-logging*
+        (log/info "\nFETCHED SOURCE QUERY FROM CARD" card-id-str ":\n" (u/pprint-to-str 'yellow <>))))))
+
+(defn- expand-card-source-tables
+  "If `source-table` is a Card reference (a string like `card__100`) then replace that with appropriate `:source-query` information.
+   Does nothing if `source-table` is a normal ID. Recurses for nested-nested queries."
+  [inner-query]
+  (let [source-table (qputil/get-normalized inner-query :source-table)]
+    (if-not (string? source-table)
+      inner-query
+      ;; (recursively) expand the source query
+      (let [source-query (expand-card-source-tables (source-table-str->source-query source-table))]
+        (-> inner-query
+            ;; remove `source-table` `card__id` key
+            (qputil/dissoc-normalized :source-table)
+            ;; Add new `source-query` info in its place. Pass the database ID up the chain, removing it from the source query
+            (assoc
+              :source-query (dissoc source-query :database)
+              :database     (:database source-query)))))))
+
+(defn- fetch-source-query* [{inner-query :query, :as outer-query}]
+  (if-not inner-query
+    ;; for non-MBQL queries there's nothing to do since they have nested queries
+    outer-query
+    ;; otherwise attempt to expand any source queries as needed
+    (let [expanded-inner-query (expand-card-source-tables inner-query)]
+      (merge outer-query
+             {:query (dissoc expanded-inner-query :database)}
+             (when-let [database (:database expanded-inner-query)]
+               {:database database})))))
+
+(defn fetch-source-query
+  "Middleware that assocs the `:source-query` for this query if it was specified using the shorthand `:source-table` `card__n` format."
+  [qp]
+  (comp qp fetch-source-query*))
diff --git a/src/metabase/query_processor/middleware/log.clj b/src/metabase/query_processor/middleware/log.clj
index 6ac5031e61c05de6f50fbaa8a26f7abf72efe870..183668ba9705e625ba3cd1ae21c80d3a404efdc1 100644
--- a/src/metabase/query_processor/middleware/log.clj
+++ b/src/metabase/query_processor/middleware/log.clj
@@ -20,7 +20,7 @@
                     (walk/prewalk
                      (fn [f]
                        (if-not (map? f) f
-                               (m/filter-vals identity (into {} f))))
+                               (m/filter-vals (complement nil?) (into {} f))))
                      ;; obscure DB details when logging. Just log the name of driver because we don't care about its properties
                      (-> query
                          (assoc-in [:database :details] (u/emoji "😋 ")) ; :yum:
@@ -42,3 +42,16 @@
   "Middleware for logging a query when it is very first encountered, before it is expanded."
   [qp]
   (comp qp log-initial-query*))
+
+
+(defn- log-results-metadata* [results]
+  (u/prog1 results
+    (when-not i/*disable-qp-logging*
+      (log/debug "Result Metadata:\n"
+                 (u/pprint-to-str 'blue (for [col (get-in <> [:data :cols])]
+                                          (m/filter-vals (complement nil?) col)))))))
+
+(defn log-results-metadata
+  "Middleware that logs the column metadata that comes back with the results."
+  [qp]
+  (comp log-results-metadata* qp))
diff --git a/src/metabase/query_processor/middleware/parameters.clj b/src/metabase/query_processor/middleware/parameters.clj
index 53d25787bb1c887e2257f4d4b3c7dea5878bdf85..f6d013ca8835d96a8cb69fb6316db395ee26e405 100644
--- a/src/metabase/query_processor/middleware/parameters.clj
+++ b/src/metabase/query_processor/middleware/parameters.clj
@@ -2,21 +2,49 @@
   "Middleware for substituting parameters in queries."
   (:require [clojure.data :as data]
             [clojure.tools.logging :as log]
-            [metabase.query-processor.interface :as i]
+            [metabase.driver.generic-sql.util.unprepare :as unprepare]
+            [metabase.query-processor
+             [interface :as i]
+             [util :as qputil]]
             [metabase.query-processor.middleware.parameters
              [mbql :as mbql-params]
              [sql :as sql-params]]
             [metabase.util :as u]))
 
-(defn- expand-parameters
+(defn- expand-parameters*
   "Expand any :parameters set on the QUERY-DICT and apply them to the query definition.
    This function removes the :parameters attribute from the QUERY-DICT as part of its execution."
   [{:keys [parameters], :as query-dict}]
   ;; params in native queries are currently only supported for SQL drivers
-  (if (= :query (keyword (:type query-dict)))
+  (if (qputil/mbql-query? query-dict)
     (mbql-params/expand (dissoc query-dict :parameters) parameters)
     (sql-params/expand query-dict)))
 
+(defn- expand-params-in-native-source-query
+  "Expand parameters in a native source query."
+  [{{{original-query :native, tags :template_tags} :source-query} :query, :as outer-query}]
+  ;; TODO - This isn't recursive for nested-nested queries
+  ;; TODO - Yes, this approach is hacky. But hacky & working > not working
+  (let [{{new-query :query, new-params :params} :native} (sql-params/expand (assoc outer-query
+                                                                              :type   :native
+                                                                              :native {:query         original-query
+                                                                                       :template_tags tags}))]
+    (if (= original-query new-query)
+      ;; if the native query didn't change, we don't need to do anything; return as-is
+      outer-query
+      ;; otherwise replace the native query with the param-substituted version.
+      ;; 'Unprepare' the args because making sure args get passed in the right order is too tricky for nested queries
+      ;; TODO - This might not work for all drivers. We should make 'unprepare' a Generic SQL method
+      ;; so different drivers can invoke unprepare/unprepare with the correct args
+      (-> outer-query
+          (assoc-in [:query :source-query :native] (unprepare/unprepare (cons new-query new-params)))))))
+
+(defn- expand-parameters
+  "Expand parameters in the OUTER-QUERY, and if the query is using a native source query, expand params in that as well."
+  [outer-query]
+  (cond-> (expand-parameters* outer-query)
+    (get-in outer-query [:query :source-query :native]) expand-params-in-native-source-query))
+
 (defn- substitute-parameters*
   "If any parameters were supplied then substitute them into the query."
   [query]
diff --git a/src/metabase/query_processor/middleware/permissions.clj b/src/metabase/query_processor/middleware/permissions.clj
index fddb9f6e7a491074e95259c186310c17d429a036..2fdf81f66e30dc3a419f9d5596a255f347e5682b 100644
--- a/src/metabase/query_processor/middleware/permissions.clj
+++ b/src/metabase/query_processor/middleware/permissions.clj
@@ -79,9 +79,11 @@
 ;; TODO - why is this the only function here that takes `user-id`?
 (defn- throw-if-cannot-run-query
   "Throw an exception if USER-ID doesn't have permissions to run QUERY."
-  [user-id {:keys [source-table join-tables]}]
-  (doseq [table (cons source-table join-tables)]
-    (throw-if-cannot-run-query-referencing-table user-id table)))
+  [user-id {:keys [source-table join-tables source-query]}]
+  (if source-query
+    (recur user-id source-query)
+    (doseq [table (cons source-table join-tables)]
+      (throw-if-cannot-run-query-referencing-table user-id table))))
 
 
 ;;; ------------------------------------------------------------ Permissions for Native Queries ------------------------------------------------------------
@@ -120,7 +122,7 @@
 
 (defn- check-query-permissions-for-user
   "Check that User with USER-ID has permissions to run QUERY, or throw an exception."
-  [user-id {query-type :type, database :database, query :query, {card-id :card-id} :info, :as outer-query}]
+  [user-id {query-type :type, database :database, {:keys [source-query], :as query} :query, {:keys [card-id]} :info, :as outer-query}]
   {:pre [(integer? user-id) (map? outer-query)]}
   (let [native?       (= (keyword query-type) :native)
         collection-id (db/select-one-field :collection_id 'Card :id card-id)]
@@ -128,6 +130,11 @@
       ;; if the card is in a COLLECTION, then see if the current user has permissions for that collection
       collection-id
       (throw-if-user-doesnt-have-access-to-collection collection-id)
+      ;; Otherwise if this is a NESTED query then we should check permissions for the source query
+      source-query
+      (if (:native source-query)
+        (throw-if-cannot-run-existing-native-query-referencing-db database)
+        (throw-if-cannot-run-query user-id source-query))
       ;; for native queries that are *not* part of an existing card, check that we have native permissions for the DB
       (and native? (not card-id))
       (throw-if-cannot-run-new-native-query-referencing-db database)
diff --git a/src/metabase/query_processor/middleware/results_metadata.clj b/src/metabase/query_processor/middleware/results_metadata.clj
new file mode 100644
index 0000000000000000000000000000000000000000..824b54e0a22a97fd20d3d93d3ef3013b8cd05ae3
--- /dev/null
+++ b/src/metabase/query_processor/middleware/results_metadata.clj
@@ -0,0 +1,98 @@
+(ns metabase.query-processor.middleware.results-metadata
+  "Middleware that stores metadata about results column types after running a query for a Card,
+   and returns that metadata (which can be passed *back* to the backend when saving a Card) as well
+   as a checksum in the API response."
+  (:require [buddy.core.hash :as hash]
+            [cheshire.core :as json]
+            [metabase.models.humanization :as humanization]
+            [metabase.query-processor.interface :as i]
+            [metabase.util :as u]
+            [metabase.util
+             [encryption :as encryption]
+             [schema :as su]]
+            [ring.util.codec :as codec]
+            [schema.core :as s]
+            [toucan.db :as db]))
+
+(def ^:private DateTimeUnitKeywordOrString
+  "Schema for a valid datetime unit string like \"default\" or \"minute-of-hour\"."
+  (s/constrained su/KeywordOrString
+                 (fn [unit]
+                   (contains? i/datetime-field-units (keyword unit)))
+                 "Valid field datetime unit keyword or string"))
+
+(def ResultsMetadata
+  "Schema for valid values of the `result_metadata` column."
+  (su/with-api-error-message (s/named [{:name                          su/NonBlankString
+                                        :display_name                  su/NonBlankString
+                                        (s/optional-key :description)  (s/maybe su/NonBlankString)
+                                        :base_type                     su/FieldTypeKeywordOrString
+                                        (s/optional-key :special_type) (s/maybe su/FieldTypeKeywordOrString)
+                                        (s/optional-key :unit)         (s/maybe DateTimeUnitKeywordOrString)}]
+                                      "Valid array of results column metadata maps")
+    "value must be an array of valid results column metadata maps."))
+
+(s/defn ^:private ^:always-validate results->column-metadata :- (s/maybe ResultsMetadata)
+  "Return the desired storage format for the column metadata coming back from RESULTS, or `nil` if no columns were returned."
+  [results]
+  ;; rarely certain queries will return columns with no names, for example `SELECT COUNT(*)` in SQL Server seems to come back with no name
+  ;; since we can't use those as field literals in subsequent queries just filter them out
+  (seq (for [col   (:cols results)
+             :when (seq (:name col))]
+         (merge
+          ;; if base-type isn't set put a default one in there. Similarly just use humanized value of `:name` for `:display_name` if one isn't set
+          {:base_type    :type/*
+           :display_name (humanization/name->human-readable-name (name (:name col)))}
+          (u/select-non-nil-keys col [:name :display_name :description :base_type :special_type :unit])
+          ;; since years are actually returned as text they can't be used for breakout purposes so don't advertise them as DateTime columns
+          (when (= (:unit col) :year)
+            {:base_type :type/Text
+             :unit      nil})))))
+
+;; TODO - is there some way we could avoid doing this every single time a Card is ran? Perhaps by passing the current Card
+;; metadata as part of the query context so we can compare for changes
+(defn- record-metadata! [card-id metadata]
+  (when metadata
+    (db/update! 'Card card-id
+      :result_metadata metadata)))
+
+(defn- metadata-checksum
+  "Simple, checksum of the column results METADATA.
+   Results metadata is returned as part of all query results, with the hope that the frontend will pass it back to
+   us when a Card is saved or updated. This checksum (also passed) is a simple way for us to check whether the metadata
+   is valid and hasn't been accidentally tampered with.
+
+   By default, this is not cryptographically secure, nor is it meant to be. Of course, a bad actor could alter the
+   metadata and return a new, correct checksum. But intentionally saving bad metadata would only help in letting you
+   write bad queries; the field literals can only refer to columns in the original 'source' query at any rate, so you
+   wouldn't, for example, be able to give yourself access to columns in a different table.
+
+   However, if `MB_ENCRYPTION_SECRET_KEY` is set, we'll go ahead and use it to encypt the checksum so it becomes it becomes
+   impossible to alter the metadata and produce a correct checksum at any rate."
+  [metadata]
+  (when metadata
+    (encryption/maybe-encrypt (codec/base64-encode (hash/md5 (json/generate-string metadata))))))
+
+(defn valid-checksum?
+  "Is the CHECKSUM the right one for this column METADATA?"
+  [metadata checksum]
+  (and metadata
+       checksum
+       (= (encryption/maybe-decrypt (metadata-checksum metadata))
+          (encryption/maybe-decrypt checksum))))
+
+(defn record-and-return-metadata!
+  "Middleware that records metadata about the columns returned when running the query if it is associated with a Card."
+  [qp]
+  (fn [{{:keys [card-id nested?]} :info, :as query}]
+    (let [results  (qp query)
+          metadata (results->column-metadata results)]
+      ;; At the very least we can skip the Extra DB call to update this Card's metadata results
+      ;; if its DB doesn't support nested queries in the first place
+      (when (i/driver-supports? :nested-queries)
+        (when (and card-id
+                   (not nested?))
+          (record-metadata! card-id metadata)))
+      ;; add the metadata and checksum to the response
+      (assoc results :results_metadata {:checksum (metadata-checksum metadata)
+                                        :columns  metadata}))))
diff --git a/src/metabase/query_processor/resolve.clj b/src/metabase/query_processor/resolve.clj
index f55fcc9fee220995076c495fe20530e6bd0cd001..900e1b754d976eebcaec91e9481e4d3a7101b751 100644
--- a/src/metabase/query_processor/resolve.clj
+++ b/src/metabase/query_processor/resolve.clj
@@ -266,19 +266,25 @@
 (defn- resolve-tables
   "Resolve the `Tables` in an EXPANDED-QUERY-DICT."
   [{{source-table-id :source-table} :query, :keys [table-ids fk-field-ids], :as expanded-query-dict}]
-  {:pre [(integer? source-table-id)]}
-  (let [table-ids             (conj table-ids source-table-id)
-        source-table          (or (db/select-one [Table :schema :name :id], :id source-table-id)
-                                  (throw (Exception. (format "Query expansion failed: could not find source table %d." source-table-id))))
-        joined-tables         (fk-field-ids->joined-tables source-table-id fk-field-ids)
-        fk-id+table-id->table (into {[nil source-table-id] source-table}
-                                    (for [{:keys [source-field table-id join-alias]} joined-tables]
-                                      {[(:field-id source-field) table-id] {:name join-alias
-                                                                            :id   table-id}}))]
-    (as-> expanded-query-dict <>
-      (assoc-in <> [:query :source-table] source-table)
-      (assoc-in <> [:query :join-tables]  joined-tables)
-      (walk/postwalk #(resolve-table % fk-id+table-id->table) <>))))
+  (if-not source-table-id
+    ;; if we have a `source-query`, recurse and resolve tables in that
+    (update-in expanded-query-dict [:query :source-query] (fn [source-query]
+                                                            (if (:native source-query)
+                                                              source-query
+                                                              (:query (resolve-tables (assoc expanded-query-dict :query source-query))))))
+    ;; otherwise we can resolve tables in the (current) top-level
+    (let [table-ids             (conj table-ids source-table-id)
+          source-table          (or (db/select-one [Table :schema :name :id], :id source-table-id)
+                                    (throw (Exception. (format "Query expansion failed: could not find source table %d." source-table-id))))
+          joined-tables         (fk-field-ids->joined-tables source-table-id fk-field-ids)
+          fk-id+table-id->table (into {[nil source-table-id] source-table}
+                                      (for [{:keys [source-field table-id join-alias]} joined-tables]
+                                        {[(:field-id source-field) table-id] {:name join-alias
+                                                                              :id   table-id}}))]
+      (as-> expanded-query-dict <>
+        (assoc-in <> [:query :source-table] source-table)
+        (assoc-in <> [:query :join-tables]  joined-tables)
+        (walk/postwalk #(resolve-table % fk-id+table-id->table) <>)))))
 
 
 ;;; # ------------------------------------------------------------ PUBLIC INTERFACE ------------------------------------------------------------
diff --git a/src/metabase/query_processor/sort.clj b/src/metabase/query_processor/sort.clj
index 2cf435974626f8df0c583ee47a7982d77367b117..f78153c9e12126cfdc9b8cfbec0c363d8252c742 100644
--- a/src/metabase/query_processor/sort.clj
+++ b/src/metabase/query_processor/sort.clj
@@ -65,10 +65,22 @@
        (special-type-importance field)
        field-name])))
 
+(defn- should-sort? [inner-query]
+  (or
+   ;; if there's no source query then always sort
+   (not (:source-query inner-query))
+   ;; if the source query is MBQL then sort
+   (not (get-in inner-query [:source-query :native]))
+   ;; otherwise only sort queries with *NATIVE* source queries if the query has an aggregation and/or breakout
+   (:aggregation inner-query)
+   (:breakout inner-query)))
+
 (defn sort-fields
   "Sort FIELDS by their \"importance\" vectors."
-  [query fields]
-  (let [field-importance (field-importance-fn query)]
-    (when-not i/*disable-qp-logging*
-      (log/debug (u/format-color 'yellow "Sorted fields:\n%s" (u/pprint-to-str (sort (map field-importance fields))))))
-    (sort-by field-importance fields)))
+  [inner-query fields]
+  (if-not (should-sort? inner-query)
+    fields
+    (let [field-importance (field-importance-fn inner-query)]
+      (when-not i/*disable-qp-logging*
+        (log/debug (u/format-color 'yellow "Sorted fields:\n%s" (u/pprint-to-str (sort (map field-importance fields))))))
+      (sort-by field-importance fields))))
diff --git a/src/metabase/task.clj b/src/metabase/task.clj
index 8580c03d63de8c8f0d361aeacbd007e359950e4b..5a75c79423c9a51964d1aced2f7167ddcf593b0c 100644
--- a/src/metabase/task.clj
+++ b/src/metabase/task.clj
@@ -52,3 +52,10 @@
   [job trigger]
   (when @quartz-scheduler
     (qs/schedule @quartz-scheduler job trigger)))
+
+(defn delete-task!
+  "delete a task from the scheduler"
+  [job-key trigger-key]
+  (when @quartz-scheduler
+    (qs/delete-trigger @quartz-scheduler trigger-key)
+    (qs/delete-job @quartz-scheduler job-key)))
diff --git a/src/metabase/util.clj b/src/metabase/util.clj
index 9b79d0c0302c810a830fd28021be92a1e1b541ba..36e10258a69fa49e8ec82e96f3519b75ada5deff 100644
--- a/src/metabase/util.clj
+++ b/src/metabase/util.clj
@@ -503,24 +503,29 @@
     identity
     (constantly "")))
 
-(def ^String ^{:style/indent 2, :arglists '([color-symb x] [color-symb format-str & args])}
-  format-color
+(def ^:private ^{:arglists '([color-symb x])} colorize
+  "Colorize string X with the function matching COLOR-SYMB, but only if `MB_COLORIZE_LOGS` is enabled (the default)."
+  (if (config/config-bool :mb-colorize-logs)
+    (fn [color-symb x]
+      (let [color-fn (or (ns-resolve 'colorize.core color-symb)
+                         (throw (Exception. (str "Invalid color symbol: " color-symb))))]
+        (color-fn x)))
+    (fn [_ x]
+      x)))
+
+(defn format-color
   "Like `format`, but uses a function in `colorize.core` to colorize the output.
    COLOR-SYMB should be a quoted symbol like `green`, `red`, `yellow`, `blue`,
    `cyan`, `magenta`, etc. See the entire list of avaliable colors
    [here](https://github.com/ibdknox/colorize/blob/master/src/colorize/core.clj).
 
      (format-color 'red \"Fatal error: %s\" error-message)"
-  (if (config/config-bool :mb-colorize-logs)
-    (fn
-      ([color-symb x]
-       {:pre [(symbol? color-symb)]}
-       ((ns-resolve 'colorize.core color-symb) x))
-      ([color-symb format-string & args]
-       (format-color color-symb (apply format format-string args))))
-    (fn
-      ([_ x] x)
-      ([_ format-string & args] (apply format format-string args)))))
+  {:style/indent 2}
+  (^String [color-symb x]
+   {:pre [(symbol? color-symb)]}
+   (colorize color-symb x))
+  (^String [color-symb format-string & args]
+   (colorize color-symb (apply format format-string args))))
 
 (defn pprint-to-str
   "Returns the output of pretty-printing X as a string.
@@ -528,11 +533,12 @@
    function from `colorize.core`.
 
      (pprint-to-str 'green some-obj)"
-  ([x]
+  {:style/indent 1}
+  (^String [x]
    (when x
      (with-out-str (pprint x))))
-  ([color-symb x]
-   ((ns-resolve 'colorize.core color-symb) (pprint-to-str x))))
+  (^String [color-symb x]
+   (colorize color-symb (pprint-to-str x))))
 
 (def emoji-progress-bar
   "Create a string that shows progress for something, e.g. a database sync process.
@@ -564,15 +570,39 @@
              (s/join (repeat blanks "·"))
              (format "] %s  %3.0f%%" (emoji (percent-done->emoji percent-done)) (* percent-done 100.0)))))))
 
-(defn filtered-stacktrace
-  "Get the stack trace associated with E and return it as a vector with non-metabase frames filtered out."
-  [^Throwable e]
-  (when e
-    (when-let [stacktrace (.getStackTrace e)]
-      (vec (for [frame stacktrace
-                 :let  [s (str frame)]
-                 :when (re-find #"metabase" s)]
-             (s/replace s #"^metabase\." ""))))))
+
+(defprotocol ^:private IFilteredStacktrace
+  (filtered-stacktrace [this]
+    "Get the stack trace associated with E and return it as a vector with non-metabase frames filtered out."))
+
+;; These next two functions are a workaround for this bug https://dev.clojure.org/jira/browse/CLJ-1790
+;; When Throwable/Thread are type-hinted, they return an array of type StackTraceElement, this causes
+;; a VerifyError. Adding a layer of indirection here avoids the problem. Once we upgrade to Clojure 1.9
+;; we should be able to remove this code.
+(defn- throwable-get-stack-trace [^Throwable t]
+  (.getStackTrace t))
+
+(defn- thread-get-stack-trace [^Thread t]
+  (.getStackTrace t))
+
+(extend nil
+  IFilteredStacktrace {:filtered-stacktrace (constantly nil)})
+
+(extend Throwable
+  IFilteredStacktrace {:filtered-stacktrace (fn [this]
+                                             (filtered-stacktrace (throwable-get-stack-trace this)))})
+
+(extend Thread
+  IFilteredStacktrace {:filtered-stacktrace (fn [this]
+                                              (filtered-stacktrace (thread-get-stack-trace this)))})
+
+;; StackTraceElement[] is what the `.getStackTrace` method for Thread and Throwable returns
+(extend (Class/forName "[Ljava.lang.StackTraceElement;")
+  IFilteredStacktrace {:filtered-stacktrace (fn [this]
+                                              (vec (for [frame this
+                                                         :let  [s (str frame)]
+                                                         :when (re-find #"metabase" s)]
+                                                     (s/replace s #"^metabase\." ""))))})
 
 (defn wrap-try-catch
   "Returns a new function that wraps F in a `try-catch`. When an exception is caught, it is logged
@@ -825,10 +855,10 @@
 
 (defn occurances-of-substring
   "Return the number of times SUBSTR occurs in string S."
-  ^Integer [^String s, ^String substr]
+  ^Long [^String s, ^String substr]
   (when (and (seq s) (seq substr))
     (loop [index 0, cnt 0]
-      (if-let [new-index (s/index-of s substr index)]
+      (if-let [^long new-index (s/index-of s substr index)]
         (recur (inc new-index) (inc cnt))
         cnt))))
 
diff --git a/src/metabase/util/infer_spaces.clj b/src/metabase/util/infer_spaces.clj
index 4de995ac2a0ed7f6672b1e5083eceb14345ecd39..3295c582f100784c551975951f0992f9d9b5e1e1 100644
--- a/src/metabase/util/infer_spaces.clj
+++ b/src/metabase/util/infer_spaces.clj
@@ -59,7 +59,7 @@
 ;;
 ;;     return " ".join(reversed(out))
 (defn infer-spaces
-  "Splits a string with no spaces into words using magic"
+  "Splits a string with no spaces into words using magic" ; what a great explanation. TODO - make this code readable
   [input]
   (let [s (s/lower-case input)
         cost (build-cost-array s)]
diff --git a/test/metabase/api/card_test.clj b/test/metabase/api/card_test.clj
index 0c4f47d260a5fae320702ba3a9214d4baa27bf99..1553fa6bebef29291cf8b4e457e784715dc2ba8d 100644
--- a/test/metabase/api/card_test.clj
+++ b/test/metabase/api/card_test.clj
@@ -40,7 +40,8 @@
    :made_public_by_id nil
    :public_uuid       nil
    :query_type        "query"
-   :cache_ttl         nil})
+   :cache_ttl         nil
+   :result_metadata   nil})
 
 (defn- do-with-self-cleaning-random-card-name
   "Generate a random card name (or use CARD-NAME), pass it to F, then delete any Cards with that name afterwords."
@@ -181,12 +182,11 @@
   [card-2-id]
   (map :id ((user->client :rasta) :get 200 "card", :label "more_toucans")))                 ; filtering is done by slug
 
-(defn- mbql-count-query [database-id table-id]
-  {:database database-id
-   :type     "query"
-   :query    {:source-table table-id, :aggregation {:aggregation-type "count"}}})
 
-;; ## POST /api/card
+;;; +------------------------------------------------------------------------------------------------------------------------+
+;;; |                                                    CREATING A CARD                                                     |
+;;; +------------------------------------------------------------------------------------------------------------------------+
+
 ;; Test that we can make a card
 (let [card-name (random-name)]
   (tt/expect-with-temp [Database [{database-id :id}]
@@ -199,12 +199,45 @@
             :database_id            database-id ; these should be inferred automatically
             :table_id               table-id})
     (with-self-cleaning-random-card-name [_ card-name]
-      (dissoc ((user->client :rasta) :post 200 "card" {:name                   card-name
-                                                       :display                "scalar"
-                                                       :dataset_query          (mbql-count-query database-id table-id)
-                                                       :visualization_settings {:global {:title nil}}})
+      (dissoc ((user->client :rasta) :post 200 "card" (card-with-name-and-query card-name (mbql-count-query database-id table-id)))
               :created_at :updated_at :id))))
 
+;; Make sure when saving a Card the query metadata is saved (if correct)
+(expect
+  [{:base_type    "type/Integer"
+    :display_name "Count Chocula"
+    :name         "count_chocula"
+    :special_type "type/Number"}]
+  (let [metadata [{:base_type    :type/Integer
+                   :display_name "Count Chocula"
+                   :name         "count_chocula"
+                   :special_type :type/Number}]]
+    (with-self-cleaning-random-card-name [card-name]
+      ;; create a card with the metadata
+      ((user->client :rasta) :post 200 "card" (assoc (card-with-name-and-query card-name (mbql-count-query (data/id) (data/id :venues)))
+                                                :result_metadata    metadata
+                                                :metadata_checksum  ((resolve 'metabase.query-processor.middleware.results-metadata/metadata-checksum) metadata)))
+      ;; now check the metadata that was saved in the DB
+      (db/select-one-field :result_metadata Card :name card-name))))
+
+;; make sure when saving a Card the correct query metadata is fetched (if incorrect)
+(expect
+  [{:base_type    "type/Integer"
+    :display_name "count"
+    :name         "count"
+    :special_type "type/Number"}]
+  (let [metadata [{:base_type    :type/Integer
+                   :display_name "Count Chocula"
+                   :name         "count_chocula"
+                   :special_type :type/Number}]]
+    (with-self-cleaning-random-card-name [card-name]
+      ;; create a card with the metadata
+      ((user->client :rasta) :post 200 "card" (assoc (card-with-name-and-query card-name (mbql-count-query (data/id) (data/id :venues)))
+                                                :result_metadata    metadata
+                                                :metadata_checksum  "ABCDEF")) ; bad checksum
+      ;; now check the correct metadata was fetched and was saved in the DB
+      (db/select-one-field :result_metadata Card :name card-name))))
+
 
 ;;; +------------------------------------------------------------------------------------------------------------------------+
 ;;; |                                                FETCHING A SPECIFIC CARD                                                |
@@ -323,7 +356,50 @@
     (tu/with-temporary-setting-values [enable-embedding false]
       ((user->client :crowberto) :put 400 (str "card/" (u/get-id card)) {:embedding_params {:abc "enabled"}}))))
 
-;; ## DELETE /api/card/:id
+;; make sure when updating a Card the query metadata is saved (if correct)
+(expect
+  [{:base_type    "type/Integer"
+    :display_name "Count Chocula"
+    :name         "count_chocula"
+    :special_type "type/Number"}]
+  (let [metadata [{:base_type    :type/Integer
+                   :display_name "Count Chocula"
+                   :name         "count_chocula"
+                   :special_type :type/Number}]]
+    (tt/with-temp Card [card]
+      ;; update the Card's query
+      ((user->client :rasta) :put 200 (str "card/" (u/get-id card))
+       {:dataset_query (mbql-count-query (data/id) (data/id :venues))
+        :result_metadata    metadata
+        :metadata_checksum  ((resolve 'metabase.query-processor.middleware.results-metadata/metadata-checksum) metadata)})
+      ;; now check the metadata that was saved in the DB
+      (db/select-one-field :result_metadata Card :id (u/get-id card)))))
+
+;; Make sure when updating a Card the correct query metadata is fetched (if incorrect)
+(expect
+  [{:base_type    "type/Integer"
+    :display_name "count"
+    :name         "count"
+    :special_type "type/Number"}]
+  (let [metadata [{:base_type    :type/Integer
+                   :display_name "Count Chocula"
+                   :name         "count_chocula"
+                   :special_type :type/Number}]]
+    (tt/with-temp Card [card]
+      ;; update the Card's query
+      ((user->client :rasta) :put 200 (str "card/" (u/get-id card))
+       {:dataset_query (mbql-count-query (data/id) (data/id :venues))
+        :result_metadata    metadata
+        :metadata_checksum  "ABC123"})  ; invalid checksum
+      ;; now check the metadata that was saved in the DB
+      (db/select-one-field :result_metadata Card :id (u/get-id card)))))
+
+
+;;; +------------------------------------------------------------------------------------------------------------------------+
+;;; |                                              DELETING A CARD (DEPRECATED)                                              |
+;;; +------------------------------------------------------------------------------------------------------------------------+
+;; Deprecated because you're not supposed to delete cards anymore. Archive them instead
+
 ;; Check that we can delete a card
 (expect
   nil
diff --git a/test/metabase/api/dashboard_test.clj b/test/metabase/api/dashboard_test.clj
index d2fdb6bff2bff3e7f842e658073e04e25395a5fb..ec02621cd5ee9b79cc596f2905acc3a319442218 100644
--- a/test/metabase/api/dashboard_test.clj
+++ b/test/metabase/api/dashboard_test.clj
@@ -133,7 +133,8 @@
                                                            :query_type             nil
                                                            :dataset_query          {}
                                                            :visualization_settings {}
-                                                           :query_average_duration nil})
+                                                           :query_average_duration nil
+                                                           :result_metadata        nil})
                            :series                 []}]})
   ;; fetch a dashboard WITH a dashboard card on it
   (tt/with-temp* [Dashboard     [{dashboard-id :id} {:name "Test Dashboard"}]
diff --git a/test/metabase/api/database_test.clj b/test/metabase/api/database_test.clj
index 75e5a708802e836f7206c96642ae18e740074e9f..7b99ff89b9008c2e3dbe9c6112f8b609bc586e47 100644
--- a/test/metabase/api/database_test.clj
+++ b/test/metabase/api/database_test.clj
@@ -4,7 +4,9 @@
              [driver :as driver]
              [util :as u]]
             [metabase.models
-             [database :refer [Database]]
+             [card :refer [Card]]
+             [collection :refer [Collection]]
+             [database :as database :refer [Database]]
              [field :refer [Field]]
              [table :refer [Table]]]
             [metabase.test
@@ -15,7 +17,8 @@
              [users :refer :all]]
             [toucan
              [db :as db]
-             [hydrate :as hydrate]]))
+             [hydrate :as hydrate]]
+            [toucan.util.test :as tt]))
 
 ;; HELPER FNS
 
@@ -123,11 +126,6 @@
       (dissoc (into {} (db/select-one [Database :name :engine :details :is_full_sync], :id db-id))
               :features)))
 
-:description             nil
-                               :entity_type             nil
-                               :caveats                 nil
-                               :points_of_interest      nil
-                               :visibility_type         nil
 (def ^:private default-table-details
   {:description             nil
    :entity_name             nil
@@ -319,3 +317,117 @@
   [["CATEGORIES" "Table"]
    ["CATEGORY_ID" "VENUES :type/Integer :type/FK"]]
   ((user->client :rasta) :get 200 (format "database/%d/autocomplete_suggestions" (id)) :prefix "cat"))
+
+
+;;; GET /api/database?include_cards=true
+;; Check that we get back 'virtual' tables for Saved Questions
+(defn- card-with-native-query {:style/indent 1} [card-name & {:as kvs}]
+  (merge {:name          card-name
+          :database_id   (data/id)
+          :dataset_query {:database (data/id)
+                          :type     :native
+                          :native   {:query (format "SELECT * FROM VENUES")}}}
+         kvs))
+
+(defn- card-with-mbql-query {:style/indent 1} [card-name & {:as inner-query-clauses}]
+  {:name          card-name
+   :database_id   (data/id)
+   :dataset_query {:database (data/id)
+                   :type     :query
+                   :query    inner-query-clauses}})
+
+(defn- saved-questions-virtual-db {:style/indent 0} [& card-tables]
+  {:name               "Saved Questions"
+   :id                 database/virtual-id
+   :features           ["basic-aggregations"]
+   :tables             card-tables
+   :is_saved_questions true})
+
+(defn- virtual-table-for-card [card & {:as kvs}]
+  (merge {:id           (format "card__%d" (u/get-id card))
+          :db_id        database/virtual-id
+          :display_name (:name card)
+          :schema       "All questions"
+          :description  nil}
+         kvs))
+
+(tt/expect-with-temp [Card [card (card-with-native-query "Kanye West Quote Views Per Month")]]
+  (saved-questions-virtual-db
+    (virtual-table-for-card card))
+  (do
+    ;; run the Card which will populate its result_metadata column
+    ((user->client :crowberto) :post 200 (format "card/%d/query" (u/get-id card)))
+    ;; Now fetch the database list. The 'Saved Questions' DB should be last on the list
+    (last ((user->client :crowberto) :get 200 "database" :include_cards true))))
+
+;; make sure that GET /api/database?include_cards=true groups pretends COLLECTIONS are SCHEMAS
+(tt/expect-with-temp [Collection [stamp-collection {:name "Stamps"}]
+                      Collection [coin-collection  {:name "Coins"}]
+                      Card       [stamp-card (card-with-native-query "Total Stamp Count", :collection_id (u/get-id stamp-collection))]
+                      Card       [coin-card  (card-with-native-query "Total Coin Count",  :collection_id (u/get-id coin-collection))]]
+  (saved-questions-virtual-db
+    (virtual-table-for-card coin-card  :schema "Coins")
+    (virtual-table-for-card stamp-card :schema "Stamps"))
+  (do
+    ;; run the Cards which will populate their result_metadata columns
+    (doseq [card [stamp-card coin-card]]
+      ((user->client :crowberto) :post 200 (format "card/%d/query" (u/get-id card))))
+    ;; Now fetch the database list. The 'Saved Questions' DB should be last on the list. Cards should have their Collection name as their Schema
+    (last ((user->client :crowberto) :get 200 "database" :include_cards true))))
+
+(defn- fetch-virtual-database []
+  (some #(when (= (:name %) "Saved Questions")
+           %)
+        ((user->client :crowberto) :get 200 "database" :include_cards true)))
+
+;; make sure that GET /api/database?include_cards=true removes Cards that have ambiguous columns
+(tt/expect-with-temp [Card [ok-card         (assoc (card-with-native-query "OK Card")         :result_metadata [{:name "cam"}])]
+                      Card [cambiguous-card (assoc (card-with-native-query "Cambiguous Card") :result_metadata [{:name "cam"} {:name "cam_2"}])]]
+  (saved-questions-virtual-db
+    (virtual-table-for-card ok-card))
+  (fetch-virtual-database))
+
+
+;; make sure that GET /api/database?include_cards=true removes Cards that use cumulative-sum and cumulative-count aggregations
+(defn- ok-mbql-card []
+  (assoc (card-with-mbql-query "OK Card"
+           :source-table (data/id :checkins))
+    :result_metadata [{:name "num_toucans"}]))
+
+;; cum count using the new-style multiple aggregation syntax
+(tt/expect-with-temp [Card [ok-card (ok-mbql-card)]
+                      Card [_ (assoc (card-with-mbql-query "Cum Count Card"
+                                       :source-table (data/id :checkins)
+                                       :aggregation  [[:cum-count]]
+                                       :breakout     [[:datetime-field [:field-id (data/id :checkins :date) :month]]])
+                                :result_metadata [{:name "num_toucans"}])]]
+  (saved-questions-virtual-db
+    (virtual-table-for-card ok-card))
+  (fetch-virtual-database))
+
+;; cum sum using old-style single aggregation syntax
+(tt/expect-with-temp [Card [ok-card (ok-mbql-card)]
+                      Card [_ (assoc (card-with-mbql-query "Cum Sum Card"
+                                       :source-table (data/id :checkins)
+                                       :aggregation  [:cum-sum]
+                                       :breakout     [[:datetime-field [:field-id (data/id :checkins :date) :month]]])
+                                :result_metadata [{:name "num_toucans"}])]]
+  (saved-questions-virtual-db
+    (virtual-table-for-card ok-card))
+  (fetch-virtual-database))
+
+
+;; make sure that GET /api/database/:id/metadata works for the Saved Questions 'virtual' database
+(tt/expect-with-temp [Card [card (assoc (card-with-native-query "Birthday Card") :result_metadata [{:name "age_in_bird_years"}])]]
+  (saved-questions-virtual-db
+    (assoc (virtual-table-for-card card)
+      :fields [{:name         "age_in_bird_years"
+                :table_id     (str "card__" (u/get-id card))
+                :id           ["field-literal" "age_in_bird_years" "type/*"]
+                :special_type nil}]))
+  ((user->client :crowberto) :get 200 (format "database/%d/metadata" database/virtual-id)))
+
+;; if no eligible Saved Questions exist the virtual DB metadata endpoint should just return `nil`
+(expect
+  nil
+  ((user->client :crowberto) :get 200 (format "database/%d/metadata" database/virtual-id)))
diff --git a/test/metabase/api/dataset_test.clj b/test/metabase/api/dataset_test.clj
index 1355b9394aa9a781cdfac6a53f39c14492fb5d11..ca0ab8aef463964486c23b0662740c1253c9808a 100644
--- a/test/metabase/api/dataset_test.clj
+++ b/test/metabase/api/dataset_test.clj
@@ -1,6 +1,7 @@
 (ns metabase.api.dataset-test
   "Unit tests for /api/dataset endpoints."
   (:require [expectations :refer :all]
+            [medley.core :as m]
             [metabase.api.dataset :refer [default-query-constraints]]
             [metabase.models.query-execution :refer [QueryExecution]]
             [metabase.query-processor.expand :as ql]
@@ -36,7 +37,7 @@
                    [k (f v)]))))))
 
 (defn format-response [m]
-  (into {} (for [[k v] m]
+  (into {} (for [[k v] (m/dissoc-in m [:data :results_metadata])]
              (cond
                (contains? #{:id :started_at :running_time :hash} k) [k (boolean v)]
                (= :data k) [k (if-not (contains? v :native_form)
diff --git a/test/metabase/api/field_test.clj b/test/metabase/api/field_test.clj
index 6564bdde4dd62210fec1b269cad38bc68417d356..fcebc07ac1bdf80c2ed1dd492a3197704c5965fc 100644
--- a/test/metabase/api/field_test.clj
+++ b/test/metabase/api/field_test.clj
@@ -9,6 +9,7 @@
              [data :refer :all]
              [util :as tu]]
             [metabase.test.data.users :refer :all]
+            [ring.util.codec :as codec]
             [toucan.db :as db]
             [toucan.util.test :as tt]))
 
@@ -170,6 +171,13 @@
   ((user->client :rasta) :get 200 (format "field/%d/values" (id :venues :id))))
 
 
+;; Check that trying to get values for a 'virtual' field just returns a blank values map
+(expect
+  {:values                {}
+   :human_readable_values {}}
+  ((user->client :rasta) :get 200 (format "field/%s/values" (codec/url-encode "field-literal,created_at,type/Datetime"))))
+
+
 ;; ## POST /api/field/:id/value_map_update
 
 ;; Check that we can set values
diff --git a/test/metabase/api/session_test.clj b/test/metabase/api/session_test.clj
index 4b8d97e722071bac826bed21aaa8dbfc9a480a51..5dda57327cc527ac28a25153eae1c2c85badc9aa 100644
--- a/test/metabase/api/session_test.clj
+++ b/test/metabase/api/session_test.clj
@@ -11,8 +11,9 @@
              [user :refer [User]]]
             [metabase.test
              [data :refer :all]
-             [util :as tu :refer [resolve-private-vars]]]
+             [util :as tu :refer [resolve-private-vars with-temporary-setting-values]]]
             [metabase.test.data.users :refer :all]
+            [metabase.test.integrations.ldap :refer [expect-with-ldap-server]]
             [toucan.db :as db]
             [toucan.util.test :as tt]))
 
@@ -24,11 +25,11 @@
       (tu/is-uuid-string? (:id (client :post 200 "session" (user->credentials :rasta))))))
 
 ;; Test for required params
-(expect {:errors {:email "value must be a valid email address."}}
+(expect {:errors {:username "value must be a non-blank string."}}
   (client :post 400 "session" {}))
 
 (expect {:errors {:password "value must be a non-blank string."}}
-  (client :post 400 "session" {:email "anything@metabase.com"}))
+  (client :post 400 "session" {:username "anything@metabase.com"}))
 
 ;; Test for inactive user (user shouldn't be able to login if :is_active = false)
 ;; Return same error as incorrect password to avoid leaking existence of user
@@ -43,9 +44,9 @@
 ;; Test that people get blocked from attempting to login if they try too many times
 ;; (Check that throttling works at the API level -- more tests in the throttle library itself: https://github.com/metabase/throttle)
 (expect
-    [{:errors {:email "Too many attempts! You must wait 15 seconds before trying again."}}
-     {:errors {:email "Too many attempts! You must wait 15 seconds before trying again."}}]
-  (let [login #(client :post 400 "session" {:email "fakeaccount3000@metabase.com", :password "toucans"})]
+    [{:errors {:username "Too many attempts! You must wait 15 seconds before trying again."}}
+     {:errors {:username "Too many attempts! You must wait 15 seconds before trying again."}}]
+  (let [login #(client :post 400 "session" {:username "fakeaccount3000@metabase.com", :password "toucans"})]
     ;; attempt to log in 10 times
     (dorun (repeatedly 10 login))
     ;; throttling should now be triggered
@@ -74,7 +75,7 @@
     (db/update! User (user->id :rasta), :reset_token nil, :reset_triggered nil)
     (assert (not (reset-fields-set?)))
     ;; issue reset request (token & timestamp should be saved)
-    ((user->client :rasta) :post 200 "session/forgot_password" {:email (:email (user->credentials :rasta))})
+    ((user->client :rasta) :post 200 "session/forgot_password" {:email (:username (user->credentials :rasta))})
     ;; TODO - how can we test email sent here?
     (reset-fields-set?)))
 
@@ -99,9 +100,9 @@
       (let [token (u/prog1 (str id "_" (java.util.UUID/randomUUID))
                     (db/update! User id, :reset_token <>))
             creds {:old {:password (:old password)
-                         :email    email}
+                         :username email}
                    :new {:password (:new password)
-                         :email    email}}]
+                         :username email}}]
         ;; Check that creds work
         (client :post 200 "session" (:old creds))
 
@@ -251,3 +252,40 @@
                                      admin-email                             "rasta@toucans.com"]
     (u/prog1 (is-session? (google-auth-fetch-or-create-user! "Rasta" "Toucan" "rasta@sf-toucannery.com"))
       (db/delete! User :email "rasta@sf-toucannery.com"))))                                       ; clean up after ourselves
+
+
+;;; ------------------------------------------------------------ TESTS FOR LDAP AUTH STUFF ------------------------------------------------------------
+
+;; Test that we can login with LDAP
+(expect-with-ldap-server
+  true
+  ;; delete all other sessions for the bird first, otherwise test doesn't seem to work (TODO - why?)
+  (do (db/simple-delete! Session, :user_id (user->id :rasta))
+      (tu/is-uuid-string? (:id (client :post 200 "session" (user->credentials :rasta))))))
+
+;; Test that login will fallback to local for users not in LDAP
+(expect-with-ldap-server
+  true
+  ;; delete all other sessions for the bird first, otherwise test doesn't seem to work (TODO - why?)
+  (do (db/simple-delete! Session, :user_id (user->id :crowberto))
+      (tu/is-uuid-string? (:id (client :post 200 "session" (user->credentials :crowberto))))))
+
+;; Test that login will NOT fallback for users in LDAP but with an invalid password
+(expect-with-ldap-server
+  {:errors {:password "did not match stored password"}}
+  (client :post 400 "session" (user->credentials :lucky))) ; NOTE: there's a different password in LDAP for Lucky
+
+;; Test that login will fallback to local for broken LDAP settings
+;; NOTE: This will ERROR out in the logs, it's normal
+(expect-with-ldap-server
+  true
+  (tu/with-temporary-setting-values [ldap-user-base "cn=wrong,cn=com"]
+    ;; delete all other sessions for the bird first, otherwise test doesn't seem to work (TODO - why?)
+    (do (db/simple-delete! Session, :user_id (user->id :rasta))
+        (tu/is-uuid-string? (:id (client :post 200 "session" (user->credentials :rasta)))))))
+
+;; Test that we can login with LDAP with new user
+(expect-with-ldap-server
+  true
+  (u/prog1 (tu/is-uuid-string? (:id (client :post 200 "session" {:username "sbrown20", :password "1234"})))
+    (db/delete! User :email "sally.brown@metabase.com"))) ; clean up
diff --git a/test/metabase/api/table_test.clj b/test/metabase/api/table_test.clj
index b01c49d8c60f2ba490a6ead7ae00857ff5dff1ea..6472b51930138b6cad8aa7f029f90b1f7cf77782 100644
--- a/test/metabase/api/table_test.clj
+++ b/test/metabase/api/table_test.clj
@@ -2,6 +2,7 @@
   "Tests for /api/table endpoints."
   (:require [clojure.walk :as walk]
             [expectations :refer :all]
+            [medley.core :as m]
             [metabase
              [driver :as driver]
              [http-client :as http]
@@ -9,13 +10,14 @@
              [sync-database :as sync-database]
              [util :as u]]
             [metabase.models
-             [database :refer [Database]]
+             [card :refer [Card]]
+             [database :as database :refer [Database]]
              [field :refer [Field]]
              [permissions :as perms]
              [permissions-group :as perms-group]
              [table :refer [Table]]]
             [metabase.test
-             [data :refer :all]
+             [data :as data :refer :all]
              [util :as tu :refer [match-$ resolve-private-vars]]]
             [metabase.test.data
              [dataset-definitions :as defs]
@@ -23,8 +25,7 @@
             [toucan
              [db :as db]
              [hydrate :as hydrate]]
-            [toucan.util.test :as tt]
-            [medley.core :as m]))
+            [toucan.util.test :as tt]))
 
 (resolve-private-vars metabase.models.table pk-field-id)
 (resolve-private-vars metabase.api.table dimension-options-for-response datetime-dimension-indexes numeric-dimension-indexes)
@@ -488,6 +489,40 @@
                                                               :created_at   $}))}))}])
   ((user->client :rasta) :get 200 (format "table/%d/fks" (id :users))))
 
+;; Make sure metadata for 'virtual' tables comes back as expected from GET /api/table/:id/query_metadata
+(tt/expect-with-temp [Card [card {:name          "Go Dubs!"
+                                  :database_id   (data/id)
+                                  :dataset_query {:database (data/id)
+                                                  :type     :native
+                                                  :native   {:query (format "SELECT NAME, ID, PRICE, LATITUDE FROM VENUES")}}}]]
+  (let [card-virtual-table-id (str "card__" (u/get-id card))]
+    {:display_name "Go Dubs!"
+     :schema       "All questions"
+     :db_id        database/virtual-id
+     :id           card-virtual-table-id
+     :description  nil
+     :fields       (for [[field-name display-name base-type] [["NAME"     "Name"     "type/Text"]
+                                                              ["ID"       "ID"       "type/Integer"]
+                                                              ["PRICE"    "Price"    "type/Integer"]
+                                                              ["LATITUDE" "Latitude" "type/Float"]]]
+                     {:name         field-name
+                      :display_name display-name
+                      :base_type    base-type
+                      :table_id     card-virtual-table-id
+                      :id           ["field-literal" field-name base-type]
+                      :special_type nil})})
+  (do
+    ;; run the Card which will populate its result_metadata column
+    ((user->client :crowberto) :post 200 (format "card/%d/query" (u/get-id card)))
+    ;; Now fetch the metadata for this "table"
+    ((user->client :crowberto) :get 200 (format "table/card__%d/query_metadata" (u/get-id card)))))
+
+
+;; make sure GET /api/table/:id/fks just returns nothing for 'virtual' tables
+(expect
+  []
+  ((user->client :crowberto) :get 200 "table/card__1000/fks"))
+
 ;; Ensure dimensions options are sorted numerically, but returned as strings
 (expect
   (map str (sort (map #(Long/parseLong %) (var-get datetime-dimension-indexes))))
@@ -524,13 +559,17 @@
 
 ;; Lat/Long fields should use bin-width rather than num-bins
 (expect
-  #{"bin-width" "default"}
+  (if (binning-supported?)
+    #{"bin-width" "default"}
+    #{})
   (let [response ((user->client :rasta) :get 200 (format "table/%d/query_metadata" (id :venues)))]
     (extract-dimension-options response "LATITUDE")))
 
 ;; Number columns without a special type should use "num-bins"
 (expect
-  #{"num-bins" "default"}
+  (if (binning-supported?)
+    #{"num-bins" "default"}
+    #{})
   (let [{:keys [special_type]} (Field (id :venues :price))]
     (try
       (db/update! Field (id :venues :price) :special_type nil)
diff --git a/test/metabase/api/user_test.clj b/test/metabase/api/user_test.clj
index 015c5d0884d08d08c8464f7e197fbd9f0c41601d..8e82e371e6890feb60e58ffeb2798ab0fe10a31c 100644
--- a/test/metabase/api/user_test.clj
+++ b/test/metabase/api/user_test.clj
@@ -32,7 +32,8 @@
        :last_login   $
        :first_name   "Crowberto"
        :email        "crowberto@metabase.com"
-       :google_auth  false})
+       :google_auth  false
+       :ldap_auth    false})
     (match-$ (fetch-user :lucky)
       {:common_name  "Lucky Pigeon"
        :last_name    "Pigeon"
@@ -41,7 +42,8 @@
        :last_login   $
        :first_name   "Lucky"
        :email        "lucky@metabase.com"
-       :google_auth  false})
+       :google_auth  false
+       :ldap_auth    false})
     (match-$ (fetch-user :rasta)
       {:common_name  "Rasta Toucan"
        :last_name    "Toucan"
@@ -50,7 +52,8 @@
        :last_login   $
        :first_name   "Rasta"
        :email        "rasta@metabase.com"
-       :google_auth  false})}
+       :google_auth  false
+       :ldap_auth    false})}
   (do
     ;; Delete all the other random Users we've created so far
     (let [user-ids (set (map user->id [:crowberto :rasta :lucky :trashbird]))]
@@ -132,6 +135,7 @@
      :is_superuser false
      :is_qbnewb    true
      :google_auth  false
+     :ldap_auth    false
      :id           $})
   ((user->client :rasta) :get 200 "user/current"))
 
@@ -209,7 +213,7 @@
 ;; Test that a User can change their password (superuser and non-superuser)
 (defn- user-can-reset-password? [superuser?]
   (tt/with-temp User [user {:password "def", :is_superuser (boolean superuser?)}]
-    (let [creds           {:email (:email user), :password "def"}
+    (let [creds           {:username (:email user), :password "def"}
           hashed-password (db/select-one-field :password User, :email (:email user))]
       ;; use API to reset the users password
       (http/client creds :put 200 (format "user/%d/password" (:id user)) {:password     "abc123!!DEF"
@@ -247,7 +251,7 @@
                                  :last_name  (random-name)
                                  :email      "def@metabase.com"
                                  :password   "def123"}]
-    (let [creds {:email    "def@metabase.com"
+    (let [creds {:username "def@metabase.com"
                  :password "def123"}]
       [(metabase.http-client/client creds :put 200 (format "user/%d/qbnewb" id))
        (db/select-one-field :is_qbnewb User, :id id)])))
diff --git a/test/metabase/driver/bigquery_test.clj b/test/metabase/driver/bigquery_test.clj
index 2105db2bae7ed78a1c33deeb1ee1d1c712202b60..571c0160be03c443fffa9e179e0caef036f06b1f 100644
--- a/test/metabase/driver/bigquery_test.clj
+++ b/test/metabase/driver/bigquery_test.clj
@@ -21,10 +21,10 @@
 
 ;; make sure that BigQuery native queries maintain the column ordering specified in the SQL -- post-processing ordering shouldn't apply (Issue #2821)
 (expect-with-engine :bigquery
-  {:columns ["venue_id" "user_id" "checkins_id"]
-   :cols    [{:name "venue_id",    :base_type :type/Integer}
-             {:name "user_id",     :base_type :type/Integer}
-             {:name "checkins_id", :base_type :type/Integer}]}
+  {:cols    [{:name "venue_id",    :display_name "Venue ID",    :base_type :type/Integer}
+             {:name "user_id",     :display_name  "User ID"      :base_type :type/Integer}
+             {:name "checkins_id", :display_name "Checkins ID"  :base_type :type/Integer}],
+   :columns ["venue_id" "user_id" "checkins_id"]}
   (select-keys (:data (qp/process-query {:native   {:query "SELECT [test_data.checkins.venue_id] AS [venue_id], [test_data.checkins.user_id] AS [user_id], [test_data.checkins.id] AS [checkins_id]
                                                             FROM [test_data.checkins]
                                                             LIMIT 2"}
diff --git a/test/metabase/driver/druid_test.clj b/test/metabase/driver/druid_test.clj
index 224150164f2a4c02a627f67553c382dc6ff73844..436ba38d1f8217607468d1eb6e4febb2bb518a8c 100644
--- a/test/metabase/driver/druid_test.clj
+++ b/test/metabase/driver/druid_test.clj
@@ -1,6 +1,7 @@
 (ns metabase.driver.druid-test
   (:require [cheshire.core :as json]
             [expectations :refer [expect]]
+            [medley.core :as m]
             [metabase
              [driver :as driver]
              [query-processor :as qp]
@@ -29,9 +30,10 @@
 (defn- process-native-query [query]
   (datasets/with-engine :druid
     (timeseries-qp-test/with-flattened-dbdef
-      (qp/process-query {:native   {:query query}
-                         :type     :native
-                         :database (data/id)}))))
+      (-> (qp/process-query {:native   {:query query}
+                             :type     :native
+                             :database (data/id)})
+          (m/dissoc-in [:data :results_metadata])))))
 
 ;; test druid native queries
 (expect-with-engine :druid
diff --git a/test/metabase/driver/generic_sql/native_test.clj b/test/metabase/driver/generic_sql/native_test.clj
index 1f9445e9cfba364c0d47c3c554ddf74cfb26b833..f466b820b2fd3cdc8544ecd2f306c47b607a9d7c 100644
--- a/test/metabase/driver/generic_sql/native_test.clj
+++ b/test/metabase/driver/generic_sql/native_test.clj
@@ -15,9 +15,10 @@
                :columns     ["ID"]
                :cols        [{:name "ID", :display_name "ID", :base_type :type/Integer}]
                :native_form {:query "SELECT ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}}}
-  (qp/process-query {:native   {:query "SELECT ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}
-                     :type     :native
-                     :database (id)}))
+  (-> (qp/process-query {:native   {:query "SELECT ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}
+                         :type     :native
+                         :database (id)})
+      (m/dissoc-in [:data :results_metadata])))
 
 ;; Check that column ordering is maintained
 (expect
@@ -30,9 +31,10 @@
                              {:name "NAME",        :display_name "Name",        :base_type :type/Text}
                              {:name "CATEGORY_ID", :display_name "Category ID", :base_type :type/Integer}]
                :native_form {:query "SELECT ID, NAME, CATEGORY_ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}}}
-  (qp/process-query {:native   {:query "SELECT ID, NAME, CATEGORY_ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}
-                     :type     :native
-                     :database (id)}))
+  (-> (qp/process-query {:native   {:query "SELECT ID, NAME, CATEGORY_ID FROM VENUES ORDER BY ID DESC LIMIT 2;"}
+                         :type     :native
+                         :database (id)})
+      (m/dissoc-in [:data :results_metadata])))
 
 ;; Check that we get proper error responses for malformed SQL
 (expect {:status :failed
diff --git a/test/metabase/driver/mongo_test.clj b/test/metabase/driver/mongo_test.clj
index 102e57808d429e4c6a6adda72cefb6b923af9610..edbce9b4d472c202a26e1a9f123b477a35f8e6b1 100644
--- a/test/metabase/driver/mongo_test.clj
+++ b/test/metabase/driver/mongo_test.clj
@@ -1,6 +1,7 @@
 (ns metabase.driver.mongo-test
   "Tests for Mongo driver."
   (:require [expectations :refer :all]
+            [medley.core :as m]
             [metabase
              [driver :as driver]
              [query-processor :as qp]
@@ -80,10 +81,11 @@
                :cols        [{:name "count", :display_name "Count", :base_type :type/Integer}]
                :native_form {:collection "venues"
                              :query      native-query}}}
-  (qp/process-query {:native   {:query      native-query
-                                :collection "venues"}
-                     :type     :native
-                     :database (data/id)}))
+  (-> (qp/process-query {:native   {:query      native-query
+                                    :collection "venues"}
+                         :type     :native
+                         :database (data/id)})
+      (m/dissoc-in [:data :results_metadata])))
 
 ;; ## Tests for individual syncing functions
 
diff --git a/test/metabase/driver/postgres_test.clj b/test/metabase/driver/postgres_test.clj
index 554e9dd363465246b5e6517bc980e6d8e86946ff..ffd9889adbe6b663b560aa3f8de1ca30ed6a65eb 100644
--- a/test/metabase/driver/postgres_test.clj
+++ b/test/metabase/driver/postgres_test.clj
@@ -120,7 +120,7 @@
              [3 "ouija_board"]]}
   (-> (data/dataset metabase.driver.postgres-test/dots-in-names
         (data/run-query objects.stuff))
-      :data (dissoc :cols :native_form)))
+      :data (dissoc :cols :native_form :results_metadata)))
 
 
 ;; Make sure that duplicate column names (e.g. caused by using a FK) still return both columns
@@ -140,7 +140,7 @@
   (-> (data/dataset metabase.driver.postgres-test/duplicate-names
         (data/run-query people
           (ql/fields $name $bird_id->birds.name)))
-      :data (dissoc :cols :native_form)))
+      :data (dissoc :cols :native_form :results_metadata)))
 
 
 ;;; Check support for `inet` columns
diff --git a/test/metabase/driver/presto_test.clj b/test/metabase/driver/presto_test.clj
index ffeca83d0e4424e0863a85f4b8c840bdaadff06f..9832c924be3b3d5bc27929bb10464476c520f58c 100644
--- a/test/metabase/driver/presto_test.clj
+++ b/test/metabase/driver/presto_test.clj
@@ -10,7 +10,7 @@
             [toucan.db :as db])
   (:import metabase.driver.presto.PrestoDriver))
 
-(resolve-private-vars metabase.driver.presto details->uri details->request parse-presto-results quote-name quote+combine-names apply-page)
+(resolve-private-vars metabase.driver.presto details->uri details->request parse-presto-results quote-name quote+combine-names rename-duplicates apply-page)
 
 ;;; HELPERS
 
@@ -53,6 +53,11 @@
   (parse-presto-results [{:type "date"} {:type "timestamp with time zone"} {:type "timestamp"} {:type "decimal(10,4)"} {:type "varchar(255)"}]
                         [["2017-04-03", "2017-04-03 10:19:17.417 America/Toronto", "2017-04-03 10:19:17.417", "3.1416", "test"]]))
 
+(expect
+  [[0, false, "", nil]]
+  (parse-presto-results [{:type "integer"} {:type "boolean"} {:type "varchar(255)"} {:type "date"}]
+                        [[0, false, "", nil]]))
+
 (expect
   "\"weird.table\"\" name\""
   (quote-name "weird.table\" name"))
@@ -61,6 +66,10 @@
   "\"weird . \"\"schema\".\"weird.table\"\" name\""
   (quote+combine-names "weird . \"schema" "weird.table\" name"))
 
+(expect
+  ["name" "count" "count_2" "sum", "sum_2", "sum_3"]
+  (rename-duplicates ["name" "count" "count" "sum" "sum" "sum"]))
+
 ;; DESCRIBE-DATABASE
 (datasets/expect-with-engine :presto
   {:tables #{{:name "categories" :schema "default"}
@@ -90,12 +99,13 @@
 ;;; ANALYZE-TABLE
 (datasets/expect-with-engine :presto
   {:row_count 100
-   :fields    [{:id (data/id :venues :category_id), :values [2 3 4 5 6 7 10 11 12 13 14 15 18 19 20 29 40 43 44 46 48 49 50 58 64 67 71 74]}
-               {:id (data/id :venues :id)}
-               {:id (data/id :venues :latitude)}
-               {:id (data/id :venues :longitude)}
+   :fields    [{:id        (data/id :venues :category_id), :values    [2 3 4 5 6 7 10 11 12 13 14 15 18 19 20 29 40 43 44 46 48 49 50 58 64 67 71 74]
+                :min-value 2.0,                            :max-value 74.0}
+               {:id (data/id :venues :id), :min-value 1.0, :max-value 100.0}
+               {:id (data/id :venues :latitude), :min-value 10.0646, :max-value 40.7794}
+               {:id (data/id :venues :longitude), :min-value -165.374, :max-value -73.9533}
                {:id (data/id :venues :name), :values (db/select-one-field :values 'FieldValues, :field_id (data/id :venues :name))}
-               {:id (data/id :venues :price), :values [1 2 3 4]}]}
+               {:id (data/id :venues :price), :values [1 2 3 4], :min-value 1.0, :max-value 4.0}]}
   (let [venues-table (db/select-one 'Table :id (data/id :venues))]
     (driver/analyze-table (PrestoDriver.) venues-table (set (mapv :id (table/fields venues-table))))))
 
diff --git a/test/metabase/events/activity_feed_test.clj b/test/metabase/events/activity_feed_test.clj
index 9f243b06e06031e809a01949631846f3f3cb669f..2ae4b9e8ebf15b16553b64045d410a7831c8f531 100644
--- a/test/metabase/events/activity_feed_test.clj
+++ b/test/metabase/events/activity_feed_test.clj
@@ -9,8 +9,9 @@
              [metric :refer [Metric]]
              [pulse :refer [Pulse]]
              [segment :refer [Segment]]]
-            [metabase.test.data :refer :all]
+            [metabase.test.data :as data :refer :all]
             [metabase.test.data.users :refer [user->id]]
+            [metabase.util :as u]
             [toucan.db :as db]
             [toucan.util.test :as tt]))
 
@@ -40,6 +41,27 @@
         :topic    "card-create"
         :model_id (:id card)))))
 
+;; when I save a Card that uses a NESTED query, is the activity recorded? :D
+(expect
+  {:topic       :card-create
+   :user_id     (user->id :rasta)
+   :model       "card"
+   :database_id (data/id)
+   :table_id    (data/id :venues)
+   :details     {:name "My Cool NESTED Card", :description nil}}
+  (tt/with-temp* [Card [card-1 {:name          "My Cool Card"
+                                :dataset_query {:database (data/id)
+                                                :type     :query
+                                                :query    {:source-table (data/id :venues)}}}]
+                  Card [card-2 {:name          "My Cool NESTED Card"
+                                :dataset_query {:database metabase.models.database/virtual-id
+                                                :type     :query
+                                                :query    {:source-table (str "card__" (u/get-id card-1))}}}]]
+    (with-temp-activities
+      (process-activity-event! {:topic :card-create, :item card-2})
+      (db/select-one [Activity :topic :user_id :model :database_id :table_id :details]
+        :topic    "card-create"
+        :model_id (:id card-2)))))
 
 
 ;; `:card-update` event
diff --git a/test/metabase/events/revision_test.clj b/test/metabase/events/revision_test.clj
index 7fbb6e7633d589194f9b39d5282a291b1fb304a2..85ce227362a4d8e699d39a4e354630c32a251dfa 100644
--- a/test/metabase/events/revision_test.clj
+++ b/test/metabase/events/revision_test.clj
@@ -44,7 +44,8 @@
    :cache_ttl              nil
    :query_type             "query"
    :table_id               (id :categories)
-   :visualization_settings {}})
+   :visualization_settings {}
+   :result_metadata        nil})
 
 (defn- dashboard->revision-object [dashboard]
   {:description  nil
diff --git a/test/metabase/http_client.clj b/test/metabase/http_client.clj
index b16790230d69800d76db42b769cca561eeb139bc..9de0ef75217a603e25d8bce9405404d62d2ae723 100644
--- a/test/metabase/http_client.clj
+++ b/test/metabase/http_client.clj
@@ -63,14 +63,14 @@
 (declare client)
 
 (defn authenticate
-  "Authenticate a test user with EMAIL and PASSWORD, returning their Metabase Session token;
+  "Authenticate a test user with USERNAME and PASSWORD, returning their Metabase Session token;
    or throw an Exception if that fails."
-  [{:keys [email password], :as credentials}]
-  {:pre [(string? email) (string? password)]}
+  [{:keys [username password], :as credentials}]
+  {:pre [(string? username) (string? password)]}
   (try
     (:id (client :post 200 "session" credentials))
     (catch Throwable e
-      (log/error "Failed to authenticate with email:" email "and password:" password ":" (.getMessage e)))))
+      (log/error "Failed to authenticate with username:" username "and password:" password ":" (.getMessage e)))))
 
 
 ;;; client
@@ -98,12 +98,11 @@
         (log/error (u/pprint-to-str 'red body))
         (throw (ex-info message {:status-code actual-status-code}))))))
 
-(defn- method->request-fn [method]
-  (case method
-    :get    client/get
-    :post   client/post
-    :put    client/put
-    :delete client/delete))
+(def ^:private method->request-fn
+  {:get    client/get
+   :post   client/post
+   :put    client/put
+   :delete client/delete})
 
 (defn- -client [credentials method expected-status url http-body url-param-kwargs request-options]
   ;; Since the params for this function can get a little complicated make sure we validate them
@@ -141,7 +140,7 @@
 
   Args:
 
-   *  CREDENTIALS           Optional map of `:email` and `:password` or `X-METABASE-SESSION` token of a User who we should perform the request as
+   *  CREDENTIALS           Optional map of `:username` and `:password` or `X-METABASE-SESSION` token of a User who we should perform the request as
    *  METHOD                `:get`, `:post`, `:delete`, or `:put`
    *  EXPECTED-STATUS-CODE  When passed, throw an exception if the response has a different status code.
    *  URL                   Base URL of the request, which will be appended to `*url-prefix*`. e.g. `card/1/favorite`
diff --git a/test/metabase/integrations/ldap_test.clj b/test/metabase/integrations/ldap_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..5e1942a83eb786cf5ee6bdff8593feb054112415
--- /dev/null
+++ b/test/metabase/integrations/ldap_test.clj
@@ -0,0 +1,101 @@
+(ns metabase.integrations.ldap-test
+  (:require [expectations :refer :all]
+            [metabase.integrations.ldap :as ldap]
+            (metabase.test [util :refer [resolve-private-vars]])
+            (metabase.test.integrations [ldap :refer [expect-with-ldap-server get-ldap-port]])))
+
+(resolve-private-vars metabase.integrations.ldap escape-value settings->ldap-options get-connection get-user-groups)
+
+
+(defn- get-ldap-details []
+  {:host       "localhost"
+   :port       (get-ldap-port)
+   :bind-dn    "cn=Directory Manager"
+   :password   "password"
+   :security   "none"
+   :user-base  "dc=metabase,dc=com"
+   :group-base "dc=metabase,dc=com"})
+
+;; See test_resources/ldap.ldif for fixtures
+
+(expect
+  "\\2AJohn \\28Dude\\29 Doe\\5C"
+  (escape-value "*John (Dude) Doe\\"))
+
+;; The connection test should pass with valid settings
+(expect-with-ldap-server
+  {:status :SUCCESS}
+  (ldap/test-ldap-connection (get-ldap-details)))
+
+;; The connection test should allow anonymous binds
+(expect-with-ldap-server
+  {:status :SUCCESS}
+  (ldap/test-ldap-connection (dissoc (get-ldap-details) :bind-dn)))
+
+;; The connection test should fail with an invalid user search base
+(expect-with-ldap-server
+  :ERROR
+  (:status (ldap/test-ldap-connection (assoc (get-ldap-details) :user-base "dc=example,dc=com"))))
+
+;; The connection test should fail with an invalid group search base
+(expect-with-ldap-server
+  :ERROR
+  (:status (ldap/test-ldap-connection (assoc (get-ldap-details) :group-base "dc=example,dc=com"))))
+
+;; The connection test should fail with an invalid bind DN
+(expect-with-ldap-server
+  :ERROR
+  (:status (ldap/test-ldap-connection (assoc (get-ldap-details) :bind-dn "cn=Not Directory Manager"))))
+
+;; The connection test should fail with an invalid bind password
+(expect-with-ldap-server
+  :ERROR
+  (:status (ldap/test-ldap-connection (assoc (get-ldap-details) :password "wrong"))))
+
+;; Make sure the basic connection stuff works, this will throw otherwise
+(expect-with-ldap-server
+  nil
+  (.close (get-connection)))
+
+;; Login with everything right should succeed
+(expect-with-ldap-server
+  true
+  (ldap/verify-password "cn=Directory Manager" "password"))
+
+;; Login with wrong password should fail
+(expect-with-ldap-server
+  false
+  (ldap/verify-password "cn=Directory Manager" "wrongpassword"))
+
+;; Login with invalid DN should fail
+(expect-with-ldap-server
+  false
+  (ldap/verify-password "cn=Nobody,ou=nowhere,dc=metabase,dc=com" "password"))
+
+;; Login for regular users should also work
+(expect-with-ldap-server
+  true
+  (ldap/verify-password "cn=Sally Brown,ou=People,dc=metabase,dc=com" "1234"))
+
+;; Login for regular users should also fail for the wrong password
+(expect-with-ldap-server
+  false
+  (ldap/verify-password "cn=Sally Brown,ou=People,dc=metabase,dc=com" "password"))
+
+;; Find by username should work (given the default LDAP filter and test fixtures)
+(expect-with-ldap-server
+  {:dn         "cn=John Smith,ou=People,dc=metabase,dc=com"
+   :first-name "John"
+   :last-name  "Smith"
+   :email      "John.Smith@metabase.com"
+   :groups     ["cn=Accounting,ou=Groups,dc=metabase,dc=com"]}
+  (ldap/find-user "jsmith1"))
+
+;; Find by email should also work (also given our default settings and fixtures)
+(expect-with-ldap-server
+  {:dn         "cn=John Smith,ou=People,dc=metabase,dc=com"
+   :first-name "John"
+   :last-name  "Smith"
+   :email      "John.Smith@metabase.com"
+   :groups     ["cn=Accounting,ou=Groups,dc=metabase,dc=com"]}
+  (ldap/find-user "John.Smith@metabase.com"))
diff --git a/test/metabase/middleware_test.clj b/test/metabase/middleware_test.clj
index 90175af670f6a37eb34c3cf14472ce4a174e0676..94cf4d396ace2e23988ffac8943f6adae2d92ae7 100644
--- a/test/metabase/middleware_test.clj
+++ b/test/metabase/middleware_test.clj
@@ -15,7 +15,8 @@
             [metabase.test.data.users :refer :all]
             [ring.mock.request :as mock]
             [ring.util.response :as resp]
-            [toucan.db :as db]))
+            [toucan.db :as db]
+            [clojure.string :as string]))
 
 ;;  ===========================  TEST wrap-session-id middleware  ===========================
 
@@ -217,12 +218,12 @@
               _ (Thread/sleep 1000)
               second-second (async/poll! connection)
               eventually (apply str (async/<!! (async/into [] connection)))]
-          [first-second second-second eventually])))))
+          [first-second second-second (string/trim eventually)])))))
 
 
 ;;slow success
 (expect
-  [\newline \newline "\n\n\n{\"success\":true}"]
+  [\newline \newline "{\"success\":true}"]
   (test-streaming-endpoint streaming-slow-success))
 
 ;; immediate success should have no padding
@@ -232,7 +233,7 @@
 
 ;; we know delayed failures (exception thrown) will just drop the connection
 (expect
-  [\newline \newline "\n\n\n"]
+  [\newline \newline ""]
   (test-streaming-endpoint streaming-slow-failure))
 
 ;; immediate failures (where an exception is thown will return a 500
diff --git a/test/metabase/models/card_test.clj b/test/metabase/models/card_test.clj
index 0d7fc226e149a9d3122a0b6293c5e14053d1a114..9dde412f80c1a58365eac44e3a000ba5b47441b3 100644
--- a/test/metabase/models/card_test.clj
+++ b/test/metabase/models/card_test.clj
@@ -5,6 +5,7 @@
              [card :refer :all]
              [dashboard :refer [Dashboard]]
              [dashboard-card :refer [DashboardCard]]
+             [database :as database]
              [interface :as mi]
              [permissions :as perms]]
             [metabase.query-processor.expand :as ql]
@@ -120,6 +121,42 @@
                            (ql/order-by (ql/asc (ql/fk-> (data/id :checkins :venue_id) (data/id :venues :name))))))
                    :read))
 
+;; MBQL w/ nested MBQL query
+(defn- query-with-source-card [card]
+  {:database database/virtual-id, :type "query", :query {:source_table (str "card__" (u/get-id card))}})
+
+(expect
+  #{(perms/object-path (data/id) "PUBLIC" (data/id :venues))}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :query
+                                            :query    {:source-table (data/id :venues)}}}]
+    (query-perms-set (query-with-source-card card) :read)))
+
+;; MBQL w/ nested MBQL query including a JOIN
+(expect
+  #{(perms/object-path (data/id) "PUBLIC" (data/id :checkins))
+    (perms/object-path (data/id) "PUBLIC" (data/id :users))}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :query
+                                            :query    {:source-table (data/id :checkins)
+                                                       :order-by     [[:asc [:fk-> (data/id :checkins :user_id) (data/id :users :id)]]]}}}]
+    (query-perms-set (query-with-source-card card) :read)))
+
+;; MBQL w/ nested NATIVE query
+(expect
+  #{(perms/native-read-path (data/id))}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :native
+                                            :native   {:query "SELECT * FROM CHECKINS"}}}]
+    (query-perms-set (query-with-source-card card) :read)))
+
+(expect
+  #{(perms/native-readwrite-path (data/id))}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :native
+                                            :native   {:query "SELECT * FROM CHECKINS"}}}]
+    (query-perms-set (query-with-source-card card) :write)))
+
 ;; invalid/legacy card should return perms for something that doesn't exist so no one gets to see it
 (expect
   #{"/db/0/"}
diff --git a/test/metabase/models/pulse_test.clj b/test/metabase/models/pulse_test.clj
index 6771d417dfe97548101ba54f3373d2230c034e13..a080de15b18ba802d0474e167b3f1d9ec4eb8486 100644
--- a/test/metabase/models/pulse_test.clj
+++ b/test/metabase/models/pulse_test.clj
@@ -183,3 +183,13 @@
                                                   :recipients    [{:email "foo@bar.com"}
                                                                   {:id (user->id :crowberto)}]}]
                                 :skip-if-empty? false})))
+
+;; make sure fetching a Pulse doesn't return any archived cards
+(expect
+  1
+  (tt/with-temp* [Pulse     [pulse]
+                  Card      [card-1 {:archived true}]
+                  Card      [card-2]
+                  PulseCard [_ {:pulse_id (u/get-id pulse), :card_id (u/get-id card-1), :position 0}]
+                  PulseCard [_ {:pulse_id (u/get-id pulse), :card_id (u/get-id card-2), :position 1}]]
+    (count (:cards (retrieve-pulse (u/get-id pulse))))))
diff --git a/test/metabase/query_processor/expand_resolve_test.clj b/test/metabase/query_processor/expand_resolve_test.clj
index 06130f4f55f44e68b96c2d04ce4f534f1fa65273..0b4644356cad68dc8df68dff47962fca1c9632f6 100644
--- a/test/metabase/query_processor/expand_resolve_test.clj
+++ b/test/metabase/query_processor/expand_resolve_test.clj
@@ -23,6 +23,12 @@
   {:fk-field-id      nil, :datetime-unit nil,
    :binning-strategy nil, :binning-param nil})
 
+(def ^:private field-defaults
+  {:visibility-type :normal, :fk-field-id nil
+   :position        nil,     :description nil
+   :parent-id       nil,     :parent      nil
+   :min-value       nil,     :max-value   nil})
+
 ;; basic rows query w/ filter
 (expect
   [ ;; expanded form
@@ -42,39 +48,29 @@
                                   :name   "VENUES"
                                   :id     (id :venues)}
                    :filter       {:filter-type :>
-                                  :field       {:field-id           (id :venues :price)
-                                                :fk-field-id        nil
-                                                :field-name         "PRICE"
-                                                :field-display-name "Price"
-                                                :base-type          :type/Integer
-                                                :special-type       :type/Category
-                                                :visibility-type    :normal
-                                                :table-id           (id :venues)
-                                                :schema-name        "PUBLIC"
-                                                :table-name         "VENUES"
-                                                :position           nil
-                                                :description        nil
-                                                :parent-id          nil
-                                                :parent             nil
-                                                :min-value          1.0
-                                                :max-value          4.0}
+                                  :field       (merge field-defaults
+                                                      {:field-id           (id :venues :price)
+                                                       :field-name         "PRICE"
+                                                       :field-display-name "Price"
+                                                       :base-type          :type/Integer
+                                                       :special-type       :type/Category
+                                                       :table-id           (id :venues)
+                                                       :schema-name        "PUBLIC"
+                                                       :table-name         "VENUES"
+                                                       :min-value          1.0
+                                                       :max-value          4.0})
                                   :value       {:value 1
-                                                :field {:field-id           (id :venues :price)
-                                                        :fk-field-id        nil
-                                                        :field-name         "PRICE"
-                                                        :field-display-name "Price"
-                                                        :base-type          :type/Integer
-                                                        :special-type       :type/Category
-                                                        :visibility-type    :normal
-                                                        :table-id           (id :venues)
-                                                        :schema-name        "PUBLIC"
-                                                        :table-name         "VENUES"
-                                                        :position           nil
-                                                        :description        nil
-                                                        :parent-id          nil
-                                                        :parent             nil
-                                                        :min-value          1.0
-                                                        :max-value          4.0}}}
+                                                :field (merge field-defaults
+                                                              {:field-id           (id :venues :price)
+                                                               :field-name         "PRICE"
+                                                               :field-display-name "Price"
+                                                               :base-type          :type/Integer
+                                                               :special-type       :type/Category
+                                                               :table-id           (id :venues)
+                                                               :schema-name        "PUBLIC"
+                                                               :table-name         "VENUES"
+                                                               :min-value          1.0
+                                                               :max-value          4.0})}}
                    :join-tables  nil}
     :fk-field-ids #{}
     :table-ids    #{(id :venues)}}]
@@ -105,39 +101,27 @@
                                   :name   "VENUES"
                                   :id     (id :venues)}
                    :filter       {:filter-type :=
-                                  :field       {:field-id           (id :categories :name)
-                                                :fk-field-id        (id :venues :category_id)
-                                                :field-name         "NAME"
-                                                :field-display-name "Name"
-                                                :base-type          :type/Text
-                                                :special-type       :type/Name
-                                                :visibility-type    :normal
-                                                :table-id           (id :categories)
-                                                :schema-name        nil
-                                                :table-name         "CATEGORIES__via__CATEGORY_ID"
-                                                :position           nil
-                                                :description        nil
-                                                :parent-id          nil
-                                                :parent             nil
-                                                :min-value          nil
-                                                :max-value          nil}
+                                  :field       (merge field-defaults
+                                                      {:field-id           (id :categories :name)
+                                                       :fk-field-id        (id :venues :category_id)
+                                                       :field-name         "NAME"
+                                                       :field-display-name "Name"
+                                                       :base-type          :type/Text
+                                                       :special-type       :type/Name
+                                                       :table-id           (id :categories)
+                                                       :schema-name        nil
+                                                       :table-name         "CATEGORIES__via__CATEGORY_ID"})
                                   :value       {:value "abc"
-                                                :field {:field-id           (id :categories :name)
-                                                        :fk-field-id        (id :venues :category_id)
-                                                        :field-name         "NAME"
-                                                        :field-display-name "Name"
-                                                        :base-type          :type/Text
-                                                        :special-type       :type/Name
-                                                        :visibility-type    :normal
-                                                        :table-id           (id :categories)
-                                                        :schema-name        nil
-                                                        :table-name         "CATEGORIES__via__CATEGORY_ID"
-                                                        :position           nil
-                                                        :description        nil
-                                                        :parent-id          nil
-                                                        :parent             nil
-                                                        :min-value          nil
-                                                        :max-value          nil}}}
+                                                :field (merge field-defaults
+                                                              {:field-id           (id :categories :name)
+                                                               :fk-field-id        (id :venues :category_id)
+                                                               :field-name         "NAME"
+                                                               :field-display-name "Name"
+                                                               :base-type          :type/Text
+                                                               :special-type       :type/Name
+                                                               :table-id           (id :categories)
+                                                               :schema-name        nil
+                                                               :table-name         "CATEGORIES__via__CATEGORY_ID"})}}
                    :join-tables  [{:source-field {:field-id   (id :venues :category_id)
                                                   :field-name "CATEGORY_ID"}
                                    :pk-field     {:field-id   (id :categories :id)
@@ -149,8 +133,8 @@
     :fk-field-ids #{(id :venues :category_id)}
     :table-ids    #{(id :categories)}}]
   (let [expanded-form (ql/expand (wrap-inner-query (query venues
-                                                          (ql/filter (ql/= $category_id->categories.name
-                                                                           "abc")))))]
+                                                     (ql/filter (ql/= $category_id->categories.name
+                                                                      "abc")))))]
     (mapv obj->map [expanded-form
                     (resolve/resolve expanded-form)])))
 
@@ -178,40 +162,28 @@
                                   :name   "CHECKINS"
                                   :id     (id :checkins)}
                    :filter       {:filter-type :>
-                                  :field       {:field {:field-id           (id :users :last_login)
-                                                        :fk-field-id        (id :checkins :user_id)
-                                                        :field-name         "LAST_LOGIN"
-                                                        :field-display-name "Last Login"
-                                                        :base-type          :type/DateTime
-                                                        :special-type       nil
-                                                        :visibility-type    :normal
-                                                        :table-id           (id :users)
-                                                        :schema-name        nil
-                                                        :table-name         "USERS__via__USER_ID"
-                                                        :position           nil
-                                                        :description        nil
-                                                        :parent-id          nil
-                                                        :parent             nil
-                                                        :min-value          nil
-                                                        :max-value          nil}
+                                  :field       {:field (merge field-defaults
+                                                              {:field-id           (id :users :last_login)
+                                                               :fk-field-id        (id :checkins :user_id)
+                                                               :field-name         "LAST_LOGIN"
+                                                               :field-display-name "Last Login"
+                                                               :base-type          :type/DateTime
+                                                               :special-type       nil
+                                                               :table-id           (id :users)
+                                                               :schema-name        nil
+                                                               :table-name         "USERS__via__USER_ID"})
                                                 :unit  :year}
                                   :value       {:value (u/->Timestamp "1980-01-01")
-                                                :field {:field {:field-id           (id :users :last_login)
-                                                                :fk-field-id        (id :checkins :user_id)
-                                                                :field-name         "LAST_LOGIN"
-                                                                :field-display-name "Last Login"
-                                                                :base-type          :type/DateTime
-                                                                :special-type       nil
-                                                                :visibility-type    :normal
-                                                                :table-id           (id :users)
-                                                                :schema-name        nil
-                                                                :table-name         "USERS__via__USER_ID"
-                                                                :position           nil
-                                                                :description        nil
-                                                                :parent-id          nil
-                                                                :parent             nil
-                                                                :min-value          nil
-                                                                :max-value          nil}
+                                                :field {:field (merge field-defaults
+                                                                      {:field-id           (id :users :last_login)
+                                                                       :fk-field-id        (id :checkins :user_id)
+                                                                       :field-name         "LAST_LOGIN"
+                                                                       :field-display-name "Last Login"
+                                                                       :base-type          :type/DateTime
+                                                                       :special-type       nil
+                                                                       :table-id           (id :users)
+                                                                       :schema-name        nil
+                                                                       :table-name         "USERS__via__USER_ID"})
                                                         :unit  :year}}}
                    :join-tables  [{:source-field {:field-id   (id :checkins :user_id)
                                                   :field-name "USER_ID"}
@@ -252,38 +224,28 @@
                                   :id     (id :checkins)}
                    :aggregation  [{:aggregation-type    :sum
                                    :custom-name         nil
-                                   :field               {:description        nil
-                                                         :base-type          :type/Integer
-                                                         :parent             nil
-                                                         :table-id           (id :venues)
-                                                         :special-type       :type/Category
-                                                         :field-name         "PRICE"
-                                                         :field-display-name "Price"
-                                                         :parent-id          nil
-                                                         :visibility-type    :normal
-                                                         :position           nil
-                                                         :field-id           (id :venues :price)
-                                                         :fk-field-id        (id :checkins :venue_id)
-                                                         :table-name         "VENUES__via__VENUE_ID"
-                                                         :schema-name        nil
-                                                         :min-value          1.0
-                                                         :max-value          4.0}}]
-                   :breakout     [{:field {:description        nil
-                                           :base-type          :type/Date
-                                           :parent             nil
-                                           :table-id           (id :checkins)
-                                           :special-type       nil
-                                           :field-name         "DATE"
-                                           :field-display-name "Date"
-                                           :parent-id          nil
-                                           :visibility-type    :normal
-                                           :position           nil
-                                           :field-id           (id :checkins :date)
-                                           :fk-field-id        nil
-                                           :table-name         "CHECKINS"
-                                           :schema-name        "PUBLIC"
-                                           :min-value          nil
-                                           :max-value          nil}
+                                   :field               (merge field-defaults
+                                                               {:base-type          :type/Integer
+                                                                :table-id           (id :venues)
+                                                                :special-type       :type/Category
+                                                                :field-name         "PRICE"
+                                                                :field-display-name "Price"
+                                                                :field-id           (id :venues :price)
+                                                                :fk-field-id        (id :checkins :venue_id)
+                                                                :table-name         "VENUES__via__VENUE_ID"
+                                                                :schema-name        nil
+                                                                :min-value          1.0
+                                                                :max-value          4.0})}]
+                   :breakout     [{:field (merge field-defaults
+                                                 {:description        nil
+                                                  :base-type          :type/Date
+                                                  :table-id           (id :checkins)
+                                                  :special-type       nil
+                                                  :field-name         "DATE"
+                                                  :field-display-name "Date"
+                                                  :field-id           (id :checkins :date)
+                                                  :table-name         "CHECKINS"
+                                                  :schema-name        "PUBLIC"})
                                    :unit  :day-of-week}]
                    :join-tables  [{:source-field {:field-id   (id :checkins :venue_id)
                                                   :field-name "VENUE_ID"}
diff --git a/test/metabase/query_processor/middleware/annotate_and_sort_test.clj b/test/metabase/query_processor/middleware/annotate_and_sort_test.clj
index fabdac0715d2da0e09448d95bb13918431673173..422287b29f4915ee12048befc21da4202ef61c5c 100644
--- a/test/metabase/query_processor/middleware/annotate_and_sort_test.clj
+++ b/test/metabase/query_processor/middleware/annotate_and_sort_test.clj
@@ -1,5 +1,6 @@
 (ns metabase.query-processor.middleware.annotate-and-sort-test
   (:require [expectations :refer :all]
+            metabase.query-processor.middleware.annotate-and-sort
             [metabase.test.util :as tu]))
 
 (tu/resolve-private-vars metabase.query-processor.middleware.annotate-and-sort
diff --git a/test/metabase/query_processor/middleware/annotate_test.clj b/test/metabase/query_processor/middleware/annotate_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..e847074df8ec0607eeda180161bad6222941380a
--- /dev/null
+++ b/test/metabase/query_processor/middleware/annotate_test.clj
@@ -0,0 +1,105 @@
+(ns metabase.query-processor.middleware.annotate-test
+  (:require [expectations :refer [expect]]
+            [metabase.query-processor
+             [annotate :as annotate]
+             [interface :as qpi]]
+            [metabase.util :as u]
+            [toucan.util.test :as tt]))
+
+;; make sure when using a source query the right metadata comes back so we are able to do drill-through properly
+(expect
+  [{:field-id   [:field-literal "id" :type/Integer]
+    :field-name "id"
+    :source     :fields}
+   {:field-id   [:field-literal "reciever_id" :type/Integer]
+    :field-name "reciever_id"
+    :source     :fields}
+   {:field-id   [:field-literal "sender_id" :type/Integer]
+    :field-name "sender_id"
+    :source     :fields}
+   {:field-id   [:field-literal "text" :type/Text]
+    :field-name "text"
+    :source     :fields}]
+  (map
+   (u/rpartial select-keys [:field-id :field-name :source])
+   (annotate/collect-fields
+     {:source-query {:source-table       {:schema "public", :name "messages", :id 1}
+                     :fields-is-implicit true
+                     :fields             [(qpi/map->Field
+                                           {:field-id           1
+                                            :field-name         "id"
+                                            :field-display-name "ID"
+                                            :base-type          :type/Integer
+                                            :special-type       :type/PK
+                                            :table-id           1})
+                                          (qpi/map->Field
+                                           {:field-id           2
+                                            :field-name         "reciever_id"
+                                            :field-display-name "Rec I Ever ID"
+                                            :base-type          :type/Integer
+                                            :special-type       :type/FK
+                                            :table-id           1})
+                                          (qpi/map->Field
+                                           {:field-id           3
+                                            :field-name         "sender_id"
+                                            :field-display-name "Sender ID"
+                                            :base-type          :type/Integer
+                                            :special-type       :type/FK
+                                            :table-id           1})
+                                          (qpi/map->Field
+                                           {:field-id           3
+                                            :field-name         "text"
+                                            :field-display-name "Text"
+                                            :base-type          :type/Text
+                                            :special-type       :type/Category
+                                            :table-id           1})]}})))
+
+;; make sure when doing a breakout of a nested query the right metadata comes back (fields are "collected" properly) so things like bar charts work as expected
+(expect
+  [{:field-id [:field-literal "text"        :type/Text],    :field-name "text",        :source :breakout}
+   {:field-id [:field-literal "id"          :type/Integer], :field-name "id",          :source :fields}
+   {:field-id [:field-literal "reciever_id" :type/Integer], :field-name "reciever_id", :source :fields}
+   {:field-id [:field-literal "sender_id"   :type/Integer], :field-name "sender_id",   :source :fields}
+   {:field-id [:field-literal "text"        :type/Text],    :field-name "text",        :source :fields}
+   {:field-id [:field-literal "text"        :type/Text],    :field-name "text",        :source :order-by}
+   {:field-id [:field-literal "text"        :type/Text],    :field-name "text",        :source :order-by}]
+  (map
+   (u/rpartial select-keys [:field-id :field-name :source])
+   (annotate/collect-fields
+     {:aggregation  [{:aggregation-type :count, :custom-name nil}]
+      :breakout     [(qpi/map->FieldLiteral {:field-name "text", :base-type :type/Text, :datetime-unit nil})]
+      :source-query {:source-table       {:schema "public", :name "messages", :id 1}
+                     :fields-is-implicit true
+                     :fields             [(qpi/map->Field
+                                           {:field-id     1
+                                            :field-name   "id"
+                                            :base-type    :type/Integer
+                                            :special-type :type/PK
+                                            :table-id     1})
+                                          (qpi/map->Field
+                                           {:field-id     2
+                                            :field-name   "reciever_id"
+                                            :base-type    :type/Integer
+                                            :special-type :type/FK
+                                            :table-id     1})
+                                          (qpi/map->Field
+                                           {:field-id     3
+                                            :field-name   "sender_id"
+                                            :base-type    :type/Integer
+                                            :special-type :type/FK
+                                            :table-id     1})
+                                          (qpi/map->Field
+                                           {:field-id     4
+                                            :field-name   "text"
+                                            :base-type    :type/Text
+                                            :special-type :type/Category
+                                            :table-id     1})]
+                     :order-by           [{:field     (qpi/map->Field
+                                                       {:field-id     4
+                                                        :field-name   "text"
+                                                        :base-type    :type/Text
+                                                        :special-type :type/Category
+                                                        :table-id     1})
+                                           :direction :ascending}]}
+      :order-by     [{:field     (qpi/map->FieldLiteral {:field-name "text", :base-type :type/Text, :datetime-unit nil})
+                      :direction :ascending}]})))
diff --git a/test/metabase/query_processor/middleware/fetch_source_query_test.clj b/test/metabase/query_processor/middleware/fetch_source_query_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..c0fc6e9afd8ca39b23a1e0149ef6f1621edf630c
--- /dev/null
+++ b/test/metabase/query_processor/middleware/fetch_source_query_test.clj
@@ -0,0 +1,103 @@
+(ns metabase.query-processor.middleware.fetch-source-query-test
+  (:require [expectations :refer [expect]]
+            [medley.core :as m]
+            [metabase
+             [query-processor :as qp]
+             [util :as u]]
+            [metabase.models
+             [card :refer [Card]]
+             [database :as database]]
+            [metabase.query-processor.middleware.fetch-source-query :as fetch-source-query]
+            [metabase.test.data :as data]
+            [toucan.util.test :as tt]))
+
+(def ^:private ^{:arglists '([query])} fetch-source-query (fetch-source-query/fetch-source-query identity))
+
+;; make sure that the `fetch-source-query` middleware correctly resolves MBQL queries
+(expect
+  {:database (data/id)
+   :type     :query
+   :query    {:aggregation  [:count]
+              :breakout     [[:field-literal :price :type/Integer]]
+              :source-query {:source-table (data/id :venues)}}}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :query
+                                            :query    {:source-table (data/id :venues)}}}]
+    (fetch-source-query {:database database/virtual-id
+                         :type     :query
+                         :query    {:source-table (str "card__" (u/get-id card))
+                                    :aggregation  [:count]
+                                    :breakout     [[:field-literal :price :type/Integer]]}})))
+
+;; make sure that the `fetch-source-query` middleware correctly resolves native queries
+(expect
+  {:database (data/id)
+   :type     :query
+   :query    {:aggregation  [:count]
+              :breakout     [[:field-literal :price :type/Integer]]
+              :source-query {:native        (format "SELECT * FROM %s" (data/format-name "venues"))
+                             :template_tags nil}}}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :native
+                                            :native   {:query (format "SELECT * FROM %s" (data/format-name "venues"))}}}]
+    (fetch-source-query {:database database/virtual-id
+                         :type     :query
+                         :query    {:source-table (str "card__" (u/get-id card))
+                                    :aggregation  [:count]
+                                    :breakout     [[:field-literal :price :type/Integer]]}})))
+
+
+;; test that the `metabase.query-processor/expand` function properly handles nested queries (this function should call `fetch-source-query`)
+(expect
+  {:database     {:name "test-data", :id (data/id), :engine :h2}
+   :type         :query
+   :query        {:source-query {:source-table {:schema "PUBLIC", :name "VENUES", :id (data/id :venues)}
+                                 :join-tables  nil}}
+   :fk-field-ids #{}}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :query
+                                            :query    {:source-table (data/id :venues)}}}]
+    (-> (qp/expand {:database database/virtual-id
+                    :type     :query
+                    :query    {:source-table (str "card__" (u/get-id card))}})
+        (m/dissoc-in [:database :features])
+        (m/dissoc-in [:database :details]))))
+
+;; make sure that nested nested queries work as expected
+(expect
+  {:database (data/id)
+   :type     :query
+   :query    {:limit        25
+              :source-query {:limit        50
+                             :source-query {:source-table (data/id :venues)
+                                            :limit        100}}}}
+  (tt/with-temp* [Card [card-1 {:dataset_query {:database (data/id)
+                                                :type     :query
+                                                :query    {:source-table (data/id :venues), :limit 100}}}]
+                  Card [card-2 {:dataset_query {:database database/virtual-id
+                                                :type     :query
+                                                :query    {:source-table (str "card__" (u/get-id card-1)), :limit 50}}}]]
+    ((fetch-source-query/fetch-source-query identity) {:database database/virtual-id
+                                                       :type     :query
+                                                       :query    {:source-table (str "card__" (u/get-id card-2)), :limit 25}})))
+
+(expect
+  {:database     {:name "test-data", :id (data/id), :engine :h2}
+   :type         :query
+   :query        {:limit        25
+                  :source-query {:limit 50
+                                 :source-query {:source-table {:schema "PUBLIC", :name "VENUES", :id (data/id :venues)}
+                                                :limit        100
+                                                :join-tables  nil}}}
+   :fk-field-ids #{}}
+  (tt/with-temp* [Card [card-1 {:dataset_query {:database (data/id)
+                                                :type     :query
+                                                :query    {:source-table (data/id :venues), :limit 100}}}]
+                  Card [card-2 {:dataset_query {:database database/virtual-id
+                                                :type     :query
+                                                :query    {:source-table (str "card__" (u/get-id card-1)), :limit 50}}}]]
+    (-> (qp/expand {:database database/virtual-id
+                    :type     :query
+                    :query    {:source-table (str "card__" (u/get-id card-2)), :limit 25}})
+        (m/dissoc-in [:database :features])
+        (m/dissoc-in [:database :details]))))
diff --git a/test/metabase/query_processor/middleware/permissions_test.clj b/test/metabase/query_processor/middleware/permissions_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..69eb16e37783b6f79217028df02158a04f320715
--- /dev/null
+++ b/test/metabase/query_processor/middleware/permissions_test.clj
@@ -0,0 +1,118 @@
+(ns metabase.query-processor.middleware.permissions-test
+  "Tests for the middleware that checks whether the current user has permissions to run a given query."
+  (:require [expectations :refer :all]
+            [metabase.api.common :as api]
+            [metabase.models
+             [database :refer [Database]]
+             [permissions :as perms]
+             [permissions-group :as perms-group]
+             [table :refer [Table]]
+             [user :as user]]
+            [metabase.query-processor.middleware.permissions :refer [check-query-permissions]]
+            [metabase.test.data.users :as users]
+            [metabase.util :as u]
+            [toucan.util.test :as tt]))
+
+(def ^:private ^{:arglists '([query]), :style/indent 0} check-perms (check-query-permissions identity))
+
+(defn- do-with-rasta
+  "Call F with rasta as the current user."
+  [f]
+  (binding [api/*current-user-id*              (users/user->id :rasta)
+            api/*current-user-permissions-set* (atom (user/permissions-set (users/user->id :rasta)))]
+    (f)))
+
+(defn- check-perms-for-rasta
+  "Check permissions for QUERY with rasta as the current user."
+  {:style/indent 0}
+  [query]
+  (do-with-rasta (fn [] (check-perms query))))
+
+;;; ------------------------------------------------------------ Native Queries ------------------------------------------------------------
+
+;; Make sure the NATIVE query fails to run if current user doesn't have perms
+(expect
+  Exception
+  (check-perms-for-rasta
+    {:database 1000
+     :type     :native
+     :native   {:query "SELECT * FROM VENUES"}}))
+
+;; ...but it should work if user has perms
+(tt/expect-with-temp [Database [db]]
+  ;; query should be returned by middleware unchanged
+  {:database (u/get-id db)
+   :type     :native
+   :native   {:query "SELECT * FROM VENUES"}}
+  (check-perms-for-rasta
+    {:database (u/get-id db)
+     :type     :native
+     :native   {:query "SELECT * FROM VENUES"}}))
+
+
+;;; ------------------------------------------------------------ MBQL Queries ------------------------------------------------------------
+
+(expect
+  Exception
+  (tt/with-temp* [Database [db]
+                  Table    [table {:db_id (u/get-id db)}]]
+    (perms/revoke-permissions! (perms-group/all-users) (u/get-id db)) ; All users get perms for all new DBs by default
+    (check-perms-for-rasta
+      {:database (u/get-id db)
+       :type     :query
+       :query    {:source-table {:name "Toucans", :id (u/get-id table)}}})))
+
+(tt/expect-with-temp [Database [db]
+                      Table    [table {:db_id (u/get-id db)}]]
+  ;; query should be returned by middleware unchanged
+  {:database (u/get-id db)
+   :type     :query
+   :query    {:source-table {:name "Toucans", :id (u/get-id table)}}}
+  (check-perms-for-rasta
+    {:database (u/get-id db)
+     :type     :query
+     :query    {:source-table {:name "Toucans", :id (u/get-id table)}}}))
+
+
+;;; ------------------------------------------------------------ Nested Native Queries ------------------------------------------------------------
+
+(expect
+  Exception
+  (check-perms-for-rasta
+    {:database 1000
+     :type     :query
+     :query   {:source-query {:native "SELECT * FROM VENUES"}}}))
+
+;; ...but it should work if user has perms
+(tt/expect-with-temp [Database [db]]
+  {:database (u/get-id db)
+   :type     :query
+   :query    {:source-query {:native "SELECT * FROM VENUES"}}}
+  (check-perms-for-rasta
+    {:database (u/get-id db)
+     :type     :query
+     :query   {:source-query {:native "SELECT * FROM VENUES"}}}))
+
+
+;;; ------------------------------------------------------------ Nested MBQL Queries ------------------------------------------------------------
+
+;; For nested queries MBQL make sure perms are checked
+(expect
+  Exception
+  (tt/with-temp* [Database [db]
+                  Table    [table {:db_id (u/get-id db)}]]
+    (perms/revoke-permissions! (perms-group/all-users) (u/get-id db)) ; All users get perms for all new DBs by default
+    (check-perms-for-rasta
+      {:database (u/get-id db)
+       :type     :query
+       :query    {:source-query {:source-table {:name "Toucans", :id (u/get-id table)}}}})))
+
+(tt/expect-with-temp [Database [db]
+                      Table    [table {:db_id (u/get-id db)}]]
+  {:database (u/get-id db)
+   :type     :query
+   :query    {:source-query {:source-table {:name "Toucans", :id (u/get-id table)}}}}
+  (check-perms-for-rasta
+    {:database (u/get-id db)
+     :type     :query
+     :query    {:source-query {:source-table {:name "Toucans", :id (u/get-id table)}}}}))
diff --git a/test/metabase/query_processor/middleware/results_metadata_test.clj b/test/metabase/query_processor/middleware/results_metadata_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..de285c7de8a2bc8b29c3e7f360f0314f9c182fe9
--- /dev/null
+++ b/test/metabase/query_processor/middleware/results_metadata_test.clj
@@ -0,0 +1,104 @@
+(ns metabase.query-processor.middleware.results-metadata-test
+  (:require [expectations :refer [expect]]
+            [metabase
+             [query-processor :as qp]
+             [util :as u]]
+            [metabase.models
+             [card :refer [Card]]
+             [database :as database]]
+            [metabase.query-processor.middleware.results-metadata :as results-metadata]
+            [metabase.test
+             [data :as data]
+             [util :as tu]]
+            [metabase.test.data.users :as users]
+            [toucan.db :as db]
+            [toucan.util.test :as tt]))
+
+(defn- native-query [sql]
+  {:database (data/id)
+   :type     :native
+   :native   {:query sql}})
+
+(defn- card-metadata [card]
+  (db/select-one-field :result_metadata Card :id (u/get-id card)))
+
+;; test that Card result metadata is saved after running a Card
+(expect
+  [{:name "ID",          :display_name "ID",          :base_type "type/Integer"}
+   {:name "NAME",        :display_name "Name",        :base_type "type/Text"}
+   {:name "PRICE",       :display_name "Price",       :base_type "type/Integer"}
+   {:name "CATEGORY_ID", :display_name "Category ID", :base_type "type/Integer"}
+   {:name "LATITUDE",    :display_name "Latitude",    :base_type "type/Float"}
+   {:name "LONGITUDE",   :display_name "Longitude",   :base_type "type/Float"}]
+  (tt/with-temp Card [card]
+    (qp/process-query (assoc (native-query "SELECT ID, NAME, PRICE, CATEGORY_ID, LATITUDE, LONGITUDE FROM VENUES")
+                        :info {:card-id    (u/get-id card)
+                               :query-hash (byte-array 0)}))
+    (card-metadata card)))
+
+;; check that using a Card as your source doesn't overwrite the results metadata...
+(expect
+  {:name "NAME", :display_name "Name", :base_type "type/Text"}
+  (tt/with-temp Card [card {:dataset_query   (native-query "SELECT * FROM VENUES")
+                            :result_metadata {:name "NAME", :display_name "Name", :base_type "type/Text"}}]
+    (qp/process-query {:database database/virtual-id
+                       :type     :query
+                       :query    {:source-table (str "card__" (u/get-id card))}})
+    (card-metadata card)))
+
+;; ...even when running via the API endpoint
+(expect
+  {:name "NAME", :display_name "Name", :base_type "type/Text"}
+  (tt/with-temp Card [card {:dataset_query   (native-query "SELECT * FROM VENUES")
+                            :result_metadata {:name "NAME", :display_name "Name", :base_type "type/Text"}}]
+    ((users/user->client :rasta) :post 200 "dataset" {:database database/virtual-id
+                                                      :type     :query
+                                                      :query    {:source-table (str "card__" (u/get-id card))}})
+    (card-metadata card)))
+
+
+;; tests for valid-checksum?
+(tu/resolve-private-vars metabase.query-processor.middleware.results-metadata metadata-checksum)
+
+(expect
+  (results-metadata/valid-checksum? "ABCDE" (metadata-checksum "ABCDE")))
+
+(expect
+  false
+  (results-metadata/valid-checksum? "ABCD" (metadata-checksum "ABCDE")))
+
+
+;; make sure that queries come back with metadata
+(expect
+  {:checksum java.lang.String
+   :columns [{:base_type :type/Integer, :display_name "ID",          :name "ID"}
+             {:base_type :type/Text,    :display_name "Name",        :name "NAME"}
+             {:base_type :type/Integer, :display_name "Price",       :name "PRICE"}
+             {:base_type :type/Integer, :display_name "Category ID", :name "CATEGORY_ID"}
+             {:base_type :type/Float,   :display_name "Latitude",    :name "LATITUDE"}
+             {:base_type :type/Float,   :display_name "Longitude",   :name "LONGITUDE"}]}
+  (-> (qp/process-query {:database (data/id)
+                         :type     :native
+                         :native   {:query (format "SELECT ID, NAME, PRICE, CATEGORY_ID, LATITUDE, LONGITUDE FROM VENUES")}})
+      (get-in [:data :results_metadata])
+      (update :checksum class)))
+
+;; make sure that a Card where a DateTime column is broken out by year advertises that column as Text, since you can't do datetime breakouts on years
+(expect
+  [{:base_type    "type/Text"
+    :display_name "Date"
+    :name         "DATE"
+    :unit         nil}
+   {:base_type    "type/Integer"
+    :display_name "count"
+    :name         "count"
+    :special_type "type/Number"}]
+  (tt/with-temp Card [card]
+    (qp/process-query {:database (data/id)
+                       :type     :query
+                       :query    {:source-table (data/id :checkins)
+                                  :aggregation  [[:count]]
+                                  :breakout     [[:datetime-field [:field-id (data/id :checkins :date)] :year]]}
+                       :info     {:card-id    (u/get-id card)
+                                  :query-hash (byte-array 0)}})
+    (card-metadata card)))
diff --git a/test/metabase/query_processor_test.clj b/test/metabase/query_processor_test.clj
index 865892b8381974c3907bdc412bce0cf92d38576c..2a50ff5a29aad276555645561ee5b219a0258a7d 100644
--- a/test/metabase/query_processor_test.clj
+++ b/test/metabase/query_processor_test.clj
@@ -8,7 +8,8 @@
              [driver :as driver]
              [util :as u]]
             [metabase.test.data :as data]
-            [metabase.test.data.datasets :as datasets]))
+            [metabase.test.data.datasets :as datasets]
+            [medley.core :as m]))
 
 ;; make sure all the driver test extension namespaces are loaded <3
 ;; if this isn't done some things will get loaded at the wrong time which can end up causing test databases to be created more than once, which fails
@@ -115,6 +116,15 @@
             :name         (data/format-name "name")
             :display_name "Name"})))
 
+(defn- add-min-max
+  "For databases that support binning, min/max values will be
+  populated, otherwise it will remain nil"
+  [min-val max-val original-map]
+  (merge original-map
+         (when (data/binning-supported?)
+           {:min_value min-val
+            :max_value max-val})))
+
 ;; #### users
 (defn users-col
   "Return column information for the `users` column named by keyword COL."
@@ -124,12 +134,11 @@
    {:table_id (data/id :users)
     :id       (data/id :users col)}
    (case col
-     :id         {:special_type :type/PK
-                  :base_type    (data/id-field-type)
-                  :name         (data/format-name "id")
-                  :display_name "ID"
-                  :min_value 1.0
-                  :max_value 15.0}
+     :id         (add-min-max 1.0 15.0
+                              {:special_type :type/PK
+                               :base_type    (data/id-field-type)
+                               :name         (data/format-name "id")
+                               :display_name "ID"})
      :name       {:special_type :type/Name
                   :base_type    (data/expected-base-type->actual :type/Text)
                   :name         (data/format-name "name")
@@ -154,12 +163,11 @@
    {:table_id (data/id :venues)
     :id       (data/id :venues col)}
    (case col
-     :id          {:special_type :type/PK
-                   :base_type    (data/id-field-type)
-                   :name         (data/format-name "id")
-                   :display_name "ID"
-                   :min_value    1.0
-                   :max_value    100.0}
+     :id          (add-min-max 1.0 100.0
+                               {:special_type :type/PK
+                                :base_type    (data/id-field-type)
+                                :name         (data/format-name "id")
+                                :display_name "ID"})
      :category_id {:extra_info   (if (data/fks-supported?)
                                    {:target_table_id (data/id :categories)}
                                    {})
@@ -169,33 +177,24 @@
                                    :type/Category)
                    :base_type    (data/expected-base-type->actual :type/Integer)
                    :name         (data/format-name "category_id")
-                   :display_name "Category ID"
-                   :min_value    nil
-                   :max_value    nil}
-     :price       {:special_type :type/Category
-                   :base_type    (data/expected-base-type->actual :type/Integer)
-                   :name         (data/format-name "price")
-                   :display_name "Price"
-                   :min_value    1.0
-                   :max_value    4.0}
+                   :display_name "Category ID"}
+     :price       (add-min-max 1.0 4.0
+                               {:special_type :type/Category
+                                :base_type    (data/expected-base-type->actual :type/Integer)
+                                :name         (data/format-name "price")
+                                :display_name "Price"})
      :longitude   {:special_type :type/Longitude
                    :base_type    (data/expected-base-type->actual :type/Float)
                    :name         (data/format-name "longitude")
-                   :display_name "Longitude"
-                   :min_value    nil
-                   :max_value    nil}
+                   :display_name "Longitude"}
      :latitude    {:special_type :type/Latitude
                    :base_type    (data/expected-base-type->actual :type/Float)
                    :name         (data/format-name "latitude")
-                   :display_name "Latitude"
-                   :min_value    nil
-                   :max_value    nil}
+                   :display_name "Latitude"}
      :name        {:special_type :type/Name
                    :base_type    (data/expected-base-type->actual :type/Text)
                    :name         (data/format-name "name")
-                   :display_name "Name"
-                   :min_value    nil
-                   :max_value    nil})))
+                   :display_name "Name"})))
 
 (defn venues-cols
   "`cols` information for all the columns in `venues`."
@@ -216,29 +215,27 @@
                 :base_type    (data/id-field-type)
                 :name         (data/format-name "id")
                 :display_name "ID"}
-     :venue_id {:extra_info   (if (data/fks-supported?)
-                                {:target_table_id (data/id :venues)}
-                                {})
-                :target       (target-field (venues-col :id))
-                :special_type (if (data/fks-supported?)
-                                :type/FK
-                                :type/Category)
-                :base_type    (data/expected-base-type->actual :type/Integer)
-                :name         (data/format-name "venue_id")
-                :display_name "Venue ID"
-                :min_value    1.0
-                :max_value    100.0}
-     :user_id  {:extra_info   (if (data/fks-supported?) {:target_table_id (data/id :users)}
-                                  {})
-                :target       (target-field (users-col :id))
-                :special_type (if (data/fks-supported?)
-                                :type/FK
-                                :type/Category)
-                :base_type    (data/expected-base-type->actual :type/Integer)
-                :name         (data/format-name "user_id")
-                :display_name "User ID"
-                :min_value     1.0
-                :max_value     15.0})))
+     :venue_id (add-min-max 1.0 100.0
+                            {:extra_info   (if (data/fks-supported?)
+                                             {:target_table_id (data/id :venues)}
+                                             {})
+                             :target       (target-field (venues-col :id))
+                             :special_type (if (data/fks-supported?)
+                                             :type/FK
+                                             :type/Category)
+                             :base_type    (data/expected-base-type->actual :type/Integer)
+                             :name         (data/format-name "venue_id")
+                             :display_name "Venue ID"})
+     :user_id  (add-min-max 1.0 15.0
+                            {:extra_info   (if (data/fks-supported?) {:target_table_id (data/id :users)}
+                                               {})
+                             :target       (target-field (users-col :id))
+                             :special_type (if (data/fks-supported?)
+                                             :type/FK
+                                             :type/Category)
+                             :base_type    (data/expected-base-type->actual :type/Integer)
+                             :name         (data/format-name "user_id")
+                             :display_name "User ID"}))))
 
 
 ;;; #### aggregate columns
@@ -277,10 +274,14 @@
 (defn breakout-col [column]
   (assoc column :source :breakout))
 
+;; TODO - maybe this needs a new name now that it also removes the results_metadata
 (defn booleanize-native-form
-  "Convert `:native_form` attribute to a boolean to make test results comparisons easier."
+  "Convert `:native_form` attribute to a boolean to make test results comparisons easier.
+   Remove `data.results_metadata` as well since it just takes a lot of space and the checksum can vary based on whether encryption is enabled."
   [m]
-  (update-in m [:data :native_form] boolean))
+  (-> m
+      (update-in [:data :native_form] boolean)
+      (m/dissoc-in [:data :results_metadata])))
 
 (defn format-rows-by
   "Format the values in result ROWS with the fns at the corresponding indecies in FORMAT-FNS.
diff --git a/test/metabase/query_processor_test/aggregation_test.clj b/test/metabase/query_processor_test/aggregation_test.clj
index 12f90194ecc2df927e87ad3bc66dcffca1a70f31..79933406eff8f67ad700803d57d3a3dc17cd913a 100644
--- a/test/metabase/query_processor_test/aggregation_test.clj
+++ b/test/metabase/query_processor_test/aggregation_test.clj
@@ -149,8 +149,8 @@
             (ql/aggregation (ql/avg $price) (ql/count) (ql/sum $price))))))
 
 ;; make sure that multiple aggregations of the same type have the correct metadata (#4003)
-;; (TODO - this isn't tested against Mongo, BigQuery or Presto because those drivers don't currently work correctly with multiple columns with the same name)
-(datasets/expect-with-engines (disj non-timeseries-engines :mongo :bigquery :presto)
+;; (TODO - this isn't tested against Mongo or BigQuery because those drivers don't currently work correctly with multiple columns with the same name)
+(datasets/expect-with-engines (disj non-timeseries-engines :mongo :bigquery)
   [(aggregate-col :count)
    (assoc (aggregate-col :count)
      :display_name    "Count 2"
diff --git a/test/metabase/query_processor_test/breakout_test.clj b/test/metabase/query_processor_test/breakout_test.clj
index f9175a8458a576fbe91f306895cf5ba85ae92592..2d7ac1eb144694aba351f78bc1b8e215c93c1b87 100644
--- a/test/metabase/query_processor_test/breakout_test.clj
+++ b/test/metabase/query_processor_test/breakout_test.clj
@@ -1,14 +1,17 @@
 (ns metabase.query-processor-test.breakout-test
   "Tests for the `:breakout` clause."
-  (:require [metabase.query-processor-test :refer :all]
-            [metabase.query-processor.expand :as ql]
+  (:require [metabase
+             [query-processor-test :refer :all]
+             [util :as u]]
             [metabase.models.field :refer [Field]]
-            [metabase.test.data :as data]
-            [metabase.test.util :as tu]
-            [metabase.util :as u]
+            [metabase.query-processor.expand :as ql]
+            [metabase.test
+             [data :as data]
+             [util :as tu]]
+            [metabase.test.data.datasets :as datasets]
             [toucan.db :as db]))
 
-;; single column
+;;; single column
 (qp-expect-with-all-engines
   {:rows    [[1 31] [2 70] [3 75] [4 77] [5 69] [6 70] [7 76] [8 81] [9 68] [10 78] [11 74] [12 59] [13 76] [14 62] [15 34]]
    :columns [(data/format-name "user_id")
@@ -74,21 +77,21 @@
        booleanize-native-form
        (format-rows-by [int int int])))
 
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   [[10.1 1] [33.1 61] [37.7 29] [39.2 8] [40.8 1]]
   (format-rows-by [(partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
             (ql/aggregation (ql/count))
             (ql/breakout (ql/binning-strategy $latitude :num-bins 20))))))
 
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
  [[10.1 1] [30.5 99]]
   (format-rows-by [(partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
             (ql/aggregation (ql/count))
             (ql/breakout (ql/binning-strategy $latitude :num-bins 3))))))
 
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   [[10.1 -165.4 1] [33.1 -119.7 61] [37.7 -124.2 29] [39.2 -78.5 8] [40.8 -78.5 1]]
   (format-rows-by [(partial u/round-to-decimals 1) (partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
@@ -98,14 +101,14 @@
 
 ;; Currently defaults to 8 bins when the number of bins isn't
 ;; specified
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
  [[10.1 1] [30.1 90] [40.1 9]]
   (format-rows-by [(partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
             (ql/aggregation (ql/count))
             (ql/breakout (ql/binning-strategy $latitude :default))))))
 
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
  [[10.1 1] [30.1 61] [35.1 29] [40.1 9]]
   (tu/with-temporary-setting-values [breakout-bin-width 5.0]
     (format-rows-by [(partial u/round-to-decimals 1) int]
@@ -114,7 +117,7 @@
               (ql/breakout (ql/binning-strategy $latitude :default)))))))
 
 ;; Testing bin-width
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   [[10.1 1] [33.1 25] [34.1 36] [37.1 29] [40.1 9]]
   (format-rows-by [(partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
@@ -122,14 +125,14 @@
             (ql/breakout (ql/binning-strategy $latitude :bin-width 1))))))
 
 ;; Testing bin-width using a float
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
    [[10.1 1] [32.6 61] [37.6 29] [40.1 9]]
   (format-rows-by [(partial u/round-to-decimals 1) int]
     (rows (data/run-query venues
             (ql/aggregation (ql/count))
             (ql/breakout (ql/binning-strategy $latitude :bin-width 2.5))))))
 
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   [[33.0 4] [34.0 57]]
   (tu/with-temporary-setting-values [breakout-bin-width 1.0]
     (format-rows-by [(partial u/round-to-decimals 1) int]
@@ -139,8 +142,16 @@
                                  (ql/> $latitude 20)))
               (ql/breakout (ql/binning-strategy $latitude :default)))))))
 
+(defn- round-binning-decimals [result]
+  (let [round-to-decimal #(u/round-to-decimals 4 %)]
+    (-> result
+        (update :min_value round-to-decimal)
+        (update :max_value round-to-decimal)
+        (update-in [:binning_info :min_value] round-to-decimal)
+        (update-in [:binning_info :max_value] round-to-decimal))))
+
 ;;Validate binning info is returned with the binning-strategy
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   (merge (venues-col :latitude)
          {:min_value 10.0646, :source :breakout,
           :max_value 40.7794, :binning_info {:binning_strategy "num-bins", :bin_width 10.0,
@@ -150,10 +161,11 @@
                       (ql/aggregation (ql/count))
                       (ql/breakout (ql/binning-strategy $latitude :default)))
       (get-in [:data :cols])
-      first))
+      first
+      round-binning-decimals))
 
 ;;Validate binning info is returned with the binning-strategy
-(expect-with-non-timeseries-dbs
+(datasets/expect-with-engines (engines-that-support :binning)
   {:status :failed
    :class Exception
    :error (format "Unable to bin field '%s' with id '%s' without a min/max value"
diff --git a/test/metabase/query_processor_test/date_bucketing_test.clj b/test/metabase/query_processor_test/date_bucketing_test.clj
index 540aafc99ca38ae5c29f333b827e26207585cced..02f65fa184a3aaadab637b41d689f18f0e3885eb 100644
--- a/test/metabase/query_processor_test/date_bucketing_test.clj
+++ b/test/metabase/query_processor_test/date_bucketing_test.clj
@@ -304,6 +304,7 @@
 ;; Don't run the minute tests against Oracle because the Oracle tests are kind of slow and case CI to fail randomly when it takes so long to load the data that the times are
 ;; no longer current (these tests pass locally if your machine isn't as slow as the CircleCI ones)
 (expect-with-non-timeseries-dbs-except #{:bigquery :oracle} 4 (count-of-grouping (checkins:4-per-minute) :minute "current"))
+
 (expect-with-non-timeseries-dbs-except #{:bigquery :oracle} 4 (count-of-grouping (checkins:4-per-minute) :minute -1 "minute"))
 (expect-with-non-timeseries-dbs-except #{:bigquery :oracle} 4 (count-of-grouping (checkins:4-per-minute) :minute  1 "minute"))
 
diff --git a/test/metabase/query_processor_test/expressions_test.clj b/test/metabase/query_processor_test/expressions_test.clj
index 90b94bc3247d2bff94228d1a52683a1b4c0803bc..9b580453b2f2855240d500ba7c0696f309558f14 100644
--- a/test/metabase/query_processor_test/expressions_test.clj
+++ b/test/metabase/query_processor_test/expressions_test.clj
@@ -13,9 +13,10 @@
 ;; Test the expansion of the expressions clause
 (expect
   {:expressions {:my-cool-new-field (qpi/map->Expression {:operator :*
-                                                          :args [{:field-id 10, :fk-field-id nil, :datetime-unit nil,
-                                                                  :binning-strategy nil, :binning-param nil}
-                                                                 20.0]})}}                                            ; 20 should be converted to a FLOAT
+                                                          :args     [{:field-id      10,  :fk-field-id      nil,
+                                                                      :datetime-unit nil, :binning-strategy nil,
+                                                                      :binning-param nil}
+                                                                     20.0]})}}                                            ; 20 should be converted to a FLOAT
   (ql/expressions {} {:my-cool-new-field (ql/* (ql/field-id 10) 20)}))
 
 
diff --git a/test/metabase/query_processor_test/field_visibility_test.clj b/test/metabase/query_processor_test/field_visibility_test.clj
index f9f5b1968e11e9e5b3605bd2905069d7e1a875fb..ef1873baa410a981dcef5a82b51d03e069b2170e 100644
--- a/test/metabase/query_processor_test/field_visibility_test.clj
+++ b/test/metabase/query_processor_test/field_visibility_test.clj
@@ -18,15 +18,11 @@
   [(set (venues-cols))
    #{(venues-col :category_id)
      (venues-col :name)
-     (assoc (venues-col :latitude)
-       :min_value nil
-       :max_value nil)
+     (venues-col :latitude)
      (assoc (venues-col :id)
        :min_value nil
        :max_value nil)
-     (assoc (venues-col :longitude)
-       :min_value nil
-       :max_value nil)
+     (venues-col :longitude)
      (assoc (venues-col :price) :visibility_type :details-only
             :min_value nil
             :max_value nil)}
diff --git a/test/metabase/query_processor_test/nested_queries_test.clj b/test/metabase/query_processor_test/nested_queries_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..93d8f94e5c77d1f682a8e968fa488a77d97076f7
--- /dev/null
+++ b/test/metabase/query_processor_test/nested_queries_test.clj
@@ -0,0 +1,446 @@
+(ns metabase.query-processor-test.nested-queries-test
+  "Tests for handling queries with nested expressions."
+  (:require [clojure.string :as str]
+            [expectations :refer [expect]]
+            [honeysql.core :as hsql]
+            [metabase
+             [query-processor :as qp]
+             [query-processor-test :refer :all]
+             [util :as u]]
+            [metabase.driver.generic-sql :as generic-sql]
+            [metabase.models
+             [card :refer [Card]]
+             [database :as database]
+             [field :refer [Field]]
+             [table :refer [Table]]]
+            [metabase.test.data :as data]
+            [metabase.test.data.datasets :as datasets]
+            [toucan.db :as db]
+            [toucan.util.test :as tt]))
+
+(defn- rows+cols
+  "Return the `:rows` and relevant parts of `:cols` from the RESULTS.
+   (This is used to keep the output of various tests below focused and manageable.)"
+  {:style/indent 0}
+  [results]
+  {:rows (rows results)
+   :cols (for [col (get-in results [:data :cols])]
+           {:name      (str/lower-case (:name col))
+            :base_type (:base_type col)})})
+
+
+;; make sure we can do a basic query with MBQL source-query
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  {:rows [[1 "Red Medicine"                  4 10.0646 -165.374 3]
+          [2 "Stout Burgers & Beers"        11 34.0996 -118.329 2]
+          [3 "The Apple Pan"                11 34.0406 -118.428 2]
+          [4 "Wurstküche"                   29 33.9997 -118.465 2]
+          [5 "Brite Spot Family Restaurant" 20 34.0778 -118.261 2]]
+   :cols [{:name "id",          :base_type (data/id-field-type)}
+          {:name "name",        :base_type :type/Text}
+          {:name "category_id", :base_type (data/expected-base-type->actual :type/Integer)}
+          {:name "latitude",    :base_type :type/Float}
+          {:name "longitude",   :base_type :type/Float}
+          {:name "price",       :base_type (data/expected-base-type->actual :type/Integer)}]}
+  (format-rows-by [int str int (partial u/round-to-decimals 4) (partial u/round-to-decimals 4) int]
+    (rows+cols
+      (qp/process-query
+        {:database (data/id)
+         :type     :query
+         :query    {:source-query {:source-table (data/id :venues)
+                                   :order-by     [:asc (data/id :venues :id)]
+                                   :limit        10}
+                    :limit        5}}))))
+
+;; TODO - `identifier`, `quoted-identifier` might belong in some sort of shared util namespace
+(defn- identifier
+  "Return a properly formatted *UNQUOTED* identifier for a Table or Field.
+  (This handles DBs like H2 who require uppercase identifiers, or databases like Redshift do clever hacks
+   like prefixing table names with a unique schema for each test run because we're not
+   allowed to create new databases.)"
+  (^String [table-kw]
+   (let [{schema :schema, table-name :name} (db/select-one [Table :name :schema] :id (data/id table-kw))]
+     (name (hsql/qualify schema table-name))))
+  (^String [table-kw field-kw]
+   (db/select-one-field :name Field :id (data/id table-kw field-kw))))
+
+(defn- quote-identifier [identifier]
+  (first (hsql/format (keyword identifier)
+           :quoting (generic-sql/quote-style datasets/*driver*))))
+
+(def ^:private ^{:arglists '([table-kw] [table-kw field-kw])} ^String quoted-identifier
+  "Return a *QUOTED* identifier for a Table or Field. (This behaves just like `identifier`, but quotes the result)."
+  (comp quote-identifier identifier))
+
+;; make sure we can do a basic query with a SQL source-query
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  {:rows [[1 -165.374  4 3 "Red Medicine"                 10.0646]
+          [2 -118.329 11 2 "Stout Burgers & Beers"        34.0996]
+          [3 -118.428 11 2 "The Apple Pan"                34.0406]
+          [4 -118.465 29 2 "Wurstküche"                   33.9997]
+          [5 -118.261 20 2 "Brite Spot Family Restaurant" 34.0778]]
+   :cols [{:name "id",          :base_type :type/Integer}
+          {:name "longitude",   :base_type :type/Float}
+          {:name "category_id", :base_type (data/expected-base-type->actual :type/Integer)}
+          {:name "price",       :base_type (data/expected-base-type->actual :type/Integer)}
+          {:name "name",        :base_type :type/Text}
+          {:name "latitude",    :base_type :type/Float}]}
+  (format-rows-by [int (partial u/round-to-decimals 4) int int str (partial u/round-to-decimals 4)]
+    (rows+cols
+      (qp/process-query
+        {:database (data/id)
+         :type     :query
+         :query    {:source-query {:native (format "SELECT %s, %s, %s, %s, %s, %s FROM %s"
+                                                   (quoted-identifier :venues :id)
+                                                   (quoted-identifier :venues :longitude)
+                                                   (quoted-identifier :venues :category_id)
+                                                   (quoted-identifier :venues :price)
+                                                   (quoted-identifier :venues :name)
+                                                   (quoted-identifier :venues :latitude)
+                                                   (quoted-identifier :venues))}
+                    :order-by     [:asc [:field-literal (keyword (data/format-name :id)) :type/Integer]]
+                    :limit        5}}))))
+
+
+(def ^:private ^:const breakout-results
+  {:rows [[1 22]
+          [2 59]
+          [3 13]
+          [4  6]]
+   :cols [{:name "price", :base_type :type/Integer}
+          {:name "count", :base_type :type/Integer}]})
+
+;; make sure we can do a query with breakout and aggregation using an MBQL source query
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  breakout-results
+  (rows+cols
+    (format-rows-by [int int]
+      (qp/process-query
+        {:database (data/id)
+         :type     :query
+         :query    {:source-query {:source-table (data/id :venues)}
+                    :aggregation  [:count]
+                    :breakout     [[:field-literal (keyword (data/format-name :price)) :type/Integer]]}}))))
+
+;; make sure we can do a query with breakout and aggregation using a SQL source query
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  breakout-results
+  (rows+cols
+    (format-rows-by [int int]
+      (qp/process-query
+        {:database (data/id)
+         :type     :query
+         :query    {:source-query {:native (format "SELECT * FROM %s" (quoted-identifier :venues))}
+                    :aggregation  [:count]
+                    :breakout     [[:field-literal (keyword (data/format-name :price)) :type/Integer]]}}))))
+
+
+(defn- mbql-card-def
+  "Basic MBQL Card definition. Pass kv-pair clauses for the inner query."
+  {:style/indent 0}
+  [& {:as clauses}]
+  {:dataset_query {:database (data/id)
+                   :type     :query
+                   :query    clauses}})
+
+(defn- venues-mbql-card-def
+  "A basic Card definition that returns raw data for the venues test table.
+   Pass additional kv-pair clauses for the inner query as needed."
+  {:style/indent 0}
+  [& additional-clauses]
+  (apply mbql-card-def :source-table (data/id :venues) additional-clauses))
+
+
+(defn- query-with-source-card {:style/indent 1} [card & {:as additional-clauses}]
+  {:database database/virtual-id
+   :type     :query
+   :query    (merge {:source-table (str "card__" (u/get-id card))}
+                    additional-clauses)})
+
+;; Make sure we can run queries using source table `card__id` format. This is the format that is actually used by the frontend;
+;; it gets translated to the normal `source-query` format by middleware. It's provided as a convenience so only minimal changes
+;; need to be made to the frontend.
+(expect
+  breakout-results
+  (tt/with-temp Card [card (venues-mbql-card-def)]
+    (rows+cols
+      (format-rows-by [int int]
+        (qp/process-query
+          (query-with-source-card card
+            :aggregation [:count]
+            :breakout    [[:field-literal (keyword (data/format-name :price)) :type/Integer]]))))))
+
+;; make sure `card__id`-style queries work with native source queries as well
+(expect
+  breakout-results
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :native
+                                            :native   {:query "SELECT * FROM VENUES"}}}]
+    (rows+cols
+      (format-rows-by [int int]
+        (qp/process-query
+          (query-with-source-card card
+            :aggregation [:count]
+            :breakout    [[:field-literal (keyword (data/format-name :price)) :type/Integer]]))))))
+
+
+;; make sure we can filter by a field literal
+(expect
+  {:rows [[1 "Red Medicine" 4 10.0646 -165.374 3]]
+   :cols [{:name "id",          :base_type :type/BigInteger}
+          {:name "name",        :base_type :type/Text}
+          {:name "category_id", :base_type :type/Integer}
+          {:name "latitude",    :base_type :type/Float}
+          {:name "longitude",   :base_type :type/Float}
+          {:name "price",       :base_type :type/Integer}]}
+  (rows+cols
+    (qp/process-query
+      {:database (data/id)
+       :type     :query
+       :query    {:source-query {:source-table (data/id :venues)}
+                  :filter       [:= [:field-literal (data/format-name :id) :type/Integer] 1]}})))
+
+(def ^:private ^:const ^String venues-source-sql
+  (str "(SELECT \"PUBLIC\".\"VENUES\".\"ID\" AS \"ID\", \"PUBLIC\".\"VENUES\".\"NAME\" AS \"NAME\", "
+       "\"PUBLIC\".\"VENUES\".\"CATEGORY_ID\" AS \"CATEGORY_ID\", \"PUBLIC\".\"VENUES\".\"LATITUDE\" AS \"LATITUDE\", "
+       "\"PUBLIC\".\"VENUES\".\"LONGITUDE\" AS \"LONGITUDE\", \"PUBLIC\".\"VENUES\".\"PRICE\" AS \"PRICE\" FROM \"PUBLIC\".\"VENUES\") \"source\""))
+
+;; make sure that dots in field literal identifiers get escaped so you can't reference fields from other tables using them
+(expect
+  {:query  (format "SELECT * FROM %s WHERE \"BIRD.ID\" = 1 LIMIT 10" venues-source-sql)
+   :params nil}
+  (qp/query->native
+    {:database (data/id)
+     :type     :query
+     :query    {:source-query {:source-table (data/id :venues)}
+                :filter       [:= [:field-literal :BIRD.ID :type/Integer] 1]
+                :limit        10}}))
+
+;; make sure that field-literals work as DateTimeFields
+(expect
+  {:query  (str "SELECT * "
+                (format "FROM %s " venues-source-sql)
+                "WHERE parsedatetime(formatdatetime(\"BIRD.ID\", 'YYYYww'), 'YYYYww') = parsedatetime(formatdatetime(?, 'YYYYww'), 'YYYYww') "
+                "LIMIT 10")
+   :params [#inst "2017-01-01T00:00:00.000000000-00:00"]}
+  (qp/query->native
+    {:database (data/id)
+     :type     :query
+     :query    {:source-query {:source-table (data/id :venues)}
+                :filter       [:= [:datetime-field [:field-literal :BIRD.ID :type/DateTime] :week] "2017-01-01"]
+                :limit        10}}))
+
+;; make sure that aggregation references match up to aggregations from the same level they're from
+;; e.g. the ORDER BY in the source-query should refer the 'stddev' aggregation, NOT the 'avg' aggregation
+(expect
+  {:query (str "SELECT avg(\"stddev\") AS \"avg\" FROM ("
+                   "SELECT STDDEV(\"PUBLIC\".\"VENUES\".\"ID\") AS \"stddev\", \"PUBLIC\".\"VENUES\".\"PRICE\" AS \"PRICE\" "
+                   "FROM \"PUBLIC\".\"VENUES\" "
+                   "GROUP BY \"PUBLIC\".\"VENUES\".\"PRICE\" "
+                   "ORDER BY \"stddev\" DESC, \"PUBLIC\".\"VENUES\".\"PRICE\" ASC"
+               ") \"source\"")
+   :params nil}
+  (qp/query->native
+    {:database (data/id)
+     :type     :query
+     :query    {:source-query {:source-table (data/id :venues)
+                               :aggregation  [[:stddev [:field-id (data/id :venues :id)]]]
+                               :breakout     [[:field-id (data/id :venues :price)]]
+                               :order-by     [[[:aggregate-field 0] :descending]]}
+                :aggregation  [[:avg [:field-literal "stddev" :type/Integer]]]}}))
+
+;; make sure that we handle [field-id [field-literal ...]] forms gracefully, despite that not making any sense
+(expect
+  {:query  (format "SELECT \"category_id\" AS \"category_id\" FROM %s GROUP BY \"category_id\" ORDER BY \"category_id\" ASC LIMIT 10" venues-source-sql)
+   :params nil}
+  (qp/query->native
+    {:database (data/id)
+     :type     :query
+     :query    {:source-query {:source-table (data/id :venues)}
+                :breakout     [:field-id [:field-literal "category_id" :type/Integer]]
+                :limit        10}}))
+
+;; Make sure we can filter by string fields
+(expect
+  {:query  (format "SELECT * FROM %s WHERE \"text\" <> ? LIMIT 10" venues-source-sql)
+   :params ["Coo"]}
+  (qp/query->native {:database (data/id)
+                     :type     :query
+                     :query    {:source-query {:source-table (data/id :venues)}
+                                :limit        10
+                                :filter       [:!= [:field-literal "text" :type/Text] "Coo"]}}))
+
+;; Make sure we can filter by number fields
+(expect
+  {:query  (format "SELECT * FROM %s WHERE \"sender_id\" > 3 LIMIT 10" venues-source-sql)
+   :params nil}
+  (qp/query->native {:database (data/id)
+                     :type     :query
+                     :query    {:source-query {:source-table (data/id :venues)}
+                                :limit        10
+                                :filter       [:> [:field-literal "sender_id" :type/Integer] 3]}}))
+
+;; make sure using a native query with default params as a source works
+(expect
+  {:query  "SELECT * FROM (SELECT * FROM PRODUCTS WHERE CATEGORY = 'Widget' LIMIT 10) \"source\" LIMIT 1048576",
+   :params nil}
+  (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                            :type     :native
+                                            :native   {:query         "SELECT * FROM PRODUCTS WHERE CATEGORY = {{category}} LIMIT 10"
+                                                       :template_tags {:category {:name         "category"
+                                                                                  :display_name "Category"
+                                                                                  :type         "text"
+                                                                                  :required     true
+                                                                                  :default      "Widget"}}}}}]
+    (qp/query->native
+      {:database (data/id)
+       :type     :query
+       :query    {:source-table (str "card__" (u/get-id card))}})))
+
+(defn results-metadata {:style/indent 0} [results]
+  (for [col (get-in results [:data :cols])]
+    (u/select-non-nil-keys col [:base_type :display_name :id :name :source :special_type :table_id :unit :datetime-unit])))
+
+;; make sure a query using a source query comes back with the correct columns metadata
+(expect
+  [{:base_type    :type/BigInteger
+    :display_name "ID"
+    :id           [:field-literal "ID" :type/BigInteger]
+    :name         "ID"
+    :source       :fields
+    :special_type :type/PK
+    :table_id     (data/id :venues)}
+   {:base_type    :type/Text
+    :display_name "Name"
+    :id           [:field-literal "NAME" :type/Text]
+    :name         "NAME"
+    :source       :fields
+    :special_type :type/Name
+    :table_id     (data/id :venues)}
+   {:base_type    :type/Integer
+    :display_name "Category ID"
+    :id           [:field-literal "CATEGORY_ID" :type/Integer]
+    :name         "CATEGORY_ID"
+    :source       :fields
+    :special_type :type/FK
+    :table_id     (data/id :venues)}
+   {:base_type    :type/Float
+    :display_name "Latitude"
+    :id           [:field-literal "LATITUDE" :type/Float]
+    :name         "LATITUDE"
+    :source       :fields
+    :special_type :type/Latitude
+    :table_id     (data/id :venues)}
+   {:base_type    :type/Float
+    :display_name "Longitude"
+    :id           [:field-literal "LONGITUDE" :type/Float]
+    :name         "LONGITUDE"
+    :source       :fields
+    :special_type :type/Longitude
+    :table_id     (data/id :venues)}
+   {:base_type    :type/Integer
+    :display_name "Price"
+    :id           [:field-literal "PRICE" :type/Integer]
+    :name         "PRICE"
+    :source       :fields
+    :special_type :type/Category
+    :table_id     (data/id :venues)}]
+  (-> (tt/with-temp Card [card (venues-mbql-card-def)]
+        (qp/process-query (query-with-source-card card)))
+      results-metadata))
+
+;; make sure a breakout/aggregate query using a source query comes back with the correct columns metadata
+(expect
+  [{:base_type    :type/Text
+    :id           [:field-literal "PRICE" :type/Text]
+    :name         "PRICE"
+    :display_name "Price"
+    :source       :breakout}
+   {:base_type    :type/Integer
+    :display_name "count"
+    :name         "count"
+    :source       :aggregation
+    :special_type :type/Number}]
+  (-> (tt/with-temp Card [card (venues-mbql-card-def)]
+        (qp/process-query (query-with-source-card card
+                            :aggregation  [[:count]]
+                            :breakout     [[:field-literal "PRICE" :type/Text]])))
+      results-metadata))
+
+;; make sure nested queries return the right columns metadata for SQL source queries and datetime breakouts
+(expect
+  [{:base_type    :type/DateTime
+    :display_name "Date"
+    :id           [:field-literal "DATE" :type/DateTime]
+    :name         "DATE"
+    :source       :breakout
+    :unit         :day}
+   {:base_type    :type/Integer
+    :display_name "count"
+    :name         "count"
+    :source       :aggregation
+    :special_type :type/Number}]
+  (-> (tt/with-temp Card [card {:dataset_query {:database (data/id)
+                                                :type     :native
+                                                :native   {:query "SELECT * FROM CHECKINS"}}}]
+        (qp/process-query (query-with-source-card card
+                            :aggregation  [[:count]]
+                            :breakout     [[:datetime-field [:field-literal "DATE" :type/DateTime] :day]])))
+      results-metadata))
+
+;; make sure when doing a nested query we give you metadata that would suggest you should be able to break out a *YEAR*
+(expect
+  [{:base_type    :type/Text
+    :display_name "Date"
+    :id           [:field-literal "DATE" :type/Text]
+    :name         "DATE"
+    :source       :breakout
+    :table_id     (data/id :checkins)}
+   {:base_type    :type/Integer
+    :display_name "Count"
+    :id           [:field-literal :count :type/Integer]
+    :name         "count"
+    :source       :fields}]
+  (-> (tt/with-temp Card [card (mbql-card-def
+                                 :source-table (data/id :checkins)
+                                 :aggregation  [[:count]]
+                                 :breakout     [[:datetime-field [:field-id (data/id :checkins :date)] :year]])]
+        (qp/process-query (query-with-source-card card)))
+      results-metadata))
+
+;; make sure using a time interval filter works
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  :completed
+  (tt/with-temp Card [card (mbql-card-def
+                             :source-table (data/id :checkins))]
+    (-> (query-with-source-card card
+          :filter [:time-interval [:field-literal (identifier :checkins :date) :type/DateTime] -30 :day])
+        qp/process-query
+        :status)))
+
+;; make sure that wrapping a field literal in a datetime-field clause works correctly in filters & breakouts
+(datasets/expect-with-engines (engines-that-support :nested-queries)
+  :completed
+  (tt/with-temp Card [card (mbql-card-def
+                             :source-table (data/id :checkins))]
+    (-> (query-with-source-card card
+          :aggregation [[:count]]
+          :filter      [:= [:datetime-field [:field-literal (identifier :checkins :date) :type/Date] :quarter] "2014-01-01T08:00:00.000Z"]
+          :breakout    [[:datetime-field [:field-literal (identifier :checkins :date) :type/Date] :month]])
+        qp/process-query
+        :status)))
+
+;; make sure timeseries queries generated by "drag-to-filter" work correctly
+(expect
+  :completed
+  (tt/with-temp Card [card (mbql-card-def
+                             :source-table (data/id :checkins))]
+    (-> (query-with-source-card card
+          :aggregation [[:count]]
+          :breakout    [[:datetime-field [:field-literal "DATE" :type/Date] :week]]
+          :filter      [:between
+                        [:datetime-field [:field-literal "DATE" :type/Date] :month]
+                        "2014-02-01T00:00:00-08:00"
+                        "2014-05-01T00:00:00-07:00"])
+        qp/process-query
+        :status)))
diff --git a/test/metabase/test/data.clj b/test/metabase/test/data.clj
index 449598a2dcf88664ce7e00dc53e2fa1b576f6e54..1161240b3cfc53283ade0809bf58b6e3e2004e85 100644
--- a/test/metabase/test/data.clj
+++ b/test/metabase/test/data.clj
@@ -167,10 +167,18 @@
   []
   (contains? (driver/features *driver*) :foreign-keys))
 
+(defn binning-supported?
+  "Does the current engine support binning?"
+  []
+  (contains? (driver/features *driver*) :binning))
+
 (defn default-schema [] (i/default-schema *driver*))
 (defn id-field-type  [] (i/id-field-type *driver*))
 
-(defn expected-base-type->actual [base-type]
+(defn expected-base-type->actual
+  "Return actual `base_type` that will be used for the given driver if we asked for BASE-TYPE.
+   Mainly for Oracle because it doesn't have `INTEGER` types and uses decimals instead."
+  [base-type]
   (i/expected-base-type->actual *driver* base-type))
 
 
diff --git a/test/metabase/test/data/bigquery.clj b/test/metabase/test/data/bigquery.clj
index 6c9a831e48f7433675b12b30aacd4acfb90cc038..cd6b667c0793b7c2a1b6cdaa22a6b5e37af6a88d 100644
--- a/test/metabase/test/data/bigquery.clj
+++ b/test/metabase/test/data/bigquery.clj
@@ -21,18 +21,11 @@
 
 (def ^:private ^String normalize-name (comp (u/rpartial s/replace #"-" "_") name))
 
-(defn- get-env-var [env-var]
-  (or (env (keyword (format "mb-bigquery-%s" (name env-var))))
-      (throw (Exception. (format "In order to test BigQuery, you must specify the env var MB_BIGQUERY_%s."
-                                 (s/upper-case (s/replace (name env-var) #"-" "_")))))))
-
 (def ^:private ^:const details
   (datasets/when-testing-engine :bigquery
-    {:project-id    (get-env-var :project-id)
-     :client-id     (get-env-var :client-id)
-     :client-secret (get-env-var :client-secret)
-     :access-token  (get-env-var :access-token)
-     :refresh-token (get-env-var :refresh-token)}))
+    (reduce (fn [acc env-var]
+              (assoc acc env-var (i/db-test-env-var-or-throw :bigquery env-var)))
+            {} [:project-id :client-id :client-secret :access-token :refresh-token])))
 
 (def ^:private ^:const ^String project-id (:project-id details))
 
diff --git a/test/metabase/test/data/datasets.clj b/test/metabase/test/data/datasets.clj
index ddd7c8492f8f7593d6ccab426790ed13934e261f..1804238861afe211acff29b1e771c6378fe061d8 100644
--- a/test/metabase/test/data/datasets.clj
+++ b/test/metabase/test/data/datasets.clj
@@ -43,6 +43,11 @@
                     #{:h2})]
     (when config/is-test?
       (log/info (color/cyan "Running QP tests against these engines: " engines)))
+
+    (when-not (every? all-valid-engines engines)
+      (throw (Exception.
+              (format "Testing on '%s', but the following drivers are not available '%s'"
+                      engines (set (remove all-valid-engines engines))))))
     engines))
 
 
diff --git a/test/metabase/test/data/druid.clj b/test/metabase/test/data/druid.clj
index b3dfd2c4ca8424b1becb49b56f8363bcec64e8ec..bb121d0e518554ad0b14190100e4e96015594bdd 100644
--- a/test/metabase/test/data/druid.clj
+++ b/test/metabase/test/data/druid.clj
@@ -1,7 +1,6 @@
 (ns metabase.test.data.druid
   (:require [cheshire.core :as json]
             [clojure.java.io :as io]
-            [environ.core :refer [env]]
             [metabase.test.data
              [dataset-definitions :as defs]
              [interface :as i]]
@@ -10,10 +9,8 @@
   (:import metabase.driver.druid.DruidDriver))
 
 (defn- database->connection-details [& _]
-  {:host (or (env :mb-druid-host)
-             (throw (Exception. "In order to test Druid, you must specify `MB_DRUID_HOST`.")))
-   :port (Integer/parseInt (or (env :mb-druid-port)
-                               (throw (Exception. "In order to test Druid, you must specify `MB_DRUID_PORT`."))))})
+  {:host (i/db-test-env-var-or-throw :druid :host)
+   :port (Integer/parseInt (i/db-test-env-var-or-throw :druid :port))})
 
 (u/strict-extend DruidDriver
   i/IDriverTestExtensions
diff --git a/test/metabase/test/data/generic_sql.clj b/test/metabase/test/data/generic_sql.clj
index 43f17f1210b07640d1f415a973e1e82e9afe48ae..6123349db11ae55853fdf1ecb6829143f0c3f1c1 100644
--- a/test/metabase/test/data/generic_sql.clj
+++ b/test/metabase/test/data/generic_sql.clj
@@ -224,18 +224,19 @@
    the calls the resulting function with the rows to insert."
   [& wrap-insert-fns]
   (fn [driver {:keys [database-name], :as dbdef} {:keys [table-name], :as tabledef}]
-    (let [spec       (database->spec driver :db dbdef)
-          table-name (apply hx/qualify-and-escape-dots (qualified-name-components driver database-name table-name))
-          insert!    ((apply comp wrap-insert-fns) (partial do-insert! driver spec table-name))
-          rows       (load-data-get-rows driver dbdef tabledef)]
-      (insert! rows))))
+    (jdbc/with-db-connection [conn (database->spec driver :db dbdef)]
+      (.setAutoCommit (jdbc/get-connection conn) false)
+      (let [table-name (apply hx/qualify-and-escape-dots (qualified-name-components driver database-name table-name))
+            insert!    ((apply comp wrap-insert-fns) (partial do-insert! driver conn table-name))
+            rows       (load-data-get-rows driver dbdef tabledef)]
+        (insert! rows)))))
 
 (def load-data-all-at-once!            "Insert all rows at once."                             (make-load-data-fn))
 (def load-data-chunked!                "Insert rows in chunks of 200 at a time."              (make-load-data-fn load-data-chunked))
 (def load-data-one-at-a-time!          "Insert rows one at a time."                           (make-load-data-fn load-data-one-at-a-time))
 (def load-data-chunked-parallel!       "Insert rows in chunks of 200 at a time, in parallel." (make-load-data-fn load-data-add-ids (partial load-data-chunked pmap)))
 (def load-data-one-at-a-time-parallel! "Insert rows one at a time, in parallel."              (make-load-data-fn load-data-add-ids (partial load-data-one-at-a-time pmap)))
-
+;; ^ the parallel versions aren't neccesarily faster than the sequential versions for all drivers so make sure to do some profiling in order to pick the appropriate implementation
 
 (defn default-execute-sql! [driver context dbdef sql]
   (let [sql (some-> sql s/trim)]
@@ -293,27 +294,23 @@
   ;; Exec SQL for creating the DB
   (execute-sql! driver :server dbdef (str (drop-db-if-exists-sql driver dbdef) ";\n"
                                           (create-db-sql driver dbdef)))
-
   ;; Build combined statement for creating tables + FKs
   (let [statements (atom [])]
-
     ;; Add the SQL for creating each Table
     (doseq [tabledef table-definitions]
       (swap! statements conj (drop-table-if-exists-sql driver dbdef tabledef)
              (create-table-sql driver dbdef tabledef)))
-
     ;; Add the SQL for adding FK constraints
     (doseq [{:keys [field-definitions], :as tabledef} table-definitions]
       (doseq [{:keys [fk], :as fielddef} field-definitions]
         (when fk
           (swap! statements conj (add-fk-sql driver dbdef tabledef fielddef)))))
-
     ;; exec the combined statement
     (execute-sql! driver :db dbdef (s/join ";\n" (map hx/unescape-dots @statements))))
-
   ;; Now load the data for each Table
   (doseq [tabledef table-definitions]
-    (load-data! driver dbdef tabledef)))
+    (u/profile (format "load-data for %s %s %s" (name driver) (:database-name dbdef) (:table-name tabledef))
+      (load-data! driver dbdef tabledef))))
 
 (def IDriverTestExtensionsMixin
   "Mixin for `IGenericSQLTestExtensions` types to implement `create-db!` from `IDriverTestExtensions`."
@@ -323,26 +320,28 @@
 
 ;;; ## Various Util Fns
 
+(defn- do-when-testing-engine {:style/indent 1} [engine f]
+  (require 'metabase.test.data.datasets)
+  ((resolve 'metabase.test.data.datasets/do-when-testing-engine) engine f))
+
 (defn execute-when-testing!
   "Execute a prepared SQL-AND-ARGS against Database with spec returned by GET-CONNECTION-SPEC only when running tests against ENGINE.
    Useful for doing engine-specific setup or teardown."
   {:style/indent 2}
   [engine get-connection-spec & sql-and-args]
-  ((resolve 'metabase.test.data.datasets/do-when-testing-engine)
-   engine
-   (fn []
-     (println (u/format-color 'blue "[%s] %s" (name engine) (first sql-and-args)))
-     (jdbc/execute! (get-connection-spec) sql-and-args)
-     (println (u/format-color 'blue "[OK]")))))
+  (do-when-testing-engine engine
+    (fn []
+      (println (u/format-color 'blue "[%s] %s" (name engine) (first sql-and-args)))
+      (jdbc/execute! (get-connection-spec) sql-and-args)
+      (println (u/format-color 'blue "[OK]")))))
 
 (defn query-when-testing!
   "Execute a prepared SQL-AND-ARGS **query** against Database with spec returned by GET-CONNECTION-SPEC only when running tests against ENGINE.
    Useful for doing engine-specific setup or teardown where `execute-when-testing!` won't work because the query returns results."
   {:style/indent 2}
   [engine get-connection-spec & sql-and-args]
-  ((resolve 'metabase.test.data.datasets/do-when-testing-engine)
-   engine
-   (fn []
-     (println (u/format-color 'blue "[%s] %s" (name engine) (first sql-and-args)))
-     (u/prog1 (jdbc/query (get-connection-spec) sql-and-args)
-       (println (u/format-color 'blue "[OK] -> %s" (vec <>)))))))
+  (do-when-testing-engine engine
+    (fn []
+      (println (u/format-color 'blue "[%s] %s" (name engine) (first sql-and-args)))
+      (u/prog1 (jdbc/query (get-connection-spec) sql-and-args)
+        (println (u/format-color 'blue "[OK] -> %s" (vec <>)))))))
diff --git a/test/metabase/test/data/interface.clj b/test/metabase/test/data/interface.clj
index d1fbdb82e10b10c35ebf8ff3ca47d53033cfa461..5a3c89f006f6307de200df501208fb9cb16e19f4 100644
--- a/test/metabase/test/data/interface.clj
+++ b/test/metabase/test/data/interface.clj
@@ -4,6 +4,7 @@
    Objects that implement `IDriverTestExtensions` know how to load a `DatabaseDefinition` into an
    actual physical RDMS database. This functionality allows us to easily test with multiple datasets."
   (:require [clojure.string :as str]
+            [environ.core :refer [env]]
             [metabase
              [db :as db]
              [driver :as driver]
@@ -113,7 +114,7 @@
     "*OPTIONAL*. Return the base type type that is actually used to store `Fields` of BASE-TYPE.
      The default implementation of this method is an identity fn. This is provided so DBs that don't support a given BASE-TYPE used in the test data
      can specifiy what type we should expect in the results instead.
-     For example, Oracle has `INTEGER` data types, so `:type/Integer` test values are instead stored as `NUMBER`, which we map to `:type/Decimal`.")
+     For example, Oracle has no `INTEGER` data types, so `:type/Integer` test values are instead stored as `NUMBER`, which we map to `:type/Decimal`.")
 
   (format-name ^String [this, ^String table-or-field-name]
     "*OPTIONAL* Transform a lowercase string `Table` or `Field` name in a way appropriate for this dataset
@@ -232,3 +233,37 @@
      (for [fielddef (nest-fielddefs dbdef table-name)]
        (update fielddef :field-name flatten-field-name))
      (flatten-rows dbdef table-name)]))
+
+(defn db-test-env-var
+  "Look up test environment var `:ENV-VAR` for the given `:DATABASE-NAME` containing connection related parameters.
+  If no `:default` param is specified and the var isn't found, throw.
+
+     (db-test-env-var :mysql :user) ; Look up `MB_MYSQL_TEST_USER`"
+  ([engine env-var]
+   (db-test-env-var engine env-var nil))
+  ([engine env-var default]
+   (get env
+        (keyword (format "mb-%s-test-%s" (name engine) (name env-var)))
+        default)))
+
+(defn- to-system-env-var-str
+  "Converts the clojure environment variable form (a keyword) to a
+  stringified version that will be specified at the system level
+
+  i.e. :foo-bar -> FOO_BAR"
+  [env-var-kwd]
+  (-> env-var-kwd
+      name
+      (str/replace "-" "_")
+      str/upper-case))
+
+(defn db-test-env-var-or-throw
+  "Same as `db-test-env-var` but will throw an exception if the variable is nil"
+  ([engine env-var]
+   (db-test-env-var-or-throw engine env-var nil))
+  ([engine env-var default]
+   (or (db-test-env-var engine env-var default)
+       (throw (Exception. (format "In order to test %s, you must specify the env var MB_%s_TEST_%s."
+                                  (name engine)
+                                  (str/upper-case (name engine))
+                                  (to-system-env-var-str env-var)))))))
diff --git a/test/metabase/test/data/mysql.clj b/test/metabase/test/data/mysql.clj
index 6db38b8cbc5572dad17276d98d6ba232f573495a..af215eeb7df7c73801de6fc374f86d971e4e686d 100644
--- a/test/metabase/test/data/mysql.clj
+++ b/test/metabase/test/data/mysql.clj
@@ -1,7 +1,6 @@
 (ns metabase.test.data.mysql
   "Code for creating / destroying a MySQL database from a `DatabaseDefinition`."
-  (:require [environ.core :refer [env]]
-            [metabase.test.data
+  (:require [metabase.test.data
              [generic-sql :as generic]
              [interface :as i]]
             [metabase.util :as u])
@@ -19,11 +18,12 @@
    :type/Time       "TIME"})
 
 (defn- database->connection-details [context {:keys [database-name]}]
-  (merge {:host         "localhost"
-          :port         3306
-          :timezone     :America/Los_Angeles
-          :user         (if (env :circleci) "ubuntu"
-                            "root")}
+  (merge {:host         (i/db-test-env-var-or-throw :mysql :host "localhost")
+          :port         (i/db-test-env-var-or-throw :mysql :port 3306)
+          :user         (i/db-test-env-var :mysql :user "root")
+          :timezone     :America/Los_Angeles}
+         (when-let [password (i/db-test-env-var :mysql :password)]
+           {:password password})
          (when (= context :db)
            {:db database-name})))
 
diff --git a/test/metabase/test/data/oracle.clj b/test/metabase/test/data/oracle.clj
index 33d7c0ccbf502c4bdf86c398fea57be7e80a6d86..dc0f7e3c16d1b12c355a4684298bfe81b149e49a 100644
--- a/test/metabase/test/data/oracle.clj
+++ b/test/metabase/test/data/oracle.clj
@@ -2,23 +2,15 @@
   (:require [clojure.java.jdbc :as jdbc]
             [clojure.string :as s]
             [environ.core :refer [env]]
-            [metabase.driver.generic-sql :as sql]
+            [metabase.driver
+             [generic-sql :as sql]
+             oracle]
             [metabase.test.data
              [generic-sql :as generic]
              [interface :as i]]
             [metabase.util :as u])
   (:import metabase.driver.oracle.OracleDriver))
 
-(defn- get-db-env-var
-  " Look up the relevant connection param from corresponding env var or throw an exception if it's not set.
-
-     (get-db-env-var :user) ; Look up `MB_ORACLE_USER`"
-  [env-var & [default]]
-  (or (env (keyword (format "mb-oracle-%s" (name env-var))))
-      default
-      (throw (Exception. (format "In order to test Oracle, you must specify the env var MB_ORACLE_%s."
-                                 (s/upper-case (name env-var)))))))
-
 ;; Similar to SQL Server, Oracle on AWS doesn't let you create different databases;
 ;; We'll create a unique schema (the same as a "User" in Oracle-land) for each test run and use that to keep
 ;; tests from clobbering over one another; we'll also qualify the names of tables to include their DB name
@@ -35,11 +27,11 @@
 
 
 (def ^:private db-connection-details
-  (delay {:host     (get-db-env-var :host)
-          :port     (Integer/parseInt (get-db-env-var :port "1521"))
-          :user     (get-db-env-var :user)
-          :password (get-db-env-var :password)
-          :sid      (get-db-env-var :sid)}))
+  (delay {:host     (i/db-test-env-var-or-throw :oracle :host)
+          :port     (Integer/parseInt (i/db-test-env-var-or-throw :oracle :port "1521"))
+          :user     (i/db-test-env-var-or-throw :oracle :user)
+          :password (i/db-test-env-var-or-throw :oracle :password)
+          :sid      (i/db-test-env-var-or-throw :oracle :sid)}))
 
 
 (def ^:private ^:const field-base-type->sql-type
@@ -79,7 +71,7 @@
           :drop-table-if-exists-sql  (u/drop-first-arg drop-table-if-exists-sql)
           :execute-sql!              generic/sequentially-execute-sql!
           :field-base-type->sql-type (u/drop-first-arg field-base-type->sql-type)
-          :load-data!                generic/load-data-one-at-a-time-parallel!
+          :load-data!                generic/load-data-one-at-a-time! ; Now that connections are reüsed doing this sequentially actually seems to be faster than parallel
           :pk-sql-type               (constantly "INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL") ; LOL
           :qualified-name-components (partial i/single-db-qualified-name-components session-schema)})
 
@@ -108,6 +100,12 @@
 (def ^:private execute-when-testing-oracle!
   (partial generic/execute-when-testing! :oracle dbspec))
 
+(defn- clean-session-schemas! []
+  "Delete any old session users that for some reason or another were never deleted. For REPL usage."
+  (doseq [schema (non-session-schemas)
+          :when  (re-find #"^CAM_" schema)]
+    (execute-when-testing-oracle! (format "DROP USER %s CASCADE" schema))))
+
 (defn- create-session-user!
   {:expectations-options :before-run}
   []
diff --git a/test/metabase/test/data/postgres.clj b/test/metabase/test/data/postgres.clj
index 9c152d0a866e1ca095a20833c31de2d0fa2c3a2a..29a146ca02b1a49745cd80e5b754229bdb8ef82f 100644
--- a/test/metabase/test/data/postgres.clj
+++ b/test/metabase/test/data/postgres.clj
@@ -1,7 +1,6 @@
 (ns metabase.test.data.postgres
   "Code for creating / destroying a Postgres database from a `DatabaseDefinition`."
-  (:require [environ.core :refer [env]]
-            [metabase.test.data
+  (:require [metabase.test.data
              [generic-sql :as generic]
              [interface :as i]]
             [metabase.util :as u])
@@ -21,11 +20,13 @@
    :type/UUID       "UUID"})
 
 (defn- database->connection-details [context {:keys [database-name]}]
-  (merge {:host     "localhost"
-          :port     5432
+  (merge {:host     (i/db-test-env-var-or-throw :postgresql :host "localhost")
+          :port     (i/db-test-env-var-or-throw :postgresql :port 5432)
           :timezone :America/Los_Angeles}
-         (when (env :circleci)
-           {:user "ubuntu"})
+         (when-let [user (i/db-test-env-var :postgresql :user)]
+           {:user user})
+         (when-let [password (i/db-test-env-var :postgresql :password)]
+           {:password password})
          (when (= context :db)
            {:db database-name})))
 
diff --git a/test/metabase/test/data/presto.clj b/test/metabase/test/data/presto.clj
index 65faebfc1d5b0c1196be0d6d7ad39c3c674c05c0..bd2af39d16e8026a579a5a4347e6c64ca065285f 100644
--- a/test/metabase/test/data/presto.clj
+++ b/test/metabase/test/data/presto.clj
@@ -1,6 +1,5 @@
 (ns metabase.test.data.presto
   (:require [clojure.string :as s]
-            [environ.core :refer [env]]
             [honeysql
              [core :as hsql]
              [helpers :as h]]
@@ -13,20 +12,12 @@
 
 (resolve-private-vars metabase.driver.presto execute-presto-query! presto-type->base-type quote-name quote+combine-names)
 
-;;; Helpers
-
-(defn- get-env-var [env-var]
-  (or (env (keyword (format "mb-presto-%s" (name env-var))))
-      (throw (Exception. (format "In order to test Presto, you must specify the env var MB_PRESTO_%s."
-                                 (s/upper-case (s/replace (name env-var) #"-" "_")))))))
-
-
 ;;; IDriverTestExtensions implementation
 
 (defn- database->connection-details [context {:keys [database-name]}]
-  (merge {:host (get-env-var :host)
-          :port (get-env-var :port)
-          :user "metabase"
+  (merge {:host (i/db-test-env-var-or-throw :presto :host)
+          :port (i/db-test-env-var-or-throw :presto :port)
+          :user (i/db-test-env-var-or-throw :presto :user "metabase")
           :ssl  false}
          (when (= context :db)
            {:catalog database-name})))
diff --git a/test/metabase/test/data/redshift.clj b/test/metabase/test/data/redshift.clj
index 8368d3167be68a661914732a20e22f59a57c975a..ac566a427ac417ae4dca52edb1d0538822a76332 100644
--- a/test/metabase/test/data/redshift.clj
+++ b/test/metabase/test/data/redshift.clj
@@ -1,6 +1,5 @@
 (ns metabase.test.data.redshift
   (:require [clojure.string :as s]
-            [environ.core :refer [env]]
             [metabase.driver.generic-sql :as sql]
             [metabase.test.data
              [generic-sql :as generic]
@@ -19,22 +18,12 @@
    :type/Integer    "INTEGER"
    :type/Text       "TEXT"})
 
-(defn- get-db-env-var
-  "Look up the relevant env var for AWS connection details or throw an exception if it's not set.
-
-     (get-db-env-var :user) ; Look up `MB_REDSHIFT_USER`"
-  [env-var & [default]]
-  (or (env (keyword (format "mb-redshift-%s" (name env-var))))
-      default
-      (throw (Exception. (format "In order to test Redshift, you must specify the env var MB_REDSHIFT_%s."
-                                 (s/upper-case (name env-var)))))))
-
 (def ^:private db-connection-details
-  (delay {:host     (get-db-env-var :host)
-          :port     (Integer/parseInt (get-db-env-var :port "5439"))
-          :db       (get-db-env-var :db)
-          :user     (get-db-env-var :user)
-          :password (get-db-env-var :password)}))
+  (delay {:host     (i/db-test-env-var-or-throw :redshift :host)
+          :port     (Integer/parseInt (i/db-test-env-var-or-throw :redshift :port "5439"))
+          :db       (i/db-test-env-var-or-throw :redshift :db)
+          :user     (i/db-test-env-var-or-throw :redshift :user)
+          :password (i/db-test-env-var-or-throw :redshift :password)}))
 
 
 ;; Redshift is tested remotely, which means we need to support multiple tests happening against the same remote host at the same time.
diff --git a/test/metabase/test/data/sqlserver.clj b/test/metabase/test/data/sqlserver.clj
index 6802c1761057556c639204ea01b230cd88eac76a..b43098553fe1a4d31eb2066c722be6043cfc4a97 100644
--- a/test/metabase/test/data/sqlserver.clj
+++ b/test/metabase/test/data/sqlserver.clj
@@ -1,8 +1,6 @@
 (ns metabase.test.data.sqlserver
   "Code for creating / destroying a SQLServer database from a `DatabaseDefinition`."
   (:require [clojure.java.jdbc :as jdbc]
-            [clojure.string :as s]
-            [environ.core :refer [env]]
             [metabase.driver.generic-sql :as sql]
             [metabase.test.data
              [datasets :as datasets]
@@ -35,22 +33,11 @@
 (defn- +suffix [db-name]
   (str db-name \_ @db-name-suffix-number))
 
-(defn- get-db-env-var
-  "Since we run our tests on non-Windows machines, we need to connect to a remote server for running tests.
-   Look up the relevant env var or throw an exception if it's not set.
-
-     (get-db-env-var :user) ; Look up `MB_SQL_SERVER_USER`"
-  [env-var & [default]]
-  (or (env (keyword (format "mb-sql-server-%s" (name env-var))))
-      default
-      (throw (Exception. (format "In order to test SQL Server, you must specify the env var MB_SQL_SERVER_%s."
-                                 (s/upper-case (name env-var)))))))
-
 (defn- database->connection-details [context {:keys [database-name]}]
-  {:host         (get-db-env-var :host)
-   :port         (Integer/parseInt (get-db-env-var :port "1433"))
-   :user         (get-db-env-var :user)
-   :password     (get-db-env-var :password)
+  {:host         (i/db-test-env-var-or-throw :sqlserver :host)
+   :port         (Integer/parseInt (i/db-test-env-var-or-throw :sqlserver :port "1433"))
+   :user         (i/db-test-env-var-or-throw :sqlserver :user)
+   :password     (i/db-test-env-var-or-throw :sqlserver :password)
    :db           (when (= context :db)
                    (+suffix database-name))})
 
diff --git a/test/metabase/test/data/users.clj b/test/metabase/test/data/users.clj
index a1415e76d1298cdd4ff7b1e0eafd169f4de90d9d..b3a9f0a659954c2cf113f0f50dc74fa27f753838 100644
--- a/test/metabase/test/data/users.clj
+++ b/test/metabase/test/data/users.clj
@@ -107,12 +107,14 @@
      (:id (fetch-user username)))))
 
 (defn user->credentials
-  "Return a map with `:email` and `:password` for User with USERNAME.
+  "Return a map with `:username` and `:password` for User with USERNAME.
 
-    (user->credentials :rasta) -> {:email \"rasta@metabase.com\", :password \"blueberries\"}"
+    (user->credentials :rasta) -> {:username \"rasta@metabase.com\", :password \"blueberries\"}"
   [username]
   {:pre [(contains? usernames username)]}
-  (select-keys (user->info username) [:email :password]))
+  (let [{:keys [email password]} (user->info username)]
+    {:username email
+     :password password}))
 
 (def ^{:arglists '([id])} id->user
   "Reverse of `user->id`.
diff --git a/test/metabase/test/data/vertica.clj b/test/metabase/test/data/vertica.clj
index 9edd805a27d37a3ce9f3b64558c0d98060e415b3..08057f53be6a74e3844ac0a3288883b6932b1792 100644
--- a/test/metabase/test/data/vertica.clj
+++ b/test/metabase/test/data/vertica.clj
@@ -1,7 +1,6 @@
 (ns metabase.test.data.vertica
   "Code for creating / destroying a Vertica database from a `DatabaseDefinition`."
-  (:require [environ.core :refer [env]]
-            [metabase.driver.generic-sql :as sql]
+  (:require [metabase.driver.generic-sql :as sql]
             [metabase.test.data
              [generic-sql :as generic]
              [interface :as i]]
@@ -22,16 +21,16 @@
 
 
 (defn- db-name []
-  (or (env :mb-vertica-db)
-      "docker"))
+  (i/db-test-env-var-or-throw :vertica :db "docker"))
 
 (def ^:private db-connection-details
-  (delay {:host     (or (env :mb-vertica-host) "localhost")
+  (delay {:host     (i/db-test-env-var-or-throw :vertica :host "localhost")
+          :port     (Integer/parseInt (i/db-test-env-var-or-throw :vertica :port "5433"))
+          :user     (i/db-test-env-var :vertica :user "dbadmin")
+          :password (i/db-test-env-var :vertica :password)
           :db       (db-name)
-          :port     5433
           :timezone :America/Los_Angeles ; why?
-          :user     (or (env :mb-vertica-user) "dbadmin")
-          :password (env :mb-vertica-password)}))
+          }))
 
 (defn- qualified-name-components
   ([_]                             [(db-name)])
diff --git a/test/metabase/test/integrations/ldap.clj b/test/metabase/test/integrations/ldap.clj
new file mode 100644
index 0000000000000000000000000000000000000000..2cb0e54270fa181ac4f643bc1b124341fe028580
--- /dev/null
+++ b/test/metabase/test/integrations/ldap.clj
@@ -0,0 +1,55 @@
+(ns metabase.test.integrations.ldap
+  (:require [clojure.java.io :as io]
+            [expectations :refer [expect]]
+            [metabase.test.util :as tu])
+  (:import (com.unboundid.ldap.listener InMemoryDirectoryServer InMemoryDirectoryServerConfig InMemoryListenerConfig)
+           com.unboundid.ldap.sdk.schema.Schema
+           com.unboundid.ldif.LDIFReader))
+
+
+(def ^:dynamic *ldap-server*
+  "An in-memory LDAP testing server."
+  nil)
+
+(defn- get-server-config []
+  (doto (InMemoryDirectoryServerConfig. (into-array String ["dc=metabase,dc=com"]))
+          (.addAdditionalBindCredentials "cn=Directory Manager" "password")
+          (.setSchema (Schema/getDefaultStandardSchema))
+          (.setListenerConfigs (into-array InMemoryListenerConfig [(InMemoryListenerConfig/createLDAPConfig "LDAP" 0)]))))
+
+(defn- start-ldap-server! []
+  (with-open [ldif (LDIFReader. (io/file (io/resource "ldap.ldif")))]
+    (doto (InMemoryDirectoryServer. (get-server-config))
+            (.importFromLDIF true ldif)
+            (.startListening))))
+
+(defn get-ldap-port
+  "Get the port for the bound in-memory LDAP testing server."
+  []
+  (.getListenPort *ldap-server*))
+
+(defn do-with-ldap-server
+  "Bind `*ldap-server*` and the relevant settings to an in-memory LDAP testing server and executes `f`."
+  [f]
+  (binding [*ldap-server* (start-ldap-server!)]
+    (try
+      (tu/with-temporary-setting-values [ldap-enabled    true
+                                         ldap-host       "localhost"
+                                         ldap-port       (str (get-ldap-port))
+                                         ldap-bind-dn    "cn=Directory Manager"
+                                         ldap-password   "password"
+                                         ldap-user-base  "dc=metabase,dc=com"
+                                         ldap-group-sync true
+                                         ldap-group-base "dc=metabase,dc=com"]
+        (f))
+      (finally (.shutDown *ldap-server* true)))))
+
+(defmacro with-ldap-server
+  "Bind `*ldap-server*` and the relevant settings to an in-memory LDAP testing server and executes BODY."
+  [& body]
+  `(do-with-ldap-server (fn [] ~@body)))
+
+(defmacro expect-with-ldap-server
+  "Generate a unit test that runs ACTUAL with a bound `*ldap-server*` and relevant settings."
+  [expected actual]
+  `(expect ~expected (with-ldap-server ~actual)))
diff --git a/test/metabase/test/mock/moviedb.clj b/test/metabase/test/mock/moviedb.clj
index 7ff287e37e430ed9f8191f2fbc656a62ef82279c..2847ac2f34bd84954ddfbb74069816661357a96b 100644
--- a/test/metabase/test/mock/moviedb.clj
+++ b/test/metabase/test/mock/moviedb.clj
@@ -58,23 +58,23 @@
 (extend MovieDbDriver
   driver/IDriver
   (merge driver/IDriverDefaultsMixin
-         {:analyze-table       (constantly nil)
-          :describe-database   (fn [_ {:keys [exclude-tables]}]
-                                 (let [tables (for [table (vals moviedb-tables)
-                                                    :when (not (contains? exclude-tables (:name table)))]
-                                                (select-keys table [:schema :name]))]
-                                   {:tables (set tables)}))
-          :describe-table      (fn [_ _ table]
-                                 (-> (get moviedb-tables (:name table))
-                                     (dissoc :fks)))
-          :describe-table-fks  (fn [_ _ table]
-                                 (-> (get moviedb-tables (:name table))
-                                     :fks
-                                     set))
-          :features            (constantly #{:foreign-keys})
-          :details-fields      (constantly [])
-          :table-rows-seq      (constantly [{:keypath "movies.filming.description", :value "If the movie is currently being filmed."}
-                                            {:keypath "movies.description", :value "A cinematic adventure."}])}))
+         {:analyze-table      (constantly nil)
+          :describe-database  (fn [_ {:keys [exclude-tables]}]
+                                (let [tables (for [table (vals moviedb-tables)
+                                                   :when (not (contains? exclude-tables (:name table)))]
+                                               (select-keys table [:schema :name]))]
+                                  {:tables (set tables)}))
+          :describe-table     (fn [_ _ table]
+                                (-> (get moviedb-tables (:name table))
+                                    (dissoc :fks)))
+          :describe-table-fks (fn [_ _ table]
+                                (-> (get moviedb-tables (:name table))
+                                    :fks
+                                    set))
+          :features           (constantly #{:foreign-keys})
+          :details-fields     (constantly [])
+          :table-rows-seq     (constantly [{:keypath "movies.filming.description", :value "If the movie is currently being filmed."}
+                                           {:keypath "movies.description", :value "A cinematic adventure."}])}))
 
 (driver/register-driver! :moviedb (MovieDbDriver.))
 
diff --git a/test/metabase/test/util.clj b/test/metabase/test/util.clj
index b738887fc920eae8a64b9a726db4be18abdd1372..24edbaeeebf1acd76b5f3f056b4652858356431f 100644
--- a/test/metabase/test/util.clj
+++ b/test/metabase/test/util.clj
@@ -217,7 +217,7 @@
   (or (symbol? x)
       (instance? clojure.lang.Namespace x)))
 
-(defn resolve-private-vars* [source-namespace target-namespace symbols]
+(defn ^:deprecated resolve-private-vars* [source-namespace target-namespace symbols]
   {:pre [(namespace-or-symbol? source-namespace)
          (namespace-or-symbol? target-namespace)
          (every? symbol? symbols)]}
@@ -227,11 +227,15 @@
                          (throw (Exception. (str source-namespace "/" symb " doesn't exist!"))))]]
     (intern target-namespace symb varr)))
 
-(defmacro resolve-private-vars
+(defmacro ^:deprecated resolve-private-vars
   "Have your cake and eat it too. This Macro adds private functions from another namespace to the current namespace so we can test them.
 
     (resolve-private-vars metabase.driver.generic-sql.sync
-      field-avg-length field-percent-urls)"
+      field-avg-length field-percent-urls)
+
+   DEPRECATED: Just refer to vars directly using `#'` syntax instead of using this macro.
+
+     (#'some-ns/field-avg-length ...)"
   [namespc & symbols]
   `(resolve-private-vars* (quote ~namespc) *ns* (quote ~symbols)))
 
diff --git a/test_resources/ldap.ldif b/test_resources/ldap.ldif
new file mode 100644
index 0000000000000000000000000000000000000000..9d86c6f417da87d19368da755fdc2b3f303445a0
--- /dev/null
+++ b/test_resources/ldap.ldif
@@ -0,0 +1,76 @@
+dn: dc=metabase,dc=com
+objectClass: top
+objectClass: organization
+objectClass: dcObject
+dc: metabase
+o: Metabase Corporation
+
+dn: ou=People,dc=metabase,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: People
+
+dn: cn=John Smith,ou=People,dc=metabase,dc=com
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+cn: John Smith
+sn: Smith
+givenName: John
+uid: jsmith1
+mail: John.Smith@metabase.com
+userPassword: strongpassword
+
+dn: cn=Sally Brown,ou=People,dc=metabase,dc=com
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+cn: Sally Brown
+sn: Brown
+givenName: Sally
+uid: sbrown20
+mail: sally.brown@metabase.com
+userPassword: 1234
+
+dn: ou=Birds,dc=metabase,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: Birds
+
+dn: cn=Rasta Toucan,ou=Birds,dc=metabase,dc=com
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+cn: Rasta Toucan
+givenName: Rasta
+sn: Toucan
+uid: rasta
+mail: rasta@metabase.com
+userPassword: blueberries
+
+dn: cn=Lucky Pigeon,ou=Birds,dc=metabase,dc=com
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+cn: Lucky Pigeon
+givenName: Lucky
+sn: Pigeon
+uid: lucky
+mail: lucky@metabase.com
+userPassword: notalmonds
+
+dn: ou=Groups,dc=metabase,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: Groups
+
+dn: cn=Accounting,ou=Groups,dc=metabase,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Accounting
+member: cn=John Smith,ou=People,dc=metabase,dc=com
+member: cn=Rasta Toucan,ou=Birds,dc=metabase,dc=com
diff --git a/webpack.config.js b/webpack.config.js
index c08d75a809864330fc0b7e343b1c358ab20fdf20..d050be9676c3a26c5b592d6c0a1ec7cf969d0db7 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -253,11 +253,15 @@ if (NODE_ENV !== "production") {
     config.output.devtoolModuleFilenameTemplate = '[absolute-resource-path]';
     config.output.pathinfo = true;
 } else {
-    // this is required to ensure we don't minify Chevrotain token identifiers
-    // https://github.com/SAP/chevrotain/tree/master/examples/parser/minification
     config.plugins.push(new webpack.optimize.UglifyJsPlugin({
-        warnings: false,
+        // suppress uglify warnings in production
+        // output from these warnings was causing Heroku builds to fail (#5410)
+        compress: {
+            warnings: false,
+        },
         mangle: {
+            // this is required to ensure we don't minify Chevrotain token identifiers
+            // https://github.com/SAP/chevrotain/tree/master/examples/parser/minification
             except: allTokens.map(function(currTok) {
                 return chevrotain.tokenName(currTok);
             })