diff --git a/.travis.yml b/.travis.yml
index 578bc95..331a241 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,15 @@
 sudo: false
+
 language: node_js
+
 node_js:
-  - "0.10"
-  - "0.12"
   - "4"
-  - "5"
-  - "iojs"
-before_install:
-  - npm install -g npm
-before_script:
-  - npm install -g grunt-cli
+  - "6"
+  - "8"
+
 matrix:
   fast_finish: true
+
+cache:
+  directories:
+    - node_modules
diff --git a/CHANGELOG b/CHANGELOG
index 5961d01..0e413d0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -30,9 +30,9 @@ v0.6.0:
 v0.5.0:
   date: 2013-12-23
   changes:
-    - If an encoding is specified, overwrite grunt.file.defaultEncoding.
-    - Rename processContent/processContentExclude to process/noProcess to match Grunt API.
-    - mode option to copy existing or set file permissions.
+    - If an encoding is specified, overwrite `grunt.file.defaultEncoding`.
+    - Rename `processContent`/`processContentExclude` to `process`/`noProcess` to match Grunt API.
+    - '`mode` option to copy existing or set file permissions.'
 v0.4.1:
   date: 2013-03-26
   changes:
@@ -51,12 +51,12 @@ v0.4.0rc5:
   changes:
     - Updating to work with grunt v0.4.0rc5.
     - Conversion to grunt v0.4 conventions.
-    - Replace basePath with cwd.
+    - Replace `basePath` with `cwd`.
     - Empty directory support.
 v0.3.2:
   date: 2012-10-18
   changes:
-    - Pass copyOptions on single file copy.
+    - Pass `copyOptions` on single file copy.
 v0.3.1:
   date: 2012-10-12
   changes:
@@ -73,7 +73,7 @@ v0.2.4:
 v0.2.3:
   date: 2012-09-17
   changes:
-    - Path.sep fallback for node <= 0.7.9.
+    - '`path.sep` fallback for Node.js <= 0.7.9.'
 v0.2.2:
   date: 2012-09-17
   changes:
diff --git a/Gruntfile.js b/Gruntfile.js
index b2bba77..8d387af 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -31,7 +31,7 @@ module.exports = function(grunt) {
       test: ['tmp']
     },
 
-    test_vars: {
+    testVars: {
       name: 'grunt-contrib-copy',
       version: '0.1.0',
       match: 'folder_one/*'
@@ -41,33 +41,33 @@ module.exports = function(grunt) {
     copy: {
       main: {
         files: [
-          {expand: true, cwd: 'test/fixtures', src: ['*.js'], dest: 'tmp/copy_test_files/'},
-          {expand: true, cwd: 'test/fixtures', src: ['**', '!*.wav'], dest: 'tmp/copy_test_mix/'},
-          {expand: true, cwd: 'test/fixtures', src: ['<%= test_vars.match %>'], dest: 'tmp/copy_test_v<%= test_vars.version %>/'}
+          { expand: true, cwd: 'test/fixtures', src: ['*.js'], dest: 'tmp/copy_test_files/' },
+          { expand: true, cwd: 'test/fixtures', src: ['**', '!*.wav'], dest: 'tmp/copy_test_mix/' },
+          { expand: true, cwd: 'test/fixtures', src: ['<%= testVars.match %>'], dest: 'tmp/copy_test_v<%= testVars.version %>/' }
         ]
       },
 
       noexpandWild: {
         files: [
-          {src: 'test/fixtures/*.js', dest: 'tmp/copy_test_noexpandWild/'}
+          { src: 'test/fixtures/*.js', dest: 'tmp/copy_test_noexpandWild/' }
         ]
       },
 
       flatten: {
         files: [
-          {expand: true, flatten: true, filter: 'isFile', src: ['test/fixtures/**', '!**/*.wav'], dest: 'tmp/copy_test_flatten/'}
+          { expand: true, flatten: true, filter: 'isFile', src: ['test/fixtures/**', '!**/*.wav'], dest: 'tmp/copy_test_flatten/' }
         ]
       },
 
       single: {
         files: [
-          {src: ['test/fixtures/test.js'], dest: 'tmp/single.js'}
+          { src: ['test/fixtures/test.js'], dest: 'tmp/single.js' }
         ]
       },
 
       verbose: {
         files: [
-          {expand: true, src: ['test/fixtures/**'], dest: 'tmp/copy_test_verbose/'}
+          { expand: true, src: ['test/fixtures/**'], dest: 'tmp/copy_test_verbose/' }
         ]
       },
 
@@ -83,13 +83,12 @@ module.exports = function(grunt) {
         options: {
           mode: '0777'
         },
-        files: [
-          {
-            expand: true,
-            cwd: 'test/fixtures/',
-            src: ['time_folder/**'],
-            dest: 'tmp/copy_test_modeDir/'}
-        ]
+        files: [{
+          expand: true,
+          cwd: 'test/fixtures/',
+          src: ['time_folder/**'],
+          dest: 'tmp/copy_test_modeDir/'
+        }]
       },
 
       process: {
@@ -104,18 +103,18 @@ module.exports = function(grunt) {
 
       timestamp: {
         options: {
-            process: function (content, srcpath) {
-                if (srcpath === 'test/fixtures/time_folder/test_process.js') {
-                    return 'with process and file contents were changed';
-                } else {
-                    return content;
-                }
-            },
-            timestamp: true
+          process: function (content, srcpath) {
+            if (srcpath === 'test/fixtures/time_folder/test_process.js') {
+              return 'with process and file contents were changed';
+            } else {
+              return content;
+            }
+          },
+          timestamp: true
         },
         files: [
-            {expand: true, cwd: 'test/fixtures/time_folder/', src: ['**'], dest: 'tmp/copy_test_timestamp/'},
-            {src: 'test/fixtures/time_folder/test.js', dest:'tmp/copy_test_timestamp/test1.js'}
+            { expand: true, cwd: 'test/fixtures/time_folder/', src: ['**'], dest: 'tmp/copy_test_timestamp/' },
+            { src: 'test/fixtures/time_folder/test.js', dest: 'tmp/copy_test_timestamp/test1.js' }
         ]
       }
     },
diff --git a/README.md b/README.md
index ac7972f..d0b0efc 100644
--- a/README.md
+++ b/README.md
@@ -211,7 +211,7 @@ copy: {
     dest: 'src/a.bak',
     options: {
       process: function (content, srcpath) {
-        return content.replace(/[sad ]/g,"_");
+        return content.replace(/[sad ]/g, '_');
       },
     },
   },
@@ -259,16 +259,16 @@ Aborted due to warnings.
  * 2015-02-20   v0.8.0   Performance improvements. The `mode` option now also applies to directories. Fix path issue on Windows.
  * 2014-10-15   v0.7.0   Add timestamp option to disable preserving timestamp when copying.
  * 2014-09-17   v0.6.0   Update chalk dependency and other devDependencies. Preserve file timestamp when copying.
- * 2013-12-23   v0.5.0   If an encoding is specified, overwrite grunt.file.defaultEncoding. Rename processContent/processContentExclude to process/noProcess to match Grunt API. mode option to copy existing or set file permissions.
+ * 2013-12-23   v0.5.0   If an encoding is specified, overwrite `grunt.file.defaultEncoding`. Rename `processContent`/`processContentExclude` to `process`/`noProcess` to match Grunt API. `mode` option to copy existing or set file permissions.
  * 2013-03-26   v0.4.1   Output summary by default ("Copied N files, created M folders"). Individual transaction output available via `--verbose`.
  * 2013-02-15   v0.4.0   First official release for Grunt 0.4.0.
  * 2013-01-23   v0.4.0rc7   Updating grunt/gruntplugin dependencies to rc7. Changing in-development grunt/gruntplugin dependency versions from tilde version ranges to specific versions.
- * 2013-01-14   v0.4.0rc5   Updating to work with grunt v0.4.0rc5. Conversion to grunt v0.4 conventions. Replace basePath with cwd. Empty directory support.
- * 2012-10-18   v0.3.2   Pass copyOptions on single file copy.
+ * 2013-01-14   v0.4.0rc5   Updating to work with grunt v0.4.0rc5. Conversion to grunt v0.4 conventions. Replace `basePath` with `cwd`. Empty directory support.
+ * 2012-10-18   v0.3.2   Pass `copyOptions` on single file copy.
  * 2012-10-12   v0.3.1   Rename grunt-contrib-lib dep to grunt-lib-contrib.
  * 2012-09-24   v0.3.0   General cleanup and consolidation. Global options depreciated.
  * 2012-09-18   v0.2.4   No valid source check.
- * 2012-09-17   v0.2.3   Path.sep fallback for node <= 0.7.9.
+ * 2012-09-17   v0.2.3   `path.sep` fallback for Node.js <= 0.7.9.
  * 2012-09-17   v0.2.2   Single file copy support. Test refactoring.
  * 2012-09-07   v0.2.0   Refactored from grunt-contrib into individual repo.
 
@@ -276,4 +276,4 @@ Aborted due to warnings.
 
 Task submitted by [Chris Talkington](http://christalkington.com/)
 
-*This file was generated on Fri Mar 04 2016 15:50:24.*
+*This file was generated on Thu Apr 07 2016 15:11:09.*
diff --git a/appveyor.yml b/appveyor.yml
index 92ffcda..0930a92 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,32 +1,35 @@
-# Fix line endings on Windows
-init:
-  - git config --global core.autocrlf true
+clone_depth: 10
+
+version: "{build}"
+
 # What combinations to test
 environment:
   matrix:
-    - nodejs_version: "0.10"
-    - nodejs_version: "0.12"
     - nodejs_version: "4"
-    - nodejs_version: "5"
-platform:
-  - x86
-  - x64
+      platform: x64
+    - nodejs_version: "4"
+      platform: x86
+    - nodejs_version: "6"
+      platform: x86
+    - nodejs_version: "8"
+      platform: x86
+
 install:
-  - ps: Install-Product node $env:nodejs_version
-  - npm install -g npm
-  - npm install -g grunt-cli
+  - ps: Install-Product node $env:nodejs_version $env:platform
   - npm install
+
 test_script:
-  # Output useful info for debugging.
+  # Output useful info for debugging
   - node --version && npm --version
   # We test multiple Windows shells because of prior stdout buffering issues
   # filed against Grunt. https://github.com/joyent/node/issues/3584
   - ps: "npm test # PowerShell" # Pass comment to PS for easier debugging
   - cmd: npm test
+
 build: off
+
 matrix:
   fast_finish: true
+
 cache:
-  - C:\Users\appveyor\AppData\Roaming\npm\node_modules -> package.json  # global npm modules
-  - C:\Users\appveyor\AppData\Roaming\npm-cache -> package.json         # npm cache
-  - node_modules -> package.json                                        # local npm modules
+  - node_modules -> package.json
diff --git a/debian/changelog b/debian/changelog
index ff5ca05..208b931 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,12 @@
-node-grunt-contrib-copy (1.0.0-3) UNRELEASED; urgency=medium
+node-grunt-contrib-copy (1.0.0+git20171116.c807887-1) UNRELEASED; urgency=medium
 
+  [ Paolo Greppi ]
   * Update Vcs fields for migration to https://salsa.debian.org/
 
- -- Paolo Greppi <paolo.greppi@libpf.com>  Thu, 05 Apr 2018 15:42:08 +0200
+  [ Debian Janitor ]
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 23 Jun 2019 10:53:27 +0000
 
 node-grunt-contrib-copy (1.0.0-2) unstable; urgency=medium
 
diff --git a/docs/copy-examples.md b/docs/copy-examples.md
index 1961cf0..2036a33 100644
--- a/docs/copy-examples.md
+++ b/docs/copy-examples.md
@@ -147,7 +147,7 @@ copy: {
     dest: 'src/a.bak',
     options: {
       process: function (content, srcpath) {
-        return content.replace(/[sad ]/g,"_");
+        return content.replace(/[sad ]/g, '_');
       },
     },
   },
@@ -163,7 +163,7 @@ NOTE: If `process` is not working, be aware it was called `processContent` in v0
 
 ### Troubleshooting
 
-By default, if a file or directory is not found it is quietly ignored. If the file should exist, and non-existence generate an error, then add `nonull:true`. For instance, this Gruntfile.js entry:
+By default, if a file or directory is not found it is quietly ignored. If the file should exist, and non-existence generates an error, then add `nonull:true`. For instance, this Gruntfile.js entry:
 
 ```js
 copy: {
diff --git a/package.json b/package.json
index c6d58d5..711c5c8 100644
--- a/package.json
+++ b/package.json
@@ -20,12 +20,11 @@
     "file-sync-cmp": "^0.1.0"
   },
   "devDependencies": {
-    "grunt": "^0.4.5",
-    "grunt-cli": "^0.1.13",
+    "grunt": "^1.0.0",
     "grunt-contrib-clean": "^1.0.0",
-    "grunt-contrib-internal": "^0.4.5",
+    "grunt-contrib-internal": "^1.1.0",
     "grunt-contrib-jshint": "^1.0.0",
-    "grunt-contrib-nodeunit": "^0.4.1"
+    "grunt-contrib-nodeunit": "^1.0.0"
   },
   "keywords": [
     "gruntplugin"
diff --git a/tasks/copy.js b/tasks/copy.js
index bdb476c..8561654 100644
--- a/tasks/copy.js
+++ b/tasks/copy.js
@@ -97,7 +97,9 @@ module.exports = function(grunt) {
         } else {
           grunt.verbose.writeln('Copying ' + chalk.cyan(src) + ' -> ' + chalk.cyan(dest));
           grunt.file.copy(src, dest, copyOptions);
-          syncTimestamp(src, dest);
+          if (options.timestamp !== false) {
+            syncTimestamp(src, dest);
+          }
           if (options.mode !== false) {
             fs.chmodSync(dest, (options.mode === true) ? fs.lstatSync(src).mode : options.mode);
           }
diff --git a/test/copy_test.js b/test/copy_test.js
index 98751cc..1dc7cf1 100644
--- a/test/copy_test.js
+++ b/test/copy_test.js
@@ -81,12 +81,12 @@ exports.copy = {
     test.done();
   },
 
-  timestamp_equal: function(test) {
+  timestampEqual: function(test) {
     if (isWindows) {
-        // Known Issue: this test will not pass on Windows due to a bug in node.js
-        // https://github.com/nodejs/node/issues/2069
-        test.done();
-        return;
+      // Known Issue: this test will not pass on Windows due to a bug in node.js
+      // https://github.com/nodejs/node/issues/2069
+      test.done();
+      return;
     }
     test.expect(2);
     test.equal(fs.lstatSync('tmp/copy_test_timestamp/sub_folder').mtime.getTime(), fs.lstatSync('test/fixtures/time_folder/sub_folder').mtime.getTime());
@@ -94,7 +94,7 @@ exports.copy = {
     test.done();
   },
 
-  timestamp_changed: function(test) {
+  timestampChanged: function(test) {
     test.expect(2);
     test.notEqual(fs.lstatSync('tmp/copy_test_timestamp/test1.js').mtime.getTime(), fs.lstatSync('test/fixtures/time_folder/test.js').mtime.getTime());
     test.notEqual(fs.lstatSync('tmp/copy_test_timestamp/test_process.js').mtime.getTime(), fs.lstatSync('test/fixtures/time_folder/test_process.js').mtime.getTime());