Repository: sinonjs/fake-timers
Pull request #295 (2020-02-01 05:39:46)

Bump husky from 3.0.8 to 4.2.1
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

If you make any changes to it yourself then they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [husky](https://github.com/typicode/husky) from 3.0.8 to 4.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/typicode/husky/releases">husky's releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<ul>
<li>Fix: support spaces in path to husky.local.sh <a href="https://github-redirect.dependabot.com/typicode/husky/issues/658">#658</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Check Git version during install and log an error if it's <code>&lt;2.13.0</code></li>
</ul>
<h2>v4.1.0</h2>
<ul>
<li>Improve speed and refactor hooks</li>
</ul>
<h2>v4.0.9</h2>
<ul>
<li>Fix: read stdin from hook script (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/645">#645</a>)</li>
</ul>
<h2>v4.0.7</h2>
<ul>
<li>Fix: Yarn when running inside <code>winpty</code> (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/634">#634</a>)</li>
</ul>
<h2>v4.0.6</h2>
<ul>
<li>Revert change in v4.0.5</li>
</ul>
<h2>v4.0.5</h2>
<ul>
<li>Fix: use process.exit if install fails <a href="https://github-redirect.dependabot.com/typicode/husky/issues/633">#633</a></li>
</ul>
<h2>v4.0.4</h2>
<ul>
<li>Fix: npm ignore <code>.eslintrc.js</code> (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/627">#627</a>)</li>
</ul>
<h2>v4.0.3</h2>
<ul>
<li>Fix: error message if trying to install in a non-git repo (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/627">#627</a>)</li>
</ul>
<h2>v4.0.2</h2>
<ul>
<li>Fix: show error message when hook fails</li>
</ul>
<h2>v4.0.1</h2>
<ul>
<li>Fix: make Yarn silent. When Husky was installed with Yarn 1.21.1, hooks output was too verbose (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/626">#626</a>).</li>
</ul>
<h2>v4.0.0</h2>
<ul>
<li>Support <code>Yarn v2</code> new Plug'n'Play feature (thanks to <a href="https://github.com/arcanis">@arcanis</a>)</li>
<li>Improve path handling on Windows (in particular with <code>Cygwin</code> and <code>Cmdr</code>)</li>
<li>Remove <code>dependencies</code> and simplify code</li>
<li><strong>Breaking</strong> requires <code>Node 10+</code></li>
</ul>
<p><strong>Thanks to all contributors and everyone who is supporting Husky on <a href="https://opencollective.com/husky">Open Collective</a>, <a href="https://github.com/sponsors/typicode">GitHub sponsors</a> and <a href="https://www.patreon.com/typicode">Patreon</a>!</strong></p>
<h2>v4.0.0-beta.5</h2>
<ul>
<li>Fixes a bug in <code>v4.0.0-beta.4</code></li>
</ul>
<h2>v4.0.0-beta.4</h2>
<ul>
<li>Rely on <code>INIT_CWD</code> env rather than <code>node_modules</code> path</li>
<li>Reduce dependencies: <code>run-node</code>, <code>read-pkg</code></li>
<li>Target <code>ES2017</code> environments</li>
<li>Support <code>Cygwin</code> and <code>Cmdr</code> on Windows</li>
</ul>
</tr></table> ... (truncated)
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/typicode/husky/commit/d1f182bc8cab7439c234a9b63fcfc665f292d351"><code>d1f182b</code></a> 4.2.1</li>
<li><a href="https://github.com/typicode/husky/commit/fa3a7d774afb4c622511f4a4ec9be11b3ceecbe8"><code>fa3a7d7</code></a> support spaces in path to husky.local.sh (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/658">#658</a>)</li>
<li><a href="https://github.com/typicode/husky/commit/989152847ae35dab8901247e9970ddd68dfad364"><code>9891528</code></a> Update README.md and mention husky.config.js file</li>
<li><a href="https://github.com/typicode/husky/commit/9c49f3995571c11375d1e46a31f6661343c0b1ba"><code>9c49f39</code></a> 4.2.0</li>
<li><a href="https://github.com/typicode/husky/commit/c7976dfdf96f9bae34468d2e1369871af67de743"><code>c7976df</code></a> Remove version check in gitRevParse.ts</li>
<li><a href="https://github.com/typicode/husky/commit/d561a8885d7954148ce1de6873d2e4ce2fde0881"><code>d561a88</code></a> Update message</li>
<li><a href="https://github.com/typicode/husky/commit/3d3c9cc81c4ac44ba4cb3475333e4d64d9f841a2"><code>3d3c9cc</code></a> Check Git version during install (<a href="https://github-redirect.dependabot.com/typicode/husky/issues/656">#656</a>)</li>
<li><a href="https://github.com/typicode/husky/commit/ef5b9654c63170cedab61a44f44f96a505eb8043"><code>ef5b965</code></a> 4.1.0</li>
<li><a href="https://github.com/typicode/husky/commit/0ba2ea2fce3dbd84d5bdf8e6344b37100a9fc4bb"><code>0ba2ea2</code></a> Update .gitattributes</li>
<li><a href="https://github.com/typicode/husky/commit/f66057ba2351272673f9e14898dc0460cb4cfc2d"><code>f66057b</code></a> Update snapshot</li>
<li>Additional commits viewable in <a href="https://github.com/typicode/husky/compare/v3.0.8...v4.2.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=husky&package-manager=npm_and_yarn&previous-version=3.0.8&new-version=4.2.1)](https://dependabot.com/compatibility-score.html?dependency-name=husky&package-manager=npm_and_yarn&previous-version=3.0.8&new-version=4.2.1)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)



</details>


Patch:
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..9f60c2b
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,142 @@
+version: 2.1
+
+references:
+  x-workdir: &work-dir
+    working_directory: ~/source
+
+  x-save-workspace: &persist-step
+    persist_to_workspace:
+      root: ~/source
+      paths:
+        - .
+
+  x-attach: &attach-step
+    attach_workspace:
+      at: .
+
+jobs:
+  install-dependencies:
+    <<: *work-dir
+    docker:
+      - image: circleci/node:10
+    environment:
+      HUSKY_SKIP_INSTALL: 1
+    steps:
+      - checkout
+      - restore_cache:
+          keys:
+            - v1-npm-{{ checksum "package-lock.json" }}
+      - run:
+          name: Install dependencies
+          command: |
+            if [ ! -d node_modules ]; then
+                npm ci
+            fi
+      - save_cache:
+          key: v1-npm-{{ checksum "package-lock.json" }}
+          paths:
+            - node_modules
+      - *persist-step
+
+  lint:
+    <<: *work-dir
+    docker:
+      - image: node
+    steps:
+      - *attach-step
+      - run:
+          name: lint
+          command: npm run lint
+
+  node-8:
+    docker:
+      - image: circleci/node:8
+    steps:
+      - *attach-step
+      - run:
+          name: Test
+          command: npm run test-node
+
+  node-10:
+    docker:
+      - image: circleci/node:10
+    steps:
+      - *attach-step
+      - run:
+          name: Test
+          command: npm run test-node
+
+  node-12:
+    docker:
+      - image: circleci/node:12
+    steps:
+      - *attach-step
+      - run:
+          name: Test with coverage
+          command: npm run test-coverage
+      - run:
+          name: Upload coverage report
+          command: bash <(curl -s https://codecov.io/bash) -F unit -s coverage/lcov.info
+
+  node-13:
+    docker:
+      - image: circleci/node:13
+    steps:
+      - *attach-step
+      - run:
+          name: Test
+          command: npm run test-node
+
+  chromium:
+    docker:
+      - image: circleci/node:12-browsers
+    steps:
+      - *attach-step
+      - run:
+          name: Test
+          command: npm run test-headless
+
+  saucelabs:
+    docker:
+      - image: circleci/node:12
+    steps:
+      - *attach-step
+      - run:
+          name: Test in browsers (Sauce Labs)
+          command: npm run test-cloud
+
+workflows:
+  version: 2
+  verify:
+    jobs:
+      - install-dependencies
+      - lint:
+          requires:
+            - install-dependencies
+      - node-8:
+          requires:
+            - install-dependencies
+      - node-10:
+          requires:
+            - install-dependencies
+      - node-12:
+          requires:
+            - install-dependencies
+      - node-13:
+          requires:
+            - install-dependencies
+      - chromium:
+          requires:
+            - install-dependencies
+      - saucelabs:
+          context: SAUCE_LABS
+          requires:
+            - lint
+            - node-8
+            - node-10
+            - node-12
+            - node-13
+            - chromium
+          filters:
+            branches:
+              only: master
diff --git a/.eslintignore b/.eslintignore
index a5122d6..b577f50 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,1 +1,1 @@
-lolex.js
+fake-timers.js
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index e3bb1bb..029146a 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,5 +1,5 @@
 <!--
-Are you wondering how to do something with Lolex, or something else that is purely
+Are you wondering how to do something with FakeTimers, or something else that is purely
 usage related? Please post it to StackOverflow using the `sinon` and `lolex` labels.
 This makes it possible for the bigger community to help answer your questions.
 
@@ -9,7 +9,7 @@ The issue tracker is solely meant for posting bugs, feature requests and non-usa
 > We understand you have a problem and are in a hurry, but please provide us with some info to make it much more likely for your issue to be understood, worked on and resolved quickly.
 
 
-* Lolex version : _please verify that the bug exists in the latest Lolex release_
+* FakeTimers version : _please verify that the bug exists in the latest FakeTimers release_
 * Environment   : <!-- Browser, OS, ... -->
 * Example URL   : <!-- If you have one, such as a jsbin -->
 * Other libraries you are using:
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 2041ea7..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-language: node_js
-
-sudo: false
-
-node_js:
-  # https://github.com/nodejs/LTS
-  - "8" # ends December 2019
-  - "10" # ends April 2021
-  - "12" # ends April 2022
-
-env:
-  global:
-    - SAUCE_USERNAME=sinonjs
-    - secure: "Szc/biR+MJFC/r4IFzDVXJkIt1COglrCyCd/drmBrXj4AE70J2qn8QlU0n3uQUhrDH5k0NtSWnZHcfxuUTHpasvh9yPFGtqnNeqgftZjXQyJFS+rYye4i04cyYGEmc1qxhpljfAXbvCJV+bHDFmWxIF6KSHWMsVk6IbhoD0/Dis="
-
-before_install:
-  # Prevent mochify -> puppeteer install script to run unnecessarily
-  - if [ "x$TRAVIS_NODE_VERSION" != "x8" ]; then npm config set ignore-scripts true; fi
-
-before_script:
-  # Make npm run work for the script phase:
-  - if [ "x$TRAVIS_NODE_VERSION" != "x8" ]; then npm config set ignore-scripts false; fi
-
-script:
-  - npm run test-node
-  - if [ "x$TRAVIS_NODE_VERSION" = "x8" ]; then npm run lint; fi
-  - if [ "x$TRAVIS_NODE_VERSION" = "x8" ]; then npm run test-headless -- --allow-chrome-as-root; fi
-  - if [ "x$TRAVIS_NODE_VERSION" = "x8" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then npm run test-cloud; fi
diff --git a/AUTHORS b/AUTHORS
index 1fb94f2..1964a7c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -6,13 +6,14 @@ Benjamin Gruenbaum <inglor@gmail.com>
 Simen Bekkhus <sbekkhus91@gmail.com>
 Mark Wubben <mark@novemberborn.net>
 Sergei Cherniaev <sergei@cherniaev.com>
-Soutaro Matsumoto <matsumoto@soutaro.com>
 Duncan Beevers <duncan@dweebd.com>
+Soutaro Matsumoto <matsumoto@soutaro.com>
 Rogier Schouten <github@workingcode.ninja>
 Karl O'Keeffe <karl@geckoboard.com>
 Christopher Dow <cdow2@godaddy.com>
 Dominykas Blyžė <hello@dominykas.com>
 John Freeman <jfreeman08@gmail.com>
+dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
 Elad Nachmias <theman@elad.im>
 Aleksey Bobyr <aleksey.bobyr@beetroot.se>
 Clark Tomlinson <fallen013@gmail.com>
@@ -20,24 +21,23 @@ Icebob <mereg.norbert@gmail.com>
 Josh Goldberg <joshuakgoldberg@outlook.com>
 Kyle Fleming <kyle@kylefleming.net>
 Zach Bloomquist <github@chary.us>
-dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
 Marc Redemske <mgred@users.noreply.github.com>
+Louis Brunner <LouisBrunner@users.noreply.github.com>
 KimCoding <jeokrang@hanmail.net>
 Jamie Wong <phleet@gmail.com>
-Edward Betts <edward@4angle.com>
 Nando <fdanko@ekumenlabs.com>
 Paul Melnikow <email@paulmelnikow.com>
 Peter A. Bigot <pab@pabigot.com>
-Curtis M. Humphrey, Ph.D <curtis@createdwithflair.com>
+Edward Betts <edward@4angle.com>
 Sander de Waal <s.dewaal@spiritit.com>
+Curtis M. Humphrey, Ph.D <curtis@createdwithflair.com>
 Andy Edwards <jedwards@fastmail.com>
-Alexsey <agat00@gmail.com>
 Sylvain Fraïssé <fraisse.sylvain@gmail.com>
 Thibault Hild <gautaz@users.noreply.github.com>
-mAAdhaTTah <jamesorodig@gmail.com>
 medanat <medanat@gmail.com>
+Alexsey <agat00@gmail.com>
 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
 griest024 <griest024@gmail.com>
 life777 <dashukevichvova@gmail.com>
 Mark Banner <standard8@mozilla.com>
-Louis Brunner <LouisBrunner@users.noreply.github.com>
+mAAdhaTTah <jamesorodig@gmail.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index afd4a6b..abc9704 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
 
+6.0.0 / 2020-02-04
+==================
+
+  * Rename project to `@sinonjs/fake-timers`
+
 5.1.2 / 2019-12-19
 ==================
 
diff --git a/README.md b/README.md
index d78cfc0..3f24eb7 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,38 @@
-# Lolex [![Build Status](https://travis-ci.org/sinonjs/lolex.svg?branch=master)](https://travis-ci.org/sinonjs/lolex)
+# `@sinonjs/fake-timers` [![CircleCI](https://circleci.com/gh/sinonjs/fake-timers.svg?style=svg)](https://circleci.com/gh/sinonjs/fake-timers) [![codecov](https://codecov.io/gh/sinonjs/fake-timers/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/fake-timers)
 
-JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, and `cancelIdleCallback`, along with a clock instance that controls the flow of time. Lolex also provides a `Date` implementation that gets its time from the clock.
+JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, and `cancelIdleCallback`, along with a clock instance that controls the flow of time. FakeTimers also provides a `Date` implementation that gets its time from the clock.
 
-In addition in browser environment lolex provides a `performance` implementation that gets its time from the clock. In Node environments lolex provides a `nextTick` implementation that is synchronized with the clock - and a `process.hrtime` shim that works with the clock.
+In addition in browser environment `@sinonjs/fake-timers` provides a `performance` implementation that gets its time from the clock. In Node environments FakeTimers provides a `nextTick` implementation that is synchronized with the clock - and a `process.hrtime` shim that works with the clock.
 
-Lolex can be used to simulate passing time in automated tests and other
+`@sinonjs/fake-timers` can be used to simulate passing time in automated tests and other
 situations where you want the scheduling semantics, but don't want to actually
-wait (however, from version 2.0 lolex supports those of you who would like to wait too).
+wait.
 
-Lolex is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes).
+`@sinonjs/fake-timers` is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes).
 
 ## Installation
 
-Lolex can be used in both Node and browser environments. Installation is as easy as
+`@sinonjs/fake-timers` can be used in both Node and browser environments. Installation is as easy as
 
 ```sh
-npm install lolex
+npm install @sinonjs/fake-timers
 ```
 
-If you want to use Lolex in a browser you can use [the pre-built
-version](https://github.com/sinonjs/lolex/blob/master/lolex.js) available in the repo
-and the npm package. Using npm you only need to reference `./node_modules/lolex/lolex.js` in your `<script>` tags.
+If you want to use `@sinonjs/fake-timers` in a browser you can use [the pre-built
+version](https://github.com/sinonjs/fake-timers/blob/master/fake-timers.js) available in the repo
+and the npm package. Using npm you only need to reference `./node_modules/@sinonjs/fake-timers.js` in your `<script>` tags.
 
-You are always free to [build it yourself](https://github.com/sinonjs/lolex/blob/53ea4d9b9e5bcff53cc7c9755dc9aa340368cf1c/package.json#L22), of course.
+You are always free to [build it yourself](https://github.com/sinonjs/@sinonjs/fake-timers/blob/53ea4d9b9e5bcff53cc7c9755dc9aa340368cf1c/package.json#L22), of course.
 
 ## Usage
 
-To use lolex, create a new clock, schedule events on it using the timer
+To use `@sinonjs/fake-timers`, create a new clock, schedule events on it using the timer
 functions and pass time using the `tick` method.
 
 ```js
-// In the browser distribution, a global `lolex` is already available
-var lolex = require("lolex");
-var clock = lolex.createClock();
+// In the browser distribution, a global `FakeTimers` is already available
+var FakeTimers = require("@sinonjs/fake-timers");
+var clock = FakeTimers.createClock();
 
 clock.setTimeout(function () {
     console.log("The poblano is a mild chili pepper originating in the state of Puebla, Mexico.");
@@ -53,7 +53,7 @@ API Reference for more details.
 
 ### Faking the native timers
 
-When using lolex to test timers, you will most likely want to replace the native
+When using `@sinonjs/fake-timers` to test timers, you will most likely want to replace the native
 timers such that calling `setTimeout` actually schedules a callback with your
 clock instance, not the browser's internals.
 
@@ -61,12 +61,12 @@ Calling `install` with no arguments achieves this. You can call `uninstall`
 later to restore things as they were again.
 
 ```js
-// In the browser distribution, a global `lolex` is already available
-var lolex = require("lolex");
+// In the browser distribution, a global `FakeTimers` is already available
+var FakeTimers = require("@sinonjs/fake-timers");
 
-var clock = lolex.install();
+var clock = FakeTimers.install();
 // Equivalent to
-// var clock = lolex.install(typeof global !== "undefined" ? global : window);
+// var clock = FakeTimers.install(typeof global !== "undefined" ? global : window);
 
 setTimeout(fn, 15); // Schedules with clock.setTimeout
 
@@ -77,11 +77,11 @@ clock.uninstall();
 To hijack timers in another context pass it to the `install` method.
 
 ```js
-var lolex = require("lolex");
+var FakeTimers = require("@sinonjs/fake-timers");
 var context = {
     setTimeout: setTimeout // By default context.setTimeout uses the global setTimeout
 }
-var clock = lolex.install({target: context});
+var clock = FakeTimers.install({target: context});
 
 context.setTimeout(fn, 15); // Schedules with clock.setTimeout
 
@@ -93,7 +93,7 @@ Usually you want to install the timers onto the global object, so call `install`
 without arguments.
 
 #### Automatically incrementing mocked time
-Since version 2.0 Lolex supports the possibility to attach the faked timers
+Since version 2.0 FakeTimers supports the possibility to attach the faked timers
 to any change in the real system time. This basically means you no longer need
 to `tick()` the clock in a situation where you won't know **when** to call `tick()`.
 
@@ -104,8 +104,8 @@ be incremented every 20ms, not in real time.
 An example would be:
 
 ```js
-var lolex = require("lolex");
-var clock = lolex.install({shouldAdvanceTime: true, advanceTimeDelta: 40});
+var FakeTimers = require("@sinonjs/fake-timers");
+var clock = FakeTimers.install({shouldAdvanceTime: true, advanceTimeDelta: 40});
 
 setTimeout(() => {
     console.log('this just timed out'); //executed after 40ms
@@ -123,7 +123,7 @@ setTimeout(() => {
 
 ## API Reference
 
-### `var clock = lolex.createClock([now[, loopLimit]])`
+### `var clock = FakeTimers.createClock([now[, loopLimit]])`
 
 Creates a clock. The default
 [epoch](https://en.wikipedia.org/wiki/Epoch_%28reference_date%29) is `0`.
@@ -132,23 +132,23 @@ The `now` argument may be a number (in milliseconds) or a Date object.
 
 The `loopLimit` argument sets the maximum number of timers that will be run when calling `runAll()` before assuming that we have an infinite loop and throwing an error. The default is `1000`.
 
-### `var clock = lolex.install([config])`
-Installs lolex using the specified config (otherwise with epoch `0` on the global scope). The following configuration options are available
+### `var clock = FakeTimers.install([config])`
+Installs FakeTimers using the specified config (otherwise with epoch `0` on the global scope). The following configuration options are available
 
 Parameter | Type | Default | Description
 --------- | ---- | ------- | ------------
-`config.target`| Object | global | installs lolex onto the specified target context
-`config.now` | Number/Date | 0 | installs lolex with the specified unix epoch
-`config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime"] | an array with explicit function names to hijack. *When not set, lolex will automatically fake all methods **except** `nextTick`* e.g., `lolex.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick`
+`config.target`| Object | global | installs FakeTimers onto the specified target context
+`config.now` | Number/Date | 0 | installs FakeTimers with the specified unix epoch
+`config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime"] | an array with explicit function names to hijack. *When not set, FakeTimers will automatically fake all methods **except** `nextTick`* e.g., `FakeTimers.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick`
 `config.loopLimit` | Number | 1000 | the maximum number of timers that will be run when calling runAll()
-`config.shouldAdvanceTime` | Boolean | false | tells lolex to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time)
+`config.shouldAdvanceTime` | Boolean | false | tells FakeTimers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time)
 `config.advanceTimeDelta` | Number | 20 | relevant only when using with `shouldAdvanceTime: true`. increment mocked time by `advanceTimeDelta` ms every `advanceTimeDelta` ms change in the real system time.
 
 ### `var id = clock.setTimeout(callback, timeout)`
 
 Schedules the callback to be fired once `timeout` milliseconds have ticked by.
 
-In Node.js `setTimeout` returns a timer object. Lolex will do the same, however
+In Node.js `setTimeout` returns a timer object. FakeTimers will do the same, however
 its `ref()` and `unref()` methods have no effect.
 
 In browsers a timer ID is returned.
@@ -163,7 +163,7 @@ Clears the timer given the ID or timer object, as long as it was created using
 Schedules the callback to be fired every time `timeout` milliseconds have ticked
 by.
 
-In Node.js `setInterval` returns a timer object. Lolex will do the same, however
+In Node.js `setInterval` returns a timer object. FakeTimers will do the same, however
 its `ref()` and `unref()` methods have no effect.
 
 In browsers a timer ID is returned.
@@ -180,7 +180,7 @@ that you'll still have to call `clock.tick()` for the callback to fire. If
 called during a tick the callback won't fire until `1` millisecond has ticked
 by.
 
-In Node.js `setImmediate` returns a timer object. Lolex will do the same,
+In Node.js `setImmediate` returns a timer object. FakeTimers will do the same,
 however its `ref()` and `unref()` methods have no effect.
 
 In browsers a timer ID is returned.
@@ -231,20 +231,20 @@ milliseconds to advance the clock by or a human-readable string. Valid string
 formats are `"08"` for eight seconds, `"01:00"` for one minute and `"02:34:10"`
 for two hours, 34 minutes and ten seconds.
 
-The `tickAsync()` will also break the event loop, allowing any scheduled promise 
+The `tickAsync()` will also break the event loop, allowing any scheduled promise
 callbacks to execute _before_ running the timers.
 
 ### `clock.next()` / `await clock.nextAsync()`
 
 Advances the clock to the the moment of the first scheduled timer, firing it.
 
-The `nextAsync()` will also break the event loop, allowing any scheduled promise 
+The `nextAsync()` will also break the event loop, allowing any scheduled promise
 callbacks to execute _before_ running the timers.
 
 ### `clock.reset()`
 
 Removes all timers and ticks without firing them, and sets `now` to `config.now`
-that was provided to `lolex.install` or to `0` if `config.now` was not provided.
+that was provided to `FakeTimers.install` or to `0` if `config.now` was not provided.
 Useful to reset the state of the clock without having to `uninstall` and `install` it.
 
 ### `clock.runAll()` / `await clock.runAllAsync()`
@@ -255,12 +255,12 @@ This makes it easier to run asynchronous tests to completion without worrying ab
 
 It runs a maximum of `loopLimit` times after which it assumes there is an infinite loop of timers and throws an error.
 
-The `runAllAsync()` will also break the event loop, allowing any scheduled promise 
+The `runAllAsync()` will also break the event loop, allowing any scheduled promise
 callbacks to execute _before_ running the timers.
 
 ### `clock.runMicrotasks()`
 
-This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries using lolex underneath and for running `nextTick` items without any timers.
+This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries using FakeTimers underneath and for running `nextTick` items without any timers.
 
 ### `clock.runToFrame()`
 
@@ -278,7 +278,7 @@ would occur before this time.
 This is useful when you want to run a test to completion, but the test recursively
 sets timers that would cause `runAll` to trigger an infinite loop warning.
 
-The `runToLastAsync()` will also break the event loop, allowing any scheduled promise 
+The `runToLastAsync()` will also break the event loop, allowing any scheduled promise
 callbacks to execute _before_ running the timers.
 
 ### `clock.setSystemTime([now])`
@@ -291,7 +291,7 @@ setSystemTime().
 ### `clock.uninstall()`
 
 Restores the original methods on the `target` that was passed to
-`lolex.install`, or the native timers if no `target` was given.
+`FakeTimers.install`, or the native timers if no `target` was given.
 
 ### `Date`
 
@@ -301,13 +301,13 @@ Implements the `Date` object but using the clock to provide the correct time.
 
 Implements the `now` method of the [`Performance`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) object but using the clock to provide the correct time. Only available in environments that support the Performance object (browsers mostly).
 
-### `lolex.withGlobal`
+### `FakeTimers.withGlobal`
 
-In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), Lolex exports a factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to support. When invoking this function with a global, you will get back an object with `timers`, `createClock` and `install` - same as the regular Lolex exports only based on the passed in global instead of the global environment.
+In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), FakeTimers exports a factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to support. When invoking this function with a global, you will get back an object with `timers`, `createClock` and `install` - same as the regular FakeTimers exports only based on the passed in global instead of the global environment.
 
 ## Running tests
 
-Lolex has a comprehensive test suite. If you're thinking of contributing bug
+FakeTimers has a comprehensive test suite. If you're thinking of contributing bug
 fixes or suggesting new features, you need to make sure you have not broken any
 tests. You are also expected to add tests for any new behavior.
 
@@ -320,7 +320,7 @@ npm test
 Or, if you prefer more verbose output:
 
 ```
-$(npm bin)/mocha ./test/lolex-test.js
+$(npm bin)/mocha ./test/fake-timers-test.js
 ```
 
 ### In the browser
diff --git a/RELEASE.md b/RELEASE.md
index 5dc34d9..e21fccb 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,4 +1,4 @@
-# Rolling Lolex releases
+# Rolling `@sinonjs/fake-timers` releases
 
 You'll need a working installation of [git-extras](https://github.com/tj/git-extras) for this.
 
@@ -20,5 +20,5 @@ $ npm publish
 
 Create a GitHub release where you highlight
 interesting additions from the changelog.
-Just add a release notes to [the existing tag](https://github.com/sinonjs/lolex/tags).
+Just add a release notes to [the existing tag](https://github.com/sinonjs/fake-timers/tags).
 
diff --git a/lolex.js b/fake-timers.js
similarity index 98%
rename from lolex.js
rename to fake-timers.js
index 46e23f0..d51bb98 100644
--- a/lolex.js
+++ b/fake-timers.js
@@ -1,4 +1,4 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.lolex = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.FakeTimers = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
 "use strict";
 
 var every = require("./prototypes/array").every;
@@ -1856,7 +1856,7 @@ function withGlobal(_global) {
                 });
             }
 
-            clock.performance.now = function lolexNow() {
+            clock.performance.now = function FakeTimersNow() {
                 var hrt = hrtime();
                 var millis = hrt[0] * 1000 + hrt[1] / 1e6;
                 return millis;
@@ -1876,7 +1876,7 @@ function withGlobal(_global) {
      * @param config.now {number|Date}  a number (in milliseconds) or a Date object (default epoch)
      * @param config.toFake {string[]} names of the methods that should be faked.
      * @param config.loopLimit {number} the maximum number of timers that will be run when calling runAll()
-     * @param config.shouldAdvanceTime {Boolean} tells lolex to increment mocked time automatically (default false)
+     * @param config.shouldAdvanceTime {Boolean} tells FakeTimers to increment mocked time automatically (default false)
      * @param config.advanceTimeDelta {Number} increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)
      */
     // eslint-disable-next-line complexity
@@ -1888,9 +1888,9 @@ function withGlobal(_global) {
             typeof config === "number"
         ) {
             throw new TypeError(
-                "lolex.install called with " +
+                "FakeTimers.install called with " +
                     String(config) +
-                    " lolex 2.0+ requires an object parameter - see https://github.com/sinonjs/lolex"
+                    " install requires an object parameter"
             );
         }
 
diff --git a/package-lock.json b/package-lock.json
index 416b4ce..de6bd0a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
-  "name": "lolex",
-  "version": "5.1.2",
+  "name": "@sinonjs/fake-timers",
+  "version": "6.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -71,6 +71,15 @@
       "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==",
       "dev": true
     },
+    "@babel/runtime": {
+      "version": "7.8.4",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz",
+      "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==",
+      "dev": true,
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
     "@babel/template": {
       "version": "7.6.0",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz",
@@ -219,6 +228,12 @@
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "dev": true
     },
+    "@types/color-name": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+      "dev": true
+    },
     "@types/events": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
@@ -248,10 +263,10 @@
       "integrity": "sha512-Otxmr2rrZLKRYIybtdG/sgeO+tHY20GxeDjcGmUnmmlCWyEnv2a2x1ZXBo3BTec4OiTXMQCiazB8NMBf0iRlFw==",
       "dev": true
     },
-    "@types/normalize-package-data": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-      "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+    "@types/parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
       "dev": true
     },
     "JSONStream": {
@@ -295,9 +310,9 @@
       }
     },
     "acorn-jsx": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
-      "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+      "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
       "dev": true
     },
     "acorn-node": {
@@ -1293,6 +1308,12 @@
       "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
       "dev": true
     },
+    "compare-versions": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz",
+      "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==",
+      "dev": true
+    },
     "component-emitter": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -2002,9 +2023,9 @@
       }
     },
     "eslint": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz",
-      "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==",
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
@@ -2014,19 +2035,19 @@
         "debug": "^4.0.1",
         "doctrine": "^3.0.0",
         "eslint-scope": "^5.0.0",
-        "eslint-utils": "^1.4.2",
+        "eslint-utils": "^1.4.3",
         "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.1",
+        "espree": "^6.1.2",
         "esquery": "^1.0.1",
         "esutils": "^2.0.2",
         "file-entry-cache": "^5.0.1",
         "functional-red-black-tree": "^1.0.1",
         "glob-parent": "^5.0.0",
-        "globals": "^11.7.0",
+        "globals": "^12.1.0",
         "ignore": "^4.0.6",
         "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
-        "inquirer": "^6.4.1",
+        "inquirer": "^7.0.0",
         "is-glob": "^4.0.0",
         "js-yaml": "^3.13.1",
         "json-stable-stringify-without-jsonify": "^1.0.1",
@@ -2035,7 +2056,7 @@
         "minimatch": "^3.0.4",
         "mkdirp": "^0.5.1",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.8.2",
+        "optionator": "^0.8.3",
         "progress": "^2.0.0",
         "regexpp": "^2.0.1",
         "semver": "^6.1.2",
@@ -2075,18 +2096,47 @@
             }
           }
         },
+        "globals": {
+          "version": "12.3.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
+          "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.8.1"
+          }
+        },
+        "optionator": {
+          "version": "0.8.3",
+          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+          "dev": true,
+          "requires": {
+            "deep-is": "~0.1.3",
+            "fast-levenshtein": "~2.0.6",
+            "levn": "~0.3.0",
+            "prelude-ls": "~1.1.2",
+            "type-check": "~0.3.2",
+            "word-wrap": "~1.2.3"
+          }
+        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
           "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
+        },
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+          "dev": true
         }
       }
     },
     "eslint-config-prettier": {
-      "version": "6.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz",
-      "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz",
+      "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==",
       "dev": true,
       "requires": {
         "get-stdin": "^6.0.0"
@@ -2116,9 +2166,9 @@
       }
     },
     "eslint-plugin-mocha": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.1.1.tgz",
-      "integrity": "sha512-p/otruG425jRYDa28HjbBYYXoFNzq3Qp++gn5dbE44Kz4NvmIsSUKSV1T+RLYUcZOcdJKKAftXbaqkHFqReKoA==",
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.2.2.tgz",
+      "integrity": "sha512-oNhPzfkT6Q6CJ0HMVJ2KLxEWG97VWGTmuHOoRcDLE0U88ugUyFNV9wrT2XIt5cGtqc5W9k38m4xTN34L09KhBA==",
       "dev": true,
       "requires": {
         "ramda": "^0.26.1"
@@ -2144,12 +2194,12 @@
       }
     },
     "eslint-utils": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
-      "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
       "dev": true,
       "requires": {
-        "eslint-visitor-keys": "^1.0.0"
+        "eslint-visitor-keys": "^1.1.0"
       }
     },
     "eslint-visitor-keys": {
@@ -2159,13 +2209,13 @@
       "dev": true
     },
     "espree": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz",
-      "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
+      "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
       "dev": true,
       "requires": {
-        "acorn": "^7.0.0",
-        "acorn-jsx": "^5.0.2",
+        "acorn": "^7.1.0",
+        "acorn-jsx": "^5.1.0",
         "eslint-visitor-keys": "^1.1.0"
       },
       "dependencies": {
@@ -2229,36 +2279,6 @@
         "safe-buffer": "^5.1.1"
       }
     },
-    "execa": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-      "dev": true,
-      "requires": {
-        "cross-spawn": "^6.0.0",
-        "get-stream": "^4.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      },
-      "dependencies": {
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        }
-      }
-    },
     "expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -2698,6 +2718,15 @@
         "path-exists": "^4.0.0"
       }
     },
+    "find-versions": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+      "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+      "dev": true,
+      "requires": {
+        "semver-regex": "^2.0.0"
+      }
+    },
     "flat": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
@@ -3370,21 +3399,6 @@
       "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==",
       "dev": true
     },
-    "get-stdin": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
-      "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
-      "dev": true
-    },
-    "get-stream": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-      "dev": true,
-      "requires": {
-        "pump": "^3.0.0"
-      }
-    },
     "get-value": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -3688,9 +3702,9 @@
       "dev": true
     },
     "https-proxy-agent": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
-      "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+      "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
       "dev": true,
       "requires": {
         "agent-base": "^4.3.0",
@@ -3698,100 +3712,109 @@
       }
     },
     "husky": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.8.tgz",
-      "integrity": "sha512-HFOsgcyrX3qe/rBuqyTt+P4Gxn5P0seJmr215LAZ/vnwK3jWB3r0ck7swbzGRUbufCf9w/lgHPVbF/YXQALgfQ==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.1.tgz",
+      "integrity": "sha512-Qa0lRreeIf4Tl92sSs42ER6qc3hzoyQPPorzOrFWfPEVbdi6LuvJEqWKPk905fOWIR76iBpp7ECZNIwk+a8xuQ==",
       "dev": true,
       "requires": {
-        "chalk": "^2.4.2",
-        "cosmiconfig": "^5.2.1",
-        "execa": "^1.0.0",
-        "get-stdin": "^7.0.0",
-        "is-ci": "^2.0.0",
+        "chalk": "^3.0.0",
+        "ci-info": "^2.0.0",
+        "compare-versions": "^3.5.1",
+        "cosmiconfig": "^6.0.0",
+        "find-versions": "^3.2.0",
         "opencollective-postinstall": "^2.0.2",
         "pkg-dir": "^4.2.0",
         "please-upgrade-node": "^3.2.0",
-        "read-pkg": "^5.1.1",
-        "run-node": "^1.0.0",
-        "slash": "^3.0.0"
+        "slash": "^3.0.0",
+        "which-pm-runs": "^1.0.0"
       },
       "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+        "ansi-styles": {
+          "version": "4.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
           "dev": true,
           "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
+            "@types/color-name": "^1.1.1",
+            "color-convert": "^2.0.1"
           }
         },
-        "normalize-package-data": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-          "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
           "dev": true,
           "requires": {
-            "hosted-git-info": "^2.1.4",
-            "resolve": "^1.10.0",
-            "semver": "2 || 3 || 4 || 5",
-            "validate-npm-package-license": "^3.0.1"
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
         },
-        "parse-json": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
-          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
           "dev": true,
           "requires": {
-            "@babel/code-frame": "^7.0.0",
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1",
-            "lines-and-columns": "^1.1.6"
+            "color-name": "~1.1.4"
           }
         },
-        "path-parse": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-          "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
           "dev": true
         },
-        "please-upgrade-node": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
-          "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
-          "dev": true,
-          "requires": {
-            "semver-compare": "^1.0.0"
-          }
-        },
-        "read-pkg": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-          "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+        "cosmiconfig": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
           "dev": true,
           "requires": {
-            "@types/normalize-package-data": "^2.4.0",
-            "normalize-package-data": "^2.5.0",
+            "@types/parse-json": "^4.0.0",
+            "import-fresh": "^3.1.0",
             "parse-json": "^5.0.0",
-            "type-fest": "^0.6.0"
+            "path-type": "^4.0.0",
+            "yaml": "^1.7.2"
           }
         },
-        "resolve": {
-          "version": "1.12.0",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
-          "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "parse-json": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
           "dev": true,
           "requires": {
-            "path-parse": "^1.0.6"
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1",
+            "lines-and-columns": "^1.1.6"
           }
         },
+        "path-type": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+          "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+          "dev": true
+        },
         "slash": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
           "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
           "dev": true
+        },
+        "supports-color": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
         }
       }
     },
@@ -3817,9 +3840,9 @@
       "dev": true
     },
     "import-fresh": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
-      "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
       "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
@@ -3864,26 +3887,41 @@
       }
     },
     "inquirer": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
-      "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
+      "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
       "dev": true,
       "requires": {
-        "ansi-escapes": "^3.2.0",
+        "ansi-escapes": "^4.2.1",
         "chalk": "^2.4.2",
-        "cli-cursor": "^2.1.0",
+        "cli-cursor": "^3.1.0",
         "cli-width": "^2.0.0",
         "external-editor": "^3.0.3",
-        "figures": "^2.0.0",
-        "lodash": "^4.17.12",
-        "mute-stream": "0.0.7",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.15",
+        "mute-stream": "0.0.8",
         "run-async": "^2.2.0",
-        "rxjs": "^6.4.0",
-        "string-width": "^2.1.0",
+        "rxjs": "^6.5.3",
+        "string-width": "^4.1.0",
         "strip-ansi": "^5.1.0",
         "through": "^2.3.6"
       },
       "dependencies": {
+        "ansi-escapes": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
+          "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.8.1"
+          }
+        },
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+          "dev": true
+        },
         "chalk": {
           "version": "2.4.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -3894,6 +3932,89 @@
             "escape-string-regexp": "^1.0.5",
             "supports-color": "^5.3.0"
           }
+        },
+        "cli-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+          "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^3.1.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
+        "figures": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz",
+          "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        },
+        "onetime": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+          "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+          "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+          "dev": true,
+          "requires": {
+            "onetime": "^5.1.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
+        "string-width": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "6.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+              "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^5.0.0"
+              }
+            }
+          }
+        },
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+          "dev": true
         }
       }
     },
@@ -3967,15 +4088,6 @@
       "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
       "dev": true
     },
-    "is-ci": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-      "dev": true,
-      "requires": {
-        "ci-info": "^2.0.0"
-      }
-    },
     "is-data-descriptor": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -5484,9 +5596,9 @@
       "dev": true
     },
     "mute-stream": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
-      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
       "dev": true
     },
     "nan": {
@@ -5638,15 +5750,6 @@
         }
       }
     },
-    "npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "dev": true,
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
     "number-is-nan": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -5929,12 +6032,6 @@
         "shell-quote": "^1.4.2"
       }
     },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-      "dev": true
-    },
     "p-limit": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
@@ -6195,9 +6292,9 @@
       "dev": true
     },
     "prettier": {
-      "version": "1.18.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
-      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
       "dev": true
     },
     "prettier-linter-helpers": {
@@ -6436,6 +6533,12 @@
         "readable-stream": "^2.0.2"
       }
     },
+    "regenerator-runtime": {
+      "version": "0.13.3",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+      "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+      "dev": true
+    },
     "regex-not": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
@@ -6668,12 +6771,6 @@
         "is-promise": "^2.1.0"
       }
     },
-    "run-node": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
-      "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
-      "dev": true
-    },
     "run-parallel": {
       "version": "1.1.9",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
@@ -6740,6 +6837,12 @@
       "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
       "dev": true
     },
+    "semver-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+      "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+      "dev": true
+    },
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -7298,12 +7401,6 @@
       "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
       "dev": true
     },
-    "strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
-      "dev": true
-    },
     "strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -7368,17 +7465,23 @@
       },
       "dependencies": {
         "ajv": {
-          "version": "6.10.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+          "version": "6.11.0",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
+          "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
           "dev": true,
           "requires": {
-            "fast-deep-equal": "^2.0.1",
+            "fast-deep-equal": "^3.1.1",
             "fast-json-stable-stringify": "^2.0.0",
             "json-schema-traverse": "^0.4.1",
             "uri-js": "^4.2.2"
           }
         },
+        "fast-deep-equal": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+          "dev": true
+        },
         "string-width": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -7585,12 +7688,6 @@
       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
       "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
     },
-    "type-fest": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-      "dev": true
-    },
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -7879,6 +7976,12 @@
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
       "dev": true
     },
+    "which-pm-runs": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
+      "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+      "dev": true
+    },
     "wide-align": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -7888,6 +7991,12 @@
         "string-width": "^1.0.2 || 2"
       }
     },
+    "word-wrap": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+      "dev": true
+    },
     "wordwrap": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -7980,6 +8089,15 @@
       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
       "dev": true
     },
+    "yaml": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz",
+      "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.6.3"
+      }
+    },
     "yargs": {
       "version": "13.3.0",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
diff --git a/package.json b/package.json
index 33ba56a..f4cf347 100644
--- a/package.json
+++ b/package.json
@@ -1,16 +1,16 @@
 {
-  "name": "lolex",
+  "name": "@sinonjs/fake-timers",
   "description": "Fake JavaScript timers",
-  "version": "5.1.2",
-  "homepage": "http://github.com/sinonjs/lolex",
+  "version": "6.0.0",
+  "homepage": "http://github.com/sinonjs/fake-timers",
   "author": "Christian Johansen",
   "repository": {
     "type": "git",
-    "url": "http://github.com/sinonjs/lolex.git"
+    "url": "http://github.com/sinonjs/fake-timers.git"
   },
   "bugs": {
     "mail": "christian@cjohansen.no",
-    "url": "http://github.com/sinonjs/lolex/issues"
+    "url": "http://github.com/sinonjs/fake-timers/issues"
   },
   "license": "BSD-3-Clause",
   "scripts": {
@@ -21,7 +21,7 @@
     "test-cloud": "mochify --wd --no-detect-globals --timeout=10000",
     "test-coverage": "nyc --all --reporter text --reporter html --reporter lcovonly npm run test-node",
     "test": "npm run lint && npm run test-node && npm run test-headless",
-    "bundle": "browserify --no-detect-globals -s lolex -o lolex.js src/lolex-src.js",
+    "bundle": "browserify --no-detect-globals -s FakeTimers -o fake-timers.js src/fake-timers-src.js",
     "prepublishOnly": "npm run bundle",
     "preversion": "./scripts/preversion.sh",
     "version": "./scripts/version.sh",
@@ -32,25 +32,25 @@
   },
   "files": [
     "src/",
-    "lolex.js"
+    "fake-timers.js"
   ],
   "devDependencies": {
     "@sinonjs/referee-sinon": "5.0.0",
     "browserify": "16.5.0",
-    "eslint": "6.5.1",
-    "eslint-config-prettier": "6.4.0",
+    "eslint": "6.8.0",
+    "eslint-config-prettier": "6.10.0",
     "eslint-config-sinon": "3.0.1",
     "eslint-plugin-ie11": "1.0.0",
-    "eslint-plugin-mocha": "6.1.1",
+    "eslint-plugin-mocha": "6.2.2",
     "eslint-plugin-prettier": "3.1.1",
-    "husky": "3.0.8",
+    "husky": "4.2.1",
     "jsdom": "15.1.1",
     "lint-staged": "9.4.1",
     "mocha": "6.2.1",
     "mochify": "6.6.0",
     "npm-run-all": "4.1.5",
     "nyc": "14.1.1",
-    "prettier": "1.18.2"
+    "prettier": "1.19.1"
   },
   "eslintConfig": {
     "extends": "eslint-config-sinon",
@@ -72,8 +72,8 @@
       ]
     }
   },
-  "module": "./lolex.js",
-  "main": "./src/lolex-src.js",
+  "module": "./fake-timers.js",
+  "main": "./src/fake-timers-src.js",
   "dependencies": {
     "@sinonjs/commons": "^1.7.0"
   },
@@ -90,7 +90,7 @@
     "exclude": [
       "**/*-test.js",
       "coverage/**",
-      "lolex.js"
+      "fake-timers.js"
     ]
   }
 }
diff --git a/scripts/postversion.sh b/scripts/postversion.sh
index 2424152..3bf990f 100755
--- a/scripts/postversion.sh
+++ b/scripts/postversion.sh
@@ -2,11 +2,11 @@
 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 cd $SCRIPT_DIR > /dev/null
 
-# check that that origin points to the sinonjs/lolex repo
-git remote -v | grep 'origin.*sinonjs/lolex.*push' > /dev/null
+# check that that origin points to the sinonjs/fake-timers repo
+git remote -v | grep 'origin.*sinonjs/fake-timers.*push' > /dev/null
 
 if [[ $? != 0 ]]; then
-    echo "'origin' doesn't point to the sinonjs/lolex repo. Fix tag push manually!"
+    echo "'origin' doesn't point to the sinonjs/fake-timers repo. Fix tag push manually!"
     exit 1
 fi
 
diff --git a/scripts/version.sh b/scripts/version.sh
index f6ffa3d..801a54f 100755
--- a/scripts/version.sh
+++ b/scripts/version.sh
@@ -15,6 +15,6 @@ git add AUTHORS
 
 echo 'Build bundle'
 npm run bundle
-git add lolex.js
+git add fake-timers.js
 
 git commit -m "Updated release files for $PACKAGE_VERSION"
diff --git a/src/lolex-src.js b/src/fake-timers-src.js
similarity index 99%
rename from src/lolex-src.js
rename to src/fake-timers-src.js
index 457b84f..efd2981 100644
--- a/src/lolex-src.js
+++ b/src/fake-timers-src.js
@@ -1172,7 +1172,7 @@ function withGlobal(_global) {
                 });
             }
 
-            clock.performance.now = function lolexNow() {
+            clock.performance.now = function FakeTimersNow() {
                 var hrt = hrtime();
                 var millis = hrt[0] * 1000 + hrt[1] / 1e6;
                 return millis;
@@ -1192,7 +1192,7 @@ function withGlobal(_global) {
      * @param config.now {number|Date}  a number (in milliseconds) or a Date object (default epoch)
      * @param config.toFake {string[]} names of the methods that should be faked.
      * @param config.loopLimit {number} the maximum number of timers that will be run when calling runAll()
-     * @param config.shouldAdvanceTime {Boolean} tells lolex to increment mocked time automatically (default false)
+     * @param config.shouldAdvanceTime {Boolean} tells FakeTimers to increment mocked time automatically (default false)
      * @param config.advanceTimeDelta {Number} increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)
      */
     // eslint-disable-next-line complexity
@@ -1204,9 +1204,9 @@ function withGlobal(_global) {
             typeof config === "number"
         ) {
             throw new TypeError(
-                "lolex.install called with " +
+                "FakeTimers.install called with " +
                     String(config) +
-                    " lolex 2.0+ requires an object parameter - see https://github.com/sinonjs/lolex"
+                    " install requires an object parameter"
             );
         }
 


Test patch:
diff --git a/integration-test/lolex-integration-test.js b/integration-test/fake-clock-integration-test.js
similarity index 92%
rename from integration-test/lolex-integration-test.js
rename to integration-test/fake-clock-integration-test.js
index b010156..5919887 100644
--- a/integration-test/lolex-integration-test.js
+++ b/integration-test/fake-clock-integration-test.js
@@ -18,7 +18,7 @@ if (!jsdom) {
 }
 
 var assert = require("@sinonjs/referee-sinon").assert;
-var lolex = require("../src/lolex-src");
+var FakeTimers = require("../src/fake-timers-src");
 var sinon = require("@sinonjs/referee-sinon").sinon;
 
 describe("withGlobal", function() {
@@ -28,12 +28,12 @@ describe("withGlobal", function() {
         var dom = new jsdom.JSDOM("", { runScripts: "dangerously" });
         jsdomGlobal = dom.window;
 
-        withGlobal = lolex.withGlobal(jsdomGlobal);
+        withGlobal = FakeTimers.withGlobal(jsdomGlobal);
         timers = Object.keys(withGlobal.timers);
     });
 
-    it("matches the normal lolex API", function() {
-        assert.equals(Object.keys(withGlobal), Object.keys(lolex));
+    it("matches the normal FakeTimers API", function() {
+        assert.equals(Object.keys(withGlobal), Object.keys(FakeTimers));
     });
 
     it("should support basic setTimeout", function() {
@@ -89,7 +89,7 @@ describe("globally configured browser objects", function() {
         };
         copyProps(window, global);
 
-        withGlobal = lolex.withGlobal(global);
+        withGlobal = FakeTimers.withGlobal(global);
     }
 
     function tearDownGlobal() {
diff --git a/test/lolex-test.js b/test/fake-timers-test.js
similarity index 93%
rename from test/lolex-test.js
rename to test/fake-timers-test.js
index 81e3213..3459883 100644
--- a/test/lolex-test.js
+++ b/test/fake-timers-test.js
@@ -8,12 +8,12 @@
 "use strict";
 
 /*
- * FIXME This is an interim hack to break a circular dependency between lolex,
+ * FIXME This is an interim hack to break a circular dependency between FakeTimers,
  * nise and sinon.
  *
- * 1. Load lolex firt, without defining global, verifying the ReferenceError is gone.
+ * 1. Load FakeTimers first, without defining global, verifying the ReferenceError is gone.
  */
-var lolex = require("../src/lolex-src");
+var FakeTimers = require("../src/fake-timers-src");
 
 /*
  * 2. Define global, if missing.
@@ -30,7 +30,7 @@ var refute = require("@sinonjs/referee-sinon").refute;
 var sinon = require("@sinonjs/referee-sinon").sinon;
 
 var globalObject = typeof global !== "undefined" ? global : window;
-globalObject.lolex = lolex; // For testing eval
+globalObject.FakeTimers = FakeTimers; // For testing eval
 
 var GlobalDate = Date;
 
@@ -60,7 +60,7 @@ describe("issue #59", function() {
     var clock;
 
     it("should install and uninstall the clock on a custom target", function() {
-        clock = lolex.install(context);
+        clock = FakeTimers.install(context);
         // this would throw an error before issue #59 was fixed
         clock.uninstall();
     });
@@ -69,7 +69,7 @@ describe("issue #59", function() {
 describe("issue #73", function() {
     it("should install with date object", function() {
         var date = new Date("2015-09-25");
-        var clock = lolex.install({ now: date });
+        var clock = FakeTimers.install({ now: date });
         assert.same(clock.now, 1443139200000);
         clock.uninstall();
     });
@@ -78,7 +78,7 @@ describe("issue #73", function() {
 describe("issue #67", function() {
     // see https://nodejs.org/api/timers.html
     it("should overflow to 1 on very big timeouts", function() {
-        var clock = lolex.install();
+        var clock = FakeTimers.install();
         var stub1 = sinon.stub();
         var stub2 = sinon.stub();
 
@@ -97,7 +97,7 @@ describe("issue #67", function() {
     });
 
     it("should overflow to interval 1 on very big timeouts", function() {
-        var clock = lolex.install();
+        var clock = FakeTimers.install();
         var stub = sinon.stub();
 
         clock.setInterval(stub, 214748334700);
@@ -108,7 +108,7 @@ describe("issue #67", function() {
     });
 
     it("should execute setTimeout smaller than 1", function() {
-        var clock = lolex.install();
+        var clock = FakeTimers.install();
         var stub1 = sinon.stub();
 
         clock.setTimeout(stub1, 0.5);
@@ -119,7 +119,7 @@ describe("issue #67", function() {
     });
 
     it("executes setTimeout with negative duration as if it has zero delay", function() {
-        var clock = lolex.install();
+        var clock = FakeTimers.install();
         var stub1 = sinon.stub();
 
         clock.setTimeout(stub1, -10);
@@ -132,7 +132,7 @@ describe("issue #67", function() {
 
 describe("issue sinon#1852", function() {
     it("throws when creating a clock and global has no Date", function() {
-        var clock = lolex.withGlobal({
+        var clock = FakeTimers.withGlobal({
             setTimeout: function() {},
             clearTimeout: function() {}
         });
@@ -154,7 +154,7 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
 
     if (hrtimePresent) {
         it("should not round off nanosecond arithmetic on hrtime - case 1", function() {
-            clock = lolex.install();
+            clock = FakeTimers.install();
 
             clock.tick(1022.7791);
 
@@ -163,7 +163,7 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
         });
 
         it("should not round off nanosecond arithmetic on hrtime - case 2", function() {
-            clock = lolex.install({
+            clock = FakeTimers.install({
                 now: new Date("2018-09-12T08:58:33.742000000Z").getTime(),
                 toFake: ["hrtime"]
             });
@@ -175,7 +175,7 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
         });
 
         it("should truncate sub-nanosecond ticks", function() {
-            clock = lolex.install();
+            clock = FakeTimers.install();
             clock.tick(0.123456789);
 
             var nanos = clock.hrtime()[1];
@@ -184,14 +184,14 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
     }
 
     it("should always set 'now' to an integer value when ticking with sub-millisecond precision", function() {
-        clock = lolex.install();
+        clock = FakeTimers.install();
         clock.tick(2.993);
 
         assert.equals(clock.now, 2);
     });
 
     it("should adjust adjust the 'now' value when the nano-remainder overflows", function() {
-        clock = lolex.install();
+        clock = FakeTimers.install();
         clock.tick(0.993);
         clock.tick(0.5);
 
@@ -199,23 +199,23 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
     });
 
     it("should floor negative now values", function() {
-        clock = lolex.install({ now: -1.2 });
+        clock = FakeTimers.install({ now: -1.2 });
 
         assert.equals(clock.now, -2);
     });
 
     it("should floor start times", function() {
-        clock = lolex.install({ now: 1.2 });
+        clock = FakeTimers.install({ now: 1.2 });
         assert.equals(clock.now, 1);
     });
 
     it("should floor negative start times", function() {
-        clock = lolex.install({ now: -1.2 });
+        clock = FakeTimers.install({ now: -1.2 });
         assert.equals(clock.now, -2);
     });
 
     it("should handle ticks on the negative side of the Epoch", function() {
-        clock = lolex.install({ now: -2 });
+        clock = FakeTimers.install({ now: -2 });
         clock.tick(0.8); // -1.2
         clock.tick(0.5); // -0.7
 
@@ -223,7 +223,7 @@ describe("issue #207 - nanosecond round-off errors on high-res timer", function(
     });
 
     it("should handle multiple non-integer ticks", function() {
-        clock = lolex.install({ now: -2 });
+        clock = FakeTimers.install({ now: -2 });
         clock.tick(1.1); // -0.9
         clock.tick(0.5);
         clock.tick(0.5); // 0.1
@@ -241,22 +241,22 @@ describe("issue #sinonjs/2086 - don't install setImmediate in unsupported enviro
         });
 
         it("should not install setImmediate", function() {
-            clock = lolex.install();
+            clock = FakeTimers.install();
 
             assert.isUndefined(global.setImmediate);
         });
     }
 });
 
-describe("lolex", function() {
+describe("FakeTimers", function() {
     describe("setTimeout", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
-            lolex.evalCalled = false;
+            this.clock = FakeTimers.createClock();
+            FakeTimers.evalCalled = false;
         });
 
         afterEach(function() {
-            delete lolex.evalCalled;
+            delete FakeTimers.evalCalled;
         });
 
         it("throws if no arguments", function() {
@@ -285,8 +285,8 @@ describe("lolex", function() {
         });
 
         it("sets timers on instance", function() {
-            var clock1 = lolex.createClock();
-            var clock2 = lolex.createClock();
+            var clock1 = FakeTimers.createClock();
+            var clock2 = FakeTimers.createClock();
             var stubs = [sinon.stub(), sinon.stub()];
 
             clock1.setTimeout(stubs[0], 100);
@@ -299,31 +299,31 @@ describe("lolex", function() {
 
         it("parses numeric string times", function() {
             this.clock.setTimeout(function() {
-                lolex.evalCalled = true;
+                FakeTimers.evalCalled = true;
             }, "10");
             this.clock.tick(10);
 
-            assert(lolex.evalCalled);
+            assert(FakeTimers.evalCalled);
         });
 
         it("parses no-numeric string times", function() {
             this.clock.setTimeout(function() {
-                lolex.evalCalled = true;
+                FakeTimers.evalCalled = true;
             }, "string");
             this.clock.tick(10);
 
-            assert(lolex.evalCalled);
+            assert(FakeTimers.evalCalled);
         });
 
         it("evals non-function callbacks", function() {
-            this.clock.setTimeout("lolex.evalCalled = true", 10);
+            this.clock.setTimeout("FakeTimers.evalCalled = true", 10);
             this.clock.tick(10);
 
-            assert(lolex.evalCalled);
+            assert(FakeTimers.evalCalled);
         });
 
         it("passes setTimeout parameters", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var stub = sinon.stub();
 
             clock.setTimeout(stub, 2, "the first", "the second");
@@ -334,7 +334,7 @@ describe("lolex", function() {
         });
 
         it("calls correct timeout on recursive tick", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var stub = sinon.stub();
             var recurseCallback = function() {
                 clock.tick(100);
@@ -348,7 +348,7 @@ describe("lolex", function() {
         });
 
         it("does not depend on this", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var stub = sinon.stub();
             var setTimeout = clock.setTimeout;
 
@@ -453,7 +453,7 @@ describe("lolex", function() {
                 this.skip();
             }
 
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("returns numeric id or object with numeric id", function() {
@@ -484,8 +484,8 @@ describe("lolex", function() {
         });
 
         it("manages separate timers per clock instance", function() {
-            var clock1 = lolex.createClock();
-            var clock2 = lolex.createClock();
+            var clock1 = FakeTimers.createClock();
+            var clock2 = FakeTimers.createClock();
             var stubs = [sinon.stub(), sinon.stub()];
 
             clock1.setImmediate(stubs[0]);
@@ -535,7 +535,7 @@ describe("lolex", function() {
                 this.skip();
             }
 
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("removes immediate callbacks", function() {
@@ -587,7 +587,7 @@ describe("lolex", function() {
 
     describe("countTimers", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("return zero for a fresh clock", function() {
@@ -610,7 +610,7 @@ describe("lolex", function() {
 
     describe("tick", function() {
         beforeEach(function() {
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
         });
 
         afterEach(function() {
@@ -1029,7 +1029,7 @@ describe("lolex", function() {
     if (typeof global.Promise !== "undefined") {
         describe("tickAsync", function() {
             beforeEach(function() {
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
             });
 
             afterEach(function() {
@@ -1719,7 +1719,7 @@ describe("lolex", function() {
 
     describe("next", function() {
         beforeEach(function() {
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
         });
 
         afterEach(function() {
@@ -1916,7 +1916,7 @@ describe("lolex", function() {
     if (typeof global.Promise !== "undefined") {
         describe("nextAsync", function() {
             beforeEach(function() {
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
             });
 
             afterEach(function() {
@@ -2290,12 +2290,12 @@ describe("lolex", function() {
 
     describe("runAll", function() {
         it("if there are no timers just return", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             this.clock.runAll();
         });
 
         it("runs all timers", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var spies = [sinon.spy(), sinon.spy()];
             this.clock.setTimeout(spies[0], 10);
             this.clock.setTimeout(spies[1], 50);
@@ -2307,7 +2307,7 @@ describe("lolex", function() {
         });
 
         it("new timers added while running are also run", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var test = this;
             var spies = [
                 sinon.spy(function() {
@@ -2326,7 +2326,7 @@ describe("lolex", function() {
         });
 
         it("throws before allowing infinite recursion", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var test = this;
             var recursiveCallback = function() {
                 test.clock.setTimeout(recursiveCallback, 10);
@@ -2340,7 +2340,7 @@ describe("lolex", function() {
         });
 
         it("the loop limit can be set when creating a clock", function() {
-            this.clock = lolex.createClock(0, 1);
+            this.clock = FakeTimers.createClock(0, 1);
             var test = this;
 
             var spies = [sinon.spy(), sinon.spy()];
@@ -2353,7 +2353,7 @@ describe("lolex", function() {
         });
 
         it("the loop limit can be set when installing a clock", function() {
-            this.clock = lolex.install({ loopLimit: 1 });
+            this.clock = FakeTimers.install({ loopLimit: 1 });
             var test = this;
 
             var spies = [sinon.spy(), sinon.spy()];
@@ -2371,12 +2371,12 @@ describe("lolex", function() {
     if (typeof global.Promise !== "undefined") {
         describe("runAllAsync", function() {
             it("if there are no timers just return", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 return this.clock.runAllAsync();
             });
 
             it("runs all timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
                 this.clock.setTimeout(spies[0], 10);
                 this.clock.setTimeout(spies[1], 50);
@@ -2388,7 +2388,7 @@ describe("lolex", function() {
             });
 
             it("new timers added while running are also run", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spies = [
                     sinon.spy(function() {
@@ -2407,7 +2407,7 @@ describe("lolex", function() {
             });
 
             it("new timers added in promises while running are also run", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spies = [
                     sinon.spy(function() {
@@ -2428,7 +2428,7 @@ describe("lolex", function() {
             });
 
             it("throws before allowing infinite recursion", function() {
-                this.clock = lolex.createClock(0, 100);
+                this.clock = FakeTimers.createClock(0, 100);
                 var test = this;
                 var recursiveCallback = function() {
                     test.clock.setTimeout(recursiveCallback, 10);
@@ -2446,7 +2446,7 @@ describe("lolex", function() {
             });
 
             it("throws before allowing infinite recursion from promises", function() {
-                this.clock = lolex.createClock(0, 100);
+                this.clock = FakeTimers.createClock(0, 100);
                 var test = this;
                 var recursiveCallback = function() {
                     global.Promise.resolve().then(function() {
@@ -2466,7 +2466,7 @@ describe("lolex", function() {
             });
 
             it("the loop limit can be set when creating a clock", function() {
-                this.clock = lolex.createClock(0, 1);
+                this.clock = FakeTimers.createClock(0, 1);
                 var test = this;
                 var catchSpy = sinon.spy();
 
@@ -2483,7 +2483,7 @@ describe("lolex", function() {
             });
 
             it("the loop limit can be set when installing a clock", function() {
-                this.clock = lolex.install({ loopLimit: 1 });
+                this.clock = FakeTimers.install({ loopLimit: 1 });
                 var test = this;
                 var catchSpy = sinon.spy();
 
@@ -2502,7 +2502,7 @@ describe("lolex", function() {
             });
 
             it("should settle user-created promises", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spy = sinon.spy();
 
                 this.clock.setTimeout(function() {
@@ -2515,7 +2515,7 @@ describe("lolex", function() {
             });
 
             it("should settle nested user-created promises", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spy = sinon.spy();
 
                 this.clock.setTimeout(function() {
@@ -2532,7 +2532,7 @@ describe("lolex", function() {
             });
 
             it("should settle local promises before firing timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
 
                 global.Promise.resolve().then(spies[0]);
@@ -2545,7 +2545,7 @@ describe("lolex", function() {
             });
 
             it("should settle user-created promises before firing more timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
 
                 this.clock.setTimeout(function() {
@@ -2563,7 +2563,7 @@ describe("lolex", function() {
 
     describe("runToLast", function() {
         it("returns current time when there are no timers", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
 
             var time = this.clock.runToLast();
 
@@ -2571,7 +2571,7 @@ describe("lolex", function() {
         });
 
         it("runs all existing timers", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var spies = [sinon.spy(), sinon.spy()];
             this.clock.setTimeout(spies[0], 10);
             this.clock.setTimeout(spies[1], 50);
@@ -2583,7 +2583,7 @@ describe("lolex", function() {
         });
 
         it("returns time of the last timer", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var spies = [sinon.spy(), sinon.spy()];
             this.clock.setTimeout(spies[0], 10);
             this.clock.setTimeout(spies[1], 50);
@@ -2594,7 +2594,7 @@ describe("lolex", function() {
         });
 
         it("runs all existing timers when two timers are matched for being last", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var spies = [sinon.spy(), sinon.spy()];
             this.clock.setTimeout(spies[0], 10);
             this.clock.setTimeout(spies[1], 10);
@@ -2606,7 +2606,7 @@ describe("lolex", function() {
         });
 
         it("new timers added with a call time later than the last existing timer are NOT run", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var test = this;
             var spies = [
                 sinon.spy(function() {
@@ -2625,7 +2625,7 @@ describe("lolex", function() {
         });
 
         it("new timers added with a call time earlier than the last existing timer are run", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var test = this;
             var spies = [
                 sinon.spy(),
@@ -2647,7 +2647,7 @@ describe("lolex", function() {
         });
 
         it("new timers cannot cause an infinite loop", function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
             var test = this;
             var spy = sinon.spy();
             var recursiveCallback = function() {
@@ -2663,7 +2663,7 @@ describe("lolex", function() {
         });
 
         it("should support clocks with start time", function() {
-            this.clock = lolex.createClock(200);
+            this.clock = FakeTimers.createClock(200);
             var that = this;
             var invocations = 0;
 
@@ -2681,7 +2681,7 @@ describe("lolex", function() {
     if (typeof global.Promise !== "undefined") {
         describe("runToLastAsync", function() {
             it("returns current time when there are no timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
 
                 return this.clock.runToLastAsync().then(function(time) {
                     assert.equals(time, 0);
@@ -2689,7 +2689,7 @@ describe("lolex", function() {
             });
 
             it("runs all existing timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
                 this.clock.setTimeout(spies[0], 10);
                 this.clock.setTimeout(spies[1], 50);
@@ -2701,7 +2701,7 @@ describe("lolex", function() {
             });
 
             it("returns time of the last timer", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
                 this.clock.setTimeout(spies[0], 10);
                 this.clock.setTimeout(spies[1], 50);
@@ -2712,7 +2712,7 @@ describe("lolex", function() {
             });
 
             it("runs all existing timers when two timers are matched for being last", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
                 this.clock.setTimeout(spies[0], 10);
                 this.clock.setTimeout(spies[1], 10);
@@ -2724,7 +2724,7 @@ describe("lolex", function() {
             });
 
             it("new timers added with a call time later than the last existing timer are NOT run", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spies = [
                     sinon.spy(function() {
@@ -2746,7 +2746,7 @@ describe("lolex", function() {
                 "new timers added from a promise with a call time later than the last existing timer" +
                     "are NOT run",
                 function() {
-                    this.clock = lolex.createClock();
+                    this.clock = FakeTimers.createClock();
                     var test = this;
                     var spies = [
                         sinon.spy(function() {
@@ -2768,7 +2768,7 @@ describe("lolex", function() {
             );
 
             it("new timers added with a call time ealier than the last existing timer are run", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spies = [
                     sinon.spy(),
@@ -2793,7 +2793,7 @@ describe("lolex", function() {
                 "new timers added from a promise with a call time ealier than the last existing timer" +
                     "are run",
                 function() {
-                    this.clock = lolex.createClock();
+                    this.clock = FakeTimers.createClock();
                     var test = this;
                     var spies = [
                         sinon.spy(),
@@ -2818,7 +2818,7 @@ describe("lolex", function() {
             );
 
             it("new timers cannot cause an infinite loop", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spy = sinon.spy();
                 var recursiveCallback = function() {
@@ -2834,7 +2834,7 @@ describe("lolex", function() {
             });
 
             it("new timers created from promises cannot cause an infinite loop", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var test = this;
                 var spy = sinon.spy();
                 var recursiveCallback = function() {
@@ -2852,7 +2852,7 @@ describe("lolex", function() {
             });
 
             it("should settle user-created promises", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spy = sinon.spy();
 
                 this.clock.setTimeout(function() {
@@ -2865,7 +2865,7 @@ describe("lolex", function() {
             });
 
             it("should settle nested user-created promises", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spy = sinon.spy();
 
                 this.clock.setTimeout(function() {
@@ -2882,7 +2882,7 @@ describe("lolex", function() {
             });
 
             it("should settle local promises before firing timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
 
                 global.Promise.resolve().then(spies[0]);
@@ -2895,7 +2895,7 @@ describe("lolex", function() {
             });
 
             it("should settle user-created promises before firing more timers", function() {
-                this.clock = lolex.createClock();
+                this.clock = FakeTimers.createClock();
                 var spies = [sinon.spy(), sinon.spy()];
 
                 this.clock.setTimeout(function() {
@@ -2913,7 +2913,7 @@ describe("lolex", function() {
 
     describe("clearTimeout", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("removes timeout", function() {
@@ -2988,7 +2988,7 @@ describe("lolex", function() {
 
     describe("reset", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("empties timeouts queue", function() {
@@ -3004,7 +3004,7 @@ describe("lolex", function() {
         });
 
         it("resets to the time install with - issue #183", function() {
-            var clock = lolex.install({ now: 10000 });
+            var clock = FakeTimers.install({ now: 10000 });
             clock.reset();
             assert.equals(clock.now, 10000);
             clock.uninstall();
@@ -3015,7 +3015,7 @@ describe("lolex", function() {
                 this.skip();
             }
 
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             clock.tick(100);
             assert.equals(clock.hrtime(), [0, 100 * 1e6]);
             clock.reset();
@@ -3025,7 +3025,7 @@ describe("lolex", function() {
 
     describe("setInterval", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("throws if no arguments", function() {
@@ -3100,7 +3100,7 @@ describe("lolex", function() {
         });
 
         it("passes setTimeout parameters", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var stub = sinon.stub();
 
             clock.setInterval(stub, 2, "the first", "the second");
@@ -3113,7 +3113,7 @@ describe("lolex", function() {
 
     describe("clearInterval", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("removes interval", function() {
@@ -3180,7 +3180,7 @@ describe("lolex", function() {
     describe("date", function() {
         beforeEach(function() {
             this.now = new GlobalDate().getTime() - 3000;
-            this.clock = lolex.createClock(this.now);
+            this.clock = FakeTimers.createClock(this.now);
             this.Date = global.Date;
         });
 
@@ -3401,14 +3401,14 @@ describe("lolex", function() {
         });
 
         it("returns clock object", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
 
             assert.isObject(this.clock);
             assert.isFunction(this.clock.tick);
         });
 
         it("has clock property", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
 
             assert.same(setTimeout.clock, this.clock);
             assert.same(clearTimeout.clock, this.clock);
@@ -3418,23 +3418,23 @@ describe("lolex", function() {
         });
 
         it("takes an object parameter", function() {
-            this.clock = lolex.install({});
+            this.clock = FakeTimers.install({});
         });
 
         it("throws a TypeError on a number parameter", function() {
             assert.exception(function() {
-                this.clock = lolex.install(0);
+                this.clock = FakeTimers.install(0);
             });
         });
 
         it("sets initial timestamp", function() {
-            this.clock = lolex.install({ now: 1400 });
+            this.clock = FakeTimers.install({ now: 1400 });
 
             assert.equals(this.clock.now, 1400);
         });
 
         it("replaces global setTimeout", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             setTimeout(stub, 1000);
@@ -3444,7 +3444,7 @@ describe("lolex", function() {
         });
 
         it("global fake setTimeout should return id", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             var to = setTimeout(stub, 1000);
@@ -3459,7 +3459,7 @@ describe("lolex", function() {
         });
 
         it("global fake setTimeout().ref() should return timer", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             if (typeof setTimeout(NOOP, 0) === "object") {
@@ -3471,7 +3471,7 @@ describe("lolex", function() {
         });
 
         it("global fake setTimeout().unref() should return timer", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             if (typeof setTimeout(NOOP, 0) === "object") {
@@ -3483,7 +3483,7 @@ describe("lolex", function() {
         });
 
         it("global fake setTimeout().refresh() should return timer", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             if (typeof setTimeout(NOOP, 0) === "object") {
@@ -3495,7 +3495,7 @@ describe("lolex", function() {
         });
 
         it("replaces global clearTimeout", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             clearTimeout(setTimeout(stub, 1000));
@@ -3505,7 +3505,7 @@ describe("lolex", function() {
         });
 
         it("uninstalls global setTimeout", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
             this.clock.uninstall();
 
@@ -3513,19 +3513,19 @@ describe("lolex", function() {
             this.clock.tick(1000);
 
             assert.isFalse(stub.called);
-            assert.same(setTimeout, lolex.timers.setTimeout);
+            assert.same(setTimeout, FakeTimers.timers.setTimeout);
         });
 
         it("uninstalls global clearTimeout", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             sinon.stub();
             this.clock.uninstall();
 
-            assert.same(clearTimeout, lolex.timers.clearTimeout);
+            assert.same(clearTimeout, FakeTimers.timers.clearTimeout);
         });
 
         it("replaces global setInterval", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             setInterval(stub, 500);
@@ -3535,7 +3535,7 @@ describe("lolex", function() {
         });
 
         it("replaces global clearInterval", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
 
             clearInterval(setInterval(stub, 500));
@@ -3545,7 +3545,7 @@ describe("lolex", function() {
         });
 
         it("uninstalls global setInterval", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             var stub = sinon.stub();
             this.clock.uninstall();
 
@@ -3553,20 +3553,20 @@ describe("lolex", function() {
             this.clock.tick(1000);
 
             assert.isFalse(stub.called);
-            assert.same(setInterval, lolex.timers.setInterval);
+            assert.same(setInterval, FakeTimers.timers.setInterval);
         });
 
         it("uninstalls global clearInterval", function() {
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
             sinon.stub();
             this.clock.uninstall();
 
-            assert.same(clearInterval, lolex.timers.clearInterval);
+            assert.same(clearInterval, FakeTimers.timers.clearInterval);
         });
 
         if (hrtimePresent) {
             it("replaces global process.hrtime", function() {
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
                 var prev = process.hrtime();
                 this.clock.tick(1000);
                 var result = process.hrtime(prev);
@@ -3575,9 +3575,9 @@ describe("lolex", function() {
             });
 
             it("uninstalls global process.hrtime", function() {
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
                 this.clock.uninstall();
-                assert.same(process.hrtime, lolex.timers.hrtime);
+                assert.same(process.hrtime, FakeTimers.timers.hrtime);
                 var prev = process.hrtime();
                 this.clock.tick(1000);
                 var result = process.hrtime(prev);
@@ -3587,7 +3587,7 @@ describe("lolex", function() {
 
         if (performanceNowPresent) {
             it("replaces global performance.now", function() {
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
                 var prev = performance.now();
                 this.clock.tick(1000);
                 var next = performance.now();
@@ -3597,7 +3597,7 @@ describe("lolex", function() {
 
             it("uninstalls global performance.now", function() {
                 var oldNow = performance.now;
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
                 assert.same(performance.now, this.clock.performance.now);
                 this.clock.uninstall();
                 assert.same(performance.now, oldNow);
@@ -3605,8 +3605,8 @@ describe("lolex", function() {
 
             /* For instance, Safari 9 has performance.now(), but no performance.mark() */
             if (performanceMarkPresent) {
-                it("should let performance.mark still be callable after lolex.install() (#136)", function() {
-                    this.clock = lolex.install();
+                it("should let performance.mark still be callable after FakeTimers.install() (#136)", function() {
+                    this.clock = FakeTimers.install();
                     refute.exception(function() {
                         global.performance.mark("a name");
                     });
@@ -3620,7 +3620,7 @@ describe("lolex", function() {
                 Performance.prototype.someFunc2 = function() {};
                 Performance.prototype.someFunc3 = function() {};
 
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
 
                 assert.isFunction(performance.someFunc1);
                 assert.isFunction(performance.someFunc2);
@@ -3642,7 +3642,7 @@ describe("lolex", function() {
                 Performance.prototype.getEntriesByName = noop;
                 Performance.prototype.getEntriesByType = noop;
 
-                this.clock = lolex.install();
+                this.clock = FakeTimers.install();
 
                 assert.equals(performance.getEntries(), []);
                 assert.equals(performance.getEntriesByName(), []);
@@ -3670,7 +3670,10 @@ describe("lolex", function() {
                     delete global.tick;
                     Object.getPrototypeOf(global).tick = function() {};
 
-                    this.clock = lolex.install({ now: 0, toFake: ["tick"] });
+                    this.clock = FakeTimers.install({
+                        now: 0,
+                        toFake: ["tick"]
+                    });
                     assert.isTrue(global.hasOwnProperty("tick"));
                     this.clock.uninstall();
 
@@ -3686,7 +3689,7 @@ describe("lolex", function() {
             // Directly give the global object a tick method
             global.tick = NOOP;
 
-            this.clock = lolex.install({ now: 0, toFake: ["tick"] });
+            this.clock = FakeTimers.install({ now: 0, toFake: ["tick"] });
             assert.isTrue(global.hasOwnProperty("tick"));
             this.clock.uninstall();
 
@@ -3695,15 +3698,15 @@ describe("lolex", function() {
         });
 
         it("fakes Date constructor", function() {
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
             var now = new Date();
 
-            refute.same(Date, lolex.timers.Date);
+            refute.same(Date, FakeTimers.timers.Date);
             assert.equals(now.getTime(), 0);
         });
 
         it("fake Date constructor should mirror Date's properties", function() {
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
 
             assert(Boolean(Date.parse));
             assert(Boolean(Date.UTC));
@@ -3711,14 +3714,14 @@ describe("lolex", function() {
 
         it("decide on Date.now support at call-time when supported", function() {
             global.Date.now = NOOP;
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
 
             assert.equals(typeof Date.now, "function");
         });
 
         it("decide on Date.now support at call-time when unsupported", function() {
             global.Date.now = undefined;
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
 
             assert.isUndefined(Date.now);
         });
@@ -3728,48 +3731,48 @@ describe("lolex", function() {
                 return "";
             };
             global.Date.format = f;
-            this.clock = lolex.install();
+            this.clock = FakeTimers.install();
 
             assert.equals(Date.format, f);
         });
 
         it("uninstalls Date constructor", function() {
-            this.clock = lolex.install({ now: 0 });
+            this.clock = FakeTimers.install({ now: 0 });
             this.clock.uninstall();
 
-            assert.same(GlobalDate, lolex.timers.Date);
+            assert.same(GlobalDate, FakeTimers.timers.Date);
         });
 
         it("fakes provided methods", function() {
-            this.clock = lolex.install({
+            this.clock = FakeTimers.install({
                 now: 0,
                 toFake: ["setTimeout", "Date"]
             });
 
-            refute.same(setTimeout, lolex.timers.setTimeout);
-            refute.same(Date, lolex.timers.Date);
+            refute.same(setTimeout, FakeTimers.timers.setTimeout);
+            refute.same(Date, FakeTimers.timers.Date);
         });
 
         it("resets faked methods", function() {
-            this.clock = lolex.install({
+            this.clock = FakeTimers.install({
                 now: 0,
                 toFake: ["setTimeout", "Date"]
             });
             this.clock.uninstall();
 
-            assert.same(setTimeout, lolex.timers.setTimeout);
-            assert.same(Date, lolex.timers.Date);
+            assert.same(setTimeout, FakeTimers.timers.setTimeout);
+            assert.same(Date, FakeTimers.timers.Date);
         });
 
         it("does not fake methods not provided", function() {
-            this.clock = lolex.install({
+            this.clock = FakeTimers.install({
                 now: 0,
                 toFake: ["setTimeout", "Date"]
             });
 
-            assert.same(clearTimeout, lolex.timers.clearTimeout);
-            assert.same(setInterval, lolex.timers.setInterval);
-            assert.same(clearInterval, lolex.timers.clearInterval);
+            assert.same(clearTimeout, FakeTimers.timers.clearTimeout);
+            assert.same(setInterval, FakeTimers.timers.setInterval);
+            assert.same(clearInterval, FakeTimers.timers.clearInterval);
         });
     });
 
@@ -3777,7 +3780,10 @@ describe("lolex", function() {
         it("should create an auto advancing timer", function(done) {
             var testDelay = 29;
             var date = new Date("2015-09-25");
-            var clock = lolex.install({ now: date, shouldAdvanceTime: true });
+            var clock = FakeTimers.install({
+                now: date,
+                shouldAdvanceTime: true
+            });
             assert.same(Date.now(), 1443139200000);
             var timeoutStarted = Date.now();
 
@@ -3795,7 +3801,10 @@ describe("lolex", function() {
             }
 
             var date = new Date("2015-09-25");
-            var clock = lolex.install({ now: date, shouldAdvanceTime: true });
+            var clock = FakeTimers.install({
+                now: date,
+                shouldAdvanceTime: true
+            });
             assert.same(Date.now(), 1443139200000);
             var timeoutStarted = Date.now();
 
@@ -3812,7 +3821,10 @@ describe("lolex", function() {
             var intervalsTriggered = 0;
             var cyclesToTrigger = 3;
             var date = new Date("2015-09-25");
-            var clock = lolex.install({ now: date, shouldAdvanceTime: true });
+            var clock = FakeTimers.install({
+                now: date,
+                shouldAdvanceTime: true
+            });
             assert.same(Date.now(), 1443139200000);
             var timeoutStarted = Date.now();
 
@@ -3830,7 +3842,7 @@ describe("lolex", function() {
 
     describe("requestAnimationFrame", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("throws if no arguments", function() {
@@ -3926,7 +3938,7 @@ describe("lolex", function() {
 
     describe("cancelAnimationFrame", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("removes animation frame", function() {
@@ -4001,7 +4013,7 @@ describe("lolex", function() {
 
     describe("runToFrame", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("should tick next frame", function() {
@@ -4024,20 +4036,20 @@ describe("lolex", function() {
         });
 
         it("should start at 0", function() {
-            var clock = lolex.createClock(1001);
+            var clock = FakeTimers.createClock(1001);
             var result = clock.performance.now();
             assert.same(result, 0);
         });
 
         it("should run along with clock.tick", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.tick(5001);
             var result = clock.performance.now();
             assert.same(result, 5001);
         });
 
         it("should listen to multiple ticks in performance.now", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             for (var i = 0; i < 10; i++) {
                 var next = clock.performance.now();
                 assert.same(next, 1000 * i);
@@ -4046,7 +4058,7 @@ describe("lolex", function() {
         });
 
         it("should run with ticks with timers set", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.setTimeout(function() {
                 var result = clock.performance.now();
                 assert.same(result, 2500);
@@ -4069,14 +4081,14 @@ describe("lolex", function() {
         });
 
         it("should start at 0", function() {
-            var clock = lolex.createClock(1001);
+            var clock = FakeTimers.createClock(1001);
             var result = clock.hrtime();
             assert.same(result[0], 0);
             assert.same(result[1], 0);
         });
 
         it("should run along with clock.tick", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.tick(5001);
             var prev = clock.hrtime();
             clock.tick(5001);
@@ -4086,7 +4098,7 @@ describe("lolex", function() {
         });
 
         it("should run along with clock.tick when timers set", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             var prev = clock.hrtime();
             clock.setTimeout(function() {
                 var result = clock.hrtime(prev);
@@ -4097,7 +4109,7 @@ describe("lolex", function() {
         });
 
         it("should not move with setSystemTime", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             var prev = clock.hrtime();
             clock.setSystemTime(9000);
             clock.setSystemTime(50000);
@@ -4107,7 +4119,7 @@ describe("lolex", function() {
         });
 
         it("should move with timeouts", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var result = clock.hrtime();
             assert.same(result[0], 0);
             assert.same(result[1], 0);
@@ -4119,7 +4131,7 @@ describe("lolex", function() {
         });
 
         it("should handle floating point", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             clock.tick(1022.7791);
             var result = clock.hrtime([0, 20000000]);
 
@@ -4141,20 +4153,20 @@ describe("lolex", function() {
         });
 
         it("should start at 0n", function() {
-            var clock = lolex.createClock(1001);
+            var clock = FakeTimers.createClock(1001);
             var result = clock.hrtime.bigint();
             assert.same(result, BigInt(0)); // eslint-disable-line
         });
 
         it("should run along with clock.tick", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.tick(5001);
             var result = clock.hrtime.bigint();
             assert.same(result, BigInt(5.001e9)); // eslint-disable-line
         });
 
         it("should run along with clock.tick when timers set", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.setTimeout(function() {
                 var result = clock.hrtime.bigint();
                 assert.same(result, BigInt(2.5e9)); // eslint-disable-line
@@ -4163,14 +4175,14 @@ describe("lolex", function() {
         });
 
         it("should not move with setSystemTime", function() {
-            var clock = lolex.createClock(0);
+            var clock = FakeTimers.createClock(0);
             clock.setSystemTime(50000);
             var result = clock.hrtime.bigint();
             assert.same(result, BigInt(0)); // eslint-disable-line
         });
 
         it("should move with timeouts", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var result = clock.hrtime.bigint();
             assert.same(result, BigInt(0)); // eslint-disable-line
             clock.setTimeout(function() {}, 1000);
@@ -4189,7 +4201,7 @@ describe("lolex", function() {
             }
         });
         beforeEach(function() {
-            clock = lolex.createClock();
+            clock = FakeTimers.createClock();
             called = false;
         });
         it("runs without timers", function() {
@@ -4229,7 +4241,7 @@ describe("lolex", function() {
         });
 
         it("runs without timers", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var called = false;
             clock.nextTick(function() {
                 called = true;
@@ -4239,7 +4251,7 @@ describe("lolex", function() {
         });
 
         it("runs when runMicrotasks is called on the clock", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var called = false;
             clock.nextTick(function() {
                 called = true;
@@ -4249,7 +4261,7 @@ describe("lolex", function() {
         });
 
         it("respects loopLimit from below in runMicrotasks", function() {
-            var clock = lolex.createClock(0, 100);
+            var clock = FakeTimers.createClock(0, 100);
             var i;
 
             for (i = 0; i < 99; i++) {
@@ -4263,7 +4275,7 @@ describe("lolex", function() {
         });
 
         it("respects loopLimit from above in runMicrotasks", function() {
-            var clock = lolex.createClock(0, 100);
+            var clock = FakeTimers.createClock(0, 100);
             for (var i = 0; i < 120; i++) {
                 // eslint-disable-next-line ie11/no-loop-func
                 clock.nextTick(function() {});
@@ -4274,7 +4286,7 @@ describe("lolex", function() {
         });
 
         it("detects infinite nextTick cycles", function() {
-            var clock = lolex.createClock(0, 1000);
+            var clock = FakeTimers.createClock(0, 1000);
             clock.nextTick(function repeat() {
                 clock.nextTick(repeat);
             });
@@ -4284,7 +4296,7 @@ describe("lolex", function() {
         });
 
         it("runs with timers - and before them", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var last = "";
             var called = false;
             clock.nextTick(function() {
@@ -4300,7 +4312,7 @@ describe("lolex", function() {
         });
 
         it("runs when time is progressed", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var called = false;
             clock.nextTick(function() {
                 called = true;
@@ -4311,7 +4323,7 @@ describe("lolex", function() {
         });
 
         it("runs between timers", function() {
-            var clock = lolex.createClock();
+            var clock = FakeTimers.createClock();
             var order = [];
             clock.setTimeout(function() {
                 order.push("timer-1");
@@ -4330,7 +4342,7 @@ describe("lolex", function() {
         });
 
         it("installs with microticks", function() {
-            var clock = lolex.install({ toFake: ["nextTick"] });
+            var clock = FakeTimers.install({ toFake: ["nextTick"] });
             var called = false;
             process.nextTick(function() {
                 called = true;
@@ -4341,7 +4353,9 @@ describe("lolex", function() {
         });
 
         it("installs with microticks and timers in order", function() {
-            var clock = lolex.install({ toFake: ["nextTick", "setTimeout"] });
+            var clock = FakeTimers.install({
+                toFake: ["nextTick", "setTimeout"]
+            });
             var order = [];
             setTimeout(function() {
                 order.push("timer-1");
@@ -4360,7 +4374,7 @@ describe("lolex", function() {
         });
 
         it("uninstalls", function() {
-            var clock = lolex.install({ toFake: ["nextTick"] });
+            var clock = FakeTimers.install({ toFake: ["nextTick"] });
             clock.uninstall();
             var called = false;
             process.nextTick(function() {
@@ -4371,13 +4385,13 @@ describe("lolex", function() {
         });
 
         it("returns an empty list of timers on immediate uninstall", function() {
-            var clock = lolex.install();
+            var clock = FakeTimers.install();
             var timers = clock.uninstall();
             assert.equals(timers, []);
         });
 
         it("returns a timer if uninstalling before it's called", function() {
-            var clock = lolex.install();
+            var clock = FakeTimers.install();
             clock.setTimeout(function() {}, 100);
             var timers = clock.uninstall();
             assert.equals(timers.length, 1);
@@ -4387,7 +4401,7 @@ describe("lolex", function() {
         });
 
         it("does not return already executed timers on uninstall", function() {
-            var clock = lolex.install();
+            var clock = FakeTimers.install();
             clock.setTimeout(function() {}, 100);
             clock.setTimeout(function() {}, 200);
             clock.tick(100);
@@ -4399,7 +4413,7 @@ describe("lolex", function() {
         });
 
         it("returns multiple timers on uninstall if created", function() {
-            var clock = lolex.install();
+            var clock = FakeTimers.install();
             var i;
 
             for (i = 0; i < 5; i++) {
@@ -4417,7 +4431,7 @@ describe("lolex", function() {
         });
 
         it("passes arguments when installed - GitHub#122", function() {
-            var clock = lolex.install({ toFake: ["nextTick"] });
+            var clock = FakeTimers.install({ toFake: ["nextTick"] });
             var called = false;
             process.nextTick(function(value) {
                 called = value;
@@ -4428,7 +4442,7 @@ describe("lolex", function() {
         });
 
         it("does not install by default - GitHub#126", function(done) {
-            var clock = lolex.install();
+            var clock = FakeTimers.install();
             var spy = sinon.spy(clock, "nextTick");
             var called = false;
             process.nextTick(function(value) {
@@ -4443,7 +4457,7 @@ describe("lolex", function() {
 
     describe("requestIdleCallback", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("throws if no arguments", function() {
@@ -4506,7 +4520,7 @@ describe("lolex", function() {
 
     describe("cancelIdleCallback", function() {
         beforeEach(function() {
-            this.clock = lolex.createClock();
+            this.clock = FakeTimers.createClock();
         });
 
         it("removes idle callback", function() {