[Pkg-javascript-commits] [node-nan] 01/01: New upstream version 2.5.1

Jérémy Lal kapouer at moszumanska.debian.org
Sat Feb 4 00:06:41 UTC 2017


This is an automated email from the git hooks/post-receive script.

kapouer pushed a commit to branch upstream
in repository node-nan.

commit 1d911d888d767e87df1a324474d9dc0d8c694d51
Author: Jérémy Lal <kapouer at melix.org>
Date:   Sat Feb 4 01:02:16 2017 +0100

    New upstream version 2.5.1
---
 .travis.yml                               |   1 +
 CHANGELOG.md                              |  13 ++-
 LICENSE.md                                |   2 +-
 Makefile                                  |   6 +-
 README.md                                 |  22 ++--
 appveyor.yml                              |   1 +
 doc/asyncworker.md                        |   4 +-
 doc/maybe_types.md                        |  48 ++++++++
 doc/object_wrappers.md                    |   4 +-
 doc/scopes.md                             |   2 +-
 doc/v8_internals.md                       |   2 +-
 examples/async_pi_estimate/addon.cc       |   2 +-
 examples/async_pi_estimate/addon.js       |   2 +-
 examples/async_pi_estimate/async.cc       |   2 +-
 examples/async_pi_estimate/async.h        |   2 +-
 examples/async_pi_estimate/pi_est.cc      |   2 +-
 examples/async_pi_estimate/pi_est.h       |   2 +-
 examples/async_pi_estimate/sync.cc        |   2 +-
 examples/async_pi_estimate/sync.h         |   2 +-
 nan.h                                     | 179 +++++++++++++++++------------
 nan_callbacks.h                           |   2 +-
 nan_callbacks_12_inl.h                    |   2 +-
 nan_callbacks_pre_12_inl.h                |  16 ++-
 nan_converters.h                          |   2 +-
 nan_converters_43_inl.h                   |  12 +-
 nan_converters_pre_43_inl.h               |   6 +-
 nan_implementation_12_inl.h               |  82 ++++++--------
 nan_implementation_pre_12_inl.h           |  33 +++---
 nan_maybe_43_inl.h                        | 180 ++++++++++++++++++++++--------
 nan_maybe_pre_43_inl.h                    |   8 +-
 nan_new.h                                 |   2 +-
 nan_object_wrap.h                         |   2 +-
 nan_persistent_12_inl.h                   |  11 +-
 nan_persistent_pre_12_inl.h               |   8 +-
 nan_private.h                             |  73 ++++++++++++
 nan_typedarray_contents.h                 |   7 +-
 nan_weak.h                                |   2 +-
 package.json                              |   4 +-
 test/binding.gyp                          |   4 +
 test/cpp/accessors.cpp                    |   2 +-
 test/cpp/accessors2.cpp                   |   2 +-
 test/cpp/asyncprogressworker.cpp          |   2 +-
 test/cpp/asyncprogressworkersignal.cpp    |   2 +-
 test/cpp/asyncprogressworkerstream.cpp    |   2 +-
 test/cpp/asyncworker.cpp                  |   2 +-
 test/cpp/asyncworkererror.cpp             |   2 +-
 test/cpp/buffer.cpp                       |   2 +-
 test/cpp/bufferworkerpersistent.cpp       |   2 +-
 test/cpp/converters.cpp                   |   2 +-
 test/cpp/error.cpp                        |   2 +-
 test/cpp/gc.cpp                           |   2 +-
 test/cpp/indexedinterceptors.cpp          |   2 +-
 test/cpp/isolatedata.cpp                  |   2 +-
 test/cpp/makecallback.cpp                 |   2 +-
 test/cpp/morenews.cpp                     |   2 +-
 test/cpp/multifile1.cpp                   |   2 +-
 test/cpp/multifile2.cpp                   |   2 +-
 test/cpp/multifile2.h                     |   2 +-
 test/cpp/namedinterceptors.cpp            |   2 +-
 test/cpp/nancallback.cpp                  |   2 +-
 test/cpp/nannew.cpp                       |   2 +-
 test/cpp/news.cpp                         |   2 +-
 test/cpp/objectwraphandle.cpp             |   2 +-
 test/cpp/persistent.cpp                   |   2 +-
 test/cpp/private.cpp                      |  85 ++++++++++++++
 test/cpp/returnemptystring.cpp            |   2 +-
 test/cpp/returnnull.cpp                   |   2 +-
 test/cpp/returnundefined.cpp              |   2 +-
 test/cpp/returnvalue.cpp                  |   2 +-
 test/cpp/setcallhandler.cpp               |   2 +-
 test/cpp/settemplate.cpp                  |   2 +-
 test/cpp/strings.cpp                      |   2 +-
 test/cpp/symbols.cpp                      |   2 +-
 test/cpp/threadlocal.cpp                  |   2 +-
 test/cpp/trycatch.cpp                     |   2 +-
 test/cpp/typedarrays.cpp                  |   2 +-
 test/cpp/weak.cpp                         |   2 +-
 test/cpp/weak2.cpp                        |   2 +-
 test/cpp/wrappedobjectfactory.cpp         |   2 +-
 test/js/accessors-test.js                 |   2 +-
 test/js/accessors2-test.js                |   2 +-
 test/js/asyncprogressworker-test.js       |   2 +-
 test/js/asyncprogressworkersignal-test.js |   2 +-
 test/js/asyncprogressworkerstream-test.js |   2 +-
 test/js/asyncworker-test.js               |   2 +-
 test/js/asyncworkererror-test.js          |   2 +-
 test/js/buffer-test.js                    |   2 +-
 test/js/bufferworkerpersistent-test.js    |   2 +-
 test/js/converters-test.js                |   2 +-
 test/js/error-test.js                     |   2 +-
 test/js/gc-test.js                        |   2 +-
 test/js/indexedinterceptors-test.js       |   2 +-
 test/js/isolatedata-test.js               |   2 +-
 test/js/makecallback-test.js              |   2 +-
 test/js/morenews-test.js                  |   2 +-
 test/js/multifile-test.js                 |   2 +-
 test/js/namedinterceptors-test.js         |   2 +-
 test/js/nancallback-test.js               |   2 +-
 test/js/nannew-test.js                    |   2 +-
 test/js/news-test.js                      |   2 +-
 test/js/objectwraphandle-test.js          |   2 +-
 test/js/persistent-test.js                |   2 +-
 test/js/{gc-test.js => private-test.js}   |  23 ++--
 test/js/returnemptystring-test.js         |   2 +-
 test/js/returnnull-test.js                |   2 +-
 test/js/returnundefined-test.js           |   2 +-
 test/js/returnvalue-test.js               |   2 +-
 test/js/setcallhandler-test.js            |   2 +-
 test/js/settemplate-test.js               |   2 +-
 test/js/strings-test.js                   |   2 +-
 test/js/symbols-test.js                   |   2 +-
 test/js/threadlocal-test.js               |   2 +-
 test/js/trycatch-test.js                  |   2 +-
 test/js/typedarrays-test.js               |   2 +-
 test/js/weak-test.js                      |   2 +-
 test/js/weak2-test.js                     |   2 +-
 test/js/wrappedobjectfactory-test.js      |   2 +-
 tools/1to2.js                             |   2 +-
 118 files changed, 699 insertions(+), 319 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 640e7ff..1f43dc2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,6 +17,7 @@ env:
   - TRAVIS_NODE_VERSION="4"
   - TRAVIS_NODE_VERSION="5"
   - TRAVIS_NODE_VERSION="6"
+  - TRAVIS_NODE_VERSION="7"
 notifications:
   email:
     - rod at vagg.org
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2519fbc..0a5487b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,17 @@
 # NAN ChangeLog
 
-**Version 2.4.0: current Node 6.3.0, Node 12: 0.12.15, Node 10: 0.10.46, iojs: 3.3.1**
+**Version 2.5.1: current Node 7.4.0, Node 12: 0.12.18, Node 10: 0.10.48, iojs: 3.3.1**
+
+### 2.5.1 Jan 23 2017
+
+  - Bugfix: Fix disappearing handle for private value 6a80995694f162ef63dbc9948fbefd45d4485aa0
+  - Bugfix: Add missing scopes a93b8bae6bc7d32a170db6e89228b7f60ee57112
+  - Bugfix: Use string::data instead of string::front in NewOneByteString d5f920371e67e1f3b268295daee6e83af86b6e50
+
+### 2.5.0 Dec 21 2016
+
+  - Feature: Support Private accessors a86255cb357e8ad8ccbf1f6a4a901c921e39a178
+  - Bugfix: Abort in delete operators that shouldn't be called 0fe38215ff8581703967dfd26c12793feb960018
 
 ### 2.4.0 Jul 10 2016
 
diff --git a/LICENSE.md b/LICENSE.md
index e4fc412..d4d2da7 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,7 +1,7 @@
 The MIT License (MIT)
 =====================
 
-Copyright (c) 2016 NAN contributors
+Copyright (c) 2017 NAN contributors
 -----------------------------------
 
 *NAN contributors listed at <https://github.com/nodejs/nan#contributors>*
diff --git a/Makefile b/Makefile
index 89359ad..d4c2685 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,7 @@ LINT_SOURCES = \
 	nan_object_wrap.h \
 	nan_persistent_12_inl.h \
 	nan_persistent_pre_12_inl.h \
+	nan_private.h \
 	nan_string_bytes.h \
 	nan_weak.h \
 	test/cpp/accessors.cpp \
@@ -59,6 +60,7 @@ LINT_SOURCES = \
 	test/cpp/news.cpp \
 	test/cpp/objectwraphandle.cpp \
 	test/cpp/persistent.cpp \
+	test/cpp/private.cpp \
 	test/cpp/returnemptystring.cpp \
 	test/cpp/returnnull.cpp \
 	test/cpp/returnundefined.cpp \
@@ -99,6 +101,6 @@ $(ADDONS): nan.h nan_new.h nan_implementation_pre_12_inl.h nan_implementation_12
 		nan_callbacks.h nan_callbacks_12_inl.h nan_callbacks_pre_12_inl.h \
 		nan_converters.h nan_converters_43_inl.h nan_converters_pre_43_inl.h \
 		nan_maybe_43_inl.h nan_maybe_pre_43_inl.h \
-		nan_persistent_12_inl.h nan_persistent_pre_12_inl.h nan_weak.h \
-		nan_string_bytes.h test/binding.gyp $(SOURCES)
+		nan_persistent_12_inl.h nan_persistent_pre_12_inl.h nan_private.h \
+		nan_weak.h nan_string_bytes.h test/binding.gyp $(SOURCES)
 	cd test/ && ../node_modules/.bin/node-gyp rebuild
diff --git a/README.md b/README.md
index 7f163b6..2946c97 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
 Native Abstractions for Node.js
 ===============================
 
-**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 4, 5 and 6.**
+**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 4, 5, 6 and 7.**
 
-***Current version: 2.4.0***
+***Current version: 2.5.1***
 
 *(See [CHANGELOG.md](https://github.com/nodejs/nan/blob/master/CHANGELOG.md) for complete ChangeLog)*
 
@@ -56,15 +56,15 @@ For a simpler example, see the **[async pi estimation example](https://github.co
 
 Yet another example is **[nan-example-eol](https://github.com/CodeCharmLtd/nan-example-eol)**. It shows newline detection implemented as a native addon.
 
-Also take a look at our comprehensive **[C++ test suite](https://github.com/nodejs/nan/tree/master/test/cpp)** which has a plehora of code snippets for your pasting pleasure.
+Also take a look at our comprehensive **[C++ test suite](https://github.com/nodejs/nan/tree/master/test/cpp)** which has a plethora of code snippets for your pasting pleasure.
 
 <a name="api"></a>
 ## API
 
 Additional to the NAN documentation below, please consult:
 
-* [The V8 Getting Started Guide](https://developers.google.com/v8/get_started)
-* [The V8 Embedders Guide](https://developers.google.com/v8/embed)
+* [The V8 Getting Started * Guide](https://github.com/v8/v8/wiki/Getting%20Started%20with%20Embedding)
+* [The V8 Embedders * Guide](https://github.com/v8/v8/wiki/Embedder%27s%20Guide)
 * [V8 API Documentation](http://v8docs.nodesource.com/)
 * [Node Add-on Documentation](https://nodejs.org/api/addons.html)
 
@@ -117,7 +117,7 @@ The creation of `HandleScope` objects is different across the supported versions
  - <a href="doc/scopes.md#api_nan_handle_scope"><b><code>Nan::HandleScope</code></b></a>
  - <a href="doc/scopes.md#api_nan_escapable_handle_scope"><b><code>Nan::EscapableHandleScope</code></b></a>
 
-Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles).
+Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://github.com/v8/v8/wiki/Embedder%27s%20Guide#handles-and-garbage-collection).
 
 ### Persistent references
 
@@ -192,6 +192,10 @@ The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Lo
   - <a href="doc/maybe_types.md#api_nan_get_start_column"><b><code>Nan::GetStartColumn()</code></b></a>
   - <a href="doc/maybe_types.md#api_nan_get_end_column"><b><code>Nan::GetEndColumn()</code></b></a>
   - <a href="doc/maybe_types.md#api_nan_clone_element_at"><b><code>Nan::CloneElementAt()</code></b></a>
+  - <a href="doc/maybe_types.md#api_nan_has_private"><b><code>Nan::HasPrivate()</code></b></a>
+  - <a href="doc/maybe_types.md#api_nan_get_private"><b><code>Nan::GetPrivate()</code></b></a>
+  - <a href="doc/maybe_types.md#api_nan_set_private"><b><code>Nan::SetPrivate()</code></b></a>
+  - <a href="doc/maybe_types.md#api_nan_delete_private"><b><code>Nan::DeletePrivate()</code></b></a>
   - <a href="doc/maybe_types.md#api_nan_make_maybe"><b><code>Nan::MakeMaybe()</code></b></a>
 
 ### Script
@@ -244,7 +248,7 @@ NAN's `node::Buffer` helpers exist as the API has changed across supported Node
 `Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier.
 
  - <a href="doc/asyncworker.md#api_nan_async_worker"><b><code>Nan::AsyncWorker</code></b></a>
- - <a href="doc/asyncworker.md#api_nan_async_progress_worker"><b><code>Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker</code></b></a>
+ - <a href="doc/asyncworker.md#api_nan_async_progress_worker"><b><code>Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker</code></b></a>
  - <a href="doc/asyncworker.md#api_nan_async_queue_worker"><b><code>Nan::AsyncQueueWorker</code></b></a>
 
 ### Strings & Bytes
@@ -393,11 +397,11 @@ By making a contribution to this project, I certify that:
 <tr><th align="left">Nathan Rajlich</th><td><a href="https://github.com/TooTallNate">GitHub/TooTallNate</a></td><td><a href="http://twitter.com/TooTallNate">Twitter/@TooTallNate</a></td></tr>
 <tr><th align="left">Brett Lawson</th><td><a href="https://github.com/brett19">GitHub/brett19</a></td><td><a href="http://twitter.com/brett19x">Twitter/@brett19x</a></td></tr>
 <tr><th align="left">Ben Noordhuis</th><td><a href="https://github.com/bnoordhuis">GitHub/bnoordhuis</a></td><td><a href="http://twitter.com/bnoordhuis">Twitter/@bnoordhuis</a></td></tr>
-<tr><th align="left">David Siegel</th><td><a href="https://github.com/agnat">GitHub/agnat</a></td><td>-</td></tr>
+<tr><th align="left">David Siegel</th><td><a href="https://github.com/agnat">GitHub/agnat</a></td><td><a href="http://twitter.com/agnat">Twitter/@agnat</a></td></tr>
 </tbody></table>
 
 ## Licence & copyright
 
-Copyright (c) 2016 NAN WG Members / Collaborators (listed above).
+Copyright (c) 2017 NAN WG Members / Collaborators (listed above).
 
 Native Abstractions for Node.js is licensed under an MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
diff --git a/appveyor.yml b/appveyor.yml
index df8d6a9..41df69d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -10,6 +10,7 @@ environment:
     - nodejs_version: "4"
     - nodejs_version: "5"
     - nodejs_version: "6"
+    - nodejs_version: "7"
 
 # Install scripts. (runs after repo cloning)
 install:
diff --git a/doc/asyncworker.md b/doc/asyncworker.md
index 6bc4cce..53a78dd 100644
--- a/doc/asyncworker.md
+++ b/doc/asyncworker.md
@@ -3,7 +3,7 @@
 `Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier.
 
  - <a href="#api_nan_async_worker"><b><code>Nan::AsyncWorker</code></b></a>
- - <a href="#api_nan_async_progress_worker"><b><code>Nan::AsyncProgressWorker</code></b></a>
+ - <a href="#api_nan_async_progress_worker"><b><code>Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker</code></b></a>
  - <a href="#api_nan_async_queue_worker"><b><code>Nan::AsyncQueueWorker</code></b></a>
 
 <a name="api_nan_async_worker"></a>
@@ -58,7 +58,7 @@ class AsyncWorker {
 ```
 
 <a name="api_nan_async_progress_worker"></a>
-### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker
+### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker
 
 `Nan::AsyncProgressWorkerBase` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript.
 
diff --git a/doc/maybe_types.md b/doc/maybe_types.md
index 9ca9cee..818861d 100644
--- a/doc/maybe_types.md
+++ b/doc/maybe_types.md
@@ -37,6 +37,10 @@ The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Lo
   - <a href="#api_nan_get_start_column"><b><code>Nan::GetStartColumn()</code></b></a>
   - <a href="#api_nan_get_end_column"><b><code>Nan::GetEndColumn()</code></b></a>
   - <a href="#api_nan_clone_element_at"><b><code>Nan::CloneElementAt()</code></b></a>
+  - <a href="#api_nan_has_private"><b><code>Nan::HasPrivate()</code></b></a>
+  - <a href="#api_nan_get_private"><b><code>Nan::GetPrivate()</code></b></a>
+  - <a href="#api_nan_set_private"><b><code>Nan::SetPrivate()</code></b></a>
+  - <a href="#api_nan_delete_private"><b><code>Nan::DeletePrivate()</code></b></a>
   - <a href="#api_nan_make_maybe"><b><code>Nan::MakeMaybe()</code></b></a>
 
 <a name="api_nan_maybe_local"></a>
@@ -492,6 +496,50 @@ Signature:
 Nan::MaybeLocal<v8::Object> Nan::CloneElementAt(v8::Local<v8::Array> array, uint32_t index);
 ```
 
+<a name="api_nan_has_private"></a>
+### Nan::HasPrivate()
+
+A helper method for calling [`v8::Object#HasPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#af68a0b98066cfdeb8f943e98a40ba08d) in a way compatible across supported versions of V8.
+
+Signature:
+
+```c++
+Nan::Maybe<bool> Nan::HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
+```
+
+<a name="api_nan_get_private"></a>
+### Nan::GetPrivate()
+
+A helper method for calling [`v8::Object#GetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a169f2da506acbec34deadd9149a1925a) in a way compatible across supported versions of V8.
+
+Signature:
+
+```c++
+Nan::MaybeLocal<v8::Value> Nan::GetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
+```
+
+<a name="api_nan_set_private"></a>
+### Nan::SetPrivate()
+
+A helper method for calling [`v8::Object#SetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#ace1769b0f3b86bfe9fda1010916360ee) in a way compatible across supported versions of V8.
+
+Signature:
+
+```c++
+Nan::Maybe<bool> Nan::SetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value);
+```
+
+<a name="api_nan_delete_private"></a>
+### Nan::DeletePrivate()
+
+A helper method for calling [`v8::Object#DeletePrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a138bb32a304f3982be02ad499693b8fd) in a way compatible across supported versions of V8.
+
+Signature:
+
+```c++
+Nan::Maybe<bool> Nan::DeletePrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
+```
+
 <a name="api_nan_make_maybe"></a>
 ### Nan::MakeMaybe()
 
diff --git a/doc/object_wrappers.md b/doc/object_wrappers.md
index 27b0636..e89832b 100644
--- a/doc/object_wrappers.md
+++ b/doc/object_wrappers.md
@@ -78,8 +78,8 @@ class MyObject : public Nan::ObjectWrap {
     tpl->SetClassName(Nan::New("MyObject").ToLocalChecked());
     tpl->InstanceTemplate()->SetInternalFieldCount(1);
 
-    SetPrototypeMethod(tpl, "getHandle", GetHandle);
-    SetPrototypeMethod(tpl, "getValue", GetValue);
+    Nan::SetPrototypeMethod(tpl, "getHandle", GetHandle);
+    Nan::SetPrototypeMethod(tpl, "getValue", GetValue);
 
     constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked());
     Nan::Set(target, Nan::New("MyObject").ToLocalChecked(),
diff --git a/doc/scopes.md b/doc/scopes.md
index e9a35d0..060c8e4 100644
--- a/doc/scopes.md
+++ b/doc/scopes.md
@@ -9,7 +9,7 @@ The creation of `HandleScope` objects is different across the supported versions
  - <a href="#api_nan_handle_scope"><b><code>Nan::HandleScope</code></b></a>
  - <a href="#api_nan_escapable_handle_scope"><b><code>Nan::EscapableHandleScope</code></b></a>
 
-Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles).
+Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://github.com/v8/v8/wiki/Embedder%27s%20Guide#handles-and-garbage-collection).
 
 <a name="api_nan_handle_scope"></a>
 ### Nan::HandleScope
diff --git a/doc/v8_internals.md b/doc/v8_internals.md
index 8e6319b..ce5f230 100644
--- a/doc/v8_internals.md
+++ b/doc/v8_internals.md
@@ -147,7 +147,7 @@ Signature:
 void Nan::LowMemoryNotification() 
 ```
 
-Calls V8's [`IdleNotification()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a24647f61d6b41f69668094bdcd6ea91f).
+Calls V8's [`LowMemoryNotification()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a24647f61d6b41f69668094bdcd6ea91f).
 
 <a name="api_nan_context_disposed_notification"></a>
 ### Nan::ContextDisposedNotification()
diff --git a/examples/async_pi_estimate/addon.cc b/examples/async_pi_estimate/addon.cc
index 295e8f6..7a37061 100644
--- a/examples/async_pi_estimate/addon.cc
+++ b/examples/async_pi_estimate/addon.cc
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/addon.js b/examples/async_pi_estimate/addon.js
index 43b4c20..33fd71c 100644
--- a/examples/async_pi_estimate/addon.js
+++ b/examples/async_pi_estimate/addon.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/async.cc b/examples/async_pi_estimate/async.cc
index 170f99c..709fc1f 100644
--- a/examples/async_pi_estimate/async.cc
+++ b/examples/async_pi_estimate/async.cc
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/async.h b/examples/async_pi_estimate/async.h
index ce1588b..65ead05 100644
--- a/examples/async_pi_estimate/async.h
+++ b/examples/async_pi_estimate/async.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/pi_est.cc b/examples/async_pi_estimate/pi_est.cc
index 1bf3f23..07a5242 100644
--- a/examples/async_pi_estimate/pi_est.cc
+++ b/examples/async_pi_estimate/pi_est.cc
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/pi_est.h b/examples/async_pi_estimate/pi_est.h
index 12a5387..ffd29e5 100644
--- a/examples/async_pi_estimate/pi_est.h
+++ b/examples/async_pi_estimate/pi_est.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/sync.cc b/examples/async_pi_estimate/sync.cc
index 115bd6a..a13cbdd 100644
--- a/examples/async_pi_estimate/sync.cc
+++ b/examples/async_pi_estimate/sync.cc
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/examples/async_pi_estimate/sync.h b/examples/async_pi_estimate/sync.h
index 453484a..41b70ad 100644
--- a/examples/async_pi_estimate/sync.h
+++ b/examples/async_pi_estimate/sync.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan.h b/nan.h
index 7176da1..aed2b31 100644
--- a/nan.h
+++ b/nan.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors:
+ * Copyright (c) 2017 NAN contributors:
  *   - Rod Vagg <https://github.com/rvagg>
  *   - Benjamin Byholm <https://github.com/kkoopa>
  *   - Trevor Norris <https://github.com/trevnorris>
@@ -12,7 +12,7 @@
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  *
- * Version 2.4.0: current Node 6.3.0, Node 12: 0.12.15, Node 10: 0.10.46, iojs: 3.3.1
+ * Version 2.5.1: current Node 7.4.0, Node 12: 0.12.18, Node 10: 0.10.48, iojs: 3.3.1
  *
  * See https://github.com/nodejs/nan for the latest update to this file
  **********************************************************************************/
@@ -351,7 +351,9 @@ class HandleScope {
   HandleScope(const HandleScope &);
   void operator=(const HandleScope &);
   void *operator new(size_t size);
-  void operator delete(void *, size_t);
+  void operator delete(void *, size_t) {
+    abort();
+  }
 };
 
 class EscapableHandleScope {
@@ -392,7 +394,9 @@ class EscapableHandleScope {
   EscapableHandleScope(const EscapableHandleScope &);
   void operator=(const EscapableHandleScope &);
   void *operator new(size_t size);
-  void operator delete(void *, size_t);
+  void operator delete(void *, size_t) {
+    abort();
+  }
 };
 
 //=== TryCatch =================================================================
@@ -425,11 +429,14 @@ class TryCatch {
 #if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
   (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
   inline v8::MaybeLocal<v8::Value> StackTrace() const {
-    return try_catch_.StackTrace(GetCurrentContext());
+    v8::Isolate *isolate = v8::Isolate::GetCurrent();
+    v8::EscapableHandleScope scope(isolate);
+    return scope.Escape(try_catch_.StackTrace(isolate->GetCurrentContext())
+                            .FromMaybe(v8::Local<v8::Value>()));
   }
 #else
   inline MaybeLocal<v8::Value> StackTrace() const {
-    return MaybeLocal<v8::Value>(try_catch_.StackTrace());
+    return try_catch_.StackTrace();
   }
 #endif
 
@@ -630,23 +637,23 @@ class TryCatch {
   }
 
 # define X(NAME)                                                               \
-    inline v8::Local<v8::Value> NAME(const char *msg) {                    \
+    inline v8::Local<v8::Value> NAME(const char *msg) {                        \
       EscapableHandleScope scope;                                              \
       return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked()));     \
     }                                                                          \
                                                                                \
-    inline                                                                 \
+    inline                                                                     \
     v8::Local<v8::Value> NAME(v8::Local<v8::String> msg) {                     \
       return v8::Exception::NAME(msg);                                         \
     }                                                                          \
                                                                                \
-    inline void Throw ## NAME(const char *msg) {                           \
+    inline void Throw ## NAME(const char *msg) {                               \
       HandleScope scope;                                                       \
       v8::Isolate::GetCurrent()->ThrowException(                               \
           v8::Exception::NAME(New(msg).ToLocalChecked()));                     \
     }                                                                          \
                                                                                \
-    inline void Throw ## NAME(v8::Local<v8::String> msg) {                 \
+    inline void Throw ## NAME(v8::Local<v8::String> msg) {                     \
       HandleScope scope;                                                       \
       v8::Isolate::GetCurrent()->ThrowException(                               \
           v8::Exception::NAME(msg));                                           \
@@ -681,8 +688,8 @@ class TryCatch {
     return node::Buffer::New(
         v8::Isolate::GetCurrent(), data, length, callback, hint);
 #else
-    return MaybeLocal<v8::Object>(node::Buffer::New(
-        v8::Isolate::GetCurrent(), data, length, callback, hint));
+    return node::Buffer::New(v8::Isolate::GetCurrent(), data, length, callback,
+                             hint);
 #endif
   }
 
@@ -697,8 +704,7 @@ class TryCatch {
     return node::Buffer::Copy(
         v8::Isolate::GetCurrent(), data, size);
 #else
-    return MaybeLocal<v8::Object>(node::Buffer::New(
-        v8::Isolate::GetCurrent(), data, size));
+    return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
 #endif
   }
 
@@ -710,8 +716,7 @@ class TryCatch {
     return node::Buffer::New(
         v8::Isolate::GetCurrent(), size);
 #else
-    return MaybeLocal<v8::Object>(node::Buffer::New(
-        v8::Isolate::GetCurrent(), size));
+    return node::Buffer::New(v8::Isolate::GetCurrent(), size);
 #endif
   }
 
@@ -725,8 +730,7 @@ class TryCatch {
 #if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION
     return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
 #else
-    return MaybeLocal<v8::Object>(
-        node::Buffer::Use(v8::Isolate::GetCurrent(), data, size));
+    return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
 #endif
   }
 
@@ -742,36 +746,48 @@ class TryCatch {
       v8::Local<v8::String> s
     , const v8::ScriptOrigin& origin
   ) {
+    v8::Isolate *isolate = v8::Isolate::GetCurrent();
+    v8::EscapableHandleScope scope(isolate);
     v8::ScriptCompiler::Source source(s, origin);
-    return v8::ScriptCompiler::Compile(GetCurrentContext(), &source);
+    return scope.Escape(
+        v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &source)
+            .FromMaybe(v8::Local<BoundScript>()));
   }
 
   inline MaybeLocal<BoundScript> CompileScript(
       v8::Local<v8::String> s
   ) {
+    v8::Isolate *isolate = v8::Isolate::GetCurrent();
+    v8::EscapableHandleScope scope(isolate);
     v8::ScriptCompiler::Source source(s);
-    return v8::ScriptCompiler::Compile(GetCurrentContext(), &source);
+    return scope.Escape(
+        v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &source)
+            .FromMaybe(v8::Local<BoundScript>()));
   }
 
   inline MaybeLocal<v8::Value> RunScript(
       v8::Local<UnboundScript> script
   ) {
-    return script->BindToCurrentContext()->Run(GetCurrentContext());
+    v8::Isolate *isolate = v8::Isolate::GetCurrent();
+    v8::EscapableHandleScope scope(isolate);
+    return scope.Escape(script->BindToCurrentContext()
+                            ->Run(isolate->GetCurrentContext())
+                            .FromMaybe(v8::Local<v8::Value>()));
   }
 
   inline MaybeLocal<v8::Value> RunScript(
       v8::Local<BoundScript> script
   ) {
-    return script->Run(GetCurrentContext());
+    v8::Isolate *isolate = v8::Isolate::GetCurrent();
+    v8::EscapableHandleScope scope(isolate);
+    return scope.Escape(script->Run(isolate->GetCurrentContext())
+                            .FromMaybe(v8::Local<v8::Value>()));
   }
 #else
   inline MaybeLocal<v8::String>
   NewOneByteString(const uint8_t * value, int length = -1) {
-    return MaybeLocal<v8::String>(
-        v8::String::NewFromOneByte(
-            v8::Isolate::GetCurrent()
-          , value
-          , v8::String::kNormalString, length));
+    return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value,
+                                      v8::String::kNormalString, length);
   }
 
   inline MaybeLocal<BoundScript> CompileScript(
@@ -779,28 +795,27 @@ class TryCatch {
     , const v8::ScriptOrigin& origin
   ) {
     v8::ScriptCompiler::Source source(s, origin);
-    return MaybeLocal<BoundScript>(
-        v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source));
+    return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source);
   }
 
   inline MaybeLocal<BoundScript> CompileScript(
       v8::Local<v8::String> s
   ) {
     v8::ScriptCompiler::Source source(s);
-    return MaybeLocal<BoundScript>(
-        v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source));
+    return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source);
   }
 
   inline MaybeLocal<v8::Value> RunScript(
       v8::Local<UnboundScript> script
   ) {
-    return MaybeLocal<v8::Value>(script->BindToCurrentContext()->Run());
+    EscapableHandleScope scope;
+    return scope.Escape(script->BindToCurrentContext()->Run());
   }
 
   inline MaybeLocal<v8::Value> RunScript(
       v8::Local<BoundScript> script
   ) {
-    return MaybeLocal<v8::Value>(script->Run());
+    return script->Run();
   }
 #endif
 
@@ -810,8 +825,9 @@ class TryCatch {
     , int argc
     , v8::Local<v8::Value>* argv) {
 #if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
-    return New(node::MakeCallback(
-        v8::Isolate::GetCurrent(), target, func, argc, argv));
+    EscapableHandleScope scope;
+    return scope.Escape(New(node::MakeCallback(
+        v8::Isolate::GetCurrent(), target, func, argc, argv)));
 #else
     return node::MakeCallback(
         v8::Isolate::GetCurrent(), target, func, argc, argv);
@@ -824,8 +840,9 @@ class TryCatch {
     , int argc
     , v8::Local<v8::Value>* argv) {
 #if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
-    return New(node::MakeCallback(
-        v8::Isolate::GetCurrent(), target, symbol, argc, argv));
+    EscapableHandleScope scope;
+    return scope.Escape(New(node::MakeCallback(
+        v8::Isolate::GetCurrent(), target, symbol, argc, argv)));
 #else
     return node::MakeCallback(
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
@@ -838,8 +855,9 @@ class TryCatch {
     , int argc
     , v8::Local<v8::Value>* argv) {
 #if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
-    return New(node::MakeCallback(
-        v8::Isolate::GetCurrent(), target, method, argc, argv));
+    EscapableHandleScope scope;
+    return scope.Escape(New(node::MakeCallback(
+        v8::Isolate::GetCurrent(), target, method, argc, argv)));
 #else
     return node::MakeCallback(
         v8::Isolate::GetCurrent(), target, method, argc, argv);
@@ -886,6 +904,7 @@ class Utf8String {
  public:
   inline explicit Utf8String(v8::Local<v8::Value> from) :
       length_(0), str_(str_st_) {
+    HandleScope scope;
     if (!from.IsEmpty()) {
       v8::Local<v8::String> string = from->ToString();
       if (!string.IsEmpty()) {
@@ -1012,23 +1031,24 @@ class Utf8String {
   }
 
 # define X(NAME)                                                               \
-    inline v8::Local<v8::Value> NAME(const char *msg) {                    \
+    inline v8::Local<v8::Value> NAME(const char *msg) {                        \
       EscapableHandleScope scope;                                              \
       return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked()));     \
     }                                                                          \
                                                                                \
-    inline                                                                 \
+    inline                                                                     \
     v8::Local<v8::Value> NAME(v8::Local<v8::String> msg) {                     \
       return v8::Exception::NAME(msg);                                         \
     }                                                                          \
                                                                                \
-    inline void Throw ## NAME(const char *msg) {                           \
+    inline void Throw ## NAME(const char *msg) {                               \
       HandleScope scope;                                                       \
       v8::ThrowException(v8::Exception::NAME(New(msg).ToLocalChecked()));      \
     }                                                                          \
                                                                                \
-    inline                                                                 \
+    inline                                                                     \
     void Throw ## NAME(v8::Local<v8::String> errmsg) {                         \
+      HandleScope scope;                                                       \
       v8::ThrowException(v8::Exception::NAME(errmsg));                         \
     }
 
@@ -1054,8 +1074,8 @@ class Utf8String {
     // arbitrary buffer lengths requires
     // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION
     assert(length <= imp::kMaxLength && "too large buffer");
-    return MaybeLocal<v8::Object>(scope.Escape(
-        New(node::Buffer::New(data, length, callback, hint)->handle_)));
+    return scope.Escape(
+        New(node::Buffer::New(data, length, callback, hint)->handle_));
   }
 
   inline MaybeLocal<v8::Object> CopyBuffer(
@@ -1067,11 +1087,10 @@ class Utf8String {
     // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION
     assert(size <= imp::kMaxLength && "too large buffer");
 #if NODE_MODULE_VERSION >= NODE_0_10_MODULE_VERSION
-    return MaybeLocal<v8::Object>(
-        scope.Escape(New(node::Buffer::New(data, size)->handle_)));
+    return scope.Escape(New(node::Buffer::New(data, size)->handle_));
 #else
-    return MaybeLocal<v8::Object>(scope.Escape(
-        New(node::Buffer::New(const_cast<char*>(data), size)->handle_)));
+    return scope.Escape(
+        New(node::Buffer::New(const_cast<char *>(data), size)->handle_));
 #endif
   }
 
@@ -1080,8 +1099,7 @@ class Utf8String {
     // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION
     EscapableHandleScope scope;
     assert(size <= imp::kMaxLength && "too large buffer");
-    return MaybeLocal<v8::Object>(
-        scope.Escape(New(node::Buffer::New(size)->handle_)));
+    return scope.Escape(New(node::Buffer::New(size)->handle_));
   }
 
   inline void FreeData(char *data, void *hint) {
@@ -1097,8 +1115,8 @@ class Utf8String {
     // arbitrary buffer lengths requires
     // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION
     assert(size <= imp::kMaxLength && "too large buffer");
-    return MaybeLocal<v8::Object>(scope.Escape(New(
-        node::Buffer::New(data, size, FreeData, NULL)->handle_)));
+    return scope.Escape(
+        New(node::Buffer::New(data, size, FreeData, NULL)->handle_));
   }
 
 namespace imp {
@@ -1118,27 +1136,26 @@ widenString(std::vector<uint16_t> *ws, const uint8_t *s, int l) {
   NewOneByteString(const uint8_t * value, int length = -1) {
     std::vector<uint16_t> wideString;  // NOLINT(build/include_what_you_use)
     imp::widenString(&wideString, value, length);
-    return imp::Factory<v8::String>::return_t(v8::String::New(
-        &wideString.front(), static_cast<int>(wideString.size())));
+    return v8::String::New(wideString.data(),
+                           static_cast<int>(wideString.size()));
   }
 
   inline MaybeLocal<BoundScript> CompileScript(
       v8::Local<v8::String> s
     , const v8::ScriptOrigin& origin
   ) {
-    return MaybeLocal<BoundScript>(
-        v8::Script::Compile(s, const_cast<v8::ScriptOrigin *>(&origin)));
+    return v8::Script::Compile(s, const_cast<v8::ScriptOrigin *>(&origin));
   }
 
   inline MaybeLocal<BoundScript> CompileScript(
     v8::Local<v8::String> s
   ) {
-    return MaybeLocal<BoundScript>(v8::Script::Compile(s));
+    return v8::Script::Compile(s);
   }
 
   inline
   MaybeLocal<v8::Value> RunScript(v8::Local<v8::Script> script) {
-    return MaybeLocal<v8::Value>(script->Run());
+    return script->Run();
   }
 
   inline v8::Local<v8::Value> MakeCallback(
@@ -1146,7 +1163,8 @@ widenString(std::vector<uint16_t> *ws, const uint8_t *s, int l) {
     , v8::Local<v8::Function> func
     , int argc
     , v8::Local<v8::Value>* argv) {
-    return New(node::MakeCallback(target, func, argc, argv));
+    v8::HandleScope scope;
+    return scope.Close(New(node::MakeCallback(target, func, argc, argv)));
   }
 
   inline v8::Local<v8::Value> MakeCallback(
@@ -1154,7 +1172,8 @@ widenString(std::vector<uint16_t> *ws, const uint8_t *s, int l) {
     , v8::Local<v8::String> symbol
     , int argc
     , v8::Local<v8::Value>* argv) {
-    return New(node::MakeCallback(target, symbol, argc, argv));
+    v8::HandleScope scope;
+    return scope.Close(New(node::MakeCallback(target, symbol, argc, argv)));
   }
 
   inline v8::Local<v8::Value> MakeCallback(
@@ -1162,7 +1181,8 @@ widenString(std::vector<uint16_t> *ws, const uint8_t *s, int l) {
     , const char* method
     , int argc
     , v8::Local<v8::Value>* argv) {
-    return New(node::MakeCallback(target, method, argc, argv));
+    v8::HandleScope scope;
+    return scope.Close(New(node::MakeCallback(target, method, argc, argv)));
   }
 
   inline void FatalException(const TryCatch& try_catch) {
@@ -1205,6 +1225,7 @@ class Utf8String {
  public:
   inline explicit Utf8String(v8::Local<v8::Value> from) :
       length_(0), str_(str_st_) {
+    v8::HandleScope scope;
     if (!from.IsEmpty()) {
       v8::Local<v8::String> string = from->ToString();
       if (!string.IsEmpty()) {
@@ -1417,9 +1438,12 @@ class Callback {
   Call(int argc, v8::Local<v8::Value> argv[]) const {
 #if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION)
     v8::Isolate *isolate = v8::Isolate::GetCurrent();
-    return Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv);
+    v8::EscapableHandleScope scope(isolate);
+    return scope.Escape(
+        Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv));
 #else
-    return Call_(v8::Context::GetCurrent()->Global(), argc, argv);
+    v8::HandleScope scope;
+    return scope.Close(Call_(v8::Context::GetCurrent()->Global(), argc, argv));
 #endif
   }
 
@@ -1549,6 +1573,8 @@ class Callback {
   Callback *callback;
 
   virtual void HandleOKCallback() {
+    HandleScope scope;
+
     callback->Call(0, NULL);
   }
 
@@ -1815,6 +1841,7 @@ inline void SetPrototypeTemplate(
   , const char *name
   , v8::Local<v8::Data> value
 ) {
+  HandleScope scope;
   SetTemplate(templ->PrototypeTemplate(), name, value);
 }
 
@@ -1824,6 +1851,7 @@ inline void SetPrototypeTemplate(
   , v8::Local<v8::Data> value
   , v8::PropertyAttribute attributes
 ) {
+  HandleScope scope;
   SetTemplate(templ->PrototypeTemplate(), name, value, attributes);
 }
 
@@ -1832,6 +1860,7 @@ inline void SetInstanceTemplate(
   , const char *name
   , v8::Local<v8::Data> value
 ) {
+  HandleScope scope;
   SetTemplate(templ->InstanceTemplate(), name, value);
 }
 
@@ -1841,6 +1870,7 @@ inline void SetInstanceTemplate(
   , v8::Local<v8::Data> value
   , v8::PropertyAttribute attributes
 ) {
+  HandleScope scope;
   SetTemplate(templ->InstanceTemplate(), name, value, attributes);
 }
 
@@ -1953,7 +1983,7 @@ inline bool SetAccessor(
   , v8::Local<v8::Value> data = v8::Local<v8::Value>()
   , v8::AccessControl settings = v8::DEFAULT
   , v8::PropertyAttribute attribute = v8::None) {
-  EscapableHandleScope scope;
+  HandleScope scope;
 
   imp::NativeGetter getter_ =
       imp::GetterCallbackWrapper;
@@ -2189,12 +2219,18 @@ inline void SetCallAsFunctionHandler(
 
 #include "nan_object_wrap.h"  // NOLINT(build/include)
 
+//=== HiddenValue/Private ======================================================
+
+#include "nan_private.h"  // NOLINT(build/include)
+
 //=== Export ==================================================================
 
 inline
 void
 Export(ADDON_REGISTER_FUNCTION_ARGS_TYPE target, const char *name,
     FunctionCallback f) {
+  HandleScope scope;
+
   Set(target, New<v8::String>(name).ToLocalChecked(),
       GetFunction(New<v8::FunctionTemplate>(f)).ToLocalChecked());
 }
@@ -2203,17 +2239,21 @@ Export(ADDON_REGISTER_FUNCTION_ARGS_TYPE target, const char *name,
 
 struct Tap {
   explicit Tap(v8::Local<v8::Value> t) : t_() {
+    HandleScope scope;
+
     t_.Reset(To<v8::Object>(t).ToLocalChecked());
   }
 
   ~Tap() { t_.Reset(); }  // not sure if neccessary
 
   inline void plan(int i) {
+    HandleScope scope;
     v8::Local<v8::Value> arg = New(i);
     MakeCallback(New(t_), "plan", 1, &arg);
   }
 
   inline void ok(bool isOk, const char *msg = NULL) {
+    HandleScope scope;
     v8::Local<v8::Value> args[2];
     args[0] = New(isOk);
     if (msg) args[1] = New(msg).ToLocalChecked();
@@ -2221,6 +2261,7 @@ struct Tap {
   }
 
   inline void pass(const char * msg = NULL) {
+    HandleScope scope;
     v8::Local<v8::Value> hmsg;
     if (msg) hmsg = New(msg).ToLocalChecked();
     MakeCallback(New(t_), "pass", msg ? 1 : 0, &hmsg);
@@ -2246,13 +2287,13 @@ namespace imp {
 template <typename T> struct Maybefier;
 
 template <typename T> struct Maybefier<v8::Local<T> > {
-  static MaybeLocal<T> convert(v8::Local<T> v) {
-    return MaybeLocal<T>(v);
+  inline static MaybeLocal<T> convert(v8::Local<T> v) {
+    return v;
   }
 };
 
 template <typename T> struct Maybefier<MaybeLocal<T> > {
-  static MaybeLocal<T> convert(MaybeLocal<T> v) {
+  inline static MaybeLocal<T> convert(MaybeLocal<T> v) {
     return v;
   }
 };
@@ -2260,7 +2301,7 @@ template <typename T> struct Maybefier<MaybeLocal<T> > {
 }  // end of namespace imp
 
 template <typename T, template <typename> class MaybeMaybe>
-MaybeLocal<T>
+inline MaybeLocal<T>
 MakeMaybe(MaybeMaybe<T> v) {
   return imp::Maybefier<MaybeMaybe<T> >::convert(v);
 }
diff --git a/nan_callbacks.h b/nan_callbacks.h
index 851509f..c612cee 100644
--- a/nan_callbacks.h
+++ b/nan_callbacks.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan_callbacks_12_inl.h b/nan_callbacks_12_inl.h
index bea12c7..9c8bf7e 100644
--- a/nan_callbacks_12_inl.h
+++ b/nan_callbacks_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan_callbacks_pre_12_inl.h b/nan_callbacks_pre_12_inl.h
index 5e2b8e2..087ee52 100644
--- a/nan_callbacks_pre_12_inl.h
+++ b/nan_callbacks_pre_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -45,24 +45,32 @@ class ReturnValue {
 
   // Fast primitive setters
   inline void Set(bool value) {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Boolean);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Boolean::New(value));
   }
 
   inline void Set(double i) {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Number);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Number::New(i));
   }
 
   inline void Set(int32_t i) {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Integer);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Int32::New(i));
   }
 
   inline void Set(uint32_t i) {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Integer);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Uint32::NewFromUnsigned(i));
@@ -70,18 +78,24 @@ class ReturnValue {
 
   // Fast JS primitive setters
   inline void SetNull() {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Primitive);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Null());
   }
 
   inline void SetUndefined() {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::Primitive);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::Undefined());
   }
 
   inline void SetEmptyString() {
+    v8::HandleScope scope;
+
     TYPE_CHECK(T, v8::String);
     value_->Dispose();
     *value_ = v8::Persistent<T>::New(v8::String::Empty());
diff --git a/nan_converters.h b/nan_converters.h
index 7386c3b..9dbd1ec 100644
--- a/nan_converters.h
+++ b/nan_converters.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan_converters_43_inl.h b/nan_converters_43_inl.h
index e2eb032..0c7cd50 100644
--- a/nan_converters_43_inl.h
+++ b/nan_converters_43_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -12,7 +12,11 @@
 #define X(TYPE)                                                                \
 imp::ToFactory<v8::TYPE>::return_t                                             \
 imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) {                  \
-  return val->To ## TYPE(GetCurrentContext());                                 \
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();                            \
+  v8::EscapableHandleScope scope(isolate);                                     \
+  return scope.Escape(                                                         \
+      val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext())          \
+          .FromMaybe(v8::Local<v8::TYPE>()));                                  \
 }
 
 X(Boolean)
@@ -28,7 +32,9 @@ X(Int32)
 #define X(TYPE, NAME)                                                          \
 imp::ToFactory<TYPE>::return_t                                                 \
 imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) {                      \
-  return val->NAME ## Value(GetCurrentContext());                              \
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();                            \
+  v8::HandleScope scope(isolate);                                              \
+  return val->NAME ## Value(isolate->GetCurrentContext());                     \
 }
 
 X(bool, Boolean)
diff --git a/nan_converters_pre_43_inl.h b/nan_converters_pre_43_inl.h
index 177a74a..3391be2 100644
--- a/nan_converters_pre_43_inl.h
+++ b/nan_converters_pre_43_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -12,7 +12,7 @@
 #define X(TYPE)                                                                \
 imp::ToFactory<v8::TYPE>::return_t                                             \
 imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) {                  \
-  return MaybeLocal<v8::TYPE>(val->To ## TYPE());                              \
+  return val->To ## TYPE();                                                    \
 }
 
 X(Boolean)
@@ -28,7 +28,7 @@ X(Int32)
 #define X(TYPE, NAME)                                                          \
 imp::ToFactory<TYPE>::return_t                                                 \
 imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) {                      \
-  return Just<TYPE>(val->NAME ##Value());                                      \
+  return Just(val->NAME ## Value());                                           \
 }
 
 X(bool, Boolean)
diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h
index be50fc6..be80a45 100644
--- a/nan_implementation_12_inl.h
+++ b/nan_implementation_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -60,19 +60,15 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
   (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
 Factory<v8::Date>::return_t
 Factory<v8::Date>::New(double value) {
-  v8::Local<v8::Date> ret;
-  if (v8::Date::New(GetCurrentContext(), value).
-      ToLocal(reinterpret_cast<v8::Local<v8::Value>*>(&ret))) {
-    return v8::MaybeLocal<v8::Date>(ret);
-  } else {
-    return v8::MaybeLocal<v8::Date>(ret);
-  }
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(v8::Date::New(isolate->GetCurrentContext(), value)
+      .FromMaybe(v8::Local<v8::Value>()).As<v8::Date>());
 }
 #else
 Factory<v8::Date>::return_t
 Factory<v8::Date>::New(double value) {
-  return Factory<v8::Date>::return_t(
-      v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>());
+  return v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>();
 }
 #endif
 
@@ -203,14 +199,18 @@ Factory<v8::RegExp>::return_t
 Factory<v8::RegExp>::New(
     v8::Local<v8::String> pattern
   , v8::RegExp::Flags flags) {
-  return v8::RegExp::New(GetCurrentContext(), pattern, flags);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(
+      v8::RegExp::New(isolate->GetCurrentContext(), pattern, flags)
+          .FromMaybe(v8::Local<v8::RegExp>()));
 }
 #else
 Factory<v8::RegExp>::return_t
 Factory<v8::RegExp>::New(
     v8::Local<v8::String> pattern
   , v8::RegExp::Flags flags) {
-  return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
+  return v8::RegExp::New(pattern, flags);
 }
 #endif
 
@@ -220,30 +220,36 @@ Factory<v8::RegExp>::New(
   (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source) {
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
   v8::ScriptCompiler::Source src(source);
-  return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
+  return scope.Escape(
+      v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
+          .FromMaybe(v8::Local<v8::Script>()));
 }
 
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source
                         , v8::ScriptOrigin const& origin) {
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
   v8::ScriptCompiler::Source src(source, origin);
-  return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
+  return scope.Escape(
+      v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
+          .FromMaybe(v8::Local<v8::Script>()));
 }
 #else
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source) {
   v8::ScriptCompiler::Source src(source);
-  return Factory<v8::Script>::return_t(
-      v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
+  return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
 }
 
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source
                         , v8::ScriptOrigin const& origin) {
   v8::ScriptCompiler::Source src(source, origin);
-  return Factory<v8::Script>::return_t(
-      v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
+  return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
 }
 #endif
 
@@ -258,8 +264,7 @@ Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New() {
-  return Factory<v8::String>::return_t(
-      v8::String::Empty(v8::Isolate::GetCurrent()));
+  return v8::String::Empty(v8::Isolate::GetCurrent());
 }
 
 #if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
@@ -295,46 +300,33 @@ Factory<v8::String>::New(ExternalOneByteStringResource * value) {
 #else
 Factory<v8::String>::return_t
 Factory<v8::String>::New(const char * value, int length) {
-  return Factory<v8::String>::return_t(
-      v8::String::NewFromUtf8(
-          v8::Isolate::GetCurrent()
-        , value
-        , v8::String::kNormalString
-        , length));
+  return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value,
+                                 v8::String::kNormalString, length);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(
     std::string const& value) /* NOLINT(build/include_what_you_use) */ {
   assert(value.size() <= INT_MAX && "string too long");
-  return Factory<v8::String>::return_t(
-      v8::String::NewFromUtf8(
-          v8::Isolate::GetCurrent()
-        , value.data()
-        , v8::String::kNormalString
-        , static_cast<int>(value.size())));
+  return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value.data(),
+                                 v8::String::kNormalString,
+                                 static_cast<int>(value.size()));
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(const uint16_t * value, int length) {
-  return Factory<v8::String>::return_t(
-      v8::String::NewFromTwoByte(
-          v8::Isolate::GetCurrent()
-        , value
-        , v8::String::kNormalString
-        , length));
+  return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value,
+                                    v8::String::kNormalString, length);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
-  return Factory<v8::String>::return_t(
-      v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
+  return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(ExternalOneByteStringResource * value) {
-  return Factory<v8::String>::return_t(
-      v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
+  return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
 }
 #endif
 
@@ -367,16 +359,14 @@ Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
 Factory<v8::UnboundScript>::return_t
 Factory<v8::UnboundScript>::New(v8::Local<v8::String> source) {
   v8::ScriptCompiler::Source src(source);
-  return Factory<v8::UnboundScript>::return_t(
-      v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
+  return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
 }
 
 Factory<v8::UnboundScript>::return_t
 Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
                                , v8::ScriptOrigin const& origin) {
   v8::ScriptCompiler::Source src(source, origin);
-  return Factory<v8::UnboundScript>::return_t(
-      v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
+  return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
 }
 #endif
 
diff --git a/nan_implementation_pre_12_inl.h b/nan_implementation_pre_12_inl.h
index f6642ee..6afe94c 100644
--- a/nan_implementation_pre_12_inl.h
+++ b/nan_implementation_pre_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -57,7 +57,7 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
 
 Factory<v8::Date>::return_t
 Factory<v8::Date>::New(double value) {
-  return Factory<v8::Date>::return_t(v8::Date::New(value).As<v8::Date>());
+  return v8::Date::New(value).As<v8::Date>();
 }
 
 //=== External =================================================================
@@ -72,10 +72,11 @@ Factory<v8::External>::New(void * value) {
 Factory<v8::Function>::return_t
 Factory<v8::Function>::New( FunctionCallback callback
                           , v8::Local<v8::Value> data) {
-  return Factory<v8::FunctionTemplate>::New( callback
-                                           , data
-                                           , v8::Local<v8::Signature>()
-                                           )->GetFunction();
+  v8::HandleScope scope;
+
+  return scope.Close(Factory<v8::FunctionTemplate>::New(
+                         callback, data, v8::Local<v8::Signature>())
+                         ->GetFunction());
 }
 
 
@@ -172,20 +173,19 @@ Factory<v8::RegExp>::return_t
 Factory<v8::RegExp>::New(
     v8::Local<v8::String> pattern
   , v8::RegExp::Flags flags) {
-  return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
+  return v8::RegExp::New(pattern, flags);
 }
 
 //=== Script ===================================================================
 
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source) {
-  return Factory<v8::Script>::return_t(v8::Script::New(source));
+  return v8::Script::New(source);
 }
 Factory<v8::Script>::return_t
 Factory<v8::Script>::New( v8::Local<v8::String> source
                         , v8::ScriptOrigin const& origin) {
-  return Factory<v8::Script>::return_t(
-      v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin)));
+  return v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin));
 }
 
 //=== Signature ================================================================
@@ -199,35 +199,34 @@ Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New() {
-  return Factory<v8::String>::return_t(v8::String::Empty());
+  return v8::String::Empty();
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(const char * value, int length) {
-  return Factory<v8::String>::return_t(v8::String::New(value, length));
+  return v8::String::New(value, length);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(
     std::string const& value) /* NOLINT(build/include_what_you_use) */ {
   assert(value.size() <= INT_MAX && "string too long");
-  return Factory<v8::String>::return_t(
-      v8::String::New( value.data(), static_cast<int>(value.size())));
+  return v8::String::New(value.data(), static_cast<int>(value.size()));
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(const uint16_t * value, int length) {
-  return Factory<v8::String>::return_t(v8::String::New(value, length));
+  return v8::String::New(value, length);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
-  return Factory<v8::String>::return_t(v8::String::NewExternal(value));
+  return v8::String::NewExternal(value);
 }
 
 Factory<v8::String>::return_t
 Factory<v8::String>::New(v8::String::ExternalAsciiStringResource * value) {
-  return Factory<v8::String>::return_t(v8::String::NewExternal(value));
+  return v8::String::NewExternal(value);
 }
 
 //=== String Object ============================================================
diff --git a/nan_maybe_43_inl.h b/nan_maybe_43_inl.h
index a8b432d..10eeb02 100644
--- a/nan_maybe_43_inl.h
+++ b/nan_maybe_43_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -25,26 +25,35 @@ inline Maybe<T> Just(const T& t) {
   return v8::Just<T>(t);
 }
 
-v8::Local<v8::Context> GetCurrentContext();
-
 inline
 MaybeLocal<v8::String> ToDetailString(v8::Local<v8::Value> val) {
-  return val->ToDetailString(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(val->ToDetailString(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::String>()));
 }
 
 inline
 MaybeLocal<v8::Uint32> ToArrayIndex(v8::Local<v8::Value> val) {
-  return val->ToArrayIndex(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(val->ToArrayIndex(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Uint32>()));
 }
 
 inline
 Maybe<bool> Equals(v8::Local<v8::Value> a, v8::Local<v8::Value>(b)) {
-  return a->Equals(GetCurrentContext(), b);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return a->Equals(isolate->GetCurrentContext(), b);
 }
 
 inline
 MaybeLocal<v8::Object> NewInstance(v8::Local<v8::Function> h) {
-  return h->NewInstance(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(h->NewInstance(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Object>()));
 }
 
 inline
@@ -52,32 +61,45 @@ MaybeLocal<v8::Object> NewInstance(
       v8::Local<v8::Function> h
     , int argc
     , v8::Local<v8::Value> argv[]) {
-  return h->NewInstance(GetCurrentContext(), argc, argv);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(h->NewInstance(isolate->GetCurrentContext(), argc, argv)
+                          .FromMaybe(v8::Local<v8::Object>()));
 }
 
 inline
 MaybeLocal<v8::Object> NewInstance(v8::Local<v8::ObjectTemplate> h) {
-  return h->NewInstance(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(h->NewInstance(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Object>()));
 }
 
 
 inline MaybeLocal<v8::Function> GetFunction(
     v8::Local<v8::FunctionTemplate> t) {
-  return t->GetFunction(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(t->GetFunction(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Function>()));
 }
 
 inline Maybe<bool> Set(
     v8::Local<v8::Object> obj
   , v8::Local<v8::Value> key
   , v8::Local<v8::Value> value) {
-  return obj->Set(GetCurrentContext(), key, value);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Set(isolate->GetCurrentContext(), key, value);
 }
 
 inline Maybe<bool> Set(
     v8::Local<v8::Object> obj
   , uint32_t index
   , v8::Local<v8::Value> value) {
-  return obj->Set(GetCurrentContext(), index, value);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Set(isolate->GetCurrentContext(), index, value);
 }
 
 inline Maybe<bool> ForceSet(
@@ -85,102 +107,148 @@ inline Maybe<bool> ForceSet(
   , v8::Local<v8::Value> key
   , v8::Local<v8::Value> value
   , v8::PropertyAttribute attribs = v8::None) {
-  return obj->ForceSet(GetCurrentContext(), key, value, attribs);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
 }
 
 inline MaybeLocal<v8::Value> Get(
     v8::Local<v8::Object> obj
   , v8::Local<v8::Value> key) {
-  return obj->Get(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->Get(isolate->GetCurrentContext(), key)
+                          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline
 MaybeLocal<v8::Value> Get(v8::Local<v8::Object> obj, uint32_t index) {
-  return obj->Get(GetCurrentContext(), index);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->Get(isolate->GetCurrentContext(), index)
+                          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline v8::PropertyAttribute GetPropertyAttributes(
     v8::Local<v8::Object> obj
   , v8::Local<v8::Value> key) {
-  return obj->GetPropertyAttributes(GetCurrentContext(), key).FromJust();
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->GetPropertyAttributes(isolate->GetCurrentContext(), key)
+      .FromJust();
 }
 
 inline Maybe<bool> Has(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->Has(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Has(isolate->GetCurrentContext(), key);
 }
 
 inline Maybe<bool> Has(v8::Local<v8::Object> obj, uint32_t index) {
-  return obj->Has(GetCurrentContext(), index);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Has(isolate->GetCurrentContext(), index);
 }
 
 inline Maybe<bool> Delete(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->Delete(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Delete(isolate->GetCurrentContext(), key);
 }
 
 inline
 Maybe<bool> Delete(v8::Local<v8::Object> obj, uint32_t index) {
-  return obj->Delete(GetCurrentContext(), index);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->Delete(isolate->GetCurrentContext(), index);
 }
 
 inline
 MaybeLocal<v8::Array> GetPropertyNames(v8::Local<v8::Object> obj) {
-  return obj->GetPropertyNames(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->GetPropertyNames(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Array>()));
 }
 
 inline
 MaybeLocal<v8::Array> GetOwnPropertyNames(v8::Local<v8::Object> obj) {
-  return obj->GetOwnPropertyNames(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->GetOwnPropertyNames(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::Array>()));
 }
 
 inline Maybe<bool> SetPrototype(
     v8::Local<v8::Object> obj
   , v8::Local<v8::Value> prototype) {
-  return obj->SetPrototype(GetCurrentContext(), prototype);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->SetPrototype(isolate->GetCurrentContext(), prototype);
 }
 
 inline MaybeLocal<v8::String> ObjectProtoToString(
     v8::Local<v8::Object> obj) {
-  return obj->ObjectProtoToString(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->ObjectProtoToString(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::String>()));
 }
 
 inline Maybe<bool> HasOwnProperty(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->HasOwnProperty(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->HasOwnProperty(isolate->GetCurrentContext(), key);
 }
 
 inline Maybe<bool> HasRealNamedProperty(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->HasRealNamedProperty(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->HasRealNamedProperty(isolate->GetCurrentContext(), key);
 }
 
 inline Maybe<bool> HasRealIndexedProperty(
     v8::Local<v8::Object> obj
   , uint32_t index) {
-  return obj->HasRealIndexedProperty(GetCurrentContext(), index);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->HasRealIndexedProperty(isolate->GetCurrentContext(), index);
 }
 
 inline Maybe<bool> HasRealNamedCallbackProperty(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->HasRealNamedCallbackProperty(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return obj->HasRealNamedCallbackProperty(isolate->GetCurrentContext(), key);
 }
 
 inline MaybeLocal<v8::Value> GetRealNamedPropertyInPrototypeChain(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->GetRealNamedPropertyInPrototypeChain(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(obj->GetRealNamedPropertyInPrototypeChain(
+                             isolate->GetCurrentContext(), key)
+                          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline MaybeLocal<v8::Value> GetRealNamedProperty(
     v8::Local<v8::Object> obj
   , v8::Local<v8::String> key) {
-  return obj->GetRealNamedProperty(GetCurrentContext(), key);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(
+      obj->GetRealNamedProperty(isolate->GetCurrentContext(), key)
+          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline MaybeLocal<v8::Value> CallAsFunction(
@@ -188,49 +256,70 @@ inline MaybeLocal<v8::Value> CallAsFunction(
   , v8::Local<v8::Object> recv
   , int argc
   , v8::Local<v8::Value> argv[]) {
-  return obj->CallAsFunction(GetCurrentContext(), recv, argc, argv);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(
+      obj->CallAsFunction(isolate->GetCurrentContext(), recv, argc, argv)
+          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline MaybeLocal<v8::Value> CallAsConstructor(
     v8::Local<v8::Object> obj
   , int argc, v8::Local<v8::Value> argv[]) {
-  return obj->CallAsConstructor(GetCurrentContext(), argc, argv);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(
+      obj->CallAsConstructor(isolate->GetCurrentContext(), argc, argv)
+          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 inline
 MaybeLocal<v8::String> GetSourceLine(v8::Local<v8::Message> msg) {
-  return msg->GetSourceLine(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(msg->GetSourceLine(isolate->GetCurrentContext())
+                          .FromMaybe(v8::Local<v8::String>()));
 }
 
 inline Maybe<int> GetLineNumber(v8::Local<v8::Message> msg) {
-  return msg->GetLineNumber(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return msg->GetLineNumber(isolate->GetCurrentContext());
 }
 
 inline Maybe<int> GetStartColumn(v8::Local<v8::Message> msg) {
-  return msg->GetStartColumn(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return msg->GetStartColumn(isolate->GetCurrentContext());
 }
 
 inline Maybe<int> GetEndColumn(v8::Local<v8::Message> msg) {
-  return msg->GetEndColumn(GetCurrentContext());
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope scope(isolate);
+  return msg->GetEndColumn(isolate->GetCurrentContext());
 }
 
 inline MaybeLocal<v8::Object> CloneElementAt(
     v8::Local<v8::Array> array
   , uint32_t index) {
 #if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION)
-  v8::EscapableHandleScope handle_scope(v8::Isolate::GetCurrent());
-  v8::Local<v8::Context> context = GetCurrentContext();
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
   v8::Local<v8::Value> elem;
+  v8::Local<v8::Object> obj;
   if (!array->Get(context, index).ToLocal(&elem)) {
-    return MaybeLocal<v8::Object>();
+    return scope.Escape(obj);
   }
-  v8::Local<v8::Object> obj;
   if (!elem->ToObject(context).ToLocal(&obj)) {
-    return MaybeLocal<v8::Object>();
+    return scope.Escape(v8::Local<v8::Object>());
   }
-  return MaybeLocal<v8::Object>(handle_scope.Escape(obj->Clone()));
+  return scope.Escape(obj->Clone());
 #else
-  return array->CloneElementAt(GetCurrentContext(), index);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(array->CloneElementAt(isolate->GetCurrentContext(), index)
+                          .FromMaybe(v8::Local<v8::Object>()));
 #endif
 }
 
@@ -239,7 +328,10 @@ inline MaybeLocal<v8::Value> Call(
   , v8::Local<v8::Object> recv
   , int argc
   , v8::Local<v8::Value> argv[]) {
-  return fun->Call(GetCurrentContext(), recv, argc, argv);
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  return scope.Escape(fun->Call(isolate->GetCurrentContext(), recv, argc, argv)
+                          .FromMaybe(v8::Local<v8::Value>()));
 }
 
 #endif  // NAN_MAYBE_43_INL_H_
diff --git a/nan_maybe_pre_43_inl.h b/nan_maybe_pre_43_inl.h
index c538687..d47181e 100644
--- a/nan_maybe_pre_43_inl.h
+++ b/nan_maybe_pre_43_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -16,9 +16,11 @@ class MaybeLocal {
 
   template<typename S>
 # if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION
-  inline MaybeLocal(v8::Local<S> that) : val_(that) {}
+  inline
+  MaybeLocal(v8::Local<S> that) : val_(that) {}  // NOLINT(runtime/explicit)
 # else
-  inline MaybeLocal(v8::Local<S> that) :
+  inline
+  MaybeLocal(v8::Local<S> that) :  // NOLINT(runtime/explicit)
       val_(*reinterpret_cast<v8::Local<T>*>(&that)) {}
 # endif
 
diff --git a/nan_new.h b/nan_new.h
index 6c7d19f..628f40c 100644
--- a/nan_new.h
+++ b/nan_new.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan_object_wrap.h b/nan_object_wrap.h
index f1cc156..28281b0 100644
--- a/nan_object_wrap.h
+++ b/nan_object_wrap.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/nan_persistent_12_inl.h b/nan_persistent_12_inl.h
index eb4ff10..a23d899 100644
--- a/nan_persistent_12_inl.h
+++ b/nan_persistent_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -18,7 +18,8 @@ template<typename T, typename M> class Persistent :
       v8::Persistent<T, M>(v8::Isolate::GetCurrent(), that) {}
 
   template<typename S, typename M2>
-  inline Persistent(const v8::Persistent<S, M2> &that) :
+  inline
+  Persistent(const v8::Persistent<S, M2> &that) :  // NOLINT(runtime/explicit)
       v8::Persistent<T, M2>(v8::Isolate::GetCurrent(), that) {}
 
   inline void Reset() { v8::PersistentBase<T>::Reset(); }
@@ -66,7 +67,8 @@ class Global : public v8::Global<T> {
     v8::Global<T>(v8::Isolate::GetCurrent(), that) {}
 
   template<typename S>
-  inline Global(const v8::PersistentBase<S> &that) :
+  inline
+  Global(const v8::PersistentBase<S> &that) :  // NOLINT(runtime/explicit)
       v8::Global<S>(v8::Isolate::GetCurrent(), that) {}
 
   inline void Reset() { v8::PersistentBase<T>::Reset(); }
@@ -100,7 +102,8 @@ class Global : public v8::UniquePersistent<T> {
     v8::UniquePersistent<T>(v8::Isolate::GetCurrent(), that) {}
 
   template<typename S>
-  inline Global(const v8::PersistentBase<S> &that) :
+  inline
+  Global(const v8::PersistentBase<S> &that) :  // NOLINT(runtime/explicit)
       v8::UniquePersistent<S>(v8::Isolate::GetCurrent(), that) {}
 
   inline void Reset() { v8::PersistentBase<T>::Reset(); }
diff --git a/nan_persistent_pre_12_inl.h b/nan_persistent_pre_12_inl.h
index 0d427ed..f915746 100644
--- a/nan_persistent_pre_12_inl.h
+++ b/nan_persistent_pre_12_inl.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -196,20 +196,20 @@ class Global : public PersistentBase<T> {
   inline Global() : PersistentBase<T>(0) { }
 
   template <typename S>
-  inline Global(v8::Local<S> that)
+  inline Global(v8::Local<S> that)  // NOLINT(runtime/explicit)
       : PersistentBase<T>(v8::Persistent<T>::New(that)) {
     TYPE_CHECK(T, S);
   }
 
   template <typename S>
-  inline Global(const PersistentBase<S> &that)
+  inline Global(const PersistentBase<S> &that)  // NOLINT(runtime/explicit)
     : PersistentBase<T>(that) {
     TYPE_CHECK(T, S);
   }
   /**
    * Move constructor.
    */
-  inline Global(RValue rvalue)
+  inline Global(RValue rvalue)  // NOLINT(runtime/explicit)
     : PersistentBase<T>(rvalue.object->persistent) {
     rvalue.object->Reset();
   }
diff --git a/nan_private.h b/nan_private.h
new file mode 100644
index 0000000..03082cd
--- /dev/null
+++ b/nan_private.h
@@ -0,0 +1,73 @@
+/*********************************************************************
+ * NAN - Native Abstractions for Node.js
+ *
+ * Copyright (c) 2017 NAN contributors
+ *
+ * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
+ ********************************************************************/
+
+#ifndef NAN_PRIVATE_H_
+#define NAN_PRIVATE_H_
+
+inline Maybe<bool>
+HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
+  HandleScope scope;
+#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
+  v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
+  return object->HasPrivate(context, private_key);
+#else
+  return Just(!object->GetHiddenValue(key).IsEmpty());
+#endif
+}
+
+inline MaybeLocal<v8::Value>
+GetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
+#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
+  v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
+  v8::MaybeLocal<v8::Value> v = object->GetPrivate(context, private_key);
+  return scope.Escape(v.ToLocalChecked());
+#else
+  EscapableHandleScope scope;
+  v8::Local<v8::Value> v = object->GetHiddenValue(key);
+  if (v.IsEmpty()) {
+    v = Undefined();
+  }
+  return scope.Escape(v);
+#endif
+}
+
+inline Maybe<bool> SetPrivate(
+    v8::Local<v8::Object> object,
+    v8::Local<v8::String> key,
+    v8::Local<v8::Value> value) {
+#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
+  HandleScope scope;
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
+  v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
+  return object->SetPrivate(context, private_key, value);
+#else
+  return Just(object->SetHiddenValue(key, value));
+#endif
+}
+
+inline Maybe<bool> DeletePrivate(
+    v8::Local<v8::Object> object,
+    v8::Local<v8::String> key) {
+#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
+  HandleScope scope;
+  v8::Isolate *isolate = v8::Isolate::GetCurrent();
+  v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
+  return object->DeletePrivate(isolate->GetCurrentContext(), private_key);
+#else
+  return Just(object->DeleteHiddenValue(key));
+#endif
+}
+
+#endif  // NAN_PRIVATE_H_
+
diff --git a/nan_typedarray_contents.h b/nan_typedarray_contents.h
index b715961..17c9681 100644
--- a/nan_typedarray_contents.h
+++ b/nan_typedarray_contents.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
@@ -14,6 +14,7 @@ class TypedArrayContents {
  public:
   inline explicit TypedArrayContents(v8::Local<v8::Value> from) :
       length_(0), data_(NULL) {
+    HandleScope scope;
 
     size_t length = 0;
     void*  data = NULL;
@@ -78,7 +79,9 @@ class TypedArrayContents {
 
   //Disable heap allocation
   void *operator new(size_t size);
-  void operator delete(void *, size_t);
+  void operator delete(void *, size_t) {
+    abort();
+  }
 
   size_t  length_;
   T*      data_;
diff --git a/nan_weak.h b/nan_weak.h
index 93f6fe8..3f2d569 100644
--- a/nan_weak.h
+++ b/nan_weak.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/package.json b/package.json
index 7700231..8d6a11e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "nan",
-  "version": "2.4.0",
-  "description": "Native Abstractions for Node.js: C++ header for Node 0.8 -> 6 compatibility",
+  "version": "2.5.1",
+  "description": "Native Abstractions for Node.js: C++ header for Node 0.8 -> 7 compatibility",
   "main": "include_dirs.js",
   "repository": {
     "type": "git",
diff --git a/test/binding.gyp b/test/binding.gyp
index 884d3bc..902c035 100644
--- a/test/binding.gyp
+++ b/test/binding.gyp
@@ -152,4 +152,8 @@
         "target_name" : "typedarrays"
       , "sources"     : [ "cpp/typedarrays.cpp" ]
     }
+    , {
+        "target_name" : "private"
+      , "sources"     : [ "cpp/private.cpp" ]
+    }
 ]}
diff --git a/test/cpp/accessors.cpp b/test/cpp/accessors.cpp
index 4364c87..3e92ef5 100644
--- a/test/cpp/accessors.cpp
+++ b/test/cpp/accessors.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/accessors2.cpp b/test/cpp/accessors2.cpp
index bdd3093..77f388a 100644
--- a/test/cpp/accessors2.cpp
+++ b/test/cpp/accessors2.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/asyncprogressworker.cpp b/test/cpp/asyncprogressworker.cpp
index 46ad0b7..8372b93 100644
--- a/test/cpp/asyncprogressworker.cpp
+++ b/test/cpp/asyncprogressworker.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/asyncprogressworkersignal.cpp b/test/cpp/asyncprogressworkersignal.cpp
index b0b12fd..1b450f4 100644
--- a/test/cpp/asyncprogressworkersignal.cpp
+++ b/test/cpp/asyncprogressworkersignal.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/asyncprogressworkerstream.cpp b/test/cpp/asyncprogressworkerstream.cpp
index 7b71f0e..dbbfe54 100644
--- a/test/cpp/asyncprogressworkerstream.cpp
+++ b/test/cpp/asyncprogressworkerstream.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/asyncworker.cpp b/test/cpp/asyncworker.cpp
index ab0e642..8ebf003 100644
--- a/test/cpp/asyncworker.cpp
+++ b/test/cpp/asyncworker.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/asyncworkererror.cpp b/test/cpp/asyncworkererror.cpp
index 372174a..41993d2 100644
--- a/test/cpp/asyncworkererror.cpp
+++ b/test/cpp/asyncworkererror.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/buffer.cpp b/test/cpp/buffer.cpp
index 21c856c..95c2b4c 100644
--- a/test/cpp/buffer.cpp
+++ b/test/cpp/buffer.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/bufferworkerpersistent.cpp b/test/cpp/bufferworkerpersistent.cpp
index 8900bec..b7394e4 100644
--- a/test/cpp/bufferworkerpersistent.cpp
+++ b/test/cpp/bufferworkerpersistent.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/converters.cpp b/test/cpp/converters.cpp
index 36631a0..a90eba8 100644
--- a/test/cpp/converters.cpp
+++ b/test/cpp/converters.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/error.cpp b/test/cpp/error.cpp
index cba3b31..f138a56 100644
--- a/test/cpp/error.cpp
+++ b/test/cpp/error.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/gc.cpp b/test/cpp/gc.cpp
index c6e6886..ce01c64 100644
--- a/test/cpp/gc.cpp
+++ b/test/cpp/gc.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/indexedinterceptors.cpp b/test/cpp/indexedinterceptors.cpp
index ca66aa0..2534c34 100644
--- a/test/cpp/indexedinterceptors.cpp
+++ b/test/cpp/indexedinterceptors.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/isolatedata.cpp b/test/cpp/isolatedata.cpp
index bc2f090..d642727 100644
--- a/test/cpp/isolatedata.cpp
+++ b/test/cpp/isolatedata.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/makecallback.cpp b/test/cpp/makecallback.cpp
index 2206bcd..e2e1e27 100644
--- a/test/cpp/makecallback.cpp
+++ b/test/cpp/makecallback.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/morenews.cpp b/test/cpp/morenews.cpp
index 0ea410f..fea83b9 100644
--- a/test/cpp/morenews.cpp
+++ b/test/cpp/morenews.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/multifile1.cpp b/test/cpp/multifile1.cpp
index ccc822b..a439fce 100644
--- a/test/cpp/multifile1.cpp
+++ b/test/cpp/multifile1.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/multifile2.cpp b/test/cpp/multifile2.cpp
index 999c0eb..69ded2f 100644
--- a/test/cpp/multifile2.cpp
+++ b/test/cpp/multifile2.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/multifile2.h b/test/cpp/multifile2.h
index 7c464a3..5f229c5 100644
--- a/test/cpp/multifile2.h
+++ b/test/cpp/multifile2.h
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/namedinterceptors.cpp b/test/cpp/namedinterceptors.cpp
index e308ef6..4328b2f 100644
--- a/test/cpp/namedinterceptors.cpp
+++ b/test/cpp/namedinterceptors.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/nancallback.cpp b/test/cpp/nancallback.cpp
index 5bbcf1b..26e62a8 100644
--- a/test/cpp/nancallback.cpp
+++ b/test/cpp/nancallback.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/nannew.cpp b/test/cpp/nannew.cpp
index 4999b71..d83d434 100644
--- a/test/cpp/nannew.cpp
+++ b/test/cpp/nannew.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/news.cpp b/test/cpp/news.cpp
index 962bc95..1043dbf 100644
--- a/test/cpp/news.cpp
+++ b/test/cpp/news.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/objectwraphandle.cpp b/test/cpp/objectwraphandle.cpp
index dcbe988..cb69a83 100644
--- a/test/cpp/objectwraphandle.cpp
+++ b/test/cpp/objectwraphandle.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/persistent.cpp b/test/cpp/persistent.cpp
index e28b17c..3bdfe44 100644
--- a/test/cpp/persistent.cpp
+++ b/test/cpp/persistent.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/private.cpp b/test/cpp/private.cpp
new file mode 100644
index 0000000..19fc10d
--- /dev/null
+++ b/test/cpp/private.cpp
@@ -0,0 +1,85 @@
+/*********************************************************************
+ * NAN - Native Abstractions for Node.js
+ *
+ * Copyright (c) 2017 NAN contributors
+ *
+ * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
+ ********************************************************************/
+
+#include <nan.h>
+
+using namespace Nan;  // NOLINT(build/namespaces)
+
+NAN_METHOD(HasPrivateYes) {
+  v8::Local<v8::Object> object = New<v8::Object>();
+  v8::Local<v8::String> key = New("key").ToLocalChecked();
+  v8::Local<v8::String> value = New("value").ToLocalChecked();
+  Maybe<bool> mb = SetPrivate(object, key, value);
+  bool v1 = mb.IsJust() ? mb.FromJust() : false;
+  mb = HasPrivate(object, key);
+  bool v2 = mb.IsJust() ? mb.FromJust() : false;
+  MaybeLocal<v8::Value> mv = GetPrivate(object, key);
+  bool v3 = mv.IsEmpty() ? false :
+      !strcmp(*Utf8String(mv.ToLocalChecked()), "value");
+  info.GetReturnValue().Set(v1 && v2 && v3);
+}
+
+NAN_METHOD(HasPrivateNo) {
+  v8::Local<v8::Object> object = New<v8::Object>();
+  Maybe<bool> mb = HasPrivate(object, New("key").ToLocalChecked());
+  bool v1 = mb.IsJust() ? !mb.FromJust() : false;
+  MaybeLocal<v8::Value> q = GetPrivate(object, New("key").ToLocalChecked());
+  bool v2 = !q.IsEmpty() ? q.ToLocalChecked()->IsUndefined() : false;
+  info.GetReturnValue().Set(v1 && v2);
+}
+
+NAN_METHOD(DeletePrivateNo) {
+  v8::Local<v8::Object> object = New<v8::Object>();
+  v8::Local<v8::String> key = New("key").ToLocalChecked();
+  v8::Local<v8::String> value = New("value").ToLocalChecked();
+  Maybe<bool> mb = DeletePrivate(object, key);
+  bool v1 = mb.IsJust() ? mb.FromJust() : false;
+  mb = SetPrivate(object, key, value);
+  bool v2 = mb.IsJust() ? mb.FromJust() : false;
+  mb = DeletePrivate(object, key);
+  bool v3 = mb.IsJust() ? mb.FromJust() : false;
+  info.GetReturnValue().Set(v1 && v2 && v3);
+}
+
+NAN_METHOD(NoConflict) {
+  v8::Local<v8::Object> object = New<v8::Object>();
+  v8::Local<v8::String> key = New("key").ToLocalChecked();
+  v8::Local<v8::String> value = New("value").ToLocalChecked();
+  v8::Local<v8::String> other_value = New("other_value").ToLocalChecked();
+  SetPrivate(object, key, value);
+  Set(object, key, other_value);
+  v8::Local<v8::Value> got = GetPrivate(object, key).ToLocalChecked();
+  bool v1 = got.As<v8::String>()->StrictEquals(value);
+  v8::Local<v8::Value> got_other = Get(object, key).ToLocalChecked();
+  bool v2 = got_other->StrictEquals(other_value);
+  DeletePrivate(object, key);
+  got_other = Get(object, key).ToLocalChecked();
+  bool v3 = got_other->StrictEquals(other_value);
+  info.GetReturnValue().Set(v1 && v2 && v3);
+}
+
+NAN_MODULE_INIT(Init) {
+  Set(target
+    , New<v8::String>("hasPrivateYes").ToLocalChecked()
+    , GetFunction(New<v8::FunctionTemplate>(HasPrivateYes)).ToLocalChecked()
+  );
+  Set(target
+    , New<v8::String>("hasPrivateNo").ToLocalChecked()
+    , GetFunction(New<v8::FunctionTemplate>(HasPrivateNo)).ToLocalChecked()
+  );
+  Set(target
+    , New<v8::String>("deletePrivateNo").ToLocalChecked()
+    , GetFunction(New<v8::FunctionTemplate>(DeletePrivateNo)).ToLocalChecked()
+  );
+  Set(target
+    , New<v8::String>("noConflict").ToLocalChecked()
+    , GetFunction(New<v8::FunctionTemplate>(NoConflict)).ToLocalChecked()
+  );
+}
+
+NODE_MODULE(private, Init)
diff --git a/test/cpp/returnemptystring.cpp b/test/cpp/returnemptystring.cpp
index 9842315..8272f28 100644
--- a/test/cpp/returnemptystring.cpp
+++ b/test/cpp/returnemptystring.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/returnnull.cpp b/test/cpp/returnnull.cpp
index 3ec691f..825d104 100644
--- a/test/cpp/returnnull.cpp
+++ b/test/cpp/returnnull.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/returnundefined.cpp b/test/cpp/returnundefined.cpp
index c98f8a7..8fd7984 100644
--- a/test/cpp/returnundefined.cpp
+++ b/test/cpp/returnundefined.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/returnvalue.cpp b/test/cpp/returnvalue.cpp
index cdab14b..5ceb680 100644
--- a/test/cpp/returnvalue.cpp
+++ b/test/cpp/returnvalue.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/setcallhandler.cpp b/test/cpp/setcallhandler.cpp
index 3b5e246..d1584ea 100644
--- a/test/cpp/setcallhandler.cpp
+++ b/test/cpp/setcallhandler.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/settemplate.cpp b/test/cpp/settemplate.cpp
index 6ca4813..6e34d6b 100644
--- a/test/cpp/settemplate.cpp
+++ b/test/cpp/settemplate.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/strings.cpp b/test/cpp/strings.cpp
index 7c7bdb3..a01ff16 100644
--- a/test/cpp/strings.cpp
+++ b/test/cpp/strings.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/symbols.cpp b/test/cpp/symbols.cpp
index bf323a0..90e18c1 100644
--- a/test/cpp/symbols.cpp
+++ b/test/cpp/symbols.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/threadlocal.cpp b/test/cpp/threadlocal.cpp
index b071552..9f42bd0 100644
--- a/test/cpp/threadlocal.cpp
+++ b/test/cpp/threadlocal.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/trycatch.cpp b/test/cpp/trycatch.cpp
index f164719..c685597 100644
--- a/test/cpp/trycatch.cpp
+++ b/test/cpp/trycatch.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/typedarrays.cpp b/test/cpp/typedarrays.cpp
index 6b9eef6..2ed5ff4 100644
--- a/test/cpp/typedarrays.cpp
+++ b/test/cpp/typedarrays.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/weak.cpp b/test/cpp/weak.cpp
index fcf7960..795c7a8 100644
--- a/test/cpp/weak.cpp
+++ b/test/cpp/weak.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/weak2.cpp b/test/cpp/weak2.cpp
index 098e336..9687eb2 100644
--- a/test/cpp/weak2.cpp
+++ b/test/cpp/weak2.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/cpp/wrappedobjectfactory.cpp b/test/cpp/wrappedobjectfactory.cpp
index 3e511c6..b3ebf9d 100644
--- a/test/cpp/wrappedobjectfactory.cpp
+++ b/test/cpp/wrappedobjectfactory.cpp
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/accessors-test.js b/test/js/accessors-test.js
index 0ddc51e..23d99ab 100644
--- a/test/js/accessors-test.js
+++ b/test/js/accessors-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/accessors2-test.js b/test/js/accessors2-test.js
index 7869dea..d80e19c 100644
--- a/test/js/accessors2-test.js
+++ b/test/js/accessors2-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/asyncprogressworker-test.js b/test/js/asyncprogressworker-test.js
index 16df7c2..f2643c0 100644
--- a/test/js/asyncprogressworker-test.js
+++ b/test/js/asyncprogressworker-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/asyncprogressworkersignal-test.js b/test/js/asyncprogressworkersignal-test.js
index 493ce5b..59c2866 100644
--- a/test/js/asyncprogressworkersignal-test.js
+++ b/test/js/asyncprogressworkersignal-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/asyncprogressworkerstream-test.js b/test/js/asyncprogressworkerstream-test.js
index f312e3b..3c09dc9 100644
--- a/test/js/asyncprogressworkerstream-test.js
+++ b/test/js/asyncprogressworkerstream-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/asyncworker-test.js b/test/js/asyncworker-test.js
index 39e18c0..1d4d60c 100644
--- a/test/js/asyncworker-test.js
+++ b/test/js/asyncworker-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/asyncworkererror-test.js b/test/js/asyncworkererror-test.js
index 3adb2e1..ebdb8d6 100644
--- a/test/js/asyncworkererror-test.js
+++ b/test/js/asyncworkererror-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/buffer-test.js b/test/js/buffer-test.js
index a9dfce2..7a88764 100644
--- a/test/js/buffer-test.js
+++ b/test/js/buffer-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/bufferworkerpersistent-test.js b/test/js/bufferworkerpersistent-test.js
index e12fc82..4f9fcf8 100644
--- a/test/js/bufferworkerpersistent-test.js
+++ b/test/js/bufferworkerpersistent-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/converters-test.js b/test/js/converters-test.js
index 7d32c21..11cbd0a 100644
--- a/test/js/converters-test.js
+++ b/test/js/converters-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/error-test.js b/test/js/error-test.js
index 98774b0..2bb439d 100644
--- a/test/js/error-test.js
+++ b/test/js/error-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/gc-test.js b/test/js/gc-test.js
index 57ec184..e5a0b33 100644
--- a/test/js/gc-test.js
+++ b/test/js/gc-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/indexedinterceptors-test.js b/test/js/indexedinterceptors-test.js
index 5a5a471..98ae142 100644
--- a/test/js/indexedinterceptors-test.js
+++ b/test/js/indexedinterceptors-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/isolatedata-test.js b/test/js/isolatedata-test.js
index 0673df0..7d40af8 100644
--- a/test/js/isolatedata-test.js
+++ b/test/js/isolatedata-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/makecallback-test.js b/test/js/makecallback-test.js
index bc94fb6..8558a6a 100644
--- a/test/js/makecallback-test.js
+++ b/test/js/makecallback-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/morenews-test.js b/test/js/morenews-test.js
index 675b0ea..0dc8300 100644
--- a/test/js/morenews-test.js
+++ b/test/js/morenews-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/multifile-test.js b/test/js/multifile-test.js
index f5e1047..072b8fe 100644
--- a/test/js/multifile-test.js
+++ b/test/js/multifile-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/namedinterceptors-test.js b/test/js/namedinterceptors-test.js
index 55a917d..68f2da9 100644
--- a/test/js/namedinterceptors-test.js
+++ b/test/js/namedinterceptors-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/nancallback-test.js b/test/js/nancallback-test.js
index 901ba4f..c755aba 100644
--- a/test/js/nancallback-test.js
+++ b/test/js/nancallback-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/nannew-test.js b/test/js/nannew-test.js
index 4b87f7b..83cbc83 100644
--- a/test/js/nannew-test.js
+++ b/test/js/nannew-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/news-test.js b/test/js/news-test.js
index a6cbd05..63cae98 100644
--- a/test/js/news-test.js
+++ b/test/js/news-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/objectwraphandle-test.js b/test/js/objectwraphandle-test.js
index f7fac1f..9b863ff 100644
--- a/test/js/objectwraphandle-test.js
+++ b/test/js/objectwraphandle-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/persistent-test.js b/test/js/persistent-test.js
index b7dd33f..dce4e73 100644
--- a/test/js/persistent-test.js
+++ b/test/js/persistent-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/gc-test.js b/test/js/private-test.js
similarity index 50%
copy from test/js/gc-test.js
copy to test/js/private-test.js
index 57ec184..3212265 100644
--- a/test/js/gc-test.js
+++ b/test/js/private-test.js
@@ -1,22 +1,23 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
 
 const test     = require('tap').test
     , testRoot = require('path').resolve(__dirname, '..')
-    , bindings = require('bindings')({ module_root: testRoot, bindings: 'gc' });
+    , bindings = require('bindings')({ module_root: testRoot, bindings: 'private' });
 
-test('gc', function (t) {
-  t.plan(3);
-
-  t.type(bindings.hook, 'function');
-  t.type(bindings.check, 'function');
-
-  bindings.hook();
-  gc();
-  t.ok(bindings.check());
+test('private', function (t) {
+  t.plan(8);
+  t.type(bindings.hasPrivateYes, 'function');
+  t.type(bindings.hasPrivateNo, 'function');
+  t.type(bindings.deletePrivateNo, 'function');
+  t.type(bindings.noConflict, 'function');
+  t.ok(bindings.hasPrivateYes());
+  t.ok(bindings.hasPrivateNo());
+  t.ok(bindings.deletePrivateNo());
+  t.ok(bindings.noConflict());
 });
diff --git a/test/js/returnemptystring-test.js b/test/js/returnemptystring-test.js
index 2d47be9..078c277 100644
--- a/test/js/returnemptystring-test.js
+++ b/test/js/returnemptystring-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/returnnull-test.js b/test/js/returnnull-test.js
index fd1a415..3305d3d 100644
--- a/test/js/returnnull-test.js
+++ b/test/js/returnnull-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/returnundefined-test.js b/test/js/returnundefined-test.js
index 8911af5..048aa37 100644
--- a/test/js/returnundefined-test.js
+++ b/test/js/returnundefined-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/returnvalue-test.js b/test/js/returnvalue-test.js
index d3a110a..5d87558 100644
--- a/test/js/returnvalue-test.js
+++ b/test/js/returnvalue-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/setcallhandler-test.js b/test/js/setcallhandler-test.js
index e4f1418..29fc534 100644
--- a/test/js/setcallhandler-test.js
+++ b/test/js/setcallhandler-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/settemplate-test.js b/test/js/settemplate-test.js
index 9ead91e..5748062 100644
--- a/test/js/settemplate-test.js
+++ b/test/js/settemplate-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/strings-test.js b/test/js/strings-test.js
index aa3467d..9f3c45b 100644
--- a/test/js/strings-test.js
+++ b/test/js/strings-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/symbols-test.js b/test/js/symbols-test.js
index d22af35..36bb5b5 100644
--- a/test/js/symbols-test.js
+++ b/test/js/symbols-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/threadlocal-test.js b/test/js/threadlocal-test.js
index a8c1385..49fab2d 100644
--- a/test/js/threadlocal-test.js
+++ b/test/js/threadlocal-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/trycatch-test.js b/test/js/trycatch-test.js
index 67c501d..0e19a46 100644
--- a/test/js/trycatch-test.js
+++ b/test/js/trycatch-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/typedarrays-test.js b/test/js/typedarrays-test.js
index debef10..3696624 100644
--- a/test/js/typedarrays-test.js
+++ b/test/js/typedarrays-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/weak-test.js b/test/js/weak-test.js
index 5c91590..c6d0353 100644
--- a/test/js/weak-test.js
+++ b/test/js/weak-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/weak2-test.js b/test/js/weak2-test.js
index 5658fa1..1cc4284 100644
--- a/test/js/weak2-test.js
+++ b/test/js/weak2-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/test/js/wrappedobjectfactory-test.js b/test/js/wrappedobjectfactory-test.js
index 75e9179..a7cd66d 100644
--- a/test/js/wrappedobjectfactory-test.js
+++ b/test/js/wrappedobjectfactory-test.js
@@ -1,7 +1,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/
diff --git a/tools/1to2.js b/tools/1to2.js
index b7498e4..1e86be7 100755
--- a/tools/1to2.js
+++ b/tools/1to2.js
@@ -2,7 +2,7 @@
 /*********************************************************************
  * NAN - Native Abstractions for Node.js
  *
- * Copyright (c) 2016 NAN contributors
+ * Copyright (c) 2017 NAN contributors
  *
  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  ********************************************************************/

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-nan.git



More information about the Pkg-javascript-commits mailing list