diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index fe8094878e37b30ef304d99cb9c80a7998764625..0000000000000000000000000000000000000000
--- a/.jshintrc
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    "curly": false,
-    "eqeqeq": true,
-    "immed": true,
-    "esnext": true,
-    "latedef": "nofunc",
-    "newcap": true,
-    "noarg": true,
-    "sub": true,
-    "undef": true,
-    "eqnull": true,
-    "browser": true,
-    "expr": true,
-    "globals": {
-        "head": false,
-        "module": false,
-        "console": false,
-        "unescape": false,
-        "define": false,
-        "exports": false
-    }
-}
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 3326a686fe9a19941bd702a8a4f065395b9eadb7..0989303f0242500f2b37c9063213b376db20d93e 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,5 +1,5 @@
 const gulp = require('gulp')
-const jshint = require('gulp-jshint')
+const eslint = require('gulp-eslint')
 const uglify = require('gulp-uglify')
 const rename = require('gulp-rename')
 const sass = require('gulp-sass')
@@ -9,34 +9,28 @@ const qunit = require('gulp-qunit')
 const zip = require('gulp-zip')
 const connect = require('gulp-connect')
 
-gulp.task('js', function () {
-    return gulp.src(['./js/reveal.js']).pipe(uglify()).pipe(rename('reveal.min.js')).pipe(gulp.dest('./js'))
-})
+gulp.task('js', () => gulp.src(['./js/reveal.js']).pipe(uglify()).pipe(rename('reveal.min.js')).pipe(gulp.dest('./js')))
 
-gulp.task('css-themes', function () {
-    return gulp.src(['./css/theme/source/*.{sass,scss}']).pipe(sass()).pipe(gulp.dest('./css/theme'))
-})
+gulp.task('css-themes', () => gulp.src(['./css/theme/source/*.{sass,scss}']).pipe(sass()).pipe(gulp.dest('./css/theme')))
 
-gulp.task('css-core', gulp.series(function () {
-    return gulp.src(['css/reveal.scss']).pipe(sass()).pipe(autoprefixer()).pipe(gulp.dest('./css'))
-}, function () {
-    return gulp.src(['css/reveal.css']).pipe(minify({
+gulp.task('css-core', gulp.series(
+    () => gulp.src(['css/reveal.scss']).pipe(sass()).pipe(autoprefixer()).pipe(gulp.dest('./css')), 
+    () => gulp.src(['css/reveal.css']).pipe(minify({
         compatibility: 'ie9'
     })).pipe(rename('reveal.min.css')).pipe(gulp.dest('./css'))
-}))
+))
 
 gulp.task('css', gulp.parallel('css-themes', 'css-core'))
 
-gulp.task('test', gulp.parallel(function () {
-    return gulp.src(['./js/reveal.js']).pipe(jshint()).pipe(jshint.reporter('default')).pipe(jshint.reporter('fail'));
-}, function () {
-    return gulp.src(['./test/*.html']).pipe(qunit())
-}))
+gulp.task('test', gulp.series(
+    () => gulp.src(['./js/reveal.js']).pipe(eslint({useEslintrc: true})).pipe(eslint.format()),
+    () => gulp.src(['./test/*.html']).pipe(qunit())
+))
 
 gulp.task('default', gulp.series(gulp.parallel('js', 'css'), 'test'))
 
-gulp.task('package', gulp.series('default', function () {
-    return gulp.src([
+gulp.task('package', gulp.series('default', () =>
+    gulp.src([
         './index.html',
         './css/**',
         './js/**',
@@ -45,9 +39,9 @@ gulp.task('package', gulp.series('default', function () {
         './plugin/**',
         './**.md'
     ]).pipe(zip('reveal-js-presentation.zip')).pipe(gulp.dest('./'))
-}))
+))
 
-gulp.task('serve', function () {
+gulp.task('serve', () => {
     connect.server({
         root: '.',
         livereload: true,
diff --git a/package.json b/package.json
index c4efa30e6c3f4dce5a6cc3409d7e94d83c8c398f..9e96d0d720974d10f42c8139a41bd05c28ca3b65 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
     "gulp-autoprefixer": "^5.0.0",
     "gulp-clean-css": "^3.9.3",
     "gulp-connect": "^5.5.0",
-    "gulp-jshint": "^2.1.0",
+    "gulp-eslint": "^4.0.2",
     "gulp-qunit": "^2.0.1",
     "gulp-rename": "^1.2.2",
     "gulp-sass": "^3.1.0",
@@ -53,5 +53,38 @@
   "license": "MIT",
   "dependencies": {
     "npm": "^5.7.1"
+  },
+  "eslintConfig": {
+    "env": {
+      "browser": true
+    },
+    "globals": {
+      "head": false,
+      "module": false,
+      "console": false,
+      "unescape": false,
+      "define": false,
+      "exports": false
+    },
+    "rules": {
+      "curly": 0,
+      "eqeqeq": 2,
+      "wrap-iife": [
+        2,
+        "any"
+      ],
+      "no-use-before-define": [
+        2,
+        {
+          "functions": false
+        }
+      ],
+      "new-cap": 2,
+      "no-caller": 2,
+      "dot-notation": 0,
+      "no-undef": 2,
+      "no-eq-null": 2,
+      "no-unused-expressions": 2
+    }
   }
 }