diff --git a/examples/cli.js b/examples/cli.js
index 5d9e8bd..9928d93 100644
--- a/examples/cli.js
+++ b/examples/cli.js
@@ -1,4 +1,4 @@
-var QRCode = require('../lib')
+const QRCode = require('../lib')
 
 QRCode.toString('yo yo yo', function (error, data) {
   if (error) {
diff --git a/examples/clientsideserver.js b/examples/clientsideserver.js
index 484e3d9..612a464 100644
--- a/examples/clientsideserver.js
+++ b/examples/clientsideserver.js
@@ -1,12 +1,12 @@
-var express = require('express')
-var app = express()// .createServer()
-var http = require('http')
-var fs = require('fs')
-var QRCode = require('../lib')
-var canvasutil = require('canvasutil')
-var { createCanvas, loadImage } = require('canvas')
+const express = require('express')
+const app = express()// .createServer()
+const http = require('http')
+const fs = require('fs')
+const QRCode = require('../lib')
+const canvasutil = require('canvasutil')
+const { createCanvas, loadImage } = require('canvas')
 
-var path = require('path')
+const path = require('path')
 
 // app.use(express.methodOverride())
 // app.use(express.bodyParser())
@@ -29,12 +29,12 @@ app.get('/', function (req, res) {
   })
 })
 
-var effectHandlers = {}
+const effectHandlers = {}
 
 app.get('/generate', function (req, res) {
-  var q = req.query || {}
+  const q = req.query || {}
 
-  var effect = q.effect || 'plain'
+  let effect = q.effect || 'plain'
   if (!effectHandlers[effect]) {
     effect = 'plain'
   }
@@ -48,7 +48,7 @@ app.get('/generate', function (req, res) {
         }
       })
     } else {
-      var msg = error.message + '\n' + error.stack
+      const msg = error.message + '\n' + error.stack
       res.header('Content-Type', 'text/plain')
       res.send(msg)
       console.error(msg)
@@ -72,28 +72,28 @@ effectHandlers.bacon = function (args, cb) {
 }
 
 effectHandlers.rounded = function (args, cb) {
-  var canvas = createCanvas(200, 200)
+  const canvas = createCanvas(200, 200)
   QRCode.toCanvas(canvas, args.text || '', function (err) {
     if (err) {
       cb(err, canvas)
       return
     }
 
-    var tpx = new canvasutil.PixelCore()
-    var luma709Only = canvasutil.conversionLib.luma709Only
-    var up = []
-    var down = []
-    var left = []
-    var right = []
-    var upPx
-    var downPx
-    var leftPx
-    var rightPx
-    var r
-    var t
-    var l
-    var d
-    var corner = 0
+    const tpx = new canvasutil.PixelCore()
+    const luma709Only = canvasutil.conversionLib.luma709Only
+    const up = []
+    const down = []
+    const left = []
+    const right = []
+    let upPx
+    let downPx
+    let leftPx
+    let rightPx
+    let r
+    let t
+    let l
+    let d
+    let corner = 0
 
     tpx.threshold = 100
 
@@ -166,16 +166,16 @@ effectHandlers.rounded = function (args, cb) {
 }
 
 effectHandlers.remoteImage = function (args, cb) {
-  var src = args.src
-  var domain
-  var uri
+  let src = args.src
+  let domain
+  let uri
 
   if (!src) {
     cb(new Error('src required'), null)
   } else {
     if (src.indexof('://') !== -1) {
       src = src.split('://').unshift()
-      var parts = src.split('/')
+      const parts = src.split('/')
 
       domain = parts.shift()
       uri = parts.join('/')
@@ -187,14 +187,14 @@ effectHandlers.remoteImage = function (args, cb) {
     return
   }
 
-  var options = {
+  const options = {
     host: domain,
     port: 80,
     path: uri,
     method: 'GET'
   }
 
-  var req = http.request(options, function (res) {
+  const req = http.request(options, function (res) {
     if (res.statusCode < 200 || res.statusCode > 299) {
       cb(new Error('http ' + res.statusCode + ' response code'), null)
       return
@@ -202,7 +202,7 @@ effectHandlers.remoteImage = function (args, cb) {
 
     res.setEncoding('utf8')
 
-    var data = ''
+    let data = ''
     res.on('data', function (chunk) {
       data += chunk
       console.log('BODY: ' + chunk)
@@ -223,27 +223,27 @@ effectHandlers.remoteImage = function (args, cb) {
 
 effectHandlers.image = function (args, cb) {
   loadImage(args.src || '').then((img) => {
-    var convert = canvasutil.conversionLib
-    var canvas = createCanvas(200, 200)
+    const convert = canvasutil.conversionLib
+    const canvas = createCanvas(200, 200)
     QRCode.toCanvas(canvas, args.text || '', function (err) {
       if (err) {
         cb(err, false)
         return
       }
 
-      var codeCtx = canvas.getContext('2d')
-      var frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
-      var tpx = new canvasutil.PixelCore()
-      var baconCanvas = createCanvas(canvas.width, canvas.width)
-      var ctx = baconCanvas.getContext('2d')
-      var topThreshold = args.darkThreshold || 25
-      var bottomThreshold = args.lightThreshold || 75
+      const codeCtx = canvas.getContext('2d')
+      const frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
+      const tpx = new canvasutil.PixelCore()
+      const baconCanvas = createCanvas(canvas.width, canvas.width)
+      const ctx = baconCanvas.getContext('2d')
+      const topThreshold = args.darkThreshold || 25
+      const bottomThreshold = args.lightThreshold || 75
 
       tpx.threshold = 50
 
       // scale image
-      var w = canvas.width
-      var h = canvas.height
+      let w = canvas.width
+      let h = canvas.height
 
       if (img.width > img.height) {
         w = w * (canvas.height / h)
@@ -256,10 +256,10 @@ effectHandlers.image = function (args, cb) {
 
       try {
         tpx.iterate(baconCanvas, function (px, i, l, pixels, w, h, pixelCore) {
-          var luma = (0.2125 * px.r + 0.7154 * px.g + 0.0721 * px.b)
-          var codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
-          var yuv
-          var rgb
+          const luma = (0.2125 * px.r + 0.7154 * px.g + 0.0721 * px.b)
+          const codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
+          let yuv
+          let rgb
 
           if (codeLuma > pixelCore.threshold) {
             if (luma < bottomThreshold) {
@@ -296,8 +296,8 @@ effectHandlers.image = function (args, cb) {
 }
 
 effectHandlers.plain = function (args, cb) {
-  var canvas = createCanvas(200, 200)
-  var text = args.text || ''
+  const canvas = createCanvas(200, 200)
+  const text = args.text || ''
   QRCode.toCanvas(canvas, text || '', function (err) {
     cb(err, canvas)
   })
diff --git a/examples/save.js b/examples/save.js
index 90ceae5..fa334e5 100644
--- a/examples/save.js
+++ b/examples/save.js
@@ -1,6 +1,6 @@
-var QRCode = require('../lib')
+const QRCode = require('../lib')
 
-var path = './tmp.png'
+const path = './tmp.png'
 QRCode.toFile(path, 'life of the party bros', {
   color: {
     dark: '#00F', // Blue modules
diff --git a/examples/server.js b/examples/server.js
index c16df1a..6007dba 100644
--- a/examples/server.js
+++ b/examples/server.js
@@ -1,10 +1,10 @@
-var QRCode = require('../lib')
-var http = require('http')
+const QRCode = require('../lib')
+const http = require('http')
 
 function testQRCode (req, res) {
   res.writeHead(200, { 'Content-Type': 'text/html' })
 
-  var jungleBook = "The moonlight was blocked out of the mouth of the cave, for Shere Khan's\n" +
+  const jungleBook = "The moonlight was blocked out of the mouth of the cave, for Shere Khan's\n" +
   'great square head and shoulders were thrust into the entrance. Tabaqui,\n' +
   'behind him, was squeaking: "My lord, my lord, it went in here!"\n' +
   '\n' +
diff --git a/helper/to-sjis.js b/helper/to-sjis.js
index 9f44d3e..1e31ba1 100644
--- a/helper/to-sjis.js
+++ b/helper/to-sjis.js
@@ -1,4 +1,4 @@
-var SJIS_UTF8 = [
+const SJIS_UTF8 = [
   [0x8140, ' 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×'],
   [0x8180, '÷=≠<>'],
   [0x818f, '¥$¢£%#&*@§☆★'],
@@ -89,10 +89,10 @@ var SJIS_UTF8 = [
 module.exports = function toSJIS (utf8Char) {
   if (!utf8Char || utf8Char === '') return
 
-  for (var i = 0; i < SJIS_UTF8.length; i++) {
-    var kanji = SJIS_UTF8[i][1]
+  for (let i = 0; i < SJIS_UTF8.length; i++) {
+    const kanji = SJIS_UTF8[i][1]
 
-    var posIndex = kanji.indexOf(utf8Char)
+    const posIndex = kanji.indexOf(utf8Char)
     if (posIndex >= 0) {
       return SJIS_UTF8[i][0] + posIndex
     }
diff --git a/lib/browser.js b/lib/browser.js
index 194982d..dc8a999 100644
--- a/lib/browser.js
+++ b/lib/browser.js
@@ -1,14 +1,14 @@
 
-var canPromise = require('./can-promise')
+const canPromise = require('./can-promise')
 
-var QRCode = require('./core/qrcode')
-var CanvasRenderer = require('./renderer/canvas')
-var SvgRenderer = require('./renderer/svg-tag.js')
+const QRCode = require('./core/qrcode')
+const CanvasRenderer = require('./renderer/canvas')
+const SvgRenderer = require('./renderer/svg-tag.js')
 
 function renderCanvas (renderFunc, canvas, text, opts, cb) {
-  var args = [].slice.call(arguments, 1)
-  var argsNum = args.length
-  var isLastArgCb = typeof args[argsNum - 1] === 'function'
+  const args = [].slice.call(arguments, 1)
+  const argsNum = args.length
+  const isLastArgCb = typeof args[argsNum - 1] === 'function'
 
   if (!isLastArgCb && !canPromise()) {
     throw new Error('Callback required as last argument')
@@ -50,7 +50,7 @@ function renderCanvas (renderFunc, canvas, text, opts, cb) {
 
     return new Promise(function (resolve, reject) {
       try {
-        var data = QRCode.create(text, opts)
+        const data = QRCode.create(text, opts)
         resolve(renderFunc(data, canvas, opts))
       } catch (e) {
         reject(e)
@@ -59,7 +59,7 @@ function renderCanvas (renderFunc, canvas, text, opts, cb) {
   }
 
   try {
-    var data = QRCode.create(text, opts)
+    const data = QRCode.create(text, opts)
     cb(null, renderFunc(data, canvas, opts))
   } catch (e) {
     cb(e)
diff --git a/lib/core/alignment-pattern.js b/lib/core/alignment-pattern.js
index 61c8231..63c3154 100644
--- a/lib/core/alignment-pattern.js
+++ b/lib/core/alignment-pattern.js
@@ -8,7 +8,7 @@
  * and their number depends on the symbol version.
  */
 
-var getSymbolSize = require('./utils').getSymbolSize
+const getSymbolSize = require('./utils').getSymbolSize
 
 /**
  * Calculate the row/column coordinates of the center module of each alignment pattern
@@ -27,12 +27,12 @@ var getSymbolSize = require('./utils').getSymbolSize
 exports.getRowColCoords = function getRowColCoords (version) {
   if (version === 1) return []
 
-  var posCount = Math.floor(version / 7) + 2
-  var size = getSymbolSize(version)
-  var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
-  var positions = [size - 7] // Last coord is always (size - 7)
+  const posCount = Math.floor(version / 7) + 2
+  const size = getSymbolSize(version)
+  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
+  const positions = [size - 7] // Last coord is always (size - 7)
 
-  for (var i = 1; i < posCount - 1; i++) {
+  for (let i = 1; i < posCount - 1; i++) {
     positions[i] = positions[i - 1] - intervals
   }
 
@@ -55,19 +55,19 @@ exports.getRowColCoords = function getRowColCoords (version) {
  * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
  * and are not therefore used for alignment patterns.
  *
- * var pos = getPositions(7)
+ * let pos = getPositions(7)
  * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
  *
  * @param  {Number} version QR Code version
  * @return {Array}          Array of coordinates
  */
 exports.getPositions = function getPositions (version) {
-  var coords = []
-  var pos = exports.getRowColCoords(version)
-  var posLength = pos.length
+  const coords = []
+  const pos = exports.getRowColCoords(version)
+  const posLength = pos.length
 
-  for (var i = 0; i < posLength; i++) {
-    for (var j = 0; j < posLength; j++) {
+  for (let i = 0; i < posLength; i++) {
+    for (let j = 0; j < posLength; j++) {
       // Skip if position is occupied by finder patterns
       if ((i === 0 && j === 0) || // top-left
           (i === 0 && j === posLength - 1) || // bottom-left
diff --git a/lib/core/alphanumeric-data.js b/lib/core/alphanumeric-data.js
index 351d64a..29ddf50 100644
--- a/lib/core/alphanumeric-data.js
+++ b/lib/core/alphanumeric-data.js
@@ -1,4 +1,4 @@
-var Mode = require('./mode')
+const Mode = require('./mode')
 
 /**
  * Array of characters available in alphanumeric mode
@@ -9,7 +9,7 @@ var Mode = require('./mode')
  *
  * @type {Array}
  */
-var ALPHA_NUM_CHARS = [
+const ALPHA_NUM_CHARS = [
   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
   'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
@@ -34,13 +34,13 @@ AlphanumericData.prototype.getBitsLength = function getBitsLength () {
 }
 
 AlphanumericData.prototype.write = function write (bitBuffer) {
-  var i
+  let i
 
   // Input data characters are divided into groups of two characters
   // and encoded as 11-bit binary codes.
   for (i = 0; i + 2 <= this.data.length; i += 2) {
     // The character value of the first character is multiplied by 45
-    var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45
+    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45
 
     // The character value of the second digit is added to the product
     value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])
diff --git a/lib/core/bit-buffer.js b/lib/core/bit-buffer.js
index cdb68de..5b41d3d 100644
--- a/lib/core/bit-buffer.js
+++ b/lib/core/bit-buffer.js
@@ -6,12 +6,12 @@ function BitBuffer () {
 BitBuffer.prototype = {
 
   get: function (index) {
-    var bufIndex = Math.floor(index / 8)
+    const bufIndex = Math.floor(index / 8)
     return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
   },
 
   put: function (num, length) {
-    for (var i = 0; i < length; i++) {
+    for (let i = 0; i < length; i++) {
       this.putBit(((num >>> (length - i - 1)) & 1) === 1)
     }
   },
@@ -21,7 +21,7 @@ BitBuffer.prototype = {
   },
 
   putBit: function (bit) {
-    var bufIndex = Math.floor(this.length / 8)
+    const bufIndex = Math.floor(this.length / 8)
     if (this.buffer.length <= bufIndex) {
       this.buffer.push(0)
     }
diff --git a/lib/core/bit-matrix.js b/lib/core/bit-matrix.js
index 17ead85..439138b 100644
--- a/lib/core/bit-matrix.js
+++ b/lib/core/bit-matrix.js
@@ -23,7 +23,7 @@ function BitMatrix (size) {
  * @param {Boolean} reserved
  */
 BitMatrix.prototype.set = function (row, col, value, reserved) {
-  var index = row * this.size + col
+  const index = row * this.size + col
   this.data[index] = value
   if (reserved) this.reservedBit[index] = true
 }
diff --git a/lib/core/byte-data.js b/lib/core/byte-data.js
index 48656fe..778181c 100644
--- a/lib/core/byte-data.js
+++ b/lib/core/byte-data.js
@@ -1,5 +1,5 @@
-var encodeUtf8 = require('encode-utf8')
-var Mode = require('./mode')
+const encodeUtf8 = require('encode-utf8')
+const Mode = require('./mode')
 
 function ByteData (data) {
   this.mode = Mode.BYTE
@@ -19,7 +19,7 @@ ByteData.prototype.getBitsLength = function getBitsLength () {
 }
 
 ByteData.prototype.write = function (bitBuffer) {
-  for (var i = 0, l = this.data.length; i < l; i++) {
+  for (let i = 0, l = this.data.length; i < l; i++) {
     bitBuffer.put(this.data[i], 8)
   }
 }
diff --git a/lib/core/error-correction-code.js b/lib/core/error-correction-code.js
index bf01725..7a4aeae 100755
--- a/lib/core/error-correction-code.js
+++ b/lib/core/error-correction-code.js
@@ -1,6 +1,6 @@
-var ECLevel = require('./error-correction-level')
+const ECLevel = require('./error-correction-level')
 
-var EC_BLOCKS_TABLE = [
+const EC_BLOCKS_TABLE = [
 // L  M  Q  H
   1, 1, 1, 1,
   1, 1, 1, 1,
@@ -44,7 +44,7 @@ var EC_BLOCKS_TABLE = [
   25, 49, 68, 81
 ]
 
-var EC_CODEWORDS_TABLE = [
+const EC_CODEWORDS_TABLE = [
 // L  M  Q  H
   7, 10, 13, 17,
   10, 16, 22, 28,
diff --git a/lib/core/error-correction-level.js b/lib/core/error-correction-level.js
index 9856f4f..07433d6 100644
--- a/lib/core/error-correction-level.js
+++ b/lib/core/error-correction-level.js
@@ -8,7 +8,7 @@ function fromString (string) {
     throw new Error('Param is not a string')
   }
 
-  var lcStr = string.toLowerCase()
+  const lcStr = string.toLowerCase()
 
   switch (lcStr) {
     case 'l':
diff --git a/lib/core/finder-pattern.js b/lib/core/finder-pattern.js
index 61b2f13..4613c04 100644
--- a/lib/core/finder-pattern.js
+++ b/lib/core/finder-pattern.js
@@ -1,5 +1,5 @@
-var getSymbolSize = require('./utils').getSymbolSize
-var FINDER_PATTERN_SIZE = 7
+const getSymbolSize = require('./utils').getSymbolSize
+const FINDER_PATTERN_SIZE = 7
 
 /**
  * Returns an array containing the positions of each finder pattern.
@@ -9,7 +9,7 @@ var FINDER_PATTERN_SIZE = 7
  * @return {Array}          Array of coordinates
  */
 exports.getPositions = function getPositions (version) {
-  var size = getSymbolSize(version)
+  const size = getSymbolSize(version)
 
   return [
     // top-left
diff --git a/lib/core/format-info.js b/lib/core/format-info.js
index dd57cb6..11fe9ef 100644
--- a/lib/core/format-info.js
+++ b/lib/core/format-info.js
@@ -1,8 +1,8 @@
-var Utils = require('./utils')
+const Utils = require('./utils')
 
-var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
-var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
-var G15_BCH = Utils.getBCHDigit(G15)
+const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
+const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
+const G15_BCH = Utils.getBCHDigit(G15)
 
 /**
  * Returns format information with relative error correction bits
@@ -15,8 +15,8 @@ var G15_BCH = Utils.getBCHDigit(G15)
  * @return {Number}                      Encoded format information bits
  */
 exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
-  var data = ((errorCorrectionLevel.bit << 3) | mask)
-  var d = data << 10
+  const data = ((errorCorrectionLevel.bit << 3) | mask)
+  let d = data << 10
 
   while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
     d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
diff --git a/lib/core/galois-field.js b/lib/core/galois-field.js
index db2e6c6..8125179 100644
--- a/lib/core/galois-field.js
+++ b/lib/core/galois-field.js
@@ -1,5 +1,5 @@
-var EXP_TABLE = new Uint8Array(512)
-var LOG_TABLE = new Uint8Array(256)
+const EXP_TABLE = new Uint8Array(512)
+const LOG_TABLE = new Uint8Array(256)
 /**
  * Precompute the log and anti-log tables for faster computation later
  *
@@ -9,8 +9,8 @@ var LOG_TABLE = new Uint8Array(256)
  * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
  */
 ;(function initTables () {
-  var x = 1
-  for (var i = 0; i < 255; i++) {
+  let x = 1
+  for (let i = 0; i < 255; i++) {
     EXP_TABLE[i] = x
     LOG_TABLE[x] = i
 
@@ -27,7 +27,7 @@ var LOG_TABLE = new Uint8Array(256)
   // stay inside the bounds (because we will mainly use this table for the multiplication of
   // two GF numbers, no more).
   // @see {@link mul}
-  for (i = 255; i < 512; i++) {
+  for (let i = 255; i < 512; i++) {
     EXP_TABLE[i] = EXP_TABLE[i - 255]
   }
 }())
diff --git a/lib/core/kanji-data.js b/lib/core/kanji-data.js
index a7909f7..a1d9a69 100644
--- a/lib/core/kanji-data.js
+++ b/lib/core/kanji-data.js
@@ -1,5 +1,5 @@
-var Mode = require('./mode')
-var Utils = require('./utils')
+const Mode = require('./mode')
+const Utils = require('./utils')
 
 function KanjiData (data) {
   this.mode = Mode.KANJI
@@ -19,13 +19,13 @@ KanjiData.prototype.getBitsLength = function getBitsLength () {
 }
 
 KanjiData.prototype.write = function (bitBuffer) {
-  var i
+  let i
 
   // In the Shift JIS system, Kanji characters are represented by a two byte combination.
   // These byte values are shifted from the JIS X 0208 values.
   // JIS X 0208 gives details of the shift coded representation.
   for (i = 0; i < this.data.length; i++) {
-    var value = Utils.toSJIS(this.data[i])
+    let value = Utils.toSJIS(this.data[i])
 
     // For characters with Shift JIS values from 0x8140 to 0x9FFC:
     if (value >= 0x8140 && value <= 0x9FFC) {
diff --git a/lib/core/mask-pattern.js b/lib/core/mask-pattern.js
index d8131e7..f5f8900 100644
--- a/lib/core/mask-pattern.js
+++ b/lib/core/mask-pattern.js
@@ -17,7 +17,7 @@ exports.Patterns = {
  * Weighted penalty scores for the undesirable features
  * @type {Object}
  */
-var PenaltyScores = {
+const PenaltyScores = {
   N1: 3,
   N2: 3,
   N3: 40,
@@ -53,19 +53,19 @@ exports.from = function from (value) {
 * i is the amount by which the number of adjacent modules of the same color exceeds 5
 */
 exports.getPenaltyN1 = function getPenaltyN1 (data) {
-  var size = data.size
-  var points = 0
-  var sameCountCol = 0
-  var sameCountRow = 0
-  var lastCol = null
-  var lastRow = null
+  const size = data.size
+  let points = 0
+  let sameCountCol = 0
+  let sameCountRow = 0
+  let lastCol = null
+  let lastRow = null
 
-  for (var row = 0; row < size; row++) {
+  for (let row = 0; row < size; row++) {
     sameCountCol = sameCountRow = 0
     lastCol = lastRow = null
 
-    for (var col = 0; col < size; col++) {
-      var module = data.get(row, col)
+    for (let col = 0; col < size; col++) {
+      let module = data.get(row, col)
       if (module === lastCol) {
         sameCountCol++
       } else {
@@ -97,12 +97,12 @@ exports.getPenaltyN1 = function getPenaltyN1 (data) {
  * Points: N2 * (m - 1) * (n - 1)
  */
 exports.getPenaltyN2 = function getPenaltyN2 (data) {
-  var size = data.size
-  var points = 0
+  const size = data.size
+  let points = 0
 
-  for (var row = 0; row < size - 1; row++) {
-    for (var col = 0; col < size - 1; col++) {
-      var last = data.get(row, col) +
+  for (let row = 0; row < size - 1; row++) {
+    for (let col = 0; col < size - 1; col++) {
+      const last = data.get(row, col) +
         data.get(row, col + 1) +
         data.get(row + 1, col) +
         data.get(row + 1, col + 1)
@@ -121,14 +121,14 @@ exports.getPenaltyN2 = function getPenaltyN2 (data) {
  * Points: N3 * number of pattern found
  */
 exports.getPenaltyN3 = function getPenaltyN3 (data) {
-  var size = data.size
-  var points = 0
-  var bitsCol = 0
-  var bitsRow = 0
+  const size = data.size
+  let points = 0
+  let bitsCol = 0
+  let bitsRow = 0
 
-  for (var row = 0; row < size; row++) {
+  for (let row = 0; row < size; row++) {
     bitsCol = bitsRow = 0
-    for (var col = 0; col < size; col++) {
+    for (let col = 0; col < size; col++) {
       bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
       if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++
 
@@ -149,12 +149,12 @@ exports.getPenaltyN3 = function getPenaltyN3 (data) {
  * in the symbol from 50% in steps of 5%
  */
 exports.getPenaltyN4 = function getPenaltyN4 (data) {
-  var darkCount = 0
-  var modulesCount = data.data.length
+  let darkCount = 0
+  const modulesCount = data.data.length
 
-  for (var i = 0; i < modulesCount; i++) darkCount += data.data[i]
+  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]
 
-  var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)
+  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)
 
   return k * PenaltyScores.N4
 }
@@ -189,10 +189,10 @@ function getMaskAt (maskPattern, i, j) {
  * @param  {BitMatrix} data    BitMatrix data
  */
 exports.applyMask = function applyMask (pattern, data) {
-  var size = data.size
+  const size = data.size
 
-  for (var col = 0; col < size; col++) {
-    for (var row = 0; row < size; row++) {
+  for (let col = 0; col < size; col++) {
+    for (let row = 0; row < size; row++) {
       if (data.isReserved(row, col)) continue
       data.xor(row, col, getMaskAt(pattern, row, col))
     }
@@ -206,16 +206,16 @@ exports.applyMask = function applyMask (pattern, data) {
  * @return {Number} Mask pattern reference number
  */
 exports.getBestMask = function getBestMask (data, setupFormatFunc) {
-  var numPatterns = Object.keys(exports.Patterns).length
-  var bestPattern = 0
-  var lowerPenalty = Infinity
+  const numPatterns = Object.keys(exports.Patterns).length
+  let bestPattern = 0
+  let lowerPenalty = Infinity
 
-  for (var p = 0; p < numPatterns; p++) {
+  for (let p = 0; p < numPatterns; p++) {
     setupFormatFunc(p)
     exports.applyMask(p, data)
 
     // Calculate penalty
-    var penalty =
+    const penalty =
       exports.getPenaltyN1(data) +
       exports.getPenaltyN2(data) +
       exports.getPenaltyN3(data) +
diff --git a/lib/core/mode.js b/lib/core/mode.js
index 01dc5e7..fd95a6e 100644
--- a/lib/core/mode.js
+++ b/lib/core/mode.js
@@ -1,5 +1,5 @@
-var VersionCheck = require('./version-check')
-var Regex = require('./regex')
+const VersionCheck = require('./version-check')
+const Regex = require('./regex')
 
 /**
  * Numeric mode encodes data from the decimal digit set (0 - 9)
@@ -130,7 +130,7 @@ function fromString (string) {
     throw new Error('Param is not a string')
   }
 
-  var lcStr = string.toLowerCase()
+  const lcStr = string.toLowerCase()
 
   switch (lcStr) {
     case 'numeric':
diff --git a/lib/core/numeric-data.js b/lib/core/numeric-data.js
index 929a7fd..5223991 100644
--- a/lib/core/numeric-data.js
+++ b/lib/core/numeric-data.js
@@ -1,4 +1,4 @@
-var Mode = require('./mode')
+const Mode = require('./mode')
 
 function NumericData (data) {
   this.mode = Mode.NUMERIC
@@ -18,7 +18,7 @@ NumericData.prototype.getBitsLength = function getBitsLength () {
 }
 
 NumericData.prototype.write = function write (bitBuffer) {
-  var i, group, value
+  let i, group, value
 
   // The input data string is divided into groups of three digits,
   // and each group is converted to its 10-bit binary equivalent.
@@ -31,7 +31,7 @@ NumericData.prototype.write = function write (bitBuffer) {
 
   // If the number of input digits is not an exact multiple of three,
   // the final one or two digits are converted to 4 or 7 bits respectively.
-  var remainingNum = this.data.length - i
+  const remainingNum = this.data.length - i
   if (remainingNum > 0) {
     group = this.data.substr(i)
     value = parseInt(group, 10)
diff --git a/lib/core/polynomial.js b/lib/core/polynomial.js
index 086d0e3..c6ed9c2 100644
--- a/lib/core/polynomial.js
+++ b/lib/core/polynomial.js
@@ -1,4 +1,4 @@
-var GF = require('./galois-field')
+const GF = require('./galois-field')
 
 /**
  * Multiplies two polynomials inside Galois Field
@@ -8,10 +8,10 @@ var GF = require('./galois-field')
  * @return {Uint8Array}    Product of p1 and p2
  */
 exports.mul = function mul (p1, p2) {
-  var coeff = new Uint8Array(p1.length + p2.length - 1)
+  const coeff = new Uint8Array(p1.length + p2.length - 1)
 
-  for (var i = 0; i < p1.length; i++) {
-    for (var j = 0; j < p2.length; j++) {
+  for (let i = 0; i < p1.length; i++) {
+    for (let j = 0; j < p2.length; j++) {
       coeff[i + j] ^= GF.mul(p1[i], p2[j])
     }
   }
@@ -27,17 +27,17 @@ exports.mul = function mul (p1, p2) {
  * @return {Uint8Array}          Remainder
  */
 exports.mod = function mod (divident, divisor) {
-  var result = new Uint8Array(divident)
+  let result = new Uint8Array(divident)
 
   while ((result.length - divisor.length) >= 0) {
-    var coeff = result[0]
+    const coeff = result[0]
 
-    for (var i = 0; i < divisor.length; i++) {
+    for (let i = 0; i < divisor.length; i++) {
       result[i] ^= GF.mul(divisor[i], coeff)
     }
 
     // remove all zeros from buffer head
-    var offset = 0
+    let offset = 0
     while (offset < result.length && result[offset] === 0) offset++
     result = result.slice(offset)
   }
@@ -53,8 +53,8 @@ exports.mod = function mod (divident, divisor) {
  * @return {Uint8Array}    Buffer containing polynomial coefficients
  */
 exports.generateECPolynomial = function generateECPolynomial (degree) {
-  var poly = new Uint8Array([1])
-  for (var i = 0; i < degree; i++) {
+  let poly = new Uint8Array([1])
+  for (let i = 0; i < degree; i++) {
     poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))
   }
 
diff --git a/lib/core/qrcode.js b/lib/core/qrcode.js
index c1c4c9e..1ea40be 100644
--- a/lib/core/qrcode.js
+++ b/lib/core/qrcode.js
@@ -1,17 +1,17 @@
-var Utils = require('./utils')
-var ECLevel = require('./error-correction-level')
-var BitBuffer = require('./bit-buffer')
-var BitMatrix = require('./bit-matrix')
-var AlignmentPattern = require('./alignment-pattern')
-var FinderPattern = require('./finder-pattern')
-var MaskPattern = require('./mask-pattern')
-var ECCode = require('./error-correction-code')
-var ReedSolomonEncoder = require('./reed-solomon-encoder')
-var Version = require('./version')
-var FormatInfo = require('./format-info')
-var Mode = require('./mode')
-var Segments = require('./segments')
-var isArray = require('isarray')
+const Utils = require('./utils')
+const ECLevel = require('./error-correction-level')
+const BitBuffer = require('./bit-buffer')
+const BitMatrix = require('./bit-matrix')
+const AlignmentPattern = require('./alignment-pattern')
+const FinderPattern = require('./finder-pattern')
+const MaskPattern = require('./mask-pattern')
+const ECCode = require('./error-correction-code')
+const ReedSolomonEncoder = require('./reed-solomon-encoder')
+const Version = require('./version')
+const FormatInfo = require('./format-info')
+const Mode = require('./mode')
+const Segments = require('./segments')
+const isArray = require('isarray')
 
 /**
  * QRCode for JavaScript
@@ -46,17 +46,17 @@ var isArray = require('isarray')
  * @param  {Number}    version QR Code version
  */
 function setupFinderPattern (matrix, version) {
-  var size = matrix.size
-  var pos = FinderPattern.getPositions(version)
+  const size = matrix.size
+  const pos = FinderPattern.getPositions(version)
 
-  for (var i = 0; i < pos.length; i++) {
-    var row = pos[i][0]
-    var col = pos[i][1]
+  for (let i = 0; i < pos.length; i++) {
+    const row = pos[i][0]
+    const col = pos[i][1]
 
-    for (var r = -1; r <= 7; r++) {
+    for (let r = -1; r <= 7; r++) {
       if (row + r <= -1 || size <= row + r) continue
 
-      for (var c = -1; c <= 7; c++) {
+      for (let c = -1; c <= 7; c++) {
         if (col + c <= -1 || size <= col + c) continue
 
         if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
@@ -79,10 +79,10 @@ function setupFinderPattern (matrix, version) {
  * @param  {BitMatrix} matrix Modules matrix
  */
 function setupTimingPattern (matrix) {
-  var size = matrix.size
+  const size = matrix.size
 
-  for (var r = 8; r < size - 8; r++) {
-    var value = r % 2 === 0
+  for (let r = 8; r < size - 8; r++) {
+    const value = r % 2 === 0
     matrix.set(r, 6, value, true)
     matrix.set(6, r, value, true)
   }
@@ -97,14 +97,14 @@ function setupTimingPattern (matrix) {
  * @param  {Number}    version QR Code version
  */
 function setupAlignmentPattern (matrix, version) {
-  var pos = AlignmentPattern.getPositions(version)
+  const pos = AlignmentPattern.getPositions(version)
 
-  for (var i = 0; i < pos.length; i++) {
-    var row = pos[i][0]
-    var col = pos[i][1]
+  for (let i = 0; i < pos.length; i++) {
+    const row = pos[i][0]
+    const col = pos[i][1]
 
-    for (var r = -2; r <= 2; r++) {
-      for (var c = -2; c <= 2; c++) {
+    for (let r = -2; r <= 2; r++) {
+      for (let c = -2; c <= 2; c++) {
         if (r === -2 || r === 2 || c === -2 || c === 2 ||
           (r === 0 && c === 0)) {
           matrix.set(row + r, col + c, true, true)
@@ -123,11 +123,11 @@ function setupAlignmentPattern (matrix, version) {
  * @param  {Number}    version QR Code version
  */
 function setupVersionInfo (matrix, version) {
-  var size = matrix.size
-  var bits = Version.getEncodedBits(version)
-  var row, col, mod
+  const size = matrix.size
+  const bits = Version.getEncodedBits(version)
+  let row, col, mod
 
-  for (var i = 0; i < 18; i++) {
+  for (let i = 0; i < 18; i++) {
     row = Math.floor(i / 3)
     col = i % 3 + size - 8 - 3
     mod = ((bits >> i) & 1) === 1
@@ -145,9 +145,9 @@ function setupVersionInfo (matrix, version) {
  * @param  {Number}    maskPattern          Mask pattern reference value
  */
 function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
-  var size = matrix.size
-  var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
-  var i, mod
+  const size = matrix.size
+  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
+  let i, mod
 
   for (i = 0; i < 15; i++) {
     mod = ((bits >> i) & 1) === 1
@@ -182,19 +182,19 @@ function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
  * @param  {Uint8Array} data   Data codewords
  */
 function setupData (matrix, data) {
-  var size = matrix.size
-  var inc = -1
-  var row = size - 1
-  var bitIndex = 7
-  var byteIndex = 0
+  const size = matrix.size
+  let inc = -1
+  let row = size - 1
+  let bitIndex = 7
+  let byteIndex = 0
 
-  for (var col = size - 1; col > 0; col -= 2) {
+  for (let col = size - 1; col > 0; col -= 2) {
     if (col === 6) col--
 
     while (true) {
-      for (var c = 0; c < 2; c++) {
+      for (let c = 0; c < 2; c++) {
         if (!matrix.isReserved(row, col - c)) {
-          var dark = false
+          let dark = false
 
           if (byteIndex < data.length) {
             dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
@@ -231,7 +231,7 @@ function setupData (matrix, data) {
  */
 function createData (version, errorCorrectionLevel, segments) {
   // Prepare data buffer
-  var buffer = new BitBuffer()
+  const buffer = new BitBuffer()
 
   segments.forEach(function (data) {
     // prefix data with mode indicator (4 bits)
@@ -251,9 +251,9 @@ function createData (version, errorCorrectionLevel, segments) {
   })
 
   // Calculate required number of bits
-  var totalCodewords = Utils.getSymbolTotalCodewords(version)
-  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
-  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
+  const totalCodewords = Utils.getSymbolTotalCodewords(version)
+  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
 
   // Add a terminator.
   // If the bit string is shorter than the total number of required bits,
@@ -277,8 +277,8 @@ function createData (version, errorCorrectionLevel, segments) {
   // Extend the buffer to fill the data capacity of the symbol corresponding to
   // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
   // and 00010001 (0x11) alternately.
-  var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
-  for (var i = 0; i < remainingByte; i++) {
+  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
+  for (let i = 0; i < remainingByte; i++) {
     buffer.put(i % 2 ? 0x11 : 0xEC, 8)
   }
 
@@ -296,41 +296,41 @@ function createData (version, errorCorrectionLevel, segments) {
  */
 function createCodewords (bitBuffer, version, errorCorrectionLevel) {
   // Total codewords for this QR code version (Data + Error correction)
-  var totalCodewords = Utils.getSymbolTotalCodewords(version)
+  const totalCodewords = Utils.getSymbolTotalCodewords(version)
 
   // Total number of error correction codewords
-  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
 
   // Total number of data codewords
-  var dataTotalCodewords = totalCodewords - ecTotalCodewords
+  const dataTotalCodewords = totalCodewords - ecTotalCodewords
 
   // Total number of blocks
-  var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
+  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
 
   // Calculate how many blocks each group should contain
-  var blocksInGroup2 = totalCodewords % ecTotalBlocks
-  var blocksInGroup1 = ecTotalBlocks - blocksInGroup2
+  const blocksInGroup2 = totalCodewords % ecTotalBlocks
+  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2
 
-  var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
+  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
 
-  var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
-  var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
+  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
+  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
 
   // Number of EC codewords is the same for both groups
-  var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1
+  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1
 
   // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
-  var rs = new ReedSolomonEncoder(ecCount)
+  const rs = new ReedSolomonEncoder(ecCount)
 
-  var offset = 0
-  var dcData = new Array(ecTotalBlocks)
-  var ecData = new Array(ecTotalBlocks)
-  var maxDataSize = 0
-  var buffer = new Uint8Array(bitBuffer.buffer)
+  let offset = 0
+  const dcData = new Array(ecTotalBlocks)
+  const ecData = new Array(ecTotalBlocks)
+  let maxDataSize = 0
+  const buffer = new Uint8Array(bitBuffer.buffer)
 
   // Divide the buffer into the required number of blocks
-  for (var b = 0; b < ecTotalBlocks; b++) {
-    var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
+  for (let b = 0; b < ecTotalBlocks; b++) {
+    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
 
     // extract a block of data from buffer
     dcData[b] = buffer.slice(offset, offset + dataSize)
@@ -344,9 +344,9 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
 
   // Create final data
   // Interleave the data and error correction codewords from each block
-  var data = new Uint8Array(totalCodewords)
-  var index = 0
-  var i, r
+  const data = new Uint8Array(totalCodewords)
+  let index = 0
+  let i, r
 
   // Add data codewords
   for (i = 0; i < maxDataSize; i++) {
@@ -377,15 +377,15 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
  * @return {Object}                      Object containing symbol data
  */
 function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
-  var segments
+  let segments
 
   if (isArray(data)) {
     segments = Segments.fromArray(data)
   } else if (typeof data === 'string') {
-    var estimatedVersion = version
+    let estimatedVersion = version
 
     if (!estimatedVersion) {
-      var rawSegments = Segments.rawSplit(data)
+      const rawSegments = Segments.rawSplit(data)
 
       // Estimate best version that can contain raw splitted segments
       estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)
@@ -399,7 +399,7 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
   }
 
   // Get the min version that can contain data
-  var bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)
+  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)
 
   // If no version is found, data cannot be stored
   if (!bestVersion) {
@@ -418,11 +418,11 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
     )
   }
 
-  var dataBits = createData(version, errorCorrectionLevel, segments)
+  const dataBits = createData(version, errorCorrectionLevel, segments)
 
   // Allocate matrix buffer
-  var moduleCount = Utils.getSymbolSize(version)
-  var modules = new BitMatrix(moduleCount)
+  const moduleCount = Utils.getSymbolSize(version)
+  const modules = new BitMatrix(moduleCount)
 
   // Add function modules
   setupFinderPattern(modules, version)
@@ -477,9 +477,9 @@ exports.create = function create (data, options) {
     throw new Error('No input text')
   }
 
-  var errorCorrectionLevel = ECLevel.M
-  var version
-  var mask
+  let errorCorrectionLevel = ECLevel.M
+  let version
+  let mask
 
   if (typeof options !== 'undefined') {
     // Use higher error correction level as default
diff --git a/lib/core/reed-solomon-encoder.js b/lib/core/reed-solomon-encoder.js
index 5fc6e9b..c198422 100644
--- a/lib/core/reed-solomon-encoder.js
+++ b/lib/core/reed-solomon-encoder.js
@@ -1,4 +1,4 @@
-var Polynomial = require('./polynomial')
+const Polynomial = require('./polynomial')
 
 function ReedSolomonEncoder (degree) {
   this.genPoly = undefined
@@ -32,19 +32,19 @@ ReedSolomonEncoder.prototype.encode = function encode (data) {
 
   // Calculate EC for this data block
   // extends data size to data+genPoly size
-  var paddedData = new Uint8Array(data.length + this.degree)
+  const paddedData = new Uint8Array(data.length + this.degree)
   paddedData.set(data)
 
   // The error correction codewords are the remainder after dividing the data codewords
   // by a generator polynomial
-  var remainder = Polynomial.mod(paddedData, this.genPoly)
+  const remainder = Polynomial.mod(paddedData, this.genPoly)
 
   // return EC data blocks (last n byte, where n is the degree of genPoly)
   // If coefficients number in remainder are less than genPoly degree,
   // pad with 0s to the left to reach the needed number of coefficients
-  var start = this.degree - remainder.length
+  const start = this.degree - remainder.length
   if (start > 0) {
-    var buff = new Uint8Array(this.degree)
+    const buff = new Uint8Array(this.degree)
     buff.set(remainder, start)
 
     return buff
diff --git a/lib/core/regex.js b/lib/core/regex.js
index f68bed9..9dd13a4 100644
--- a/lib/core/regex.js
+++ b/lib/core/regex.js
@@ -1,12 +1,12 @@
-var numeric = '[0-9]+'
-var alphanumeric = '[A-Z $%*+\\-./:]+'
-var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
+const numeric = '[0-9]+'
+const alphanumeric = '[A-Z $%*+\\-./:]+'
+let kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
   '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
   '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
   '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
 kanji = kanji.replace(/u/g, '\\u')
 
-var byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'
+const byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'
 
 exports.KANJI = new RegExp(kanji, 'g')
 exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
@@ -14,9 +14,9 @@ exports.BYTE = new RegExp(byte, 'g')
 exports.NUMERIC = new RegExp(numeric, 'g')
 exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')
 
-var TEST_KANJI = new RegExp('^' + kanji + '$')
-var TEST_NUMERIC = new RegExp('^' + numeric + '$')
-var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
+const TEST_KANJI = new RegExp('^' + kanji + '$')
+const TEST_NUMERIC = new RegExp('^' + numeric + '$')
+const TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
 
 exports.testKanji = function testKanji (str) {
   return TEST_KANJI.test(str)
diff --git a/lib/core/segments.js b/lib/core/segments.js
index c9d8c4e..ba8be17 100644
--- a/lib/core/segments.js
+++ b/lib/core/segments.js
@@ -1,11 +1,11 @@
-var Mode = require('./mode')
-var NumericData = require('./numeric-data')
-var AlphanumericData = require('./alphanumeric-data')
-var ByteData = require('./byte-data')
-var KanjiData = require('./kanji-data')
-var Regex = require('./regex')
-var Utils = require('./utils')
-var dijkstra = require('dijkstrajs')
+const Mode = require('./mode')
+const NumericData = require('./numeric-data')
+const AlphanumericData = require('./alphanumeric-data')
+const ByteData = require('./byte-data')
+const KanjiData = require('./kanji-data')
+const Regex = require('./regex')
+const Utils = require('./utils')
+const dijkstra = require('dijkstrajs')
 
 /**
  * Returns UTF8 byte length
@@ -26,8 +26,8 @@ function getStringByteLength (str) {
  * @return {Array}       Array of object with segments data
  */
 function getSegments (regex, mode, str) {
-  var segments = []
-  var result
+  const segments = []
+  let result
 
   while ((result = regex.exec(str)) !== null) {
     segments.push({
@@ -49,10 +49,10 @@ function getSegments (regex, mode, str) {
  * @return {Array}          Array of object with segments data
  */
 function getSegmentsFromString (dataStr) {
-  var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
-  var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
-  var byteSegs
-  var kanjiSegs
+  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
+  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
+  let byteSegs
+  let kanjiSegs
 
   if (Utils.isKanjiModeEnabled()) {
     byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
@@ -62,7 +62,7 @@ function getSegmentsFromString (dataStr) {
     kanjiSegs = []
   }
 
-  var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
+  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
 
   return segs
     .sort(function (s1, s2) {
@@ -106,7 +106,7 @@ function getSegmentBitsLength (length, mode) {
  */
 function mergeSegments (segs) {
   return segs.reduce(function (acc, curr) {
-    var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
+    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
     if (prevSeg && prevSeg.mode === curr.mode) {
       acc[acc.length - 1].data += curr.data
       return acc
@@ -134,9 +134,9 @@ function mergeSegments (segs) {
  * @return {Array}      Array of object with segments data
  */
 function buildNodes (segs) {
-  var nodes = []
-  for (var i = 0; i < segs.length; i++) {
-    var seg = segs[i]
+  const nodes = []
+  for (let i = 0; i < segs.length; i++) {
+    const seg = segs[i]
 
     switch (seg.mode) {
       case Mode.NUMERIC:
@@ -178,24 +178,24 @@ function buildNodes (segs) {
  * @return {Object}         Graph of all possible segments
  */
 function buildGraph (nodes, version) {
-  var table = {}
-  var graph = { start: {} }
-  var prevNodeIds = ['start']
+  const table = {}
+  const graph = { start: {} }
+  let prevNodeIds = ['start']
 
-  for (var i = 0; i < nodes.length; i++) {
-    var nodeGroup = nodes[i]
-    var currentNodeIds = []
+  for (let i = 0; i < nodes.length; i++) {
+    const nodeGroup = nodes[i]
+    const currentNodeIds = []
 
-    for (var j = 0; j < nodeGroup.length; j++) {
-      var node = nodeGroup[j]
-      var key = '' + i + j
+    for (let j = 0; j < nodeGroup.length; j++) {
+      const node = nodeGroup[j]
+      const key = '' + i + j
 
       currentNodeIds.push(key)
       table[key] = { node: node, lastCount: 0 }
       graph[key] = {}
 
-      for (var n = 0; n < prevNodeIds.length; n++) {
-        var prevNodeId = prevNodeIds[n]
+      for (let n = 0; n < prevNodeIds.length; n++) {
+        const prevNodeId = prevNodeIds[n]
 
         if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
           graph[prevNodeId][key] =
@@ -215,7 +215,7 @@ function buildGraph (nodes, version) {
     prevNodeIds = currentNodeIds
   }
 
-  for (n = 0; n < prevNodeIds.length; n++) {
+  for (let n = 0; n < prevNodeIds.length; n++) {
     graph[prevNodeIds[n]].end = 0
   }
 
@@ -231,8 +231,8 @@ function buildGraph (nodes, version) {
  * @return {Segment}                 Segment
  */
 function buildSingleSegment (data, modesHint) {
-  var mode
-  var bestMode = Mode.getBestModeForData(data)
+  let mode
+  const bestMode = Mode.getBestModeForData(data)
 
   mode = Mode.from(modesHint, bestMode)
 
@@ -299,14 +299,14 @@ exports.fromArray = function fromArray (array) {
  * @return {Array}          Array of segments
  */
 exports.fromString = function fromString (data, version) {
-  var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
+  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
 
-  var nodes = buildNodes(segs)
-  var graph = buildGraph(nodes, version)
-  var path = dijkstra.find_path(graph.map, 'start', 'end')
+  const nodes = buildNodes(segs)
+  const graph = buildGraph(nodes, version)
+  const path = dijkstra.find_path(graph.map, 'start', 'end')
 
-  var optimizedSegs = []
-  for (var i = 1; i < path.length - 1; i++) {
+  const optimizedSegs = []
+  for (let i = 1; i < path.length - 1; i++) {
     optimizedSegs.push(graph.table[path[i]].node)
   }
 
diff --git a/lib/core/utils.js b/lib/core/utils.js
index 864bc8e..8a0b87b 100644
--- a/lib/core/utils.js
+++ b/lib/core/utils.js
@@ -1,5 +1,5 @@
-var toSJISFunction
-var CODEWORDS_COUNT = [
+let toSJISFunction
+const CODEWORDS_COUNT = [
   0, // Not used
   26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
   404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
@@ -36,7 +36,7 @@ exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
  * @return {Number}      Encoded value
  */
 exports.getBCHDigit = function (data) {
-  var digit = 0
+  let digit = 0
 
   while (data !== 0) {
     digit++
diff --git a/lib/core/version.js b/lib/core/version.js
index 8baaa55..b4e7ee6 100755
--- a/lib/core/version.js
+++ b/lib/core/version.js
@@ -1,16 +1,16 @@
-var Utils = require('./utils')
-var ECCode = require('./error-correction-code')
-var ECLevel = require('./error-correction-level')
-var Mode = require('./mode')
-var VersionCheck = require('./version-check')
-var isArray = require('isarray')
+const Utils = require('./utils')
+const ECCode = require('./error-correction-code')
+const ECLevel = require('./error-correction-level')
+const Mode = require('./mode')
+const VersionCheck = require('./version-check')
+const isArray = require('isarray')
 
 // Generator polynomial used to encode version information
-var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
-var G18_BCH = Utils.getBCHDigit(G18)
+const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
+const G18_BCH = Utils.getBCHDigit(G18)
 
 function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
-  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
+  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {
     if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
       return currentVersion
     }
@@ -25,10 +25,10 @@ function getReservedBitsCount (mode, version) {
 }
 
 function getTotalBitsFromDataArray (segments, version) {
-  var totalBits = 0
+  let totalBits = 0
 
   segments.forEach(function (data) {
-    var reservedBits = getReservedBitsCount(data.mode, version)
+    const reservedBits = getReservedBitsCount(data.mode, version)
     totalBits += reservedBits + data.getBitsLength()
   })
 
@@ -36,8 +36,8 @@ function getTotalBitsFromDataArray (segments, version) {
 }
 
 function getBestVersionForMixedData (segments, errorCorrectionLevel) {
-  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
-    var length = getTotalBitsFromDataArray(segments, currentVersion)
+  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {
+    const length = getTotalBitsFromDataArray(segments, currentVersion)
     if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
       return currentVersion
     }
@@ -80,17 +80,17 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
   if (typeof mode === 'undefined') mode = Mode.BYTE
 
   // Total codewords for this QR code version (Data + Error correction)
-  var totalCodewords = Utils.getSymbolTotalCodewords(version)
+  const totalCodewords = Utils.getSymbolTotalCodewords(version)
 
   // Total number of error correction codewords
-  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
+  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
 
   // Total number of data codewords
-  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
+  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
 
   if (mode === Mode.MIXED) return dataTotalCodewordsBits
 
-  var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
+  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
 
   // Return max number of storable codewords
   switch (mode) {
@@ -118,9 +118,9 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
  * @return {Number}                          QR Code version
  */
 exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
-  var seg
+  let seg
 
-  var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)
+  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)
 
   if (isArray(data)) {
     if (data.length > 1) {
@@ -154,7 +154,7 @@ exports.getEncodedBits = function getEncodedBits (version) {
     throw new Error('Invalid QR Code version')
   }
 
-  var d = version << 12
+  let d = version << 12
 
   while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
     d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
diff --git a/lib/renderer/canvas.js b/lib/renderer/canvas.js
index 34fb6e7..42050cf 100644
--- a/lib/renderer/canvas.js
+++ b/lib/renderer/canvas.js
@@ -1,4 +1,4 @@
-var Utils = require('./utils')
+const Utils = require('./utils')
 
 function clearCanvas (ctx, canvas, size) {
   ctx.clearRect(0, 0, canvas.width, canvas.height)
@@ -19,8 +19,8 @@ function getCanvasElement () {
 }
 
 exports.render = function render (qrData, canvas, options) {
-  var opts = options
-  var canvasEl = canvas
+  let opts = options
+  let canvasEl = canvas
 
   if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
     opts = canvas
@@ -32,10 +32,10 @@ exports.render = function render (qrData, canvas, options) {
   }
 
   opts = Utils.getOptions(opts)
-  var size = Utils.getImageWidth(qrData.modules.size, opts)
+  const size = Utils.getImageWidth(qrData.modules.size, opts)
 
-  var ctx = canvasEl.getContext('2d')
-  var image = ctx.createImageData(size, size)
+  const ctx = canvasEl.getContext('2d')
+  const image = ctx.createImageData(size, size)
   Utils.qrToImageData(image.data, qrData, opts)
 
   clearCanvas(ctx, canvasEl, size)
@@ -45,7 +45,7 @@ exports.render = function render (qrData, canvas, options) {
 }
 
 exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
-  var opts = options
+  let opts = options
 
   if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
     opts = canvas
@@ -54,10 +54,10 @@ exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
 
   if (!opts) opts = {}
 
-  var canvasEl = exports.render(qrData, canvas, opts)
+  const canvasEl = exports.render(qrData, canvas, opts)
 
-  var type = opts.type || 'image/png'
-  var rendererOpts = opts.rendererOpts || {}
+  const type = opts.type || 'image/png'
+  const rendererOpts = opts.rendererOpts || {}
 
   return canvasEl.toDataURL(type, rendererOpts.quality)
 }
diff --git a/lib/renderer/png.js b/lib/renderer/png.js
index 00d8a33..0bd15c7 100644
--- a/lib/renderer/png.js
+++ b/lib/renderer/png.js
@@ -1,16 +1,16 @@
-var fs = require('fs')
-var PNG = require('pngjs').PNG
-var Utils = require('./utils')
+const fs = require('fs')
+const PNG = require('pngjs').PNG
+const Utils = require('./utils')
 
 exports.render = function render (qrData, options) {
-  var opts = Utils.getOptions(options)
-  var pngOpts = opts.rendererOpts
-  var size = Utils.getImageWidth(qrData.modules.size, opts)
+  const opts = Utils.getOptions(options)
+  const pngOpts = opts.rendererOpts
+  const size = Utils.getImageWidth(qrData.modules.size, opts)
 
   pngOpts.width = size
   pngOpts.height = size
 
-  var pngImage = new PNG(pngOpts)
+  const pngImage = new PNG(pngOpts)
   Utils.qrToImageData(pngImage.data, qrData, opts)
 
   return pngImage
@@ -24,7 +24,7 @@ exports.renderToDataURL = function renderToDataURL (qrData, options, cb) {
 
   exports.renderToBuffer(qrData, options, function (err, output) {
     if (err) cb(err)
-    var url = 'data:image/png;base64,'
+    let url = 'data:image/png;base64,'
     url += output.toString('base64')
     cb(null, url)
   })
@@ -36,8 +36,8 @@ exports.renderToBuffer = function renderToBuffer (qrData, options, cb) {
     options = undefined
   }
 
-  var png = exports.render(qrData, options)
-  var buffer = []
+  const png = exports.render(qrData, options)
+  const buffer = []
 
   png.on('error', cb)
 
@@ -58,7 +58,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
     options = undefined
   }
 
-  var stream = fs.createWriteStream(path)
+  const stream = fs.createWriteStream(path)
   stream.on('error', cb)
   stream.on('close', cb)
 
@@ -66,6 +66,6 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
 }
 
 exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
-  var png = exports.render(qrData, options)
+  const png = exports.render(qrData, options)
   png.pack().pipe(stream)
 }
diff --git a/lib/renderer/svg-tag.js b/lib/renderer/svg-tag.js
index 2e55115..d0839fe 100644
--- a/lib/renderer/svg-tag.js
+++ b/lib/renderer/svg-tag.js
@@ -1,8 +1,8 @@
-var Utils = require('./utils')
+const Utils = require('./utils')
 
 function getColorAttrib (color, attrib) {
-  var alpha = color.a / 255
-  var str = attrib + '="' + color.hex + '"'
+  const alpha = color.a / 255
+  const str = attrib + '="' + color.hex + '"'
 
   return alpha < 1
     ? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
@@ -10,21 +10,21 @@ function getColorAttrib (color, attrib) {
 }
 
 function svgCmd (cmd, x, y) {
-  var str = cmd + x
+  let str = cmd + x
   if (typeof y !== 'undefined') str += ' ' + y
 
   return str
 }
 
 function qrToPath (data, size, margin) {
-  var path = ''
-  var moveBy = 0
-  var newRow = false
-  var lineLength = 0
+  let path = ''
+  let moveBy = 0
+  let newRow = false
+  let lineLength = 0
 
-  for (var i = 0; i < data.length; i++) {
-    var col = Math.floor(i % size)
-    var row = Math.floor(i / size)
+  for (let i = 0; i < data.length; i++) {
+    const col = Math.floor(i % size)
+    const row = Math.floor(i / size)
 
     if (!col && !newRow) newRow = true
 
@@ -53,25 +53,25 @@ function qrToPath (data, size, margin) {
 }
 
 exports.render = function render (qrData, options, cb) {
-  var opts = Utils.getOptions(options)
-  var size = qrData.modules.size
-  var data = qrData.modules.data
-  var qrcodesize = size + opts.margin * 2
+  const opts = Utils.getOptions(options)
+  const size = qrData.modules.size
+  const data = qrData.modules.data
+  const qrcodesize = size + opts.margin * 2
 
-  var bg = !opts.color.light.a
+  const bg = !opts.color.light.a
     ? ''
     : '<path ' + getColorAttrib(opts.color.light, 'fill') +
       ' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'
 
-  var path =
+  const path =
     '<path ' + getColorAttrib(opts.color.dark, 'stroke') +
     ' d="' + qrToPath(data, size, opts.margin) + '"/>'
 
-  var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'
+  const viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'
 
-  var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '
+  const width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '
 
-  var svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'
+  const svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'
 
   if (typeof cb === 'function') {
     cb(null, svgTag)
diff --git a/lib/renderer/svg.js b/lib/renderer/svg.js
index 65715cc..ba99d14 100644
--- a/lib/renderer/svg.js
+++ b/lib/renderer/svg.js
@@ -1,4 +1,4 @@
-var svgTagRenderer = require('./svg-tag')
+const svgTagRenderer = require('./svg-tag')
 
 exports.render = svgTagRenderer.render
 
@@ -8,10 +8,10 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
     options = undefined
   }
 
-  var fs = require('fs')
-  var svgTag = exports.render(qrData, options)
+  const fs = require('fs')
+  const svgTag = exports.render(qrData, options)
 
-  var xmlStr = '<?xml version="1.0" encoding="utf-8"?>' +
+  const xmlStr = '<?xml version="1.0" encoding="utf-8"?>' +
     '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' +
     svgTag
 
diff --git a/lib/renderer/terminal.js b/lib/renderer/terminal.js
index f04f2c3..f15610b 100644
--- a/lib/renderer/terminal.js
+++ b/lib/renderer/terminal.js
@@ -1,25 +1,25 @@
-// var Utils = require('./utils')
+// let Utils = require('./utils')
 
 exports.render = function (qrData, options, cb) {
-  var size = qrData.modules.size
-  var data = qrData.modules.data
+  const size = qrData.modules.size
+  const data = qrData.modules.data
 
-  // var opts = Utils.getOptions(options)
+  // let opts = Utils.getOptions(options)
 
   // use same scheme as https://github.com/gtanner/qrcode-terminal because it actually works! =)
-  var black = '\x1b[40m  \x1b[0m'
-  var white = '\x1b[47m  \x1b[0m'
+  const black = '\x1b[40m  \x1b[0m'
+  const white = '\x1b[47m  \x1b[0m'
 
-  var output = ''
-  var hMargin = Array(size + 3).join(white)
-  var vMargin = Array(2).join(white)
+  let output = ''
+  const hMargin = Array(size + 3).join(white)
+  const vMargin = Array(2).join(white)
 
   output += hMargin + '\n'
-  for (var i = 0; i < size; ++i) {
+  for (let i = 0; i < size; ++i) {
     output += white
-    for (var j = 0; j < size; j++) {
-      // var topModule = data[i * size + j]
-      // var bottomModule = data[(i + 1) * size + j]
+    for (let j = 0; j < size; j++) {
+      // let topModule = data[i * size + j]
+      // let bottomModule = data[(i + 1) * size + j]
 
       output += data[i * size + j] ? black : white// getBlockChar(topModule, bottomModule)
     }
@@ -42,8 +42,8 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
     options = undefined
   }
 
-  var fs = require('fs')
-  var utf8 = exports.render(qrData, options)
+  let fs = require('fs')
+  let utf8 = exports.render(qrData, options)
   fs.writeFile(path, utf8, cb)
 }
 */
diff --git a/lib/renderer/utf8.js b/lib/renderer/utf8.js
index 4181ecd..d76116e 100644
--- a/lib/renderer/utf8.js
+++ b/lib/renderer/utf8.js
@@ -1,13 +1,13 @@
-var Utils = require('./utils')
+const Utils = require('./utils')
 
-var BLOCK_CHAR = {
+const BLOCK_CHAR = {
   WW: ' ',
   WB: '▄',
   BB: '█',
   BW: '▀'
 }
 
-var INVERTED_BLOCK_CHAR = {
+const INVERTED_BLOCK_CHAR = {
   BB: ' ',
   BW: '▄',
   WW: '█',
@@ -22,27 +22,27 @@ function getBlockChar (top, bottom, blocks) {
 }
 
 exports.render = function (qrData, options, cb) {
-  var opts = Utils.getOptions(options)
-  var blocks = BLOCK_CHAR
+  const opts = Utils.getOptions(options)
+  let blocks = BLOCK_CHAR
   if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
     blocks = INVERTED_BLOCK_CHAR
   }
 
-  var size = qrData.modules.size
-  var data = qrData.modules.data
+  const size = qrData.modules.size
+  const data = qrData.modules.data
 
-  var output = ''
-  var hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
+  let output = ''
+  let hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
   hMargin = Array((opts.margin / 2) + 1).join(hMargin + '\n')
 
-  var vMargin = Array(opts.margin + 1).join(blocks.WW)
+  const vMargin = Array(opts.margin + 1).join(blocks.WW)
 
   output += hMargin
-  for (var i = 0; i < size; i += 2) {
+  for (let i = 0; i < size; i += 2) {
     output += vMargin
-    for (var j = 0; j < size; j++) {
-      var topModule = data[i * size + j]
-      var bottomModule = data[(i + 1) * size + j]
+    for (let j = 0; j < size; j++) {
+      const topModule = data[i * size + j]
+      const bottomModule = data[(i + 1) * size + j]
 
       output += getBlockChar(topModule, bottomModule, blocks)
     }
@@ -65,7 +65,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
     options = undefined
   }
 
-  var fs = require('fs')
-  var utf8 = exports.render(qrData, options)
+  const fs = require('fs')
+  const utf8 = exports.render(qrData, options)
   fs.writeFile(path, utf8, cb)
 }
diff --git a/lib/renderer/utils.js b/lib/renderer/utils.js
index 633136d..2d21691 100644
--- a/lib/renderer/utils.js
+++ b/lib/renderer/utils.js
@@ -7,7 +7,7 @@ function hex2rgba (hex) {
     throw new Error('Color should be defined as hex string')
   }
 
-  var hexCode = hex.slice().replace('#', '').split('')
+  let hexCode = hex.slice().replace('#', '').split('')
   if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
     throw new Error('Invalid hex color: ' + hex)
   }
@@ -22,7 +22,7 @@ function hex2rgba (hex) {
   // Add default alpha value
   if (hexCode.length === 6) hexCode.push('F', 'F')
 
-  var hexValue = parseInt(hexCode.join(''), 16)
+  const hexValue = parseInt(hexCode.join(''), 16)
 
   return {
     r: (hexValue >> 24) & 255,
@@ -37,12 +37,12 @@ exports.getOptions = function getOptions (options) {
   if (!options) options = {}
   if (!options.color) options.color = {}
 
-  var margin = typeof options.margin === 'undefined' ||
+  const margin = typeof options.margin === 'undefined' ||
     options.margin === null ||
     options.margin < 0 ? 4 : options.margin
 
-  var width = options.width && options.width >= 21 ? options.width : undefined
-  var scale = options.scale || 4
+  const width = options.width && options.width >= 21 ? options.width : undefined
+  const scale = options.scale || 4
 
   return {
     width: width,
@@ -64,27 +64,27 @@ exports.getScale = function getScale (qrSize, opts) {
 }
 
 exports.getImageWidth = function getImageWidth (qrSize, opts) {
-  var scale = exports.getScale(qrSize, opts)
+  const scale = exports.getScale(qrSize, opts)
   return Math.floor((qrSize + opts.margin * 2) * scale)
 }
 
 exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
-  var size = qr.modules.size
-  var data = qr.modules.data
-  var scale = exports.getScale(size, opts)
-  var symbolSize = Math.floor((size + opts.margin * 2) * scale)
-  var scaledMargin = opts.margin * scale
-  var palette = [opts.color.light, opts.color.dark]
+  const size = qr.modules.size
+  const data = qr.modules.data
+  const scale = exports.getScale(size, opts)
+  const symbolSize = Math.floor((size + opts.margin * 2) * scale)
+  const scaledMargin = opts.margin * scale
+  const palette = [opts.color.light, opts.color.dark]
 
-  for (var i = 0; i < symbolSize; i++) {
-    for (var j = 0; j < symbolSize; j++) {
-      var posDst = (i * symbolSize + j) * 4
-      var pxColor = opts.color.light
+  for (let i = 0; i < symbolSize; i++) {
+    for (let j = 0; j < symbolSize; j++) {
+      let posDst = (i * symbolSize + j) * 4
+      let pxColor = opts.color.light
 
       if (i >= scaledMargin && j >= scaledMargin &&
         i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
-        var iSrc = Math.floor((i - scaledMargin) / scale)
-        var jSrc = Math.floor((j - scaledMargin) / scale)
+        const iSrc = Math.floor((i - scaledMargin) / scale)
+        const jSrc = Math.floor((j - scaledMargin) / scale)
         pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
       }
 
diff --git a/lib/server.js b/lib/server.js
index 036e72d..ab72b21 100644
--- a/lib/server.js
+++ b/lib/server.js
@@ -1,9 +1,9 @@
-var canPromise = require('./can-promise')
-var QRCode = require('./core/qrcode')
-var PngRenderer = require('./renderer/png')
-var Utf8Renderer = require('./renderer/utf8')
-var TerminalRenderer = require('./renderer/terminal')
-var SvgRenderer = require('./renderer/svg')
+const canPromise = require('./can-promise')
+const QRCode = require('./core/qrcode')
+const PngRenderer = require('./renderer/png')
+const Utf8Renderer = require('./renderer/utf8')
+const TerminalRenderer = require('./renderer/terminal')
+const SvgRenderer = require('./renderer/svg')
 
 function checkParams (text, opts, cb) {
   if (typeof text === 'undefined') {
@@ -68,7 +68,7 @@ function render (renderFunc, text, params) {
   if (!params.cb) {
     return new Promise(function (resolve, reject) {
       try {
-        var data = QRCode.create(text, params.opts)
+        const data = QRCode.create(text, params.opts)
         return renderFunc(data, params.opts, function (err, data) {
           return err ? reject(err) : resolve(data)
         })
@@ -79,7 +79,7 @@ function render (renderFunc, text, params) {
   }
 
   try {
-    var data = QRCode.create(text, params.opts)
+    const data = QRCode.create(text, params.opts)
     return renderFunc(data, params.opts, params.cb)
   } catch (e) {
     params.cb(e)
@@ -91,20 +91,20 @@ exports.create = QRCode.create
 exports.toCanvas = require('./browser').toCanvas
 
 exports.toString = function toString (text, opts, cb) {
-  var params = checkParams(text, opts, cb)
-  var renderer = getStringRendererFromType(params.opts.type)
+  const params = checkParams(text, opts, cb)
+  const renderer = getStringRendererFromType(params.opts.type)
   return render(renderer.render, text, params)
 }
 
 exports.toDataURL = function toDataURL (text, opts, cb) {
-  var params = checkParams(text, opts, cb)
-  var renderer = getRendererFromType(params.opts.type)
+  const params = checkParams(text, opts, cb)
+  const renderer = getRendererFromType(params.opts.type)
   return render(renderer.renderToDataURL, text, params)
 }
 
 exports.toBuffer = function toBuffer (text, opts, cb) {
-  var params = checkParams(text, opts, cb)
-  var renderer = getRendererFromType(params.opts.type)
+  const params = checkParams(text, opts, cb)
+  const renderer = getRendererFromType(params.opts.type)
   return render(renderer.renderToBuffer, text, params)
 }
 
@@ -117,10 +117,10 @@ exports.toFile = function toFile (path, text, opts, cb) {
     throw new Error('Too few arguments provided')
   }
 
-  var params = checkParams(text, opts, cb)
-  var type = params.opts.type || getTypeFromFilename(path)
-  var renderer = getRendererFromType(type)
-  var renderToFile = renderer.renderToFile.bind(null, path)
+  const params = checkParams(text, opts, cb)
+  const type = params.opts.type || getTypeFromFilename(path)
+  const renderer = getRendererFromType(type)
+  const renderToFile = renderer.renderToFile.bind(null, path)
 
   return render(renderToFile, text, params)
 }
@@ -130,8 +130,8 @@ exports.toFileStream = function toFileStream (stream, text, opts) {
     throw new Error('Too few arguments provided')
   }
 
-  var params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
-  var renderer = getRendererFromType('png') // Only png support for now
-  var renderToFileStream = renderer.renderToFileStream.bind(null, stream)
+  const params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
+  const renderer = getRendererFromType('png') // Only png support for now
+  const renderToFileStream = renderer.renderToFileStream.bind(null, stream)
   render(renderToFileStream, text, params)
 }
diff --git a/test.js b/test.js
index 89d455e..c33e15a 100644
--- a/test.js
+++ b/test.js
@@ -1,7 +1,7 @@
-var spawn = require('child_process').spawn
-var path = require('path')
+const spawn = require('child_process').spawn
+const path = require('path')
 
-var opt = {
+const opt = {
   cwd: __dirname,
   env: (function () {
     process.env.NODE_PATH = './' + path.delimiter + './lib'
diff --git a/test/e2e/toCanvas.test.js b/test/e2e/toCanvas.test.js
index 1425965..3be6572 100644
--- a/test/e2e/toCanvas.test.js
+++ b/test/e2e/toCanvas.test.js
@@ -1,7 +1,7 @@
-var test = require('tap').test
-var { Canvas, createCanvas } = require('canvas')
-var QRCode = require('lib')
-var Helpers = require('test/helpers')
+const test = require('tap').test
+const { Canvas, createCanvas } = require('canvas')
+const QRCode = require('lib')
+const Helpers = require('test/helpers')
 
 test('toCanvas - no promise available', function (t) {
   Helpers.removeNativePromise()
@@ -14,7 +14,7 @@ test('toCanvas - no promise available', function (t) {
       }
     }
   }
-  var canvasEl = createCanvas(200, 200)
+  const canvasEl = createCanvas(200, 200)
 
   t.throw(function () { QRCode.toCanvas() },
     'Should throw if no arguments are provided')
@@ -79,7 +79,7 @@ test('toCanvas', function (t) {
 })
 
 test('toCanvas with specified canvas element', function (t) {
-  var canvasEl = createCanvas(200, 200)
+  const canvasEl = createCanvas(200, 200)
 
   t.plan(6)
 
diff --git a/test/e2e/toDataURL.test.js b/test/e2e/toDataURL.test.js
index a537461..050f3e2 100644
--- a/test/e2e/toDataURL.test.js
+++ b/test/e2e/toDataURL.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var QRCode = require('lib')
-var QRCodeBrowser = require('lib/browser')
-var { createCanvas } = require('canvas')
-var Helpers = require('test/helpers')
+const test = require('tap').test
+const QRCode = require('lib')
+const QRCodeBrowser = require('lib/browser')
+const { createCanvas } = require('canvas')
+const Helpers = require('test/helpers')
 
 test('toDataURL - no promise available', function (t) {
   Helpers.removeNativePromise()
@@ -37,7 +37,7 @@ test('toDataURL - no promise available', function (t) {
 })
 
 test('toDataURL - image/png', function (t) {
-  var expectedDataURL = [
+  const expectedDataURL = [
     'data:image/png;base64,',
     'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
     'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
@@ -99,7 +99,7 @@ test('toDataURL - image/png', function (t) {
 })
 
 test('Canvas toDataURL - image/png', function (t) {
-  var expectedDataURL = [
+  const expectedDataURL = [
     'data:image/png;base64,',
     'iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAABmJLR0QA/wD/AP+gvaeTAA',
     'AC20lEQVR4nO3dQY7jMAwEwM1i///lzGUurYtWEEknQNV1EidjNGhFpuTX+/1+/4Fff5/+',
@@ -126,7 +126,7 @@ test('Canvas toDataURL - image/png', function (t) {
   t.throw(function () { QRCodeBrowser.toDataURL(function () {}) },
     'Should throw if text is not provided')
 
-  var canvas = createCanvas(200, 200)
+  const canvas = createCanvas(200, 200)
   QRCodeBrowser.toDataURL(canvas, 'i am a pony!', {
     errorCorrectionLevel: 'H',
     type: 'image/png'
diff --git a/test/e2e/toFile.test.js b/test/e2e/toFile.test.js
index 11b6a89..0b8c298 100644
--- a/test/e2e/toFile.test.js
+++ b/test/e2e/toFile.test.js
@@ -1,15 +1,15 @@
-var test = require('tap').test
-var fs = require('fs')
-var path = require('path')
-var os = require('os')
-var sinon = require('sinon')
-var QRCode = require('lib')
-var Helpers = require('test/helpers')
-var StreamMock = require('test/mocks/writable-stream')
+const test = require('tap').test
+const fs = require('fs')
+const path = require('path')
+const os = require('os')
+const sinon = require('sinon')
+const QRCode = require('lib')
+const Helpers = require('test/helpers')
+const StreamMock = require('test/mocks/writable-stream')
 
 test('toFile - no promise available', function (t) {
   Helpers.removeNativePromise()
-  var fileName = path.join(os.tmpdir(), 'qrimage.png')
+  const fileName = path.join(os.tmpdir(), 'qrimage.png')
 
   t.throw(function () { QRCode.toFile(fileName, 'some text') },
     'Should throw if a callback is not provided')
@@ -23,7 +23,7 @@ test('toFile - no promise available', function (t) {
 })
 
 test('toFile', function (t) {
-  var fileName = path.join(os.tmpdir(), 'qrimage.png')
+  const fileName = path.join(os.tmpdir(), 'qrimage.png')
 
   t.throw(function () { QRCode.toFile('some text', function () {}) },
     'Should throw if path is not provided')
@@ -38,8 +38,8 @@ test('toFile', function (t) {
 })
 
 test('toFile png', function (t) {
-  var fileName = path.join(os.tmpdir(), 'qrimage.png')
-  var expectedBase64Output = [
+  const fileName = path.join(os.tmpdir(), 'qrimage.png')
+  const expectedBase64Output = [
     'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
     'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
     '1ijFGqVYoxRrlGKNUqxRijXKxUNJ+EkqdyShU+mS0Kl0SfhJKk8Ua5RijVKsUS5epvKmJD',
@@ -99,7 +99,7 @@ test('toFile png', function (t) {
     })
   })
 
-  var fsStub = sinon.stub(fs, 'createWriteStream')
+  const fsStub = sinon.stub(fs, 'createWriteStream')
   fsStub.returns(new StreamMock().forceErrorOnWrite())
 
   QRCode.toFile(fileName, 'i am a pony!', {
@@ -118,8 +118,8 @@ test('toFile png', function (t) {
 })
 
 test('toFile svg', function (t) {
-  var fileName = path.join(os.tmpdir(), 'qrimage.svg')
-  var expectedOutput = fs.readFileSync(
+  const fileName = path.join(os.tmpdir(), 'qrimage.svg')
+  const expectedOutput = fs.readFileSync(
     path.join(__dirname, '/svg.expected.out'), 'UTF-8')
 
   t.plan(6)
@@ -165,8 +165,8 @@ test('toFile svg', function (t) {
 })
 
 test('toFile utf8', function (t) {
-  var fileName = path.join(os.tmpdir(), 'qrimage.txt')
-  var expectedOutput = [
+  const fileName = path.join(os.tmpdir(), 'qrimage.txt')
+  const expectedOutput = [
     '                                 ',
     '                                 ',
     '    █▀▀▀▀▀█ █ ▄█  ▀ █ █▀▀▀▀▀█    ',
@@ -225,12 +225,12 @@ test('toFile utf8', function (t) {
 })
 
 test('toFile manual segments', function (t) {
-  var fileName = path.join(os.tmpdir(), 'qrimage.txt')
-  var segs = [
+  const fileName = path.join(os.tmpdir(), 'qrimage.txt')
+  const segs = [
     { data: 'ABCDEFG', mode: 'alphanumeric' },
     { data: '0123456', mode: 'numeric' }
   ]
-  var expectedOutput = [
+  const expectedOutput = [
     '                             ',
     '                             ',
     '    █▀▀▀▀▀█ ██▀██ █▀▀▀▀▀█    ',
diff --git a/test/e2e/toFileStream.test.js b/test/e2e/toFileStream.test.js
index 9142ba3..a91c7f8 100644
--- a/test/e2e/toFileStream.test.js
+++ b/test/e2e/toFileStream.test.js
@@ -1,7 +1,7 @@
-var test = require('tap').test
-var sinon = require('sinon')
-var QRCode = require('lib')
-var StreamMock = require('../mocks/writable-stream')
+const test = require('tap').test
+const sinon = require('sinon')
+const QRCode = require('lib')
+const StreamMock = require('../mocks/writable-stream')
 
 test('toFileStream png', function (t) {
   t.throw(function () { QRCode.toFileStream('some text') },
@@ -10,8 +10,8 @@ test('toFileStream png', function (t) {
   t.throw(function () { QRCode.toFileStream(new StreamMock()) },
     'Should throw if text is not provided')
 
-  var fstream = new StreamMock()
-  var spy = sinon.spy(fstream, 'emit')
+  const fstream = new StreamMock()
+  const spy = sinon.spy(fstream, 'emit')
 
   QRCode.toFileStream(fstream, 'i am a pony!')
 
@@ -27,7 +27,7 @@ test('toFileStream png', function (t) {
 })
 
 test('toFileStream png with write error', function (t) {
-  var fstreamErr = new StreamMock().forceErrorOnWrite()
+  const fstreamErr = new StreamMock().forceErrorOnWrite()
   QRCode.toFileStream(fstreamErr, 'i am a pony!')
 
   t.plan(2)
@@ -38,8 +38,8 @@ test('toFileStream png with write error', function (t) {
 })
 
 test('toFileStream png with qrcode error', function (t) {
-  var fstreamErr = new StreamMock()
-  var bigString = Array(200).join('i am a pony!')
+  const fstreamErr = new StreamMock()
+  const bigString = Array(200).join('i am a pony!')
 
   t.plan(2)
 
diff --git a/test/e2e/toString.test.js b/test/e2e/toString.test.js
index 9f569f6..f2b00dc 100644
--- a/test/e2e/toString.test.js
+++ b/test/e2e/toString.test.js
@@ -1,9 +1,9 @@
-var test = require('tap').test
-var fs = require('fs')
-var path = require('path')
-var QRCode = require('lib')
-var browser = require('lib/browser')
-var Helpers = require('test/helpers')
+const test = require('tap').test
+const fs = require('fs')
+const path = require('path')
+const QRCode = require('lib')
+const browser = require('lib/browser')
+const Helpers = require('test/helpers')
 
 test('toString - no promise available', function (t) {
   Helpers.removeNativePromise()
@@ -76,7 +76,7 @@ test('toString (browser)', function (t) {
 })
 
 test('toString svg', function (t) {
-  var file = path.join(__dirname, '/svgtag.expected.out')
+  const file = path.join(__dirname, '/svgtag.expected.out')
   t.plan(6)
 
   QRCode.toString('http://www.google.com', {
@@ -121,7 +121,7 @@ test('toString svg', function (t) {
 })
 
 test('toString browser svg', function (t) {
-  var file = path.join(__dirname, '/svgtag.expected.out')
+  const file = path.join(__dirname, '/svgtag.expected.out')
 
   t.plan(3)
 
@@ -146,7 +146,7 @@ test('toString browser svg', function (t) {
 })
 
 test('toString utf8', function (t) {
-  var expectedUtf8 = [
+  const expectedUtf8 = [
     '                                 ',
     '                                 ',
     '    █▀▀▀▀▀█ █ ▄█  ▀ █ █▀▀▀▀▀█    ',
@@ -212,7 +212,7 @@ test('toString utf8', function (t) {
 })
 
 test('toString terminal', function (t) {
-  var expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
+  const expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
 
   t.plan(3)
 
diff --git a/test/helpers.js b/test/helpers.js
index 6b42779..3aaa7e5 100644
--- a/test/helpers.js
+++ b/test/helpers.js
@@ -1,4 +1,4 @@
-var nativePromise = global.Promise
+const nativePromise = global.Promise
 
 exports.removeNativePromise = function () {
   if (global.Promise) {
diff --git a/test/mocks/writable-stream.js b/test/mocks/writable-stream.js
index 0818b82..9d0845d 100644
--- a/test/mocks/writable-stream.js
+++ b/test/mocks/writable-stream.js
@@ -1,5 +1,5 @@
-var stream = require('stream')
-var util = require('util')
+const stream = require('stream')
+const util = require('util')
 
 function WritableStream () {
   stream.Writable.call(this)
diff --git a/test/unit/core/alignment-pattern.test.js b/test/unit/core/alignment-pattern.test.js
index 2916930..c429343 100755
--- a/test/unit/core/alignment-pattern.test.js
+++ b/test/unit/core/alignment-pattern.test.js
@@ -1,5 +1,5 @@
-var test = require('tap').test
-var pattern = require('core/alignment-pattern')
+const test = require('tap').test
+const pattern = require('core/alignment-pattern')
 
 /**
  * Row/column coordinates of the center module of each alignment pattern.
@@ -7,7 +7,7 @@ var pattern = require('core/alignment-pattern')
  *
  * @type {Array}
  */
-var EXPECTED_POSITION_TABLE = [
+const EXPECTED_POSITION_TABLE = [
   [],
   [6, 18],
   [6, 22],
@@ -53,17 +53,17 @@ var EXPECTED_POSITION_TABLE = [
 test('Alignment pattern - Row/Col coords', function (t) {
   t.plan(40)
 
-  for (var i = 1; i <= 40; i++) {
-    var pos = pattern.getRowColCoords(i)
+  for (let i = 1; i <= 40; i++) {
+    const pos = pattern.getRowColCoords(i)
     t.deepEqual(pos, EXPECTED_POSITION_TABLE[i - 1], 'Should return correct coords')
   }
 })
 
 test('Alignment pattern - Positions', function (t) {
-  for (var i = 1; i <= 40; i++) {
-    var pos = pattern.getPositions(i)
-    var expectedPos = EXPECTED_POSITION_TABLE[i - 1]
-    var expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
+  for (let i = 1; i <= 40; i++) {
+    const pos = pattern.getPositions(i)
+    const expectedPos = EXPECTED_POSITION_TABLE[i - 1]
+    const expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
 
     t.equal(pos.length, expectedLength, 'Should return correct number of positions')
 
diff --git a/test/unit/core/alphanumeric-data.test.js b/test/unit/core/alphanumeric-data.test.js
index b31dbf7..fbf285f 100644
--- a/test/unit/core/alphanumeric-data.test.js
+++ b/test/unit/core/alphanumeric-data.test.js
@@ -1,9 +1,9 @@
-var test = require('tap').test
-var BitBuffer = require('core/bit-buffer')
-var AlphanumericData = require('core/alphanumeric-data')
-var Mode = require('core/mode')
+const test = require('tap').test
+const BitBuffer = require('core/bit-buffer')
+const AlphanumericData = require('core/alphanumeric-data')
+const Mode = require('core/mode')
 
-var testData = [
+const testData = [
   {
     data: 'A',
     length: 1,
@@ -26,13 +26,13 @@ var testData = [
 
 test('Alphanumeric Data', function (t) {
   testData.forEach(function (data) {
-    var alphanumericData = new AlphanumericData(data.data)
+    const alphanumericData = new AlphanumericData(data.data)
 
     t.equal(alphanumericData.mode, Mode.ALPHANUMERIC, 'Mode should be ALPHANUMERIC')
     t.equal(alphanumericData.getLength(), data.length, 'Should return correct length')
     t.equal(alphanumericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
 
-    var bitBuffer = new BitBuffer()
+    const bitBuffer = new BitBuffer()
     alphanumericData.write(bitBuffer)
     t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
   })
diff --git a/test/unit/core/bit-buffer.test.js b/test/unit/core/bit-buffer.test.js
index 750f580..c5d4477 100644
--- a/test/unit/core/bit-buffer.test.js
+++ b/test/unit/core/bit-buffer.test.js
@@ -1,18 +1,18 @@
-var test = require('tap').test
-var BitBuffer = require('core/bit-buffer')
+const test = require('tap').test
+const BitBuffer = require('core/bit-buffer')
 
 test('Bit Buffer', function (t) {
-  var testData = 0x41 // 'A'
-  var expectedDataBits = [false, true, false, false, false, false, false, true]
+  const testData = 0x41 // 'A'
+  const expectedDataBits = [false, true, false, false, false, false, false, true]
 
-  var bitBuffer = new BitBuffer()
+  const bitBuffer = new BitBuffer()
 
   t.equal(bitBuffer.getLengthInBits(), 0, 'Initial length should be 0')
 
   bitBuffer.put(testData, 8)
   t.equal(bitBuffer.getLengthInBits(), 8, 'Length should be 8')
 
-  for (var i = 0; i < 8; i++) {
+  for (let i = 0; i < 8; i++) {
     t.deepEqual(bitBuffer.get(i), expectedDataBits[i], 'Should return correct bit value')
   }
 
diff --git a/test/unit/core/bit-matrix.test.js b/test/unit/core/bit-matrix.test.js
index 0a94d92..ce01d62 100644
--- a/test/unit/core/bit-matrix.test.js
+++ b/test/unit/core/bit-matrix.test.js
@@ -1,11 +1,11 @@
-var test = require('tap').test
-var BitMatrix = require('core/bit-matrix')
+const test = require('tap').test
+const BitMatrix = require('core/bit-matrix')
 
 test('Bit Matrix', function (t) {
   t.throw(function () { BitMatrix(0) }, 'Should throw if size is 0')
   t.throw(function () { BitMatrix(-1) }, 'Should throw if size less than 0')
 
-  var bm = new BitMatrix(2)
+  const bm = new BitMatrix(2)
 
   t.equal(bm.size, 2, 'Should have correct size')
   t.equal(bm.data.length, 4, 'Should correctly set buffer size')
diff --git a/test/unit/core/byte-data.test.js b/test/unit/core/byte-data.test.js
index 7b8b21d..bf1d249 100644
--- a/test/unit/core/byte-data.test.js
+++ b/test/unit/core/byte-data.test.js
@@ -1,25 +1,25 @@
-var test = require('tap').test
-var BitBuffer = require('core/bit-buffer')
-var ByteData = require('core/byte-data')
-var Mode = require('core/mode')
+const test = require('tap').test
+const BitBuffer = require('core/bit-buffer')
+const ByteData = require('core/byte-data')
+const Mode = require('core/mode')
 
 test('Byte Data', function (t) {
-  var text = '1234'
-  var textBitLength = 32
-  var textByte = [49, 50, 51, 52] // 1, 2, 3, 4
-  var utf8Text = '\u00bd + \u00bc = \u00be' // 9 char, 12 byte
+  const text = '1234'
+  const textBitLength = 32
+  const textByte = [49, 50, 51, 52] // 1, 2, 3, 4
+  const utf8Text = '\u00bd + \u00bc = \u00be' // 9 char, 12 byte
 
-  var byteData = new ByteData(text)
+  const byteData = new ByteData(text)
 
   t.equal(byteData.mode, Mode.BYTE, 'Mode should be BYTE')
   t.equal(byteData.getLength(), text.length, 'Should return correct length')
   t.equal(byteData.getBitsLength(), textBitLength, 'Should return correct bit length')
 
-  var bitBuffer = new BitBuffer()
+  const bitBuffer = new BitBuffer()
   byteData.write(bitBuffer)
   t.deepEqual(bitBuffer.buffer, textByte, 'Should write correct data to buffer')
 
-  var byteDataUtf8 = new ByteData(utf8Text)
+  const byteDataUtf8 = new ByteData(utf8Text)
   t.equal(byteDataUtf8.getLength(), 12, 'Should return correct length for utf8 chars')
 
   t.end()
diff --git a/test/unit/core/error-correction-code.test.js b/test/unit/core/error-correction-code.test.js
index e86cdcf..c5d5fa1 100644
--- a/test/unit/core/error-correction-code.test.js
+++ b/test/unit/core/error-correction-code.test.js
@@ -1,21 +1,21 @@
-var test = require('tap').test
-var Utils = require('core/utils')
-var Version = require('core/version')
-var ECLevel = require('core/error-correction-level')
-var ECCode = require('core/error-correction-code')
-var Mode = require('core/mode')
+const test = require('tap').test
+const Utils = require('core/utils')
+const Version = require('core/version')
+const ECLevel = require('core/error-correction-level')
+const ECCode = require('core/error-correction-code')
+const Mode = require('core/mode')
 
 test('Error correction codewords', function (t) {
-  var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
+  const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
 
-  for (var v = 1; v <= 40; v++) {
-    var totalCodewords = Utils.getSymbolTotalCodewords(v)
-    var reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
+  for (let v = 1; v <= 40; v++) {
+    const totalCodewords = Utils.getSymbolTotalCodewords(v)
+    const reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
 
-    for (var l = 0; l < levels.length; l++) {
-      var dataCodewords = Version.getCapacity(v, levels[l], Mode.BYTE) + reservedByte
+    for (let l = 0; l < levels.length; l++) {
+      const dataCodewords = Version.getCapacity(v, levels[l], Mode.BYTE) + reservedByte
 
-      var expectedCodewords = totalCodewords - dataCodewords
+      const expectedCodewords = totalCodewords - dataCodewords
 
       t.equal(ECCode.getTotalCodewordsCount(v, levels[l]), expectedCodewords,
         'Should return correct codewords number')
@@ -29,10 +29,10 @@ test('Error correction codewords', function (t) {
 })
 
 test('Error correction blocks', function (t) {
-  var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
+  const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
 
-  for (var v = 1; v <= 40; v++) {
-    for (var l = 0; l < levels.length; l++) {
+  for (let v = 1; v <= 40; v++) {
+    for (let l = 0; l < levels.length; l++) {
       t.ok(ECCode.getBlocksCount(v, levels[l]), 'Should return a positive number')
     }
   }
diff --git a/test/unit/core/error-correction-level.test.js b/test/unit/core/error-correction-level.test.js
index fe00391..2f2fce9 100644
--- a/test/unit/core/error-correction-level.test.js
+++ b/test/unit/core/error-correction-level.test.js
@@ -1,13 +1,13 @@
-var test = require('tap').test
-var ECLevel = require('core/error-correction-level')
+const test = require('tap').test
+const ECLevel = require('core/error-correction-level')
 
-var EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
+const EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
 
 test('Error level from input value', function (t) {
-  var values = [['l', 'low'], ['m', 'medium'], ['q', 'quartile'], ['h', 'high']]
+  const values = [['l', 'low'], ['m', 'medium'], ['q', 'quartile'], ['h', 'high']]
 
-  for (var l = 0; l < values.length; l++) {
-    for (var i = 0; i < values[l].length; i++) {
+  for (let l = 0; l < values.length; l++) {
+    for (let i = 0; i < values[l].length; i++) {
       t.equal(ECLevel.from(values[l][i]), EC_LEVELS[l])
       t.equal(ECLevel.from(values[l][i].toUpperCase()), EC_LEVELS[l])
     }
@@ -21,7 +21,7 @@ test('Error level from input value', function (t) {
 })
 
 test('Error level validity', function (t) {
-  for (var l = 0; l < EC_LEVELS.length; l++) {
+  for (let l = 0; l < EC_LEVELS.length; l++) {
     t.ok(ECLevel.isValid(EC_LEVELS[l]), 'Should return true if error level is valid')
   }
 
diff --git a/test/unit/core/finder-pattern.test.js b/test/unit/core/finder-pattern.test.js
index 0f29622..34402d6 100755
--- a/test/unit/core/finder-pattern.test.js
+++ b/test/unit/core/finder-pattern.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var pattern = require('core/finder-pattern')
+const test = require('tap').test
+const pattern = require('core/finder-pattern')
 
 test('Finder pattern', function (t) {
-  for (var i = 1; i <= 40; i++) {
+  for (let i = 1; i <= 40; i++) {
     t.equal(pattern.getPositions(i).length, 3, 'Should always return 3 pattern positions')
   }
 
diff --git a/test/unit/core/format-info.test.js b/test/unit/core/format-info.test.js
index 5c6aef5..b6b5210 100644
--- a/test/unit/core/format-info.test.js
+++ b/test/unit/core/format-info.test.js
@@ -1,9 +1,9 @@
-var test = require('tap').test
-var FormatInfo = require('core/format-info')
-var ECLevel = require('core/error-correction-level')
-var MaskPattern = require('core/mask-pattern')
+const test = require('tap').test
+const FormatInfo = require('core/format-info')
+const ECLevel = require('core/error-correction-level')
+const MaskPattern = require('core/mask-pattern')
 
-var EXPECTED_FORMAT_BITS = [
+const EXPECTED_FORMAT_BITS = [
   [0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976],
   [0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0],
   [0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed],
@@ -11,12 +11,12 @@ var EXPECTED_FORMAT_BITS = [
 ]
 
 test('Format encoded info', function (t) {
-  var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
-  var patterns = Object.keys(MaskPattern.Patterns).length
+  const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
+  const patterns = Object.keys(MaskPattern.Patterns).length
 
-  for (var l = 0; l < levels.length; l++) {
-    for (var p = 0; p < patterns; p++) {
-      var bch = FormatInfo.getEncodedBits(levels[l], p)
+  for (let l = 0; l < levels.length; l++) {
+    for (let p = 0; p < patterns; p++) {
+      const bch = FormatInfo.getEncodedBits(levels[l], p)
       t.equal(bch, EXPECTED_FORMAT_BITS[l][p], 'Should return correct bits')
     }
   }
diff --git a/test/unit/core/galois-field.test.js b/test/unit/core/galois-field.test.js
index 3c0bbb4..bb79117 100644
--- a/test/unit/core/galois-field.test.js
+++ b/test/unit/core/galois-field.test.js
@@ -1,10 +1,10 @@
-var test = require('tap').test
-var GF = require('core/galois-field')
+const test = require('tap').test
+const GF = require('core/galois-field')
 
 test('Galois Field', function (t) {
   t.throw(function () { GF.log(0) }, 'Should throw for log(n) with n < 1')
 
-  for (var i = 1; i < 255; i++) {
+  for (let i = 1; i < 255; i++) {
     t.equal(GF.log(GF.exp(i)), i, 'log and exp should be one the inverse of the other')
     t.equal(GF.exp(GF.log(i)), i, 'exp and log should be one the inverse of the other')
   }
@@ -13,7 +13,7 @@ test('Galois Field', function (t) {
   t.equal(GF.mul(1, 0), 0, 'Should return 0 if second param is 0')
   t.equal(GF.mul(0, 0), 0, 'Should return 0 if both params are 0')
 
-  for (var j = 1; j < 255; j++) {
+  for (let j = 1; j < 255; j++) {
     t.equal(GF.mul(j, 255 - j), GF.mul(255 - j, j), 'Multiplication should be commutative')
   }
 
diff --git a/test/unit/core/kanji-data.test.js b/test/unit/core/kanji-data.test.js
index c4244f0..57bc024 100644
--- a/test/unit/core/kanji-data.test.js
+++ b/test/unit/core/kanji-data.test.js
@@ -1,24 +1,24 @@
-var test = require('tap').test
-var BitBuffer = require('core/bit-buffer')
-var KanjiData = require('core/kanji-data')
-var Mode = require('core/mode')
-var toSJIS = require('helper/to-sjis')
+const test = require('tap').test
+const BitBuffer = require('core/bit-buffer')
+const KanjiData = require('core/kanji-data')
+const Mode = require('core/mode')
+const toSJIS = require('helper/to-sjis')
 require('core/utils').setToSJISFunction(toSJIS)
 
 test('Kanji Data', function (t) {
-  var data = '漢字漾癶'
-  var length = 4
-  var bitLength = 52 // length * 13
+  const data = '漢字漾癶'
+  const length = 4
+  const bitLength = 52 // length * 13
 
-  var dataBit = [57, 250, 134, 174, 129, 134, 0]
+  const dataBit = [57, 250, 134, 174, 129, 134, 0]
 
-  var kanjiData = new KanjiData(data)
+  let kanjiData = new KanjiData(data)
 
   t.equal(kanjiData.mode, Mode.KANJI, 'Mode should be KANJI')
   t.equal(kanjiData.getLength(), length, 'Should return correct length')
   t.equal(kanjiData.getBitsLength(), bitLength, 'Should return correct bit length')
 
-  var bitBuffer = new BitBuffer()
+  let bitBuffer = new BitBuffer()
   kanjiData.write(bitBuffer)
   t.deepEqual(bitBuffer.buffer, dataBit, 'Should write correct data to buffer')
 
diff --git a/test/unit/core/mask-pattern.test.js b/test/unit/core/mask-pattern.test.js
index d8ebdde..c6f5831 100755
--- a/test/unit/core/mask-pattern.test.js
+++ b/test/unit/core/mask-pattern.test.js
@@ -1,15 +1,15 @@
-var test = require('tap').test
-var BitMatrix = require('core/bit-matrix')
-var MaskPattern = require('core/mask-pattern')
+const test = require('tap').test
+const BitMatrix = require('core/bit-matrix')
+const MaskPattern = require('core/mask-pattern')
 
 test('Mask pattern - Pattern references', function (t) {
-  var patternsCount = Object.keys(MaskPattern.Patterns).length
+  const patternsCount = Object.keys(MaskPattern.Patterns).length
   t.equals(patternsCount, 8, 'Should return 8 patterns')
 
   t.end()
 })
 
-var expectedPattern000 = [
+const expectedPattern000 = [
   1, 0, 1, 0, 1, 0,
   0, 1, 0, 1, 0, 1,
   1, 0, 1, 0, 1, 0,
@@ -18,7 +18,7 @@ var expectedPattern000 = [
   0, 1, 0, 1, 0, 1
 ]
 
-var expectedPattern001 = [
+const expectedPattern001 = [
   1, 1, 1, 1, 1, 1,
   0, 0, 0, 0, 0, 0,
   1, 1, 1, 1, 1, 1,
@@ -27,7 +27,7 @@ var expectedPattern001 = [
   0, 0, 0, 0, 0, 0
 ]
 
-var expectedPattern010 = [
+const expectedPattern010 = [
   1, 0, 0, 1, 0, 0,
   1, 0, 0, 1, 0, 0,
   1, 0, 0, 1, 0, 0,
@@ -36,7 +36,7 @@ var expectedPattern010 = [
   1, 0, 0, 1, 0, 0
 ]
 
-var expectedPattern011 = [
+const expectedPattern011 = [
   1, 0, 0, 1, 0, 0,
   0, 0, 1, 0, 0, 1,
   0, 1, 0, 0, 1, 0,
@@ -45,7 +45,7 @@ var expectedPattern011 = [
   0, 1, 0, 0, 1, 0
 ]
 
-var expectedPattern100 = [
+const expectedPattern100 = [
   1, 1, 1, 0, 0, 0,
   1, 1, 1, 0, 0, 0,
   0, 0, 0, 1, 1, 1,
@@ -54,7 +54,7 @@ var expectedPattern100 = [
   1, 1, 1, 0, 0, 0
 ]
 
-var expectedPattern101 = [
+const expectedPattern101 = [
   1, 1, 1, 1, 1, 1,
   1, 0, 0, 0, 0, 0,
   1, 0, 0, 1, 0, 0,
@@ -63,7 +63,7 @@ var expectedPattern101 = [
   1, 0, 0, 0, 0, 0
 ]
 
-var expectedPattern110 = [
+const expectedPattern110 = [
   1, 1, 1, 1, 1, 1,
   1, 1, 1, 0, 0, 0,
   1, 1, 0, 1, 1, 0,
@@ -72,7 +72,7 @@ var expectedPattern110 = [
   1, 0, 0, 0, 1, 1
 ]
 
-var expectedPattern111 = [
+const expectedPattern111 = [
   1, 0, 1, 0, 1, 0,
   0, 0, 0, 1, 1, 1,
   1, 0, 0, 0, 1, 1,
@@ -100,19 +100,19 @@ test('MaskPattern from value', function (t) {
 })
 
 test('Mask pattern - Apply mask', function (t) {
-  var patterns = Object.keys(MaskPattern.Patterns).length
-  var expectedPatterns = [
+  const patterns = Object.keys(MaskPattern.Patterns).length
+  const expectedPatterns = [
     expectedPattern000, expectedPattern001, expectedPattern010, expectedPattern011,
     expectedPattern100, expectedPattern101, expectedPattern110, expectedPattern111
   ]
 
-  for (var p = 0; p < patterns; p++) {
-    var matrix = new BitMatrix(6)
+  for (let p = 0; p < patterns; p++) {
+    const matrix = new BitMatrix(6)
     MaskPattern.applyMask(p, matrix)
     t.deepEqual(matrix.data, new Uint8Array(expectedPatterns[p]), 'Should return correct pattern')
   }
 
-  matrix = new BitMatrix(2)
+  const matrix = new BitMatrix(2)
   matrix.set(0, 0, false, true)
   matrix.set(0, 1, false, true)
   matrix.set(1, 0, false, true)
@@ -127,7 +127,7 @@ test('Mask pattern - Apply mask', function (t) {
 })
 
 test('Mask pattern - Penalty N1', function (t) {
-  var matrix = new BitMatrix(11)
+  let matrix = new BitMatrix(11)
   matrix.data = [
     1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
     1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
@@ -170,7 +170,7 @@ test('Mask pattern - Penalty N1', function (t) {
 })
 
 test('Mask pattern - Penalty N2', function (t) {
-  var matrix = new BitMatrix(8)
+  let matrix = new BitMatrix(8)
   matrix.data = [
     1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 0, 0, 0, 1, 1,
@@ -205,7 +205,7 @@ test('Mask pattern - Penalty N2', function (t) {
 })
 
 test('Mask pattern - Penalty N3', function (t) {
-  var matrix = new BitMatrix(11)
+  const matrix = new BitMatrix(11)
   matrix.data = [
     0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
     0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
@@ -244,19 +244,19 @@ test('Mask pattern - Penalty N3', function (t) {
 })
 
 test('Mask pattern - Penalty N4', function (t) {
-  var matrix = new BitMatrix(10)
+  const matrix = new BitMatrix(10)
   matrix.data = new Array(50).fill(1).concat(new Array(50).fill(0))
 
   t.equals(MaskPattern.getPenaltyN4(matrix), 0,
     'Should return correct penalty points')
 
-  var matrix2 = new BitMatrix(21)
+  const matrix2 = new BitMatrix(21)
   matrix2.data = new Array(190).fill(1).concat(new Array(251).fill(0))
 
   t.equals(MaskPattern.getPenaltyN4(matrix2), 10,
     'Should return correct penalty points')
 
-  var matrix3 = new BitMatrix(10)
+  const matrix3 = new BitMatrix(10)
   matrix3.data = new Array(22).fill(1).concat(new Array(78).fill(0))
 
   t.equals(MaskPattern.getPenaltyN4(matrix3), 50,
@@ -266,7 +266,7 @@ test('Mask pattern - Penalty N4', function (t) {
 })
 
 test('Mask pattern - Best mask', function (t) {
-  var matrix = new BitMatrix(11)
+  const matrix = new BitMatrix(11)
   matrix.data = [
     0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
     0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
@@ -281,7 +281,7 @@ test('Mask pattern - Best mask', function (t) {
     1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0
   ]
 
-  var mask = MaskPattern.getBestMask(matrix, function () {})
+  const mask = MaskPattern.getBestMask(matrix, function () {})
   t.ok(!isNaN(mask), 'Should return a number')
 
   t.ok(mask >= 0 && mask < 8,
diff --git a/test/unit/core/mode.test.js b/test/unit/core/mode.test.js
index 42d4fd5..c5be302 100644
--- a/test/unit/core/mode.test.js
+++ b/test/unit/core/mode.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var Mode = require('core/mode')
+const test = require('tap').test
+const Mode = require('core/mode')
 
 test('Mode bits', function (t) {
-  var EXPECTED_BITS = {
+  const EXPECTED_BITS = {
     numeric: 1,
     alphanumeric: 2,
     byte: 4,
@@ -20,14 +20,14 @@ test('Mode bits', function (t) {
 })
 
 test('Char count bits', function (t) {
-  var EXPECTED_BITS = {
+  const EXPECTED_BITS = {
     numeric: [10, 12, 14],
     alphanumeric: [9, 11, 13],
     byte: [8, 16, 16],
     kanji: [8, 10, 12]
   }
 
-  var v
+  let v
   for (v = 1; v < 10; v++) {
     t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[0])
     t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[0])
@@ -60,7 +60,7 @@ test('Char count bits', function (t) {
 
 test('Best mode', function (t) {
   /* eslint-disable quote-props */
-  var EXPECTED_MODE = {
+  const EXPECTED_MODE = {
     '12345': Mode.NUMERIC,
     'abcde': Mode.BYTE,
     '1234a': Mode.BYTE,
@@ -94,14 +94,14 @@ test('Is valid', function (t) {
 })
 
 test('From value', function (t) {
-  var modes = [
+  const modes = [
     { name: 'numeric', mode: Mode.NUMERIC },
     { name: 'alphanumeric', mode: Mode.ALPHANUMERIC },
     { name: 'kanji', mode: Mode.KANJI },
     { name: 'byte', mode: Mode.BYTE }
   ]
 
-  for (var m = 0; m < modes.length; m++) {
+  for (let m = 0; m < modes.length; m++) {
     t.equal(Mode.from(modes[m].name), modes[m].mode)
     t.equal(Mode.from(modes[m].name.toUpperCase()), modes[m].mode)
     t.equal(Mode.from(modes[m].mode), modes[m].mode)
diff --git a/test/unit/core/numeric-data.test.js b/test/unit/core/numeric-data.test.js
index 5c584b6..ce6d289 100644
--- a/test/unit/core/numeric-data.test.js
+++ b/test/unit/core/numeric-data.test.js
@@ -1,9 +1,9 @@
-var test = require('tap').test
-var BitBuffer = require('core/bit-buffer')
-var NumericData = require('core/numeric-data')
-var Mode = require('core/mode')
+const test = require('tap').test
+const BitBuffer = require('core/bit-buffer')
+const NumericData = require('core/numeric-data')
+const Mode = require('core/mode')
 
-var testData = [
+const testData = [
   {
     data: 8,
     length: 1,
@@ -39,13 +39,13 @@ var testData = [
 
 test('Numeric Data', function (t) {
   testData.forEach(function (data) {
-    var numericData = new NumericData(data.data)
+    const numericData = new NumericData(data.data)
 
     t.equal(numericData.mode, Mode.NUMERIC, 'Mode should be NUMERIC')
     t.equal(numericData.getLength(), data.length, 'Should return correct length')
     t.equal(numericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
 
-    var bitBuffer = new BitBuffer()
+    const bitBuffer = new BitBuffer()
     numericData.write(bitBuffer)
     t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
   })
diff --git a/test/unit/core/polynomial.test.js b/test/unit/core/polynomial.test.js
index c6eff5e..0cee1b3 100644
--- a/test/unit/core/polynomial.test.js
+++ b/test/unit/core/polynomial.test.js
@@ -1,12 +1,12 @@
-var test = require('tap').test
-var Poly = require('core/polynomial')
+const test = require('tap').test
+const Poly = require('core/polynomial')
 
 test('Generator polynomial', function (t) {
-  var result = Poly.generateECPolynomial(0)
+  const result = Poly.generateECPolynomial(0)
   t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
   t.deepEqual(result, new Uint8Array([1]), 'Should return coeff [1] for polynomial of degree 0')
 
-  for (var e = 2; e <= 68; e++) {
+  for (let e = 2; e <= 68; e++) {
     t.equal(Poly.generateECPolynomial(e).length, e + 1, 'Should return a number of coefficients equal to (degree + 1)')
   }
 
@@ -14,10 +14,10 @@ test('Generator polynomial', function (t) {
 })
 
 test('Polynomial', function (t) {
-  var p1 = [0, 1, 2, 3, 4]
-  var p2 = [5, 6]
+  const p1 = [0, 1, 2, 3, 4]
+  const p2 = [5, 6]
 
-  var result = Poly.mul(p1, p2)
+  let result = Poly.mul(p1, p2)
   t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
   t.equal(result.length, 6, 'Should return correct number of coefficients')
 
diff --git a/test/unit/core/qrcode.test.js b/test/unit/core/qrcode.test.js
index 85a24e5..c4dbcae 100644
--- a/test/unit/core/qrcode.test.js
+++ b/test/unit/core/qrcode.test.js
@@ -1,15 +1,15 @@
-var test = require('tap').test
-var ECLevel = require('core/error-correction-level')
-var Version = require('core/version')
-var QRCode = require('core/qrcode')
-var toSJIS = require('helper/to-sjis')
+const test = require('tap').test
+const ECLevel = require('core/error-correction-level')
+const Version = require('core/version')
+const QRCode = require('core/qrcode')
+const toSJIS = require('helper/to-sjis')
 
 test('QRCode interface', function (t) {
   t.type(QRCode.create, 'function', 'Should have "create" function')
   t.throw(function () { QRCode.create() }, 'Should throw if no data is provided')
   t.notThrow(function () { QRCode.create('1234567') }, 'Should not throw')
 
-  var qr = QRCode.create('a123456A', {
+  let qr = QRCode.create('a123456A', {
     version: 1,
     maskPattern: 1,
     errorCorrectionLevel: 'H'
@@ -17,7 +17,7 @@ test('QRCode interface', function (t) {
   t.equal(qr.modules.size, 21, 'Should return correct modules count')
   t.equal(qr.maskPattern, 1, 'Should return correct mask pattern')
 
-  var darkModule = qr.modules.get(qr.modules.size - 8, 8)
+  const darkModule = qr.modules.get(qr.modules.size - 8, 8)
   t.ok(darkModule, 'Should have a dark module at coords [size-8][8]')
 
   t.throw(function () {
@@ -46,16 +46,16 @@ test('QRCode interface', function (t) {
 })
 
 test('QRCode error correction', function (t) {
-  var qr
-  var ecValues = [
+  let qr
+  const ecValues = [
     { name: ['l', 'low'], level: ECLevel.L },
     { name: ['m', 'medium'], level: ECLevel.M },
     { name: ['q', 'quartile'], level: ECLevel.Q },
     { name: ['h', 'high'], level: ECLevel.H }
   ]
 
-  for (var l = 0; l < ecValues.length; l++) {
-    for (var i = 0; i < ecValues[l].name.length; i++) {
+  for (let l = 0; l < ecValues.length; l++) {
+    for (let i = 0; i < ecValues[l].name.length; i++) {
       t.notThrow(function () {
         qr = QRCode.create('ABCDEFG', { errorCorrectionLevel: ecValues[l].name[i] })
       }, 'Should accept errorCorrectionLevel value: ' + ecValues[l].name[i])
@@ -79,7 +79,7 @@ test('QRCode error correction', function (t) {
 })
 
 test('QRCode version', function (t) {
-  var qr = QRCode.create('data', { version: 9, errorCorrectionLevel: ECLevel.M })
+  let qr = QRCode.create('data', { version: 9, errorCorrectionLevel: ECLevel.M })
 
   t.equal(qr.version, 9, 'Should create qrcode with correct version')
   t.equal(qr.errorCorrectionLevel, ECLevel.M, 'Should set correct EC level')
@@ -102,7 +102,7 @@ test('QRCode version', function (t) {
 })
 
 test('QRCode capacity', function (t) {
-  var qr
+  let qr
 
   qr = QRCode.create([{ data: 'abcdefg', mode: 'byte' }])
   t.equal(qr.version, 1, 'Should contain 7 byte characters')
diff --git a/test/unit/core/reed-solomon-encoder.test.js b/test/unit/core/reed-solomon-encoder.test.js
index 59c6776..24b5108 100644
--- a/test/unit/core/reed-solomon-encoder.test.js
+++ b/test/unit/core/reed-solomon-encoder.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var RS = require('core/reed-solomon-encoder')
+const test = require('tap').test
+const RS = require('core/reed-solomon-encoder')
 
 test('Reed-Solomon encoder', function (t) {
-  var enc = new RS()
+  let enc = new RS()
 
   t.notOk(enc.genPoly, 'Should have an undefined generator polynomial')
   t.throw(function () { enc.encode([]) }, 'Should throw if generator polynomial is undefined')
@@ -11,11 +11,11 @@ test('Reed-Solomon encoder', function (t) {
   t.equal(enc.degree, 2, 'Should set correct degree value')
   t.ok(enc.genPoly, 'Generator polynomial should be defined')
 
-  var result = enc.encode(new Uint8Array([48, 49, 50, 51, 52]))
+  const result = enc.encode(new Uint8Array([48, 49, 50, 51, 52]))
   t.equal(result.length, 2, 'Should return a number of codewords equal to gen poly degree')
 
   enc = new RS(2)
-  var genPoly = enc.genPoly
+  const genPoly = enc.genPoly
   t.equal(enc.degree, 2, 'Should set correct degree value')
   t.ok(genPoly, 'Generator polynomial should be defined')
 
diff --git a/test/unit/core/regex.test.js b/test/unit/core/regex.test.js
index 9e541c8..f4cd8a1 100644
--- a/test/unit/core/regex.test.js
+++ b/test/unit/core/regex.test.js
@@ -1,5 +1,5 @@
-var test = require('tap').test
-var Regex = require('core/regex')
+const test = require('tap').test
+const Regex = require('core/regex')
 
 test('Regex', function (t) {
   t.ok(Regex.NUMERIC instanceof RegExp,
diff --git a/test/unit/core/segments.test.js b/test/unit/core/segments.test.js
index 2cff280..ecbbb5a 100644
--- a/test/unit/core/segments.test.js
+++ b/test/unit/core/segments.test.js
@@ -1,13 +1,13 @@
-var test = require('tap').test
-var Mode = require('core/mode')
-var Segments = require('core/segments')
-var NumericData = require('core/numeric-data')
-var AlphanumericData = require('core/alphanumeric-data')
-var ByteData = require('core/byte-data')
-var toSJIS = require('helper/to-sjis')
-var Utils = require('core/utils')
+const test = require('tap').test
+const Mode = require('core/mode')
+const Segments = require('core/segments')
+const NumericData = require('core/numeric-data')
+const AlphanumericData = require('core/alphanumeric-data')
+const ByteData = require('core/byte-data')
+const toSJIS = require('helper/to-sjis')
+const Utils = require('core/utils')
 
-var testData = [
+let testData = [
   {
     input: '1A1',
     result: [{ data: '1A1', mode: Mode.ALPHANUMERIC }]
@@ -135,7 +135,7 @@ var testData = [
   }
 ]
 
-var kanjiTestData = [
+const kanjiTestData = [
   {
     input: '乂ЁЖぞβ',
     result: [{ data: '乂ЁЖぞβ', mode: Mode.KANJI }]
@@ -209,7 +209,7 @@ test('Segments optimization', function (t) {
 })
 
 test('Segments raw split', function (t) {
-  var splitted = [
+  const splitted = [
     new ByteData('abc'),
     new AlphanumericData('DEF'),
     new NumericData('123')
diff --git a/test/unit/core/utils.test.js b/test/unit/core/utils.test.js
index 387820a..c6b3170 100755
--- a/test/unit/core/utils.test.js
+++ b/test/unit/core/utils.test.js
@@ -1,11 +1,11 @@
-var test = require('tap').test
-var Utils = require('core/utils')
+const test = require('tap').test
+const Utils = require('core/utils')
 
 /**
  * QR Code sizes. Each element refers to a version
  * @type {Array}
  */
-var EXPECTED_SYMBOL_SIZES = [
+const EXPECTED_SYMBOL_SIZES = [
   21, 25, 29, 33, 37, 41, 45,
   49, 53, 57, 61, 65, 69, 73,
   77, 81, 85, 89, 93, 97, 101,
@@ -18,7 +18,7 @@ test('Symbol size', function (t) {
   t.throws(function () { Utils.getSymbolSize(0) }, 'Should throw if version is not in range')
   t.throws(function () { Utils.getSymbolSize(41) }, 'Should throw if version is not in range')
 
-  for (var i = 1; i <= 40; i++) {
+  for (let i = 1; i <= 40; i++) {
     t.equal(Utils.getSymbolSize(i), EXPECTED_SYMBOL_SIZES[i - 1], 'Should return correct symbol size')
   }
 
@@ -26,7 +26,7 @@ test('Symbol size', function (t) {
 })
 
 test('Symbol codewords', function (t) {
-  for (var i = 1; i <= 40; i++) {
+  for (let i = 1; i <= 40; i++) {
     t.ok(Utils.getSymbolTotalCodewords(i), 'Should return positive number')
   }
 
@@ -34,7 +34,7 @@ test('Symbol codewords', function (t) {
 })
 
 test('BCH Digit', function (t) {
-  var testData = [
+  const testData = [
     { data: 0, bch: 0 },
     { data: 1, bch: 1 },
     { data: 2, bch: 2 },
@@ -57,7 +57,7 @@ test('Set/Get SJIS function', function (t) {
   t.notOk(Utils.isKanjiModeEnabled(),
     'Kanji mode should be disabled if "toSJIS" function is not set')
 
-  var testFunc = function testFunc (c) {
+  const testFunc = function testFunc (c) {
     return 'test_' + c
   }
 
diff --git a/test/unit/core/version.test.js b/test/unit/core/version.test.js
index 4a63ca3..975cb0a 100644
--- a/test/unit/core/version.test.js
+++ b/test/unit/core/version.test.js
@@ -1,16 +1,16 @@
-var test = require('tap').test
-var Version = require('core/version')
-var VersionCheck = require('core/version-check')
-var ECLevel = require('core/error-correction-level')
-var Mode = require('core/mode')
-var NumericData = require('core/numeric-data')
-var AlphanumericData = require('core/alphanumeric-data')
-var KanjiData = require('core/kanji-data')
-var ByteData = require('core/byte-data')
+const test = require('tap').test
+const Version = require('core/version')
+const VersionCheck = require('core/version-check')
+const ECLevel = require('core/error-correction-level')
+const Mode = require('core/mode')
+const NumericData = require('core/numeric-data')
+const AlphanumericData = require('core/alphanumeric-data')
+const KanjiData = require('core/kanji-data')
+const ByteData = require('core/byte-data')
 
-var EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
+const EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
 
-var EXPECTED_NUMERIC_CAPACITY = [
+const EXPECTED_NUMERIC_CAPACITY = [
   [41, 34, 27, 17], [77, 63, 48, 34], [127, 101, 77, 58], [187, 149, 111, 82],
   [255, 202, 144, 106], [322, 255, 178, 139], [370, 293, 207, 154], [461, 365, 259, 202],
   [552, 432, 312, 235], [652, 513, 364, 288], [772, 604, 427, 331], [883, 691, 489, 374],
@@ -23,7 +23,7 @@ var EXPECTED_NUMERIC_CAPACITY = [
   [6153, 4775, 3417, 2625], [6479, 5039, 3599, 2735], [6743, 5313, 3791, 2927], [7089, 5596, 3993, 3057]
 ]
 
-var EXPECTED_ALPHANUMERIC_CAPACITY = [
+const EXPECTED_ALPHANUMERIC_CAPACITY = [
   [25, 20, 16, 10], [47, 38, 29, 20], [77, 61, 47, 35], [114, 90, 67, 50],
   [154, 122, 87, 64], [195, 154, 108, 84], [224, 178, 125, 93], [279, 221, 157, 122],
   [335, 262, 189, 143], [395, 311, 221, 174], [468, 366, 259, 200], [535, 419, 296, 227],
@@ -36,7 +36,7 @@ var EXPECTED_ALPHANUMERIC_CAPACITY = [
   [3729, 2894, 2071, 1591], [3927, 3054, 2181, 1658], [4087, 3220, 2298, 1774], [4296, 3391, 2420, 1852]
 ]
 
-var EXPECTED_KANJI_CAPACITY = [
+const EXPECTED_KANJI_CAPACITY = [
   [10, 8, 7, 4], [20, 16, 12, 8], [32, 26, 20, 15], [48, 38, 28, 21],
   [65, 52, 37, 27], [82, 65, 45, 36], [95, 75, 53, 39], [118, 93, 66, 52],
   [141, 111, 80, 60], [167, 131, 93, 74], [198, 155, 109, 85], [226, 177, 125, 96],
@@ -49,7 +49,7 @@ var EXPECTED_KANJI_CAPACITY = [
   [1577, 1224, 876, 673], [1661, 1292, 923, 701], [1729, 1362, 972, 750], [1817, 1435, 1024, 784]
 ]
 
-var EXPECTED_BYTE_CAPACITY = [
+const EXPECTED_BYTE_CAPACITY = [
   [17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34],
   [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84],
   [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155],
@@ -62,7 +62,7 @@ var EXPECTED_BYTE_CAPACITY = [
   [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]
 ]
 
-var EXPECTED_VERSION_BITS = [
+const EXPECTED_VERSION_BITS = [
   0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, 0x0E60D,
   0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9,
   0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75,
@@ -94,8 +94,8 @@ test('Version capacity', function (t) {
   t.throws(function () { Version.getCapacity(0) }, 'Should throw if version is not in range')
   t.throws(function () { Version.getCapacity(41) }, 'Should throw if version is not in range')
 
-  for (var l = 0; l < EC_LEVELS.length; l++) {
-    for (var i = 1; i <= 40; i++) {
+  for (let l = 0; l < EC_LEVELS.length; l++) {
+    for (let i = 1; i <= 40; i++) {
       t.equal(Version.getCapacity(i, EC_LEVELS[l], Mode.NUMERIC),
         EXPECTED_NUMERIC_CAPACITY[i - 1][l], 'Should return correct numeric mode capacity')
 
@@ -118,10 +118,10 @@ test('Version capacity', function (t) {
 
 test('Version best match', function (t) {
   function testBestVersionForCapacity (expectedCapacity, DataCtor) {
-    for (var v = 0; v < 40; v++) {
-      for (var l = 0; l < EC_LEVELS.length; l++) {
-        var capacity = expectedCapacity[v][l]
-        var data = new DataCtor(new Array(capacity + 1).join('-'))
+    for (let v = 0; v < 40; v++) {
+      for (let l = 0; l < EC_LEVELS.length; l++) {
+        const capacity = expectedCapacity[v][l]
+        const data = new DataCtor(new Array(capacity + 1).join('-'))
 
         t.equal(Version.getBestVersionForData(data, EC_LEVELS[l]), v + 1, 'Should return best version')
         t.equal(Version.getBestVersionForData([data], EC_LEVELS[l]), v + 1, 'Should return best version')
@@ -135,10 +135,10 @@ test('Version best match', function (t) {
       }
     }
 
-    for (var i = 0; i < EC_LEVELS.length; i++) {
-      var exceededCapacity = expectedCapacity[39][i] + 1
-      var tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
-      var tooBigDataArray = [
+    for (let i = 0; i < EC_LEVELS.length; i++) {
+      const exceededCapacity = expectedCapacity[39][i] + 1
+      const tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
+      const tooBigDataArray = [
         new DataCtor(new Array(Math.floor(exceededCapacity / 2)).join('-')),
         new DataCtor(new Array(Math.floor(exceededCapacity / 2) + 1).join('-'))
       ]
@@ -167,7 +167,7 @@ test('Version best match', function (t) {
 })
 
 test('Version encoded info', function (t) {
-  var v
+  let v
 
   for (v = 0; v < 7; v++) {
     t.throws(function () { Version.getEncodedBits(v) },
@@ -175,7 +175,7 @@ test('Version encoded info', function (t) {
   }
 
   for (v = 7; v <= 40; v++) {
-    var bch = Version.getEncodedBits(v)
+    const bch = Version.getEncodedBits(v)
     t.equal(bch, EXPECTED_VERSION_BITS[v - 7], 'Should return correct bits')
   }
 
diff --git a/test/unit/helper/sjis.test.js b/test/unit/helper/sjis.test.js
index 299e41a..c3c3f32 100644
--- a/test/unit/helper/sjis.test.js
+++ b/test/unit/helper/sjis.test.js
@@ -1,5 +1,5 @@
-var test = require('tap').test
-var toSJIS = require('helper/to-sjis')
+const test = require('tap').test
+const toSJIS = require('helper/to-sjis')
 
 test('SJIS from char', function (t) {
   t.notOk(toSJIS(''),
diff --git a/test/unit/renderer/canvas.test.js b/test/unit/renderer/canvas.test.js
index 263d3b6..d24b548 100644
--- a/test/unit/renderer/canvas.test.js
+++ b/test/unit/renderer/canvas.test.js
@@ -1,7 +1,7 @@
-var test = require('tap').test
-var { Canvas, createCanvas } = require('canvas')
-var QRCode = require('core/qrcode')
-var CanvasRenderer = require('renderer/canvas')
+const test = require('tap').test
+const { Canvas, createCanvas } = require('canvas')
+const QRCode = require('core/qrcode')
+const CanvasRenderer = require('renderer/canvas')
 
 test('CanvasRenderer interface', function (t) {
   t.type(CanvasRenderer.render, 'function',
@@ -23,8 +23,8 @@ test('CanvasRenderer render', function (t) {
     }
   }
 
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var canvasEl
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  let canvasEl
 
   t.notThrow(function () { canvasEl = CanvasRenderer.render(sampleQrData) },
     'Should not throw if canvas is not provided')
@@ -55,8 +55,8 @@ test('CanvasRenderer render', function (t) {
 })
 
 test('CanvasRenderer render to provided canvas', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var canvasEl = createCanvas(200, 200)
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  const canvasEl = createCanvas(200, 200)
 
   t.notThrow(function () { CanvasRenderer.render(sampleQrData, canvasEl) },
     'Should not throw with only qrData and canvas param')
@@ -88,8 +88,8 @@ test('CanvasRenderer renderToDataURL', function (t) {
     }
   }
 
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var url
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  let url
 
   t.notThrow(function () { url = CanvasRenderer.renderToDataURL(sampleQrData) },
     'Should not throw if canvas is not provided')
@@ -108,7 +108,7 @@ test('CanvasRenderer renderToDataURL', function (t) {
   t.equal(url.split(',')[0], 'data:image/png;base64',
     'Should have correct header')
 
-  var b64png = url.split(',')[1]
+  const b64png = url.split(',')[1]
   t.equal(b64png.length % 4, 0,
     'Should have a correct length')
 
@@ -117,9 +117,9 @@ test('CanvasRenderer renderToDataURL', function (t) {
 })
 
 test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var canvasEl = createCanvas(200, 200)
-  var url
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  const canvasEl = createCanvas(200, 200)
+  let url
 
   t.notThrow(function () {
     url = CanvasRenderer.renderToDataURL(sampleQrData, canvasEl)
@@ -139,7 +139,7 @@ test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
   t.equal(url.split(',')[0], 'data:image/png;base64',
     'Should have correct header')
 
-  var b64png = url.split(',')[1]
+  const b64png = url.split(',')[1]
   t.equal(b64png.length % 4, 0,
     'Should have a correct length')
 
diff --git a/test/unit/renderer/png.test.js b/test/unit/renderer/png.test.js
index f342b09..6117923 100644
--- a/test/unit/renderer/png.test.js
+++ b/test/unit/renderer/png.test.js
@@ -1,10 +1,10 @@
-var test = require('tap').test
-var sinon = require('sinon')
-var fs = require('fs')
-var QRCode = require('core/qrcode')
-var PngRenderer = require('renderer/png')
-var PNG = require('pngjs').PNG
-var StreamMock = require('../../mocks/writable-stream')
+const test = require('tap').test
+const sinon = require('sinon')
+const fs = require('fs')
+const QRCode = require('core/qrcode')
+const PngRenderer = require('renderer/png')
+const PNG = require('pngjs').PNG
+const StreamMock = require('../../mocks/writable-stream')
 
 test('PNG renderer interface', function (t) {
   t.type(PngRenderer.render, 'function',
@@ -23,8 +23,8 @@ test('PNG renderer interface', function (t) {
 })
 
 test('PNG render', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var png
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  let png
 
   t.notThrow(function () { png = PngRenderer.render(sampleQrData) },
     'Should not throw with only qrData param')
@@ -57,7 +57,7 @@ test('PNG render', function (t) {
 })
 
 test('PNG renderToDataURL', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
 
   t.plan(6)
 
@@ -79,7 +79,7 @@ test('PNG renderToDataURL', function (t) {
       t.equal(url.split(',')[0], 'data:image/png;base64',
         'Should have correct header')
 
-      var b64png = url.split(',')[1]
+      const b64png = url.split(',')[1]
       t.equal(b64png.length % 4, 0,
         'Should have a correct length')
     }
@@ -87,9 +87,9 @@ test('PNG renderToDataURL', function (t) {
 })
 
 test('PNG renderToFile', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var fileName = 'qrimage.png'
-  var fsStub = sinon.stub(fs, 'createWriteStream')
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  const fileName = 'qrimage.png'
+  let fsStub = sinon.stub(fs, 'createWriteStream')
   fsStub.returns(new StreamMock())
 
   t.plan(6)
@@ -126,7 +126,7 @@ test('PNG renderToFile', function (t) {
 })
 
 test('PNG renderToFileStream', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
 
   t.notThrow(function () {
     PngRenderer.renderToFileStream(new StreamMock(), sampleQrData)
diff --git a/test/unit/renderer/svg.test.js b/test/unit/renderer/svg.test.js
index 4b70542..cf2e07e 100644
--- a/test/unit/renderer/svg.test.js
+++ b/test/unit/renderer/svg.test.js
@@ -1,20 +1,20 @@
-var test = require('tap').test
-var sinon = require('sinon')
-var fs = require('fs')
-var htmlparser = require('htmlparser2')
-var QRCode = require('core/qrcode')
-var SvgRenderer = require('renderer/svg')
+const test = require('tap').test
+const sinon = require('sinon')
+const fs = require('fs')
+const htmlparser = require('htmlparser2')
+const QRCode = require('core/qrcode')
+const SvgRenderer = require('renderer/svg')
 
 function getExpectedViewbox (size, margin) {
-  var expectedQrCodeSize = size + margin * 2
+  const expectedQrCodeSize = size + margin * 2
   return '0 0 ' + expectedQrCodeSize + ' ' + expectedQrCodeSize
 }
 
 function testSvgFragment (t, svgFragment, expectedTags) {
   return new Promise(function (resolve, reject) {
-    var parser = new htmlparser.Parser({
+    const parser = new htmlparser.Parser({
       onopentag: function (name, attribs) {
-        var tag = expectedTags.shift()
+        const tag = expectedTags.shift()
 
         t.equal(tag.name, name,
           'Should have a ' + tag.name + ' tag')
@@ -40,7 +40,7 @@ function testSvgFragment (t, svgFragment, expectedTags) {
 }
 
 function buildTest (t, data, opts, expectedTags) {
-  var svg = SvgRenderer.render(data, opts)
+  const svg = SvgRenderer.render(data, opts)
   return testSvgFragment(t, svg, expectedTags.slice())
 }
 
@@ -55,10 +55,10 @@ test('svgrender interface', function (t) {
 })
 
 test('Svg render', function (t) {
-  var tests = []
+  const tests = []
 
-  var data = QRCode.create('sample text', { version: 2 })
-  var size = data.modules.size
+  const data = QRCode.create('sample text', { version: 2 })
+  const size = data.modules.size
 
   tests.push(buildTest(t, data, {
     scale: 4,
@@ -141,9 +141,9 @@ test('Svg render', function (t) {
 })
 
 test('Svg renderToFile', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var fileName = 'qrimage.svg'
-  var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  const fileName = 'qrimage.svg'
+  let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
 
   t.plan(5)
 
diff --git a/test/unit/renderer/terminal.test.js b/test/unit/renderer/terminal.test.js
index 25891ac..b0ada4d 100644
--- a/test/unit/renderer/terminal.test.js
+++ b/test/unit/renderer/terminal.test.js
@@ -1,6 +1,6 @@
-var test = require('tap').test
-var QRCode = require('core/qrcode')
-var TerminalRenderer = require('renderer/terminal')
+const test = require('tap').test
+const QRCode = require('core/qrcode')
+const TerminalRenderer = require('renderer/terminal')
 
 test('TerminalRenderer interface', function (t) {
   t.type(TerminalRenderer.render, 'function',
@@ -10,8 +10,8 @@ test('TerminalRenderer interface', function (t) {
 })
 
 test('TerminalRenderer render', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var str
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  let str
 
   t.notThrow(function () { str = TerminalRenderer.render(sampleQrData) },
     'Should not throw with only qrData param')
diff --git a/test/unit/renderer/utf8.test.js b/test/unit/renderer/utf8.test.js
index f80950e..e4ef6e6 100644
--- a/test/unit/renderer/utf8.test.js
+++ b/test/unit/renderer/utf8.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var sinon = require('sinon')
-var fs = require('fs')
-var QRCode = require('core/qrcode')
-var Utf8Renderer = require('renderer/utf8')
+const test = require('tap').test
+const sinon = require('sinon')
+const fs = require('fs')
+const QRCode = require('core/qrcode')
+const Utf8Renderer = require('renderer/utf8')
 
 test('Utf8Renderer interface', function (t) {
   t.type(Utf8Renderer.render, 'function',
@@ -12,8 +12,8 @@ test('Utf8Renderer interface', function (t) {
 })
 
 test('Utf8Renderer render', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var str
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  let str
 
   t.notThrow(function () { str = Utf8Renderer.render(sampleQrData) },
     'Should not throw with only qrData param')
@@ -32,9 +32,9 @@ test('Utf8Renderer render', function (t) {
 })
 
 test('Utf8 renderToFile', function (t) {
-  var sampleQrData = QRCode.create('sample text', { version: 2 })
-  var fileName = 'qrimage.txt'
-  var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
+  const sampleQrData = QRCode.create('sample text', { version: 2 })
+  const fileName = 'qrimage.txt'
+  let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
 
   t.plan(5)
 
diff --git a/test/unit/renderer/utils.test.js b/test/unit/renderer/utils.test.js
index 4649041..d5eae61 100644
--- a/test/unit/renderer/utils.test.js
+++ b/test/unit/renderer/utils.test.js
@@ -1,8 +1,8 @@
-var test = require('tap').test
-var Utils = require('renderer/utils')
+const test = require('tap').test
+const Utils = require('renderer/utils')
 
 test('Utils getOptions', function (t) {
-  var defaultOptions = {
+  const defaultOptions = {
     width: undefined,
     scale: 4,
     margin: 4,
@@ -59,7 +59,7 @@ test('Utils getOptions', function (t) {
 })
 
 test('Utils getScale', function (t) {
-  var symbolSize = 21
+  const symbolSize = 21
 
   t.equal(Utils.getScale(symbolSize, { scale: 5 }), 5,
     'Should return correct scale value')
@@ -74,7 +74,7 @@ test('Utils getScale', function (t) {
 })
 
 test('Utils getImageWidth', function (t) {
-  var symbolSize = 21
+  const symbolSize = 21
 
   t.equal(Utils.getImageWidth(symbolSize, { scale: 5, margin: 0 }), 105,
     'Should return correct width value')
@@ -92,7 +92,7 @@ test('Utils qrToImageData', function (t) {
   t.ok(Utils.qrToImageData,
     'qrToImageData should be defined')
 
-  var sampleQrData = {
+  const sampleQrData = {
     modules: {
       data: [
         1, 0, 1, 0,
@@ -104,24 +104,24 @@ test('Utils qrToImageData', function (t) {
     }
   }
 
-  var margin = 4
-  var scale = 2
-  var width = 100
+  const margin = 4
+  const scale = 2
+  const width = 100
 
-  var color = {
+  const color = {
     dark: { r: 255, g: 255, b: 255, a: 255 },
     light: { r: 0, g: 0, b: 0, a: 255 }
   }
 
-  var opts = {
+  const opts = {
     margin: margin,
     scale: scale,
     color: color
   }
 
-  var imageData = []
-  var expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
-  var expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
+  let imageData = []
+  const expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
+  let expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
 
   Utils.qrToImageData(imageData, sampleQrData, opts)