Blob Blame History Raw
commit 75f9e5fe3a8f9e2ddb454f6c824026d85d144c02
Author: Tom Hughes <tom@compton.nu>
Date:   Fri Jun 21 17:02:32 2019 +0100

    Update for Node.js 12.x support
    
    Fixes #258

diff --git a/.travis.yml b/.travis.yml
index be3f322f..4dbbc757 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,36 @@ addons:
 
 matrix:
   include:
+    - os: osx
+      env: NODE_NVM_VERSION="12" TARGET=STATIC
+    - os: linux
+      dist: precise
+      env: NODE_NVM_VERSION="12" TARGET=STATIC
+    - os: osx
+      env: NODE_NVM_VERSION="12" TARGET=SHARED
+    - os: linux
+      dist: trusty
+      env: NODE_NVM_VERSION="12" TARGET=SHARED
+    - os: osx
+      env: NODE_NVM_VERSION="12" TARGET=TRUNK
+    - os: linux
+      dist: trusty
+      env: NODE_NVM_VERSION="12" TARGET=TRUNK
+    - os: osx
+      env: NODE_NVM_VERSION="11" TARGET=STATIC
+    - os: linux
+      dist: precise
+      env: NODE_NVM_VERSION="11" TARGET=STATIC
+    - os: osx
+      env: NODE_NVM_VERSION="11" TARGET=SHARED
+    - os: linux
+      dist: trusty
+      env: NODE_NVM_VERSION="11" TARGET=SHARED
+    - os: osx
+      env: NODE_NVM_VERSION="11" TARGET=TRUNK
+    - os: linux
+      dist: trusty
+      env: NODE_NVM_VERSION="11" TARGET=TRUNK
     - os: osx
       env: NODE_NVM_VERSION="10" TARGET=STATIC
     - os: linux
@@ -69,6 +99,8 @@ matrix:
       dist: trusty
       env: NODE_NVM_VERSION="4" TARGET=SHARED
   allow_failures:
+    - env: NODE_NVM_VERSION="12" TARGET=TRUNK
+    - env: NODE_NVM_VERSION="11" TARGET=TRUNK
     - env: NODE_NVM_VERSION="10" TARGET=TRUNK
 
 before_install:
diff --git a/package.json b/package.json
index ba7a2299..5d0eb2ab 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,7 @@
     "publish-yuidoc": "npm run yuidoc && node ./scripts/publish-docs.js"
   },
   "dependencies": {
-    "nan": "~2.10.0",
+    "nan": "~2.14.0",
     "node-pre-gyp": "^0.13.0"
   },
   "bundledDependencies": [
diff --git a/src/collections/dataset_bands.cpp b/src/collections/dataset_bands.cpp
index 96a0854b..b8fa218d 100644
--- a/src/collections/dataset_bands.cpp
+++ b/src/collections/dataset_bands.cpp
@@ -23,7 +23,7 @@ void DatasetBands::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "ds", dsGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("DatasetBands").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("DatasetBands").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -71,7 +71,7 @@ Local<Value> DatasetBands::New(Local<Value> ds_obj)
 	DatasetBands *wrapped = new DatasetBands();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(DatasetBands::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(DatasetBands::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), ds_obj);
 
 	return scope.Escape(obj);
diff --git a/src/collections/dataset_layers.cpp b/src/collections/dataset_layers.cpp
index bde1bfa5..294eec45 100644
--- a/src/collections/dataset_layers.cpp
+++ b/src/collections/dataset_layers.cpp
@@ -26,7 +26,7 @@ void DatasetLayers::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "ds", dsGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("DatasetLayers").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("DatasetLayers").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -74,7 +74,7 @@ Local<Value> DatasetLayers::New(Local<Value> ds_obj)
 	DatasetLayers *wrapped = new DatasetLayers();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(DatasetLayers::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(DatasetLayers::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), ds_obj);
 
@@ -127,7 +127,7 @@ NAN_METHOD(DatasetLayers::get)
 		std::string layer_name = *Nan::Utf8String(info[0]);
 		lyr = raw->GetLayerByName(layer_name.c_str());
 	} else if(info[0]->IsNumber()) {
-		lyr = raw->GetLayer(info[0]->IntegerValue());
+		lyr = raw->GetLayer(Nan::To<int64_t>(info[0]).ToChecked());
 	} else {
 		Nan::ThrowTypeError("method must be given integer or string");
 		return;
diff --git a/src/collections/feature_defn_fields.cpp b/src/collections/feature_defn_fields.cpp
index 26d99c10..847dcf29 100644
--- a/src/collections/feature_defn_fields.cpp
+++ b/src/collections/feature_defn_fields.cpp
@@ -27,7 +27,7 @@ void FeatureDefnFields::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "featureDefn", featureDefnGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("FeatureDefnFields").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("FeatureDefnFields").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -72,7 +72,7 @@ Local<Value> FeatureDefnFields::New(Local<Value> feature_defn)
 	FeatureDefnFields *wrapped = new FeatureDefnFields();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(FeatureDefnFields::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(FeatureDefnFields::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), feature_defn);
 
 	return scope.Escape(obj);
@@ -179,7 +179,7 @@ NAN_METHOD(FeatureDefnFields::getNames)
 
 	for (int i = 0; i < n;  i++) {
 		OGRFieldDefn *field_def = feature_def->get()->GetFieldDefn(i);
-		result->Set(i, SafeString::New(field_def->GetNameRef()));
+		Nan::Set(result, i, SafeString::New(field_def->GetNameRef()));
 	}
 
 	info.GetReturnValue().Set(result);
@@ -248,7 +248,7 @@ NAN_METHOD(FeatureDefnFields::add)
 		Local<Array> array = info[0].As<Array>();
 		int n = array->Length();
 		for (int i = 0; i < n; i++) {
-			Local<Value> element = array->Get(i);
+			Local<Value> element = Nan::Get(array, i).ToLocalChecked();
 			if (IS_WRAPPED(element, FieldDefn)) {
 				field_def = Nan::ObjectWrap::Unwrap<FieldDefn>(element.As<Object>());
 				feature_def->get()->AddFieldDefn(field_def->get());
@@ -305,14 +305,14 @@ NAN_METHOD(FeatureDefnFields::reorder)
 	int *field_map_array = new int[n];
 
 	for (int i = 0; i < n; i++) {
-		Local<Value> val = field_map->Get(i);
+		Local<Value> val = Nan::Get(field_map, i).ToLocalChecked();
 		if (!val->IsNumber()) {
 			delete [] field_map_array;
 			Nan::ThrowError("Array must only contain integers");
 			return;
 		}
 
-		int key = val->IntegerValue();
+		int key = Nan::To<int64_t>(val).ToChecked();
 		if (key < 0 || key >= n) {
 			delete [] field_map_array;
 			Nan::ThrowError("Values must be between 0 and field count - 1");
diff --git a/src/collections/feature_fields.cpp b/src/collections/feature_fields.cpp
index dae7246d..333462de 100644
--- a/src/collections/feature_fields.cpp
+++ b/src/collections/feature_fields.cpp
@@ -27,7 +27,7 @@ void FeatureFields::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "feature", featureGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("FeatureFields").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("FeatureFields").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -72,7 +72,7 @@ Local<Value> FeatureFields::New(Local<Value> layer_obj)
 	FeatureFields *wrapped = new FeatureFields();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(FeatureFields::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(FeatureFields::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), layer_obj);
 
 	return scope.Escape(obj);
@@ -86,9 +86,9 @@ NAN_METHOD(FeatureFields::toString)
 
 inline bool setField(OGRFeature* f, int field_index, Local<Value> val){
 	if (val->IsInt32()) {
-		f->SetField(field_index, val->Int32Value());
+		f->SetField(field_index, Nan::To<int32_t>(val).ToChecked());
 	} else if (val->IsNumber()) {
-		f->SetField(field_index, val->NumberValue());
+		f->SetField(field_index, Nan::To<double>(val).ToChecked());
 	} else if (val->IsString()) {
 		std::string str = *Nan::Utf8String(val);
 		f->SetField(field_index, str.c_str());
@@ -143,7 +143,7 @@ NAN_METHOD(FeatureFields::set)
 			}
 
 			for (i = 0; i < n; i++) {
-				Local<Value> val = values->Get(i);
+				Local<Value> val = Nan::Get(values, i).ToLocalChecked();
 				if(setField(f->get(), i, val)){
 					Nan::ThrowError("Unsupported type of field value");
 					return;
@@ -175,7 +175,7 @@ NAN_METHOD(FeatureFields::set)
 					continue;
 				}
 
-				Local<Value> val = values->Get(Nan::New(field_name).ToLocalChecked());
+				Local<Value> val = Nan::Get(values, Nan::New(field_name).ToLocalChecked()).ToLocalChecked();
 				if (setField(f->get(), field_index, val)) {
 					Nan::ThrowError("Unsupported type of field value");
 					return;
@@ -262,7 +262,7 @@ NAN_METHOD(FeatureFields::reset)
 		field_index = f->get()->GetFieldIndex(field_name);
 		if(field_index == -1) continue;
 
-		Local<Value> val = values->Get(Nan::New(field_name).ToLocalChecked());
+		Local<Value> val = Nan::Get(values, Nan::New(field_name).ToLocalChecked()).ToLocalChecked();
 		if(setField(f->get(), field_index, val)){
 			Nan::ThrowError("Unsupported type of field value");
 			return;
@@ -361,7 +361,7 @@ NAN_METHOD(FeatureFields::toObject)
 			return; //get method threw an exception
 		}
 
-		obj->Set(Nan::New(key).ToLocalChecked(), val);
+		Nan::Set(obj, Nan::New(key).ToLocalChecked(), val);
 	}
 	info.GetReturnValue().Set(obj);
 }
@@ -394,7 +394,7 @@ NAN_METHOD(FeatureFields::toArray)
 			return; //get method threw an exception
 		}
 
-		array->Set(i, val);
+		Nan::Set(array, i, val);
 	}
 	info.GetReturnValue().Set(array);
 }
@@ -507,7 +507,7 @@ NAN_METHOD(FeatureFields::getNames)
 			Nan::ThrowError("Error getting field name");
 			return;
 		}
-		result->Set(i, Nan::New(field_name).ToLocalChecked());
+		Nan::Set(result, i, Nan::New(field_name).ToLocalChecked());
 	}
 
 	info.GetReturnValue().Set(result);
@@ -524,7 +524,7 @@ Local<Value> FeatureFields::getFieldAsIntegerList(OGRFeature* feature, int field
 	Local<Array> return_array = Nan::New<Array>(count_of_values);
 
 	for (int index = 0; index < count_of_values; index++) {
-		return_array->Set(index, Nan::New<Integer>(values[index]));
+		Nan::Set(return_array, index, Nan::New<Integer>(values[index]));
 	}
 
 	return scope.Escape(return_array);
@@ -542,7 +542,7 @@ Local<Value> FeatureFields::getFieldAsDoubleList(OGRFeature* feature, int field_
 	Local<Array> return_array = Nan::New<Array>(count_of_values);
 
 	for (int index = 0; index < count_of_values; index++) {
-		return_array->Set(index, Nan::New<Number>(values[index]));
+		Nan::Set(return_array, index, Nan::New<Number>(values[index]));
 	}
 
 	return scope.Escape(return_array);
@@ -559,7 +559,7 @@ Local<Value> FeatureFields::getFieldAsStringList(OGRFeature* feature, int field_
 	Local<Array> return_array = Nan::New<Array>(count_of_values);
 
 	for (int index = 0; index < count_of_values; index++) {
-		return_array->Set(index, SafeString::New(values[index]));
+		Nan::Set(return_array, index, SafeString::New(values[index]));
 	}
 
 	return scope.Escape(return_array);
@@ -597,25 +597,25 @@ Local<Value> FeatureFields::getFieldAsDateTime(OGRFeature* feature, int field_in
 		Local<Object> hash = Nan::New<Object>();
 
 		if (year) {
-			hash->Set(Nan::New("year").ToLocalChecked(), Nan::New<Integer>(year));
+			Nan::Set(hash, Nan::New("year").ToLocalChecked(), Nan::New<Integer>(year));
 		}
 		if (month) {
-			hash->Set(Nan::New("month").ToLocalChecked(), Nan::New<Integer>(month));
+			Nan::Set(hash, Nan::New("month").ToLocalChecked(), Nan::New<Integer>(month));
 		}
 		if (day) {
-			hash->Set(Nan::New("day").ToLocalChecked(), Nan::New<Integer>(day));
+			Nan::Set(hash, Nan::New("day").ToLocalChecked(), Nan::New<Integer>(day));
 		}
 		if (hour) {
-			hash->Set(Nan::New("hour").ToLocalChecked(), Nan::New<Integer>(hour));
+			Nan::Set(hash, Nan::New("hour").ToLocalChecked(), Nan::New<Integer>(hour));
 		}
 		if (minute) {
-			hash->Set(Nan::New("minute").ToLocalChecked(), Nan::New<Integer>(minute));
+			Nan::Set(hash, Nan::New("minute").ToLocalChecked(), Nan::New<Integer>(minute));
 		}
 		if (second) {
-			hash->Set(Nan::New("second").ToLocalChecked(), Nan::New<Integer>(second));
+			Nan::Set(hash, Nan::New("second").ToLocalChecked(), Nan::New<Integer>(second));
 		}
 		if (timezone) {
-			hash->Set(Nan::New("timezone").ToLocalChecked(), Nan::New<Integer>(timezone));
+			Nan::Set(hash, Nan::New("timezone").ToLocalChecked(), Nan::New<Integer>(timezone));
 		}
 
 		return scope.Escape(hash);
diff --git a/src/collections/gdal_drivers.cpp b/src/collections/gdal_drivers.cpp
index 076772dc..effcb688 100644
--- a/src/collections/gdal_drivers.cpp
+++ b/src/collections/gdal_drivers.cpp
@@ -24,7 +24,7 @@ void GDALDrivers::Initialize(Local<Object> target)
 	OGRRegisterAll();
 	#endif
 
-	target->Set(Nan::New("GDALDrivers").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("GDALDrivers").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 	
 	constructor.Reset(lcons);
 }
@@ -69,7 +69,7 @@ Local<Value> GDALDrivers::New()
 	GDALDrivers *wrapped = new GDALDrivers();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(GDALDrivers::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(GDALDrivers::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -145,7 +145,7 @@ NAN_METHOD(GDALDrivers::get)
 		}
 
 	} else if(info[0]->IsNumber()) {
-		int i = static_cast<int>(info[0]->IntegerValue());
+		int i = static_cast<int>(Nan::To<int64_t>(info[0]).ToChecked());
 
 		gdal_driver = GetGDALDriverManager()->GetDriver(i);
 		if(gdal_driver) {
@@ -196,7 +196,7 @@ NAN_METHOD(GDALDrivers::getNames)
 		#if GDAL_VERSION_MAJOR < 2
 		if(name == "VRT") name = "VRT:raster";
 		#endif
-		driver_names->Set(i, SafeString::New(name.c_str()));
+		Nan::Set(driver_names, i, SafeString::New(name.c_str()));
 	}
 
 
@@ -205,7 +205,7 @@ NAN_METHOD(GDALDrivers::getNames)
 		OGRSFDriver *driver = OGRSFDriverRegistrar::GetRegistrar()->GetDriver(i - gdal_count);
 		name = driver->GetName();
 		if(name == "VRT") name = "VRT:vector";
-		driver_names->Set(i, SafeString::New(name.c_str()));
+		Nan::Set(driver_names, i, SafeString::New(name.c_str()));
 	}
 	#endif
 	
@@ -231,4 +231,4 @@ NAN_METHOD(GDALDrivers::count)
 	info.GetReturnValue().Set(Nan::New<Integer>(count));
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/collections/geometry_collection_children.cpp b/src/collections/geometry_collection_children.cpp
index 4e896358..0099f022 100644
--- a/src/collections/geometry_collection_children.cpp
+++ b/src/collections/geometry_collection_children.cpp
@@ -21,7 +21,7 @@ void GeometryCollectionChildren::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "remove", remove);
 	Nan::SetPrototypeMethod(lcons, "add", add);
 
-	target->Set(Nan::New("GeometryCollectionChildren").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("GeometryCollectionChildren").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -66,7 +66,7 @@ Local<Value> GeometryCollectionChildren::New(Local<Value> geom)
 	GeometryCollectionChildren *wrapped = new GeometryCollectionChildren();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(GeometryCollectionChildren::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(GeometryCollectionChildren::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), geom);
 
 	return scope.Escape(obj);
@@ -174,7 +174,7 @@ NAN_METHOD(GeometryCollectionChildren::add)
 		Local<Array> array = info[0].As<Array>();
 		int length = array->Length();
 		for (int i = 0; i < length; i++){
-			Local<Value> element = array->Get(i);
+			Local<Value> element = Nan::Get(array, i).ToLocalChecked();
 			if(IS_WRAPPED(element, Geometry)){
 				child = Nan::ObjectWrap::Unwrap<Geometry>(element.As<Object>());
 				OGRErr err = geom->get()->addGeometry(child->get());
@@ -202,4 +202,4 @@ NAN_METHOD(GeometryCollectionChildren::add)
 	return;
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/collections/layer_features.cpp b/src/collections/layer_features.cpp
index b0ab5cea..7adc990b 100644
--- a/src/collections/layer_features.cpp
+++ b/src/collections/layer_features.cpp
@@ -26,7 +26,7 @@ void LayerFeatures::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "layer", layerGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("LayerFeatures").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("LayerFeatures").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -71,7 +71,7 @@ Local<Value> LayerFeatures::New(Local<Value> layer_obj)
 	LayerFeatures *wrapped = new LayerFeatures();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(LayerFeatures::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(LayerFeatures::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), layer_obj);
 
 	return scope.Escape(obj);
diff --git a/src/collections/layer_fields.cpp b/src/collections/layer_fields.cpp
index 5689485b..e3a0e641 100644
--- a/src/collections/layer_fields.cpp
+++ b/src/collections/layer_fields.cpp
@@ -27,7 +27,7 @@ void LayerFields::Initialize(Local<Object> target)
 
 	ATTR_DONT_ENUM(lcons, "layer", layerGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("LayerFields").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("LayerFields").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -70,7 +70,7 @@ Local<Value> LayerFields::New(Local<Value> layer_obj)
 	LayerFields *wrapped = new LayerFields();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(LayerFields::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(LayerFields::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), layer_obj);
 
 	return scope.Escape(obj);
@@ -203,7 +203,7 @@ NAN_METHOD(LayerFields::getNames)
 
 	for (int i = 0; i < n;  i++) {
 		OGRFieldDefn *field_def = def->GetFieldDefn(i);
-		result->Set(i, SafeString::New(field_def->GetNameRef()));
+		Nan::Set(result, i, SafeString::New(field_def->GetNameRef()));
 	}
 
 	info.GetReturnValue().Set(result);
@@ -282,7 +282,7 @@ NAN_METHOD(LayerFields::add)
 		Local<Array> array = info[0].As<Array>();
 		int n = array->Length();
 		for (int i = 0; i < n; i++) {
-			Local<Value> element = array->Get(i);
+			Local<Value> element = Nan::Get(array, i).ToLocalChecked();
 			if (IS_WRAPPED(element, FieldDefn)) {
 				field_def = Nan::ObjectWrap::Unwrap<FieldDefn>(element.As<Object>());
 				err = layer->get()->CreateField(field_def->get(), approx);
@@ -353,14 +353,14 @@ NAN_METHOD(LayerFields::reorder)
 	int *field_map_array = new int[n];
 
 	for (int i = 0; i < n; i++) {
-		Local<Value> val = field_map->Get(i);
+		Local<Value> val = Nan::Get(field_map, i).ToLocalChecked();
 		if (!val->IsNumber()) {
 			delete [] field_map_array;
 			Nan::ThrowError("Array must only contain integers");
 			return;
 		}
 
-		int key = val->IntegerValue();
+		int key = Nan::To<int64_t>(val).ToChecked();
 		if (key < 0 || key >= n) {
 			delete [] field_map_array;
 			Nan::ThrowError("Values must be between 0 and field count - 1");
diff --git a/src/collections/linestring_points.cpp b/src/collections/linestring_points.cpp
index ab4a195b..10e6671b 100644
--- a/src/collections/linestring_points.cpp
+++ b/src/collections/linestring_points.cpp
@@ -24,7 +24,7 @@ void LineStringPoints::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "reverse", reverse);
 	Nan::SetPrototypeMethod(lcons, "resize", resize);
 
-	target->Set(Nan::New("LineStringPoints").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("LineStringPoints").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -69,7 +69,7 @@ Local<Value> LineStringPoints::New(Local<Value> geom)
 	LineStringPoints *wrapped = new LineStringPoints();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(LineStringPoints::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(LineStringPoints::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), geom);
 
 	return scope.Escape(obj);
@@ -211,12 +211,12 @@ NAN_METHOD(LineStringPoints::set)
 
 			Local<String> z_prop_name = Nan::New("z").ToLocalChecked();
 			if (Nan::HasOwnProperty(obj, z_prop_name).FromMaybe(false)) {
-				Local<Value> z_val = obj->Get(z_prop_name);
+				Local<Value> z_val = Nan::Get(obj, z_prop_name).ToLocalChecked();
 				if (!z_val->IsNumber()) {
 					Nan::ThrowError("z property must be number");
 					return;
 				}
-				geom->get()->setPoint(i, x, y, z_val->NumberValue());
+				geom->get()->setPoint(i, x, y, Nan::To<double>(z_val).ToChecked());
 			} else {
 				geom->get()->setPoint(i, x, y);
 			}
@@ -232,14 +232,14 @@ NAN_METHOD(LineStringPoints::set)
 			return;
 		}
 		if(n == 2){
-			geom->get()->setPoint(i, info[1]->NumberValue(), info[2]->NumberValue());
+			geom->get()->setPoint(i, Nan::To<double>(info[1]).ToChecked(), Nan::To<double>(info[2]).ToChecked());
 		} else {
 			if(!info[3]->IsNumber()){
 				Nan::ThrowError("Number expected for fourth argument");
 				return;
 			}
 
-			geom->get()->setPoint(i, info[1]->NumberValue(), info[2]->NumberValue(), info[3]->NumberValue());
+			geom->get()->setPoint(i, Nan::To<double>(info[1]).ToChecked(), Nan::To<double>(info[2]).ToChecked(), Nan::To<double>(info[3]).ToChecked());
 		}
 	}
 
@@ -287,7 +287,7 @@ NAN_METHOD(LineStringPoints::add)
 			Local<Array> array = info[0].As<Array>();
 			int length = array->Length();
 			for (int i = 0; i < length; i++){
-				Local<Value> element = array->Get(i);
+				Local<Value> element = Nan::Get(array, i).ToLocalChecked();
 				if(!element->IsObject()) {
 					Nan::ThrowError("All points must be Point objects or objects");
 					return;
@@ -305,12 +305,12 @@ NAN_METHOD(LineStringPoints::add)
 
 					Local<String> z_prop_name = Nan::New("z").ToLocalChecked();
 					if (Nan::HasOwnProperty(element_obj, z_prop_name).FromMaybe(false)) {
-						Local<Value> z_val = element_obj->Get(z_prop_name);
+						Local<Value> z_val = Nan::Get(element_obj, z_prop_name).ToLocalChecked();
 						if (!z_val->IsNumber()) {
 							Nan::ThrowError("z property must be number");
 							return;
 						}
-						geom->get()->addPoint(x, y, z_val->NumberValue());
+						geom->get()->addPoint(x, y, Nan::To<double>(z_val).ToChecked());
 					} else {
 						geom->get()->addPoint(x, y);
 					}
@@ -325,12 +325,12 @@ NAN_METHOD(LineStringPoints::add)
 
 			Local<String> z_prop_name = Nan::New("z").ToLocalChecked();
 			if (Nan::HasOwnProperty(obj, z_prop_name).FromMaybe(false)) {
-				Local<Value> z_val = obj->Get(z_prop_name);
+				Local<Value> z_val = Nan::Get(obj, z_prop_name).ToLocalChecked();
 				if (!z_val->IsNumber()) {
 					Nan::ThrowError("z property must be number");
 					return;
 				}
-				geom->get()->addPoint(x, y, z_val->NumberValue());
+				geom->get()->addPoint(x, y, Nan::To<double>(z_val).ToChecked());
 			} else {
 				geom->get()->addPoint(x, y);
 			}
@@ -346,18 +346,18 @@ NAN_METHOD(LineStringPoints::add)
 			return;
 		}
 		if(n == 2){
-			geom->get()->addPoint(info[0]->NumberValue(), info[1]->NumberValue());
+			geom->get()->addPoint(Nan::To<double>(info[0]).ToChecked(), Nan::To<double>(info[1]).ToChecked());
 		} else {
 			if(!info[2]->IsNumber()){
 				Nan::ThrowError("Number expected for third argument");
 				return;
 			}
 
-			geom->get()->addPoint(info[0]->NumberValue(), info[1]->NumberValue(), info[2]->NumberValue());
+			geom->get()->addPoint(Nan::To<double>(info[0]).ToChecked(), Nan::To<double>(info[1]).ToChecked(), Nan::To<double>(info[2]).ToChecked());
 		}
 	}
 
 	return;
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/collections/polygon_rings.cpp b/src/collections/polygon_rings.cpp
index 0260b7d7..fc64c389 100644
--- a/src/collections/polygon_rings.cpp
+++ b/src/collections/polygon_rings.cpp
@@ -21,7 +21,7 @@ void PolygonRings::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "get", get);
 	Nan::SetPrototypeMethod(lcons, "add", add);
 
-	target->Set(Nan::New("PolygonRings").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("PolygonRings").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -66,7 +66,7 @@ Local<Value> PolygonRings::New(Local<Value> geom)
 	PolygonRings *wrapped = new PolygonRings();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(PolygonRings::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(PolygonRings::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), geom);
 
 	return scope.Escape(obj);
@@ -167,7 +167,7 @@ NAN_METHOD(PolygonRings::add)
 		Local<Array> array = info[0].As<Array>();
 		int length = array->Length();
 		for (int i = 0; i < length; i++){
-			Local<Value> element = array->Get(i);
+			Local<Value> element = Nan::Get(array, i).ToLocalChecked();
 			if (IS_WRAPPED(element, LinearRing)){
 				ring = Nan::ObjectWrap::Unwrap<LinearRing>(element.As<Object>());
 				geom->get()->addRing(ring->get());
@@ -187,4 +187,4 @@ NAN_METHOD(PolygonRings::add)
 	return;
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/collections/rasterband_overviews.cpp b/src/collections/rasterband_overviews.cpp
index f6cfc18e..23c18b7a 100644
--- a/src/collections/rasterband_overviews.cpp
+++ b/src/collections/rasterband_overviews.cpp
@@ -19,7 +19,7 @@ void RasterBandOverviews::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "get", get);
 	Nan::SetPrototypeMethod(lcons, "getBySampleCount", getBySampleCount);
 
-	target->Set(Nan::New("RasterBandOverviews").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("RasterBandOverviews").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -65,7 +65,7 @@ Local<Value> RasterBandOverviews::New(Local<Value> band_obj)
 	RasterBandOverviews *wrapped = new RasterBandOverviews();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(RasterBandOverviews::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(RasterBandOverviews::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), band_obj);
 
 	return scope.Escape(obj);
@@ -162,4 +162,4 @@ NAN_METHOD(RasterBandOverviews::count)
 	info.GetReturnValue().Set(Nan::New<Integer>(band->get()->GetOverviewCount()));
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/collections/rasterband_pixels.cpp b/src/collections/rasterband_pixels.cpp
index 447bfa33..3303a260 100644
--- a/src/collections/rasterband_pixels.cpp
+++ b/src/collections/rasterband_pixels.cpp
@@ -25,7 +25,7 @@ void RasterBandPixels::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "readBlock", readBlock);
 	Nan::SetPrototypeMethod(lcons, "writeBlock", writeBlock);
 
-	target->Set(Nan::New("RasterBandPixels").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("RasterBandPixels").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -78,7 +78,7 @@ Local<Value> RasterBandPixels::New(Local<Value> band_obj)
 	RasterBandPixels *wrapped = new RasterBandPixels();
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(RasterBandPixels::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(RasterBandPixels::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	Nan::SetPrivate(obj, Nan::New("parent_").ToLocalChecked(), band_obj);
 
 	return scope.Escape(obj);
@@ -459,4 +459,4 @@ NAN_METHOD(RasterBandPixels::writeBlock)
 }
 
 
-}
\ No newline at end of file
+}
diff --git a/src/gdal_algorithms.cpp b/src/gdal_algorithms.cpp
index 97d9bad2..3985cc30 100644
--- a/src/gdal_algorithms.cpp
+++ b/src/gdal_algorithms.cpp
@@ -103,7 +103,7 @@ NAN_METHOD(Algorithms::contourGenerate)
 	NODE_DOUBLE_FROM_OBJ_OPT(obj, "interval", interval);
 	NODE_DOUBLE_FROM_OBJ_OPT(obj, "offset", base);
 	if(Nan::HasOwnProperty(obj, Nan::New("fixedLevels").ToLocalChecked()).FromMaybe(false)){
-		if(fixed_level_array.parse(obj->Get(Nan::New("fixedLevels").ToLocalChecked()))){
+		if(fixed_level_array.parse(Nan::Get(obj, Nan::New("fixedLevels").ToLocalChecked()).ToLocalChecked())){
 			return; //error parsing double list
 		} else {
 			fixed_levels = fixed_level_array.get();
@@ -111,10 +111,10 @@ NAN_METHOD(Algorithms::contourGenerate)
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("nodata").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("nodata").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("nodata").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
 			use_nodata = 1;
-			nodata = prop->NumberValue();
+			nodata = Nan::To<double>(prop).ToChecked();
 		} else if(!prop->IsNull() && !prop->IsUndefined()){
 			Nan::ThrowTypeError("nodata property must be a number");
 		}
@@ -273,7 +273,7 @@ NAN_METHOD(Algorithms::polygonize)
 	}
 
 	CPLErr err;
-	if(Nan::HasOwnProperty(obj, Nan::New("useFloats").ToLocalChecked()).FromMaybe(false) && obj->Get(Nan::New("useFloats").ToLocalChecked())->BooleanValue()){
+	if(Nan::HasOwnProperty(obj, Nan::New("useFloats").ToLocalChecked()).FromMaybe(false) && Nan::To<bool>(Nan::Get(obj, Nan::New("useFloats").ToLocalChecked()).ToLocalChecked()).ToChecked()){
 		err = GDALFPolygonize(src->get(), mask ? mask->get() : NULL, reinterpret_cast<OGRLayerH>(dst->get()), pix_val_field, papszOptions, NULL, NULL);
 	} else {
 		err = GDALPolygonize(src->get(), mask ? mask->get() : NULL, reinterpret_cast<OGRLayerH>(dst->get()), pix_val_field, papszOptions, NULL, NULL);
@@ -289,4 +289,4 @@ NAN_METHOD(Algorithms::polygonize)
 	return;
 }
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace
diff --git a/src/gdal_common.hpp b/src/gdal_common.hpp
index 0a223883..923b56a8 100644
--- a/src/gdal_common.hpp
+++ b/src/gdal_common.hpp
@@ -91,12 +91,12 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                   \
      Nan::ThrowError("Object must contain property \"" key "\""); return;                                 \
   }                                                                                                       \
-  Local<Value> val = obj->Get(sym);                                                                       \
+  Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                 \
   if (!val->IsNumber()){                                                                                  \
     Nan::ThrowTypeError("Property \"" key "\" must be a number");                                         \
     return;                                                                                               \
   }                                                                                                       \
-  var = val->NumberValue();                                                                               \
+  var = Nan::To<double>(val).ToChecked();                                                                               \
 }
 
 #define NODE_INT_FROM_OBJ(obj, key, var)                                                                  \
@@ -105,12 +105,12 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                   \
      Nan::ThrowError("Object must contain property \"" key "\""); return;                                 \
   }                                                                                                       \
-  Local<Value> val = obj->Get(sym);                                                                       \
+  Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                       \
   if (!val->IsNumber()){                                                                                  \
     Nan::ThrowTypeError("Property \"" key "\" must be a number");                                         \
     return;                                                                                               \
   }                                                                                                       \
-  var = val->Int32Value();                                                                                \
+  var = Nan::To<int32_t>(val).ToChecked();                                                                                \
 }
 
 #define NODE_STR_FROM_OBJ(obj, key, var)                                                                  \
@@ -119,7 +119,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                   \
      Nan::ThrowError("Object must contain property \"" key "\""); return;                     \
   }                                                                                                       \
-  Local<Value> val = obj->Get(sym);                                                                       \
+  Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                       \
   if (!val->IsString()){                                                                                  \
       Nan::ThrowTypeError("Property \"" key "\" must be a string");                                         \
       return;                                                                               \
@@ -133,7 +133,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                   \
      Nan::ThrowError("Object must contain property \"" key "\""); return;                     \
   }                                                                                                       \
-  Local<Value> val = obj->Get(sym);                                                                       \
+  Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                       \
   if (!val->IsObject() || val->IsNull() || !Nan::New(type::constructor)->HasInstance(val)) {                     \
       Nan::ThrowTypeError("Property \"" key "\" must be a " #type " object");                               \
       return;                                                                               \
@@ -149,7 +149,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 {                                                                                                         \
   Local<String> sym = Nan::New(key).ToLocalChecked();                                                                        \
   if (Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                    \
-    Local<Value> val = obj->Get(sym);                                                                     \
+    Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                     \
     if(val->IsObject() && Nan::New(type::constructor)->HasInstance(val)){                                        \
       var = Nan::ObjectWrap::Unwrap<type>(val.As<Object>());                                                   \
       if(!var->isAlive()) {                                                                                   \
@@ -167,12 +167,12 @@ NAN_SETTER(READ_ONLY_SETTER);
 {                                                                                                         \
   Local<String> sym = Nan::New(key).ToLocalChecked();                                                                        \
   if (Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                    \
-    Local<Value> val = obj->Get(sym);                                                                     \
+    Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                     \
     if (!val->IsNumber()){                                                                                \
       Nan::ThrowTypeError("Property \"" key "\" must be a number");                                         \
       return;                                                                               \
     }                                                                                                     \
-    var = val->NumberValue();                                                                             \
+    var = Nan::To<double>(val).ToChecked();                                                                             \
   }                                                                                                       \
 }
 
@@ -180,12 +180,12 @@ NAN_SETTER(READ_ONLY_SETTER);
 {                                                                                                         \
   Local<String> sym = Nan::New(key).ToLocalChecked();                                                                        \
   if (Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                    \
-    Local<Value> val = obj->Get(sym);                                                                     \
+    Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                     \
     if (!val->IsNumber()){                                                                                \
       Nan::ThrowTypeError("Property \"" key "\" must be a number");                                         \
       return;                                                                               \
     }                                                                                                     \
-    var = val->Int32Value();                                                                              \
+    var = Nan::To<int32_t>(val).ToChecked();                                                                              \
   }                                                                                                       \
 }
 
@@ -193,7 +193,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 {                                                                                                         \
   Local<String> sym = Nan::New(key).ToLocalChecked();                                                                        \
   if (Nan::HasOwnProperty(obj, sym).FromMaybe(false)){                                                    \
-    Local<Value> val = obj->Get(sym);                                                                     \
+    Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();                                                                     \
     if (!val->IsString()){                                                                                \
       Nan::ThrowTypeError("Property \"" key "\" must be a string");                                         \
       return;                                                                               \
@@ -216,7 +216,7 @@ NAN_SETTER(READ_ONLY_SETTER);
       return;                                            \
     }                                                                  \
   } else if (info[num]->IsInt32()) {                                   \
-    var = info[num]->Int32Value();                                     \
+    var = Nan::To<int32_t>(info[num]).ToChecked();                     \
     if (var < 0 || var >= f->GetFieldCount()) {                        \
       Nan::ThrowRangeError("Invalid field index");                       \
       return;                                            \
@@ -234,7 +234,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!info[num]->IsNumber()) {                                                                                \
     Nan::ThrowTypeError(name " must be an integer"); return;                                       \
   }                                                                                                            \
-  var = static_cast<int>(info[num]->IntegerValue());
+  var = static_cast<int>(Nan::To<int64_t>(info[num]).ToChecked());
 
 
 #define NODE_ARG_ENUM(num, name, enum_type, var)                                                                                       \
@@ -244,7 +244,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!info[num]->IsInt32() && !info[num]->IsUint32()) {                                                                               \
     Nan::ThrowTypeError(name " must be of type " #enum_type); return;                                                      \
   }                                                                                                                                    \
-  var = enum_type(info[num]->Uint32Value());
+  var = enum_type(Nan::To<uint32_t>(info[num]).ToChecked());
 
 
 #define NODE_ARG_BOOL(num, name, var)                                                                          \
@@ -254,7 +254,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!info[num]->IsBoolean()) {                                                                               \
     Nan::ThrowTypeError(name " must be an boolean"); return;                                       \
   }                                                                                                            \
-  var = static_cast<bool>(info[num]->BooleanValue());
+  var = Nan::To<bool>(info[num]).ToChecked();
 
 
 #define NODE_ARG_DOUBLE(num, name, var)                                                                      \
@@ -264,7 +264,7 @@ NAN_SETTER(READ_ONLY_SETTER);
   if (!info[num]->IsNumber()) {                                                                              \
     Nan::ThrowTypeError(name " must be a number"); return;                                       \
   }                                                                                                          \
-  var = static_cast<double>(info[num]->NumberValue());
+  var = Nan::To<double>(info[num]).ToChecked();
 
 
 #define NODE_ARG_ARRAY(num, name, var)                                                                       \
@@ -313,7 +313,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 #define NODE_ARG_INT_OPT(num, name, var)                                                                         \
   if (info.Length() > num) {                                                                                     \
     if (info[num]->IsInt32()) {                                                                                  \
-      var = static_cast<int>(info[num]->IntegerValue());                                                         \
+      var = static_cast<int>(Nan::To<int64_t>(info[num]).ToChecked());                                           \
     } else if(!info[num]->IsNull() && !info[num]->IsUndefined()) {                                               \
       Nan::ThrowTypeError(name " must be an integer"); return;                                       \
     }                                                                                                            \
@@ -323,7 +323,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 #define NODE_ARG_ENUM_OPT(num, name, enum_type, var)                                                             \
   if (info.Length() > num) {                                                                                     \
     if (info[num]->IsInt32() || info[num]->IsUint32()) {                                                         \
-      var = static_cast<enum_type>(info[num]->Uint32Value());                                                    \
+      var = static_cast<enum_type>(Nan::To<uint32_t>(info[num]).ToChecked());                                    \
     } else if(!info[num]->IsNull() && !info[num]->IsUndefined()) {                                               \
       Nan::ThrowTypeError(name " must be an integer"); return;                                       \
     }                                                                                                            \
@@ -333,7 +333,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 #define NODE_ARG_BOOL_OPT(num, name, var)                                                                        \
   if (info.Length() > num) {                                                                                     \
     if (info[num]->IsBoolean()) {                                                                                \
-      var = static_cast<bool>(info[num]->BooleanValue());                                                        \
+      var = Nan::To<bool>(info[num]).ToChecked();                                                               \
     } else if(!info[num]->IsNull() && !info[num]->IsUndefined()) {                                               \
       Nan::ThrowTypeError(name " must be an boolean"); return;                                       \
     }                                                                                                            \
@@ -353,7 +353,7 @@ NAN_SETTER(READ_ONLY_SETTER);
 #define NODE_ARG_DOUBLE_OPT(num, name, var)                                                                    \
   if (info.Length() > num) {                                                                                   \
     if (info[num]->IsNumber()) {                                                                               \
-      var = static_cast<double>(info[num]->NumberValue());                                                     \
+      var = Nan::To<double>(info[num]).ToChecked();                                                            \
     } else if(!info[num]->IsNull() && !info[num]->IsUndefined()) {                                             \
       Nan::ThrowTypeError(name " must be a number"); return;                                       \
     }                                                                                                          \
diff --git a/src/gdal_coordinate_transformation.cpp b/src/gdal_coordinate_transformation.cpp
index ea809748..04a88a54 100644
--- a/src/gdal_coordinate_transformation.cpp
+++ b/src/gdal_coordinate_transformation.cpp
@@ -19,7 +19,7 @@ void CoordinateTransformation::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "toString", toString);
 	Nan::SetPrototypeMethod(lcons, "transformPoint", transformPoint);
 
-	target->Set(Nan::New("CoordinateTransformation").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("CoordinateTransformation").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -155,7 +155,7 @@ Local<Value> CoordinateTransformation::New(OGRCoordinateTransformation *transfor
 	CoordinateTransformation *wrapped = new CoordinateTransformation(transform);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(CoordinateTransformation::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(CoordinateTransformation::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -190,17 +190,17 @@ NAN_METHOD(CoordinateTransformation::transformPoint)
 
 	if (info.Length() == 1 && info[0]->IsObject()) {
 		Local<Object> obj = info[0].As<Object>();
-		Local<Value> arg_x = obj->Get(Nan::New("x").ToLocalChecked());
-		Local<Value> arg_y = obj->Get(Nan::New("y").ToLocalChecked());
-		Local<Value> arg_z = obj->Get(Nan::New("z").ToLocalChecked());
+		Local<Value> arg_x = Nan::Get(obj, Nan::New("x").ToLocalChecked()).ToLocalChecked();
+		Local<Value> arg_y = Nan::Get(obj, Nan::New("y").ToLocalChecked()).ToLocalChecked();
+		Local<Value> arg_z = Nan::Get(obj, Nan::New("z").ToLocalChecked()).ToLocalChecked();
 		if (!arg_x->IsNumber() || !arg_y->IsNumber()) {
 			Nan::ThrowError("point must contain numerical properties x and y");
 			return;
 		}
-		x = static_cast<double>(arg_x->NumberValue());
-		y = static_cast<double>(arg_y->NumberValue());
+		x = static_cast<double>(Nan::To<double>(arg_x).ToChecked());
+		y = static_cast<double>(Nan::To<double>(arg_y).ToChecked());
 		if (arg_z->IsNumber()) {
-			z = static_cast<double>(arg_z->NumberValue());
+			z = static_cast<double>(Nan::To<double>(arg_z).ToChecked());
 		}
 	} else {
 		NODE_ARG_DOUBLE(0, "x", x);
@@ -214,11 +214,11 @@ NAN_METHOD(CoordinateTransformation::transformPoint)
 	}
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(x));
-	result->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(y));
-	result->Set(Nan::New("z").ToLocalChecked(), Nan::New<Number>(z));
+	Nan::Set(result, Nan::New("x").ToLocalChecked(), Nan::New<Number>(x));
+	Nan::Set(result, Nan::New("y").ToLocalChecked(), Nan::New<Number>(y));
+	Nan::Set(result, Nan::New("z").ToLocalChecked(), Nan::New<Number>(z));
 
 	info.GetReturnValue().Set(result);
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_dataset.cpp b/src/gdal_dataset.cpp
index 4296e6ca..bfd3efde 100755
--- a/src/gdal_dataset.cpp
+++ b/src/gdal_dataset.cpp
@@ -46,7 +46,7 @@ void Dataset::Initialize(Local<Object> target)
 	ATTR(lcons, "srs", srsGetter, srsSetter);
 	ATTR(lcons, "geoTransform", geoTransformGetter, geoTransformSetter);
 
-	target->Set(Nan::New("Dataset").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Dataset").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -171,7 +171,7 @@ Local<Value> Dataset::New(GDALDataset *raw)
 	Dataset *wrapped = new Dataset(raw);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Dataset::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Dataset::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	dataset_cache.add(raw, obj);
 	wrapped->uid = ptr_manager.add(raw);
@@ -194,7 +194,7 @@ Local<Value> Dataset::New(OGRDataSource *raw)
 	Dataset *wrapped = new Dataset(raw);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(Dataset::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Dataset::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	datasource_cache.add(raw, obj);
 	wrapped->uid = ptr_manager.add(raw);
@@ -452,7 +452,7 @@ NAN_METHOD(Dataset::getFileList)
 
 	int i = 0;
 	while (list[i]) {
-		results->Set(i, SafeString::New(list[i]));
+		Nan::Set(results, i, SafeString::New(list[i]));
 		i++;
 	}
 
@@ -503,14 +503,14 @@ NAN_METHOD(Dataset::getGCPs)
 	for (int i = 0; i < n; i++) {
 		GDAL_GCP gcp = gcps[i];
 		Local<Object> obj = Nan::New<Object>();
-		obj->Set(Nan::New("pszId").ToLocalChecked(), Nan::New(gcp.pszId).ToLocalChecked());
-		obj->Set(Nan::New("pszInfo").ToLocalChecked(), Nan::New(gcp.pszInfo).ToLocalChecked());
-		obj->Set(Nan::New("dfGCPPixel").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPPixel));
-		obj->Set(Nan::New("dfGCPLine").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPLine));
-		obj->Set(Nan::New("dfGCPX").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPX));
-		obj->Set(Nan::New("dfGCPY").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPY));
-		obj->Set(Nan::New("dfGCPZ").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPZ));
-		results->Set(i, obj);
+		Nan::Set(obj, Nan::New("pszId").ToLocalChecked(), Nan::New(gcp.pszId).ToLocalChecked());
+		Nan::Set(obj, Nan::New("pszInfo").ToLocalChecked(), Nan::New(gcp.pszInfo).ToLocalChecked());
+		Nan::Set(obj, Nan::New("dfGCPPixel").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPPixel));
+		Nan::Set(obj, Nan::New("dfGCPLine").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPLine));
+		Nan::Set(obj, Nan::New("dfGCPX").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPX));
+		Nan::Set(obj, Nan::New("dfGCPY").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPY));
+		Nan::Set(obj, Nan::New("dfGCPZ").ToLocalChecked(), Nan::New<Number>(gcp.dfGCPZ));
+		Nan::Set(results, i, obj);
 	}
 
 	info.GetReturnValue().Set(results);
@@ -557,7 +557,7 @@ NAN_METHOD(Dataset::setGCPs)
 	std::string *pszInfo_list = new std::string [gcps->Length()];
 	GDAL_GCP *gcp = list;
 	for (unsigned int i = 0; i < gcps->Length(); ++i) {
-		Local<Value> val = gcps->Get(i);
+		Local<Value> val = Nan::Get(gcps, i).ToLocalChecked();
 		if (!val->IsObject()) {
 			if (list) {
 				delete [] list;
@@ -640,27 +640,27 @@ NAN_METHOD(Dataset::buildOverviews)
 
 	o = new int[n_overviews];
 	for(i = 0; i<n_overviews; i++){
-		Local<Value> val = overviews->Get(i);
+		Local<Value> val = Nan::Get(overviews, i).ToLocalChecked();
 		if(!val->IsNumber()) {
 			delete [] o;
 			Nan::ThrowError("overviews array must only contain numbers");
 			return;
 		}
-		o[i] = val->Int32Value();
+		o[i] = Nan::To<int32_t>(val).ToChecked();
 	}
 
 	if(!bands.IsEmpty()){
 		n_bands = bands->Length();
 		b = new int[n_bands];
 		for(i = 0; i<n_bands; i++){
-			Local<Value> val = bands->Get(i);
+			Local<Value> val = Nan::Get(bands, i).ToLocalChecked();
 			if(!val->IsNumber()) {
 				delete [] o;
 				delete [] b;
 				Nan::ThrowError("band array must only contain numbers");
 				return;
 			}
-			b[i] = val->Int32Value();
+			b[i] = Nan::To<int32_t>(val).ToChecked();
 			if(b[i] > raw->GetRasterCount() || b[i] < 1) {
 				//BuildOverviews prints an error but segfaults before returning
 				delete [] o;
@@ -751,8 +751,8 @@ NAN_GETTER(Dataset::rasterSizeGetter)
 	#endif
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("x").ToLocalChecked(), Nan::New<Integer>(raw->GetRasterXSize()));
-	result->Set(Nan::New("y").ToLocalChecked(), Nan::New<Integer>(raw->GetRasterYSize()));
+	Nan::Set(result, Nan::New("x").ToLocalChecked(), Nan::New<Integer>(raw->GetRasterXSize()));
+	Nan::Set(result, Nan::New("y").ToLocalChecked(), Nan::New<Integer>(raw->GetRasterYSize()));
 	info.GetReturnValue().Set(result);
 }
 
@@ -840,12 +840,12 @@ NAN_GETTER(Dataset::geoTransformGetter)
 	}
 
 	Local<Array> result = Nan::New<Array>(6);
-	result->Set(0, Nan::New<Number>(transform[0]));
-	result->Set(1, Nan::New<Number>(transform[1]));
-	result->Set(2, Nan::New<Number>(transform[2]));
-	result->Set(3, Nan::New<Number>(transform[3]));
-	result->Set(4, Nan::New<Number>(transform[4]));
-	result->Set(5, Nan::New<Number>(transform[5]));
+	Nan::Set(result, 0, Nan::New<Number>(transform[0]));
+	Nan::Set(result, 1, Nan::New<Number>(transform[1]));
+	Nan::Set(result, 2, Nan::New<Number>(transform[2]));
+	Nan::Set(result, 3, Nan::New<Number>(transform[3]));
+	Nan::Set(result, 4, Nan::New<Number>(transform[4]));
+	Nan::Set(result, 5, Nan::New<Number>(transform[5]));
 
 	info.GetReturnValue().Set(result);
 }
@@ -953,12 +953,12 @@ NAN_SETTER(Dataset::geoTransformSetter)
 
 	double buffer[6];
 	for (int i = 0; i < 6; i++) {
-		Local<Value> val = transform->Get(i);
+		Local<Value> val = Nan::Get(transform, i).ToLocalChecked();
 		if (!val->IsNumber()) {
 			Nan::ThrowError("Transform array must only contain numbers");
 			return;
 		}
-		buffer[i] = val->NumberValue();
+		buffer[i] = Nan::To<double>(val).ToChecked();
 	}
 
 	CPLErr err = raw->SetGeoTransform(buffer);
diff --git a/src/gdal_driver.cpp b/src/gdal_driver.cpp
index 449c1b2e..184cef1d 100644
--- a/src/gdal_driver.cpp
+++ b/src/gdal_driver.cpp
@@ -31,7 +31,7 @@ void Driver::Initialize(Local<Object> target)
 
 	ATTR(lcons, "description", descriptionGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("Driver").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Driver").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -140,7 +140,7 @@ Local<Value> Driver::New(GDALDriver *driver)
 
 	Driver *wrapped = new Driver(driver);
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Driver::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Driver::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	//LOG("ADDING DRIVER TO CACHE [%p]", driver);
 	cache.add(driver, obj);
@@ -163,7 +163,7 @@ Local<Value> Driver::New(OGRSFDriver *driver)
 
 	Driver *wrapped = new Driver(driver);
 	Local<Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(Driver::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Driver::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	cache_ogr.add(driver, obj);
 
@@ -471,7 +471,7 @@ NAN_METHOD(Driver::getMetadata)
 	#if GDAL_VERSION_MAJOR < 2
 	if (driver->uses_ogr){
 		result = Nan::New<Object>();
-		result->Set(Nan::New("DCAP_VECTOR").ToLocalChecked(), Nan::New("YES").ToLocalChecked());
+		Nan::Set(result, Nan::New("DCAP_VECTOR").ToLocalChecked(), Nan::New("YES").ToLocalChecked());
 		info.GetReturnValue().Set(result);
 		return;
 	}
@@ -480,7 +480,7 @@ NAN_METHOD(Driver::getMetadata)
 	GDALDriver* raw = driver->getGDALDriver();
 	result = MajorObject::getMetadata(raw, domain.empty() ? NULL : domain.c_str());
 	#if GDAL_VERSION_MAJOR < 2
-		result->Set(Nan::New("DCAP_RASTER").ToLocalChecked(), Nan::New("YES").ToLocalChecked());
+		Nan::Set(result, Nan::New("DCAP_RASTER").ToLocalChecked(), Nan::New("YES").ToLocalChecked());
 	#endif
 	info.GetReturnValue().Set(result);
 }
@@ -537,4 +537,4 @@ NAN_METHOD(Driver::open)
 	info.GetReturnValue().Set(Dataset::New(ds));
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_feature.cpp b/src/gdal_feature.cpp
index 8e3d4f5d..5c1ec971 100644
--- a/src/gdal_feature.cpp
+++ b/src/gdal_feature.cpp
@@ -38,7 +38,7 @@ void Feature::Initialize(Local<Object> target)
 	ATTR(lcons, "defn", defnGetter, READ_ONLY_SETTER);
 	ATTR(lcons, "fid", fidGetter, fidSetter);
 
-	target->Set(Nan::New("Feature").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Feature").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -166,7 +166,7 @@ Local<Value> Feature::New(OGRFeature *feature, bool owned)
 	Feature *wrapped = new Feature(feature);
 	wrapped->owned_ = owned;
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Feature::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Feature::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 	return scope.Escape(obj);
 }
 
@@ -353,7 +353,7 @@ NAN_METHOD(Feature::setFrom)
 		int *index_map_ptr = new int[index_map->Length()];
 
 		for (unsigned index = 0; index < index_map->Length(); index++) {
-			Local<Value> field_index(index_map->Get(Nan::New<Integer>(index)));
+			Local<Value> field_index(Nan::Get(index_map, Nan::New<Integer>(index)).ToLocalChecked());
 
 			if (!field_index->IsUint32()) {
 				delete [] index_map_ptr;
@@ -361,7 +361,7 @@ NAN_METHOD(Feature::setFrom)
 				return;
 			}
 
-			int val = (int)field_index->Uint32Value(); //todo: validate index? perhaps ogr already does this and throws an error
+			int val = (int)Nan::To<uint32_t>(field_index).ToChecked(); //todo: validate index? perhaps ogr already does this and throws an error
 
 			index_map_ptr[index] = val;
 		}
@@ -432,7 +432,7 @@ NAN_SETTER(Feature::fidSetter)
 		Nan::ThrowError("fid must be an integer");
 		return;
 	}
-	feature->this_->SetFID(value->IntegerValue());
+	feature->this_->SetFID(Nan::To<int64_t>(value).ToChecked());
 }
 
 } // namespace node_gdal
diff --git a/src/gdal_feature_defn.cpp b/src/gdal_feature_defn.cpp
index b9b9f7ae..662967ca 100644
--- a/src/gdal_feature_defn.cpp
+++ b/src/gdal_feature_defn.cpp
@@ -25,7 +25,7 @@ void FeatureDefn::Initialize(Local<Object> target)
 	ATTR(lcons, "geomIgnored", geomIgnoredGetter, geomIgnoredSetter);
 	ATTR(lcons, "geomType", geomTypeGetter, geomTypeSetter);
 
-	target->Set(Nan::New("FeatureDefn").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("FeatureDefn").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -122,7 +122,7 @@ Local<Value> FeatureDefn::New(OGRFeatureDefn *def, bool owned)
 	def->Reference();
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(FeatureDefn::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(FeatureDefn::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -212,7 +212,7 @@ NAN_SETTER(FeatureDefn::geomTypeSetter)
 		Nan::ThrowError("geomType must be an integer");
 		return;
 	}
-	def->this_->SetGeomType(OGRwkbGeometryType(value->IntegerValue()));
+	def->this_->SetGeomType(OGRwkbGeometryType(Nan::To<int64_t>(value).ToChecked()));
 }
 
 NAN_SETTER(FeatureDefn::geomIgnoredSetter)
@@ -223,7 +223,7 @@ NAN_SETTER(FeatureDefn::geomIgnoredSetter)
 		Nan::ThrowError("geomIgnored must be a boolean");
 		return;
 	}
-	def->this_->SetGeometryIgnored(value->IntegerValue());
+	def->this_->SetGeometryIgnored(Nan::To<int64_t>(value).ToChecked());
 }
 
 NAN_SETTER(FeatureDefn::styleIgnoredSetter)
@@ -234,7 +234,7 @@ NAN_SETTER(FeatureDefn::styleIgnoredSetter)
 		Nan::ThrowError("styleIgnored must be a boolean");
 		return;
 	}
-	def->this_->SetStyleIgnored(value->IntegerValue());
+	def->this_->SetStyleIgnored(Nan::To<int64_t>(value).ToChecked());
 }
 
 } // namespace node_gdal
diff --git a/src/gdal_field_defn.cpp b/src/gdal_field_defn.cpp
index 583b707f..6447687d 100644
--- a/src/gdal_field_defn.cpp
+++ b/src/gdal_field_defn.cpp
@@ -22,7 +22,7 @@ void FieldDefn::Initialize(Local<Object> target)
 	ATTR(lcons, "precision", precisionGetter, precisionSetter);
 	ATTR(lcons, "ignored", ignoredGetter, ignoredSetter);
 
-	target->Set(Nan::New("FieldDefn").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("FieldDefn").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -123,7 +123,7 @@ Local<Value> FieldDefn::New(OGRFieldDefn *def, bool owned)
 	wrapped->owned_ = true;
 
 	v8::Local<v8::Value> ext = Nan::New<External>(wrapped);
-	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::New(FieldDefn::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	v8::Local<v8::Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(FieldDefn::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -280,7 +280,7 @@ NAN_SETTER(FieldDefn::widthSetter)
 		Nan::ThrowError("width must be an integer");
 		return;
 	}
-	def->this_->SetWidth(value->IntegerValue());
+	def->this_->SetWidth(Nan::To<int64_t>(value).ToChecked());
 }
 
 NAN_SETTER(FieldDefn::precisionSetter)
@@ -291,7 +291,7 @@ NAN_SETTER(FieldDefn::precisionSetter)
 		Nan::ThrowError("precision must be an integer");
 		return;
 	}
-	def->this_->SetPrecision(value->IntegerValue());
+	def->this_->SetPrecision(Nan::To<int64_t>(value).ToChecked());
 }
 
 NAN_SETTER(FieldDefn::ignoredSetter)
@@ -302,7 +302,7 @@ NAN_SETTER(FieldDefn::ignoredSetter)
 		Nan::ThrowError("ignored must be a boolean");
 		return;
 	}
-	def->this_->SetIgnored(value->IntegerValue());
+	def->this_->SetIgnored(Nan::To<int64_t>(value).ToChecked());
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_geometry.cpp b/src/gdal_geometry.cpp
index 3c461bf7..e6d1fe95 100644
--- a/src/gdal_geometry.cpp
+++ b/src/gdal_geometry.cpp
@@ -83,7 +83,7 @@ void Geometry::Initialize(Local<Object> target)
 	ATTR(lcons, "wkbType", typeGetter, READ_ONLY_SETTER);
 	ATTR(lcons, "name", nameGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("Geometry").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Geometry").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -766,10 +766,10 @@ NAN_METHOD(Geometry::getEnvelope)
 	geom->this_->getEnvelope(envelope);
 
 	Local<Object> obj = Nan::New<Object>();
-	obj->Set(Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
-	obj->Set(Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
-	obj->Set(Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
-	obj->Set(Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
+	Nan::Set(obj, Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
+	Nan::Set(obj, Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
+	Nan::Set(obj, Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
+	Nan::Set(obj, Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
 
 	delete envelope;
 
@@ -794,12 +794,12 @@ NAN_METHOD(Geometry::getEnvelope3D)
 	geom->this_->getEnvelope(envelope);
 
 	Local<Object> obj = Nan::New<Object>();
-	obj->Set(Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
-	obj->Set(Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
-	obj->Set(Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
-	obj->Set(Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
-	obj->Set(Nan::New("minZ").ToLocalChecked(), Nan::New<Number>(envelope->MinZ));
-	obj->Set(Nan::New("maxZ").ToLocalChecked(), Nan::New<Number>(envelope->MaxZ));
+	Nan::Set(obj, Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
+	Nan::Set(obj, Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
+	Nan::Set(obj, Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
+	Nan::Set(obj, Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
+	Nan::Set(obj, Nan::New("minZ").ToLocalChecked(), Nan::New<Number>(envelope->MinZ));
+	Nan::Set(obj, Nan::New("maxZ").ToLocalChecked(), Nan::New<Number>(envelope->MaxZ));
 
 	delete envelope;
 
@@ -1003,7 +1003,7 @@ NAN_SETTER(Geometry::coordinateDimensionSetter)
 		Nan::ThrowError("coordinateDimension must be an integer");
 		return;
 	}
-	int dim = value->IntegerValue();
+	int dim = Nan::To<int64_t>(value).ToChecked();
 	if (dim != 2 && dim != 3) {
 		Nan::ThrowError("coordinateDimension must be 2 or 3");
 		return;
@@ -1018,14 +1018,14 @@ Local<Value> Geometry::getConstructor(OGRwkbGeometryType type){
 
 	type = wkbFlatten(type);
 	switch (type) {
-		case wkbPoint:              return scope.Escape(Nan::New(Point::constructor)->GetFunction());
-		case wkbLineString:         return scope.Escape(Nan::New(LineString::constructor)->GetFunction());
-		case wkbLinearRing:         return scope.Escape(Nan::New(LinearRing::constructor)->GetFunction());
-		case wkbPolygon:            return scope.Escape(Nan::New(Polygon::constructor)->GetFunction());
-		case wkbGeometryCollection: return scope.Escape(Nan::New(GeometryCollection::constructor)->GetFunction());
-		case wkbMultiPoint:         return scope.Escape(Nan::New(MultiPoint::constructor)->GetFunction());
-		case wkbMultiLineString:    return scope.Escape(Nan::New(MultiLineString::constructor)->GetFunction());
-		case wkbMultiPolygon:       return scope.Escape(Nan::New(MultiPolygon::constructor)->GetFunction());
+		case wkbPoint:              return scope.Escape(Nan::GetFunction(Nan::New(Point::constructor)).ToLocalChecked());
+		case wkbLineString:         return scope.Escape(Nan::GetFunction(Nan::New(LineString::constructor)).ToLocalChecked());
+		case wkbLinearRing:         return scope.Escape(Nan::GetFunction(Nan::New(LinearRing::constructor)).ToLocalChecked());
+		case wkbPolygon:            return scope.Escape(Nan::GetFunction(Nan::New(Polygon::constructor)).ToLocalChecked());
+		case wkbGeometryCollection: return scope.Escape(Nan::GetFunction(Nan::New(GeometryCollection::constructor)).ToLocalChecked());
+		case wkbMultiPoint:         return scope.Escape(Nan::GetFunction(Nan::New(MultiPoint::constructor)).ToLocalChecked());
+		case wkbMultiLineString:    return scope.Escape(Nan::GetFunction(Nan::New(MultiLineString::constructor)).ToLocalChecked());
+		case wkbMultiPolygon:       return scope.Escape(Nan::GetFunction(Nan::New(MultiPolygon::constructor)).ToLocalChecked());
 		default:                    return scope.Escape(Nan::Null());
 	}
 }
diff --git a/src/gdal_geometrycollection.cpp b/src/gdal_geometrycollection.cpp
index f7e8317e..7e472050 100644
--- a/src/gdal_geometrycollection.cpp
+++ b/src/gdal_geometrycollection.cpp
@@ -25,7 +25,7 @@ void GeometryCollection::Initialize(Local<Object> target)
 
 	ATTR(lcons, "children", childrenGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("GeometryCollection").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("GeometryCollection").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -127,7 +127,7 @@ Local<Value> GeometryCollection::New(OGRGeometryCollection *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(GeometryCollection::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(GeometryCollection::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
diff --git a/src/gdal_layer.cpp b/src/gdal_layer.cpp
index 476bda16..aae1266f 100644
--- a/src/gdal_layer.cpp
+++ b/src/gdal_layer.cpp
@@ -44,7 +44,7 @@ void Layer::Initialize(Local<Object> target)
 	ATTR(lcons, "geomColumn", geomColumnGetter, READ_ONLY_SETTER);
 	ATTR(lcons, "fidColumn", fidColumnGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("Layer").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Layer").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -148,7 +148,7 @@ Local<Value> Layer::New(OGRLayer *raw, OGRDataSource *raw_parent, bool result_se
 	Layer *wrapped = new Layer(raw);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Layer::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Layer::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	cache.add(raw, obj);
 
@@ -241,10 +241,10 @@ NAN_METHOD(Layer::getExtent)
 	}
 
 	Local<Object> obj = Nan::New<Object>();
-	obj->Set(Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
-	obj->Set(Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
-	obj->Set(Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
-	obj->Set(Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
+	Nan::Set(obj, Nan::New("minX").ToLocalChecked(), Nan::New<Number>(envelope->MinX));
+	Nan::Set(obj, Nan::New("maxX").ToLocalChecked(), Nan::New<Number>(envelope->MaxX));
+	Nan::Set(obj, Nan::New("minY").ToLocalChecked(), Nan::New<Number>(envelope->MinY));
+	Nan::Set(obj, Nan::New("maxY").ToLocalChecked(), Nan::New<Number>(envelope->MaxY));
 
 	delete envelope;
 
diff --git a/src/gdal_linearring.cpp b/src/gdal_linearring.cpp
index f35913f2..fc5aa951 100644
--- a/src/gdal_linearring.cpp
+++ b/src/gdal_linearring.cpp
@@ -23,7 +23,7 @@ void LinearRing::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "toString", toString);
 	Nan::SetPrototypeMethod(lcons, "getArea", getArea);
 
-	target->Set(Nan::New("LinearRing").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("LinearRing").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -125,7 +125,7 @@ Local<Value> LinearRing::New(OGRLinearRing *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(LinearRing::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(LinearRing::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -144,4 +144,4 @@ NAN_METHOD(LinearRing::toString)
  */
 NODE_WRAPPED_METHOD_WITH_RESULT(LinearRing, getArea, Number, get_Area);
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_linestring.cpp b/src/gdal_linestring.cpp
index 5fd799ad..61149764 100644
--- a/src/gdal_linestring.cpp
+++ b/src/gdal_linestring.cpp
@@ -27,7 +27,7 @@ void LineString::Initialize(Local<Object> target)
 
 	ATTR(lcons, "points", pointsGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("LineString").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("LineString").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -134,7 +134,7 @@ Local<Value> LineString::New(OGRLineString *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(LineString::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(LineString::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
diff --git a/src/gdal_majorobject.cpp b/src/gdal_majorobject.cpp
index c87d7663..b647e394 100644
--- a/src/gdal_majorobject.cpp
+++ b/src/gdal_majorobject.cpp
@@ -22,7 +22,7 @@ Local<Object> MajorObject::getMetadata(GDALMajorObject *obj, const char* domain)
 			if (i_equal != std::string::npos) {
 				std::string key = pair.substr(0, i_equal);
 				std::string val = pair.substr(i_equal+1);
-				result->Set(Nan::New(key.c_str()).ToLocalChecked(), Nan::New(val.c_str()).ToLocalChecked());
+				Nan::Set(result, Nan::New(key.c_str()).ToLocalChecked(), Nan::New(val.c_str()).ToLocalChecked());
 			}
 			i++;
 		}
@@ -31,4 +31,4 @@ Local<Object> MajorObject::getMetadata(GDALMajorObject *obj, const char* domain)
 	return scope.Escape(result);
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_multilinestring.cpp b/src/gdal_multilinestring.cpp
index f87626b2..e0537110 100644
--- a/src/gdal_multilinestring.cpp
+++ b/src/gdal_multilinestring.cpp
@@ -24,7 +24,7 @@ void MultiLineString::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "toString", toString);
 	Nan::SetPrototypeMethod(lcons, "polygonize", polygonize);
 
-	target->Set(Nan::New("MultiLineString").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("MultiLineString").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -123,7 +123,7 @@ Local<Value> MultiLineString::New(OGRMultiLineString *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(MultiLineString::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(MultiLineString::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -149,4 +149,4 @@ NAN_METHOD(MultiLineString::polygonize)
 	info.GetReturnValue().Set(Geometry::New(geom->this_->Polygonize()));
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_multipoint.cpp b/src/gdal_multipoint.cpp
index 8b99cddc..b5493453 100644
--- a/src/gdal_multipoint.cpp
+++ b/src/gdal_multipoint.cpp
@@ -23,7 +23,7 @@ void MultiPoint::Initialize(Local<Object> target)
 
 	Nan::SetPrototypeMethod(lcons, "toString", toString);
 
-	target->Set(Nan::New("MultiPoint").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("MultiPoint").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -123,7 +123,7 @@ Local<Value> MultiPoint::New(OGRMultiPoint *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(MultiPoint::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(MultiPoint::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -134,4 +134,4 @@ NAN_METHOD(MultiPoint::toString)
 	info.GetReturnValue().Set(Nan::New("MultiPoint").ToLocalChecked());
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_multipolygon.cpp b/src/gdal_multipolygon.cpp
index bb9d5f3b..5eaa68d0 100644
--- a/src/gdal_multipolygon.cpp
+++ b/src/gdal_multipolygon.cpp
@@ -24,7 +24,7 @@ void MultiPolygon::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "unionCascaded", unionCascaded);
 	Nan::SetPrototypeMethod(lcons, "getArea", getArea);
 
-	target->Set(Nan::New("MultiPolygon").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("MultiPolygon").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -123,7 +123,7 @@ Local<Value> MultiPolygon::New(OGRMultiPolygon *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(MultiPolygon::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(MultiPolygon::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -157,4 +157,4 @@ NAN_METHOD(MultiPolygon::unionCascaded)
  */
 NODE_WRAPPED_METHOD_WITH_RESULT(MultiPolygon, getArea, Number, get_Area);
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_point.cpp b/src/gdal_point.cpp
index b4bbfc23..dfb7e39e 100644
--- a/src/gdal_point.cpp
+++ b/src/gdal_point.cpp
@@ -24,7 +24,7 @@ void Point::Initialize(Local<Object> target)
 	ATTR(lcons, "y", yGetter, ySetter);
 	ATTR(lcons, "z", zGetter, zSetter);
 
-	target->Set(Nan::New("Point").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Point").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -139,7 +139,7 @@ Local<Value> Point::New(OGRPoint *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Point::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Point::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
@@ -170,7 +170,7 @@ NAN_SETTER(Point::xSetter)
 		Nan::ThrowError("y must be a number");
 		return;
 	}
-	double x = value->NumberValue();
+	double x = Nan::To<double>(value).ToChecked();
 
 	((OGRPoint* )geom->this_)->setX(x);
 }
@@ -195,7 +195,7 @@ NAN_SETTER(Point::ySetter)
 		Nan::ThrowError("y must be a number");
 		return;
 	}
-	double y = value->NumberValue();
+	double y = Nan::To<double>(value).ToChecked();
 
 	((OGRPoint* )geom->this_)->setY(y);
 }
@@ -219,9 +219,9 @@ NAN_SETTER(Point::zSetter)
 		Nan::ThrowError("z must be a number");
 		return;
 	}
-	double z = value->NumberValue();
+	double z = Nan::To<double>(value).ToChecked();
 
 	((OGRPoint* )geom->this_)->setZ(z);
 }
 
-} // namespace node_gdal
\ No newline at end of file
+} // namespace node_gdal
diff --git a/src/gdal_polygon.cpp b/src/gdal_polygon.cpp
index ef8fb1cc..c18a3f27 100644
--- a/src/gdal_polygon.cpp
+++ b/src/gdal_polygon.cpp
@@ -24,7 +24,7 @@ void Polygon::Initialize(Local<Object> target)
 
 	ATTR(lcons, "rings", ringsGetter, READ_ONLY_SETTER);
 
-	target->Set(Nan::New("Polygon").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("Polygon").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -126,7 +126,7 @@ Local<Value> Polygon::New(OGRPolygon *geom, bool owned)
 	UPDATE_AMOUNT_OF_GEOMETRY_MEMORY(wrapped);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(Polygon::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(Polygon::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	return scope.Escape(obj);
 }
diff --git a/src/gdal_rasterband.cpp b/src/gdal_rasterband.cpp
index ed970b0b..3af8f2f2 100644
--- a/src/gdal_rasterband.cpp
+++ b/src/gdal_rasterband.cpp
@@ -63,7 +63,7 @@ void RasterBand::Initialize(Local<Object> target)
 	ATTR(lcons, "categoryNames", categoryNamesGetter, categoryNamesSetter);
 	ATTR(lcons, "colorInterpretation", colorInterpretationGetter, colorInterpretationSetter);
 
-	target->Set(Nan::New("RasterBand").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("RasterBand").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -143,7 +143,7 @@ Local<Value> RasterBand::New(GDALRasterBand *raw, GDALDataset *raw_parent)
 	RasterBand *wrapped = new RasterBand(raw);
 
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(RasterBand::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(RasterBand::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	LOG("Adding band to cache[%p] (parent=%p)", raw, raw_parent);
 	cache.add(raw, obj);
@@ -332,10 +332,10 @@ NAN_METHOD(RasterBand::getStatistics)
 	}
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("min").ToLocalChecked(), Nan::New<Number>(min));
-	result->Set(Nan::New("max").ToLocalChecked(), Nan::New<Number>(max));
-	result->Set(Nan::New("mean").ToLocalChecked(), Nan::New<Number>(mean));
-	result->Set(Nan::New("std_dev").ToLocalChecked(), Nan::New<Number>(std_dev));
+	Nan::Set(result, Nan::New("min").ToLocalChecked(), Nan::New<Number>(min));
+	Nan::Set(result, Nan::New("max").ToLocalChecked(), Nan::New<Number>(max));
+	Nan::Set(result, Nan::New("mean").ToLocalChecked(), Nan::New<Number>(mean));
+	Nan::Set(result, Nan::New("std_dev").ToLocalChecked(), Nan::New<Number>(std_dev));
 
 	info.GetReturnValue().Set(result);
 }
@@ -377,10 +377,10 @@ NAN_METHOD(RasterBand::computeStatistics)
 	}
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("min").ToLocalChecked(), Nan::New<Number>(min));
-	result->Set(Nan::New("max").ToLocalChecked(), Nan::New<Number>(max));
-	result->Set(Nan::New("mean").ToLocalChecked(), Nan::New<Number>(mean));
-	result->Set(Nan::New("std_dev").ToLocalChecked(), Nan::New<Number>(std_dev));
+	Nan::Set(result, Nan::New("min").ToLocalChecked(), Nan::New<Number>(min));
+	Nan::Set(result, Nan::New("max").ToLocalChecked(), Nan::New<Number>(max));
+	Nan::Set(result, Nan::New("mean").ToLocalChecked(), Nan::New<Number>(mean));
+	Nan::Set(result, Nan::New("std_dev").ToLocalChecked(), Nan::New<Number>(std_dev));
 
 	info.GetReturnValue().Set(result);
 }
@@ -537,8 +537,8 @@ NAN_GETTER(RasterBand::sizeGetter)
 	}
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("x").ToLocalChecked(), Nan::New<Integer>(band->this_->GetXSize()));
-	result->Set(Nan::New("y").ToLocalChecked(), Nan::New<Integer>(band->this_->GetYSize()));
+	Nan::Set(result, Nan::New("x").ToLocalChecked(), Nan::New<Integer>(band->this_->GetXSize()));
+	Nan::Set(result, Nan::New("y").ToLocalChecked(), Nan::New<Integer>(band->this_->GetYSize()));
 	info.GetReturnValue().Set(result);
 }
 
@@ -562,8 +562,8 @@ NAN_GETTER(RasterBand::blockSizeGetter)
 	band->this_->GetBlockSize(&x, &y);
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("x").ToLocalChecked(), Nan::New<Integer>(x));
-	result->Set(Nan::New("y").ToLocalChecked(), Nan::New<Integer>(y));
+	Nan::Set(result, Nan::New("x").ToLocalChecked(), Nan::New<Integer>(x));
+	Nan::Set(result, Nan::New("y").ToLocalChecked(), Nan::New<Integer>(y));
 	info.GetReturnValue().Set(result);
 }
 
@@ -786,7 +786,7 @@ NAN_GETTER(RasterBand::categoryNamesGetter)
 	if (names) {
 		int i = 0;
 		while (names[i]) {
-			results->Set(i, Nan::New(names[i]).ToLocalChecked());
+			Nan::Set(results, i, Nan::New(names[i]).ToLocalChecked());
 			i++;
 		}
 	}
@@ -847,7 +847,7 @@ NAN_SETTER(RasterBand::noDataValueSetter)
 	if (value->IsNull() || value -> IsUndefined()){
 		input = std::numeric_limits<double>::quiet_NaN();
 	} else if (value->IsNumber()) {
-		input = value->NumberValue();
+		input = Nan::To<double>(value).ToChecked();
 	} else {
 		Nan::ThrowError("No data value must be a number");
 		return;
@@ -872,7 +872,7 @@ NAN_SETTER(RasterBand::scaleSetter)
 		Nan::ThrowError("Scale must be a number");
 		return;
 	}
-	double input = value->NumberValue();
+	double input = Nan::To<double>(value).ToChecked();
 	CPLErr err = band->this_->SetScale(input);
 	if (err) {
 		NODE_THROW_CPLERR(err);
@@ -892,7 +892,7 @@ NAN_SETTER(RasterBand::offsetSetter)
 		Nan::ThrowError("Offset must be a number");
 		return;
 	}
-	double input = value->NumberValue();
+	double input = Nan::To<double>(value).ToChecked();
 	CPLErr err = band->this_->SetOffset(input);
 	if (err) {
 		NODE_THROW_CPLERR(err);
@@ -922,7 +922,7 @@ NAN_SETTER(RasterBand::categoryNamesSetter)
 		strlist = new std::string [names->Length()];
 		unsigned int i;
 		for (i = 0; i < names->Length(); i++) {
-			strlist[i] = *Nan::Utf8String(names->Get(i));
+			strlist[i] = *Nan::Utf8String(Nan::Get(names, i).ToLocalChecked());
 			list[i] = (char*) strlist[i].c_str();
 		}
 		list[i] = NULL;
diff --git a/src/gdal_spatial_reference.cpp b/src/gdal_spatial_reference.cpp
index eabd7bc2..780abec8 100644
--- a/src/gdal_spatial_reference.cpp
+++ b/src/gdal_spatial_reference.cpp
@@ -59,7 +59,7 @@ void SpatialReference::Initialize(Local<Object> target)
 	Nan::SetPrototypeMethod(lcons, "autoIdentifyEPSG", autoIdentifyEPSG);
 	Nan::SetPrototypeMethod(lcons, "validate", validate);
 
-	target->Set(Nan::New("SpatialReference").ToLocalChecked(), lcons->GetFunction());
+	Nan::Set(target, Nan::New("SpatialReference").ToLocalChecked(), Nan::GetFunction(lcons).ToLocalChecked());
 
 	constructor.Reset(lcons);
 }
@@ -173,7 +173,7 @@ Local<Value> SpatialReference::New(OGRSpatialReference *raw, bool owned)
 	SpatialReference *wrapped = new SpatialReference(cloned_srs);
 	wrapped->owned_ = true;
 	Local<Value> ext = Nan::New<External>(wrapped);
-	Local<Object> obj = Nan::NewInstance(Nan::New(SpatialReference::constructor)->GetFunction(), 1, &ext).ToLocalChecked();
+	Local<Object> obj = Nan::NewInstance(Nan::GetFunction(Nan::New(SpatialReference::constructor)).ToLocalChecked(), 1, &ext).ToLocalChecked();
 
 	cache.add(cloned_srs, raw, obj);
 
@@ -892,8 +892,8 @@ NAN_METHOD(SpatialReference::getLinearUnits)
 	double units = srs->this_->GetLinearUnits(&unit_name);
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("value").ToLocalChecked(), Nan::New<Number>(units));
-	result->Set(Nan::New("units").ToLocalChecked(), SafeString::New(unit_name));
+	Nan::Set(result, Nan::New("value").ToLocalChecked(), Nan::New<Number>(units));
+	Nan::Set(result, Nan::New("units").ToLocalChecked(), SafeString::New(unit_name));
 
 	info.GetReturnValue().Set(result);
 }
@@ -914,8 +914,8 @@ NAN_METHOD(SpatialReference::getAngularUnits)
 	double units = srs->this_->GetAngularUnits(&unit_name);
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("value").ToLocalChecked(), Nan::New<Number>(units));
-	result->Set(Nan::New("units").ToLocalChecked(), SafeString::New(unit_name));
+	Nan::Set(result, Nan::New("value").ToLocalChecked(), Nan::New<Number>(units));
+	Nan::Set(result, Nan::New("units").ToLocalChecked(), SafeString::New(unit_name));
 
 	info.GetReturnValue().Set(result);
 }
diff --git a/src/gdal_warper.cpp b/src/gdal_warper.cpp
index 238bdd93..7f14e378 100644
--- a/src/gdal_warper.cpp
+++ b/src/gdal_warper.cpp
@@ -312,7 +312,7 @@ NAN_METHOD(Warper::suggestedWarpOutput)
 	NODE_ARG_OBJECT(0, "Warp options", obj);
 
 	if(Nan::HasOwnProperty(obj, Nan::New("src").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("src").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("src").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsObject() && !prop->IsNull() && Nan::New(Dataset::constructor)->HasInstance(prop)){
 			ds = Nan::ObjectWrap::Unwrap<Dataset>(prop.As<Object>());
 			if(!ds->getDataset()){
@@ -395,23 +395,23 @@ NAN_METHOD(Warper::suggestedWarpOutput)
 	}
 
 	Local<Array> result_geotransform = Nan::New<Array>();
-	result_geotransform->Set(0, Nan::New<Number>(geotransform[0]));
-	result_geotransform->Set(1, Nan::New<Number>(geotransform[1]));
-	result_geotransform->Set(2, Nan::New<Number>(geotransform[2]));
-	result_geotransform->Set(3, Nan::New<Number>(geotransform[3]));
-	result_geotransform->Set(4, Nan::New<Number>(geotransform[4]));
-	result_geotransform->Set(5, Nan::New<Number>(geotransform[5]));
+	Nan::Set(result_geotransform, 0, Nan::New<Number>(geotransform[0]));
+	Nan::Set(result_geotransform, 1, Nan::New<Number>(geotransform[1]));
+	Nan::Set(result_geotransform, 2, Nan::New<Number>(geotransform[2]));
+	Nan::Set(result_geotransform, 3, Nan::New<Number>(geotransform[3]));
+	Nan::Set(result_geotransform, 4, Nan::New<Number>(geotransform[4]));
+	Nan::Set(result_geotransform, 5, Nan::New<Number>(geotransform[5]));
 
 	Local<Object> result_size = Nan::New<Object>();
-	result_size->Set(Nan::New("x").ToLocalChecked(), Nan::New<Integer>(w));
-	result_size->Set(Nan::New("y").ToLocalChecked(), Nan::New<Integer>(h));
+	Nan::Set(result_size, Nan::New("x").ToLocalChecked(), Nan::New<Integer>(w));
+	Nan::Set(result_size, Nan::New("y").ToLocalChecked(), Nan::New<Integer>(h));
 
 	Local<Object> result = Nan::New<Object>();
-	result->Set(Nan::New("rasterSize").ToLocalChecked(), result_size);
-	result->Set(Nan::New("geoTransform").ToLocalChecked(), result_geotransform);
+	Nan::Set(result, Nan::New("rasterSize").ToLocalChecked(), result_size);
+	Nan::Set(result, Nan::New("geoTransform").ToLocalChecked(), result_geotransform);
 
 	info.GetReturnValue().Set(result);
 }
 
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace
diff --git a/src/node_gdal.cpp b/src/node_gdal.cpp
index 6c5a60a6..f63c8a8b 100644
--- a/src/node_gdal.cpp
+++ b/src/node_gdal.cpp
@@ -100,9 +100,9 @@ namespace node_gdal {
 		}
 
 		Local<Object> result = Nan::New<Object>();
-		result->Set(Nan::New("code").ToLocalChecked(), Nan::New(CPLGetLastErrorNo()));
-		result->Set(Nan::New("message").ToLocalChecked(), Nan::New(CPLGetLastErrorMsg()).ToLocalChecked());
-		result->Set(Nan::New("level").ToLocalChecked(), Nan::New(errtype));
+		Nan::Set(result, Nan::New("code").ToLocalChecked(), Nan::New(CPLGetLastErrorNo()));
+		Nan::Set(result, Nan::New("message").ToLocalChecked(), Nan::New(CPLGetLastErrorMsg()).ToLocalChecked());
+		Nan::Set(result, Nan::New("level").ToLocalChecked(), Nan::New(errtype));
 		info.GetReturnValue().Set(result);
 	}
 
@@ -271,7 +271,7 @@ namespace node_gdal {
 			 * @type {gdal.GDALDrivers}
 			 */
 			GDALDrivers::Initialize(target); //calls GDALRegisterAll()
-			target->Set(Nan::New("drivers").ToLocalChecked(), GDALDrivers::New());
+			Nan::Set(target, Nan::New("drivers").ToLocalChecked(), GDALDrivers::New());
 
 			/**
 			 * @class Constants (DMD)
@@ -282,37 +282,37 @@ namespace node_gdal {
 			 * @property gdal.DMD_LONGNAME
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_LONGNAME").ToLocalChecked(), Nan::New(GDAL_DMD_LONGNAME).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_LONGNAME").ToLocalChecked(), Nan::New(GDAL_DMD_LONGNAME).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DMD_MIMETYPE
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_MIMETYPE").ToLocalChecked(), Nan::New(GDAL_DMD_MIMETYPE).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_MIMETYPE").ToLocalChecked(), Nan::New(GDAL_DMD_MIMETYPE).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DMD_HELPTOPIC
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_HELPTOPIC").ToLocalChecked(), Nan::New(GDAL_DMD_HELPTOPIC).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_HELPTOPIC").ToLocalChecked(), Nan::New(GDAL_DMD_HELPTOPIC).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DMD_EXTENSION
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_EXTENSION").ToLocalChecked(), Nan::New(GDAL_DMD_EXTENSION).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_EXTENSION").ToLocalChecked(), Nan::New(GDAL_DMD_EXTENSION).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DMD_CREATIONOPTIONLIST
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_CREATIONOPTIONLIST").ToLocalChecked(), Nan::New(GDAL_DMD_CREATIONOPTIONLIST).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_CREATIONOPTIONLIST").ToLocalChecked(), Nan::New(GDAL_DMD_CREATIONOPTIONLIST).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DMD_CREATIONDATATYPES
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DMD_CREATIONDATATYPES").ToLocalChecked(), Nan::New(GDAL_DMD_CREATIONDATATYPES).ToLocalChecked());
+			Nan::Set(target, Nan::New("DMD_CREATIONDATATYPES").ToLocalChecked(), Nan::New(GDAL_DMD_CREATIONDATATYPES).ToLocalChecked());
 
 			/**
 			 * @class Constants (CPL Error Levels)
@@ -325,7 +325,7 @@ namespace node_gdal {
 			 * @property gdal.CE_None
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CE_None").ToLocalChecked(), Nan::New(CE_None));
+			Nan::Set(target, Nan::New("CE_None").ToLocalChecked(), Nan::New(CE_None));
 			/**
 			 * Error level: Debug
 			 *
@@ -333,7 +333,7 @@ namespace node_gdal {
 			 * @property gdal.CE_Debug
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CE_Debug").ToLocalChecked(), Nan::New(CE_Debug));
+			Nan::Set(target, Nan::New("CE_Debug").ToLocalChecked(), Nan::New(CE_Debug));
 			/**
 			 * Error level: Warning
 			 *
@@ -341,7 +341,7 @@ namespace node_gdal {
 			 * @property gdal.CE_Warning
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CE_Warning").ToLocalChecked(), Nan::New(CE_Warning));
+			Nan::Set(target, Nan::New("CE_Warning").ToLocalChecked(), Nan::New(CE_Warning));
 			/**
 			 * Error level: Failure
 			 *
@@ -349,14 +349,14 @@ namespace node_gdal {
 			 * @property gdal.CE_Failure
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CE_Failure").ToLocalChecked(), Nan::New(CE_Failure));
+			Nan::Set(target, Nan::New("CE_Failure").ToLocalChecked(), Nan::New(CE_Failure));
 			/**
 			 * Error level: Fatal
 			 *
 			 * @property gdal.CE_Fatal
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CE_Fatal").ToLocalChecked(), Nan::New(CE_Fatal));
+			Nan::Set(target, Nan::New("CE_Fatal").ToLocalChecked(), Nan::New(CE_Fatal));
 
 
 			/**
@@ -368,67 +368,67 @@ namespace node_gdal {
 			 * @property gdal.CPLE_None
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_None").ToLocalChecked(), Nan::New(CPLE_None));
+			Nan::Set(target, Nan::New("CPLE_None").ToLocalChecked(), Nan::New(CPLE_None));
 			/**
 			 * @final
 			 * @property gdal.CPLE_AppDefined
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_AppDefined").ToLocalChecked(), Nan::New(CPLE_AppDefined));
+			Nan::Set(target, Nan::New("CPLE_AppDefined").ToLocalChecked(), Nan::New(CPLE_AppDefined));
 			/**
 			 * @final
 			 * @property gdal.CPLE_OutOfMemory
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_OutOfMemory").ToLocalChecked(), Nan::New(CPLE_OutOfMemory));
+			Nan::Set(target, Nan::New("CPLE_OutOfMemory").ToLocalChecked(), Nan::New(CPLE_OutOfMemory));
 			/**
 			 * @final
 			 * @property gdal.CPLE_FileIO
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_FileIO").ToLocalChecked(), Nan::New(CPLE_FileIO));
+			Nan::Set(target, Nan::New("CPLE_FileIO").ToLocalChecked(), Nan::New(CPLE_FileIO));
 			/**
 			 * @final
 			 * @property gdal.CPLE_OpenFailed
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_OpenFailed").ToLocalChecked(), Nan::New(CPLE_OpenFailed));
+			Nan::Set(target, Nan::New("CPLE_OpenFailed").ToLocalChecked(), Nan::New(CPLE_OpenFailed));
 			/**
 			 * @final
 			 * @property gdal.CPLE_IllegalArg
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_IllegalArg").ToLocalChecked(), Nan::New(CPLE_IllegalArg));
+			Nan::Set(target, Nan::New("CPLE_IllegalArg").ToLocalChecked(), Nan::New(CPLE_IllegalArg));
 			/**
 			 * @final
 			 * @property gdal.CPLE_NotSupported
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_NotSupported").ToLocalChecked(), Nan::New(CPLE_NotSupported));
+			Nan::Set(target, Nan::New("CPLE_NotSupported").ToLocalChecked(), Nan::New(CPLE_NotSupported));
 			/**
 			 * @final
 			 * @property gdal.CPLE_AssertionFailed
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_AssertionFailed").ToLocalChecked(), Nan::New(CPLE_AssertionFailed));
+			Nan::Set(target, Nan::New("CPLE_AssertionFailed").ToLocalChecked(), Nan::New(CPLE_AssertionFailed));
 			/**
 			 * @final
 			 * @property gdal.CPLE_NoWriteAccess
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_NoWriteAccess").ToLocalChecked(), Nan::New(CPLE_NoWriteAccess));
+			Nan::Set(target, Nan::New("CPLE_NoWriteAccess").ToLocalChecked(), Nan::New(CPLE_NoWriteAccess));
 			/**
 			 * @final
 			 * @property gdal.CPLE_UserInterrupt
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_UserInterrupt").ToLocalChecked(), Nan::New(CPLE_UserInterrupt));
+			Nan::Set(target, Nan::New("CPLE_UserInterrupt").ToLocalChecked(), Nan::New(CPLE_UserInterrupt));
 			/**
 			 * @final
 			 * @property gdal.CPLE_ObjectNull
 			 * @type {Number}
 			 */
-			target->Set(Nan::New("CPLE_ObjectNull").ToLocalChecked(), Nan::New(CPLE_ObjectNull));
+			Nan::Set(target, Nan::New("CPLE_ObjectNull").ToLocalChecked(), Nan::New(CPLE_ObjectNull));
 
 			/**
 			 * @class Constants (DCAP)
@@ -439,19 +439,19 @@ namespace node_gdal {
 			 * @property gdal.DCAP_CREATE
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DCAP_CREATE").ToLocalChecked(), Nan::New(GDAL_DCAP_CREATE).ToLocalChecked());
+			Nan::Set(target, Nan::New("DCAP_CREATE").ToLocalChecked(), Nan::New(GDAL_DCAP_CREATE).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DCAP_CREATECOPY
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DCAP_CREATECOPY").ToLocalChecked(), Nan::New(GDAL_DCAP_CREATECOPY).ToLocalChecked());
+			Nan::Set(target, Nan::New("DCAP_CREATECOPY").ToLocalChecked(), Nan::New(GDAL_DCAP_CREATECOPY).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.DCAP_VIRTUALIO
 			 * @type {String}
 			 */
-			target->Set(Nan::New("DCAP_VIRTUALIO").ToLocalChecked(), Nan::New(GDAL_DCAP_VIRTUALIO).ToLocalChecked());
+			Nan::Set(target, Nan::New("DCAP_VIRTUALIO").ToLocalChecked(), Nan::New(GDAL_DCAP_VIRTUALIO).ToLocalChecked());
 
 			/**
 			 * @class Constants (OLC)
@@ -462,91 +462,91 @@ namespace node_gdal {
 			 * @property gdal.OLCRandomRead
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCRandomRead").ToLocalChecked(), Nan::New(OLCRandomRead).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCRandomRead").ToLocalChecked(), Nan::New(OLCRandomRead).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCSequentialWrite
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCSequentialWrite").ToLocalChecked(), Nan::New(OLCSequentialWrite).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCSequentialWrite").ToLocalChecked(), Nan::New(OLCSequentialWrite).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCRandomWrite
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCRandomWrite").ToLocalChecked(), Nan::New(OLCRandomWrite).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCRandomWrite").ToLocalChecked(), Nan::New(OLCRandomWrite).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCFastSpatialFilter
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCFastSpatialFilter").ToLocalChecked(), Nan::New(OLCFastSpatialFilter).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCFastSpatialFilter").ToLocalChecked(), Nan::New(OLCFastSpatialFilter).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCFastFeatureCount
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCFastFeatureCount").ToLocalChecked(), Nan::New(OLCFastFeatureCount).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCFastFeatureCount").ToLocalChecked(), Nan::New(OLCFastFeatureCount).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCFastGetExtent
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCFastGetExtent").ToLocalChecked(), Nan::New(OLCFastGetExtent).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCFastGetExtent").ToLocalChecked(), Nan::New(OLCFastGetExtent).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCCreateField
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCCreateField").ToLocalChecked(), Nan::New(OLCCreateField).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCCreateField").ToLocalChecked(), Nan::New(OLCCreateField).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCDeleteField
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCDeleteField").ToLocalChecked(), Nan::New(OLCDeleteField).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCDeleteField").ToLocalChecked(), Nan::New(OLCDeleteField).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCReorderFields
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCReorderFields").ToLocalChecked(), Nan::New(OLCReorderFields).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCReorderFields").ToLocalChecked(), Nan::New(OLCReorderFields).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCAlterFieldDefn
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCAlterFieldDefn").ToLocalChecked(), Nan::New(OLCAlterFieldDefn).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCAlterFieldDefn").ToLocalChecked(), Nan::New(OLCAlterFieldDefn).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCTransactions
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCTransactions").ToLocalChecked(), Nan::New(OLCTransactions).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCTransactions").ToLocalChecked(), Nan::New(OLCTransactions).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCDeleteFeature
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCDeleteFeature").ToLocalChecked(), Nan::New(OLCDeleteFeature).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCDeleteFeature").ToLocalChecked(), Nan::New(OLCDeleteFeature).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCFastSetNextByIndex
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCFastSetNextByIndex").ToLocalChecked(), Nan::New(OLCFastSetNextByIndex).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCFastSetNextByIndex").ToLocalChecked(), Nan::New(OLCFastSetNextByIndex).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCStringsAsUTF8
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCStringsAsUTF8").ToLocalChecked(), Nan::New(OLCStringsAsUTF8).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCStringsAsUTF8").ToLocalChecked(), Nan::New(OLCStringsAsUTF8).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OLCIgnoreFields
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCIgnoreFields").ToLocalChecked(), Nan::New(OLCIgnoreFields).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCIgnoreFields").ToLocalChecked(), Nan::New(OLCIgnoreFields).ToLocalChecked());
 
 			#ifdef OLCCreateGeomField
 			/**
@@ -554,7 +554,7 @@ namespace node_gdal {
 			 * @property gdal.OLCCreateGeomField
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OLCCreateGeomField").ToLocalChecked(), Nan::New(OLCCreateGeomField).ToLocalChecked());
+			Nan::Set(target, Nan::New("OLCCreateGeomField").ToLocalChecked(), Nan::New(OLCCreateGeomField).ToLocalChecked());
 			#endif
 			#ifdef ODsCCreateGeomFieldAfterCreateLayer
 
@@ -567,32 +567,32 @@ namespace node_gdal {
 			 * @property gdal.ODsCCreateLayer
 			 * @type {String}
 			 */
-			target->Set(Nan::New("ODsCCreateLayer").ToLocalChecked(), Nan::New(ODsCCreateLayer).ToLocalChecked());
+			Nan::Set(target, Nan::New("ODsCCreateLayer").ToLocalChecked(), Nan::New(ODsCCreateLayer).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.ODsCDeleteLayer
 			 * @type {String}
 			 */
-			target->Set(Nan::New("ODsCDeleteLayer").ToLocalChecked(), Nan::New(ODsCDeleteLayer).ToLocalChecked());
+			Nan::Set(target, Nan::New("ODsCDeleteLayer").ToLocalChecked(), Nan::New(ODsCDeleteLayer).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.ODsCCreateGeomFieldAfterCreateLayer
 			 * @type {String}
 			 */
-			target->Set(Nan::New("ODsCCreateGeomFieldAfterCreateLayer").ToLocalChecked(), Nan::New(ODsCCreateGeomFieldAfterCreateLayer).ToLocalChecked());
+			Nan::Set(target, Nan::New("ODsCCreateGeomFieldAfterCreateLayer").ToLocalChecked(), Nan::New(ODsCCreateGeomFieldAfterCreateLayer).ToLocalChecked());
 			#endif
 			/**
 			 * @final
 			 * @property gdal.ODrCCreateDataSource
 			 * @type {String}
 			 */
-			target->Set(Nan::New("ODrCCreateDataSource").ToLocalChecked(), Nan::New(ODrCCreateDataSource).ToLocalChecked());
+			Nan::Set(target, Nan::New("ODrCCreateDataSource").ToLocalChecked(), Nan::New(ODrCCreateDataSource).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.ODrCDeleteDataSource
 			 * @type {String}
 			 */
-			target->Set(Nan::New("ODrCDeleteDataSource").ToLocalChecked(), Nan::New(ODrCDeleteDataSource).ToLocalChecked());
+			Nan::Set(target, Nan::New("ODrCDeleteDataSource").ToLocalChecked(), Nan::New(ODrCDeleteDataSource).ToLocalChecked());
 
 			NODE_DEFINE_CONSTANT(target, GA_ReadOnly);
 			NODE_DEFINE_CONSTANT(target, GA_Update);
@@ -611,84 +611,84 @@ namespace node_gdal {
 			 * @property gdal.GDT_Unknown
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Unknown").ToLocalChecked(), Nan::Undefined());
+			Nan::Set(target, Nan::New("GDT_Unknown").ToLocalChecked(), Nan::Undefined());
 			/**
 			 * Eight bit unsigned integer
 			 * @final
 			 * @property gdal.GDT_Byte
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Byte").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Byte)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_Byte").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Byte)).ToLocalChecked());
 			/**
 			 * Sixteen bit unsigned integer
 			 * @final
 			 * @property gdal.GDT_UInt16
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_UInt16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_UInt16)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_UInt16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_UInt16)).ToLocalChecked());
 			/**
 			 * Sixteen bit signed integer
 			 * @final
 			 * @property gdal.GDT_Int16
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Int16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Int16)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_Int16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Int16)).ToLocalChecked());
 			/**
 			 * Thirty two bit unsigned integer
 			 * @final
 			 * @property gdal.GDT_UInt32
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_UInt32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_UInt32)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_UInt32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_UInt32)).ToLocalChecked());
 			/**
 			 * Thirty two bit signed integer
 			 * @final
 			 * @property gdal.GDT_Int32
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Int32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Int32)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_Int32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Int32)).ToLocalChecked());
 			/**
 			 * Thirty two bit floating point
 			 * @final
 			 * @property gdal.GDT_Float32
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Float32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Float32)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_Float32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Float32)).ToLocalChecked());
 			/**
 			 * Sixty four bit floating point
 			 * @final
 			 * @property gdal.GDT_Float64
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_Float64").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Float64)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_Float64").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_Float64)).ToLocalChecked());
 			/**
 			 * Complex Int16
 			 * @final
 			 * @property gdal.GDT_CInt16
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_CInt16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CInt16)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_CInt16").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CInt16)).ToLocalChecked());
 			/**
 			 * Complex Int32
 			 * @final
 			 * @property gdal.GDT_CInt32
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_CInt32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CInt32)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_CInt32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CInt32)).ToLocalChecked());
 			/**
 			 * Complex Float32
 			 * @final
 			 * @property gdal.GDT_CFloat32
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_CFloat32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CFloat32)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_CFloat32").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CFloat32)).ToLocalChecked());
 			/**
 			 * Complex Float64
 			 * @final
 			 * @property gdal.GDT_CFloat64
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GDT_CFloat64").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CFloat64)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GDT_CFloat64").ToLocalChecked(), Nan::New(GDALGetDataTypeName(GDT_CFloat64)).ToLocalChecked());
 
 			/**
 			 * @class Constants (OJ)
@@ -699,19 +699,19 @@ namespace node_gdal {
 			 * @property gdal.OJUndefined
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OJUndefined").ToLocalChecked(), Nan::Undefined());
+			Nan::Set(target, Nan::New("OJUndefined").ToLocalChecked(), Nan::Undefined());
 			/**
 			 * @final
 			 * @property gdal.OJLeft
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OJLeft").ToLocalChecked(), Nan::New("Left").ToLocalChecked());
+			Nan::Set(target, Nan::New("OJLeft").ToLocalChecked(), Nan::New("Left").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OJRight
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OJRight").ToLocalChecked(), Nan::New("Right").ToLocalChecked());
+			Nan::Set(target, Nan::New("OJRight").ToLocalChecked(), Nan::New("Right").ToLocalChecked());
 
 			/**
 			 * @class Constants (GCI)
@@ -722,103 +722,103 @@ namespace node_gdal {
 			 * @property gdal.GCI_Undefined
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_Undefined").ToLocalChecked(), Nan::Undefined());
+			Nan::Set(target, Nan::New("GCI_Undefined").ToLocalChecked(), Nan::Undefined());
 			/**
 			 * @final
 			 * @property gdal.GCI_GrayIndex
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_GrayIndex").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_GrayIndex)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_GrayIndex").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_GrayIndex)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_PaletteIndex
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_PaletteIndex").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_PaletteIndex)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_PaletteIndex").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_PaletteIndex)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_RedBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_RedBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_RedBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_RedBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_RedBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_GreenBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_GreenBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_GreenBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_GreenBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_GreenBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_BlueBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_BlueBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_BlueBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_BlueBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_BlueBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_AlphaBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_AlphaBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_AlphaBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_AlphaBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_AlphaBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_HueBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_HueBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_HueBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_HueBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_HueBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_SaturationBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_SaturationBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_SaturationBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_SaturationBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_SaturationBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_LightnessBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_LightnessBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_LightnessBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_LightnessBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_LightnessBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_CyanBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_CyanBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_CyanBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_CyanBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_CyanBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_MagentaBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_MagentaBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_MagentaBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_MagentaBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_MagentaBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_YellowBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_YellowBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YellowBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_YellowBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YellowBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_BlackBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_BlackBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_BlackBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_BlackBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_BlackBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_YCbCr_YBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_YCbCr_YBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_YBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_YCbCr_YBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_YBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_YCbCr_CbBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_YCbCr_CbBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_CbBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_YCbCr_CbBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_CbBand)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GCI_YCbCr_CrBand
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GCI_YCbCr_CrBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_CrBand)).ToLocalChecked());
+			Nan::Set(target, Nan::New("GCI_YCbCr_CrBand").ToLocalChecked(), Nan::New(GDALGetColorInterpretationName(GCI_YCbCr_CrBand)).ToLocalChecked());
 
 			/**
 			 * @class Constants (wkbVariant)
@@ -832,7 +832,7 @@ namespace node_gdal {
 			 * @property gdal.wkbVariantOgc
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbVariantOgc").ToLocalChecked(), Nan::New("OGC").ToLocalChecked());
+			Nan::Set(target, Nan::New("wkbVariantOgc").ToLocalChecked(), Nan::New("OGC").ToLocalChecked());
 
 			/**
 			 * Old-style 99-402 extended dimension (Z) WKB types.
@@ -842,7 +842,7 @@ namespace node_gdal {
 			 * @property gdal.wkbVariantOldOgc
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbVariantOldOgc").ToLocalChecked(), Nan::New("OGC").ToLocalChecked());
+			Nan::Set(target, Nan::New("wkbVariantOldOgc").ToLocalChecked(), Nan::New("OGC").ToLocalChecked());
 
 			/**
 			 * SFSQL 1.2 and ISO SQL/MM Part 3 extended dimension (Z&M) WKB types.
@@ -851,7 +851,7 @@ namespace node_gdal {
 			 * @property gdal.wkbVariantIso
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbVariantIso").ToLocalChecked(), Nan::New("ISO").ToLocalChecked());
+			Nan::Set(target, Nan::New("wkbVariantIso").ToLocalChecked(), Nan::New("ISO").ToLocalChecked());
 
 			/**
 			 * @class Constants (wkbByteOrder)
@@ -862,13 +862,13 @@ namespace node_gdal {
 			 * @property gdal.wkbXDR
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbXDR").ToLocalChecked(), Nan::New("MSB").ToLocalChecked());
+			Nan::Set(target, Nan::New("wkbXDR").ToLocalChecked(), Nan::New("MSB").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.wkbNDR
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbNDR").ToLocalChecked(), Nan::New("LSB").ToLocalChecked());
+			Nan::Set(target, Nan::New("wkbNDR").ToLocalChecked(), Nan::New("LSB").ToLocalChecked());
 
 			/**
 			 * @class Constants (wkbGeometryType)
@@ -890,7 +890,7 @@ namespace node_gdal {
 			 * @property gdal.wkb25DBit
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkb25DBit").ToLocalChecked(), Nan::New<Integer>(wkb25DBit));
+			Nan::Set(target, Nan::New("wkb25DBit").ToLocalChecked(), Nan::New<Integer>(wkb25DBit));
 
 			int wkbLinearRing25D = wkbLinearRing | wkb25DBit;
 
@@ -899,109 +899,109 @@ namespace node_gdal {
 			 * @property gdal.wkbUnknown
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbUnknown").ToLocalChecked(), Nan::New<Integer>(wkbUnknown));
+			Nan::Set(target, Nan::New("wkbUnknown").ToLocalChecked(), Nan::New<Integer>(wkbUnknown));
 			/**
 			 * @final
 			 * @property gdal.wkbPoint
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbPoint").ToLocalChecked(), Nan::New<Integer>(wkbPoint));
+			Nan::Set(target, Nan::New("wkbPoint").ToLocalChecked(), Nan::New<Integer>(wkbPoint));
 			/**
 			 * @final
 			 * @property gdal.wkbLineString
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbLineString").ToLocalChecked(), Nan::New<Integer>(wkbLineString));
+			Nan::Set(target, Nan::New("wkbLineString").ToLocalChecked(), Nan::New<Integer>(wkbLineString));
 			/**
 			 * @final
 			 * @property gdal.wkbPolygon
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbPolygon").ToLocalChecked(), Nan::New<Integer>(wkbPolygon));
+			Nan::Set(target, Nan::New("wkbPolygon").ToLocalChecked(), Nan::New<Integer>(wkbPolygon));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiPoint
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiPoint").ToLocalChecked(), Nan::New<Integer>(wkbMultiPoint));
+			Nan::Set(target, Nan::New("wkbMultiPoint").ToLocalChecked(), Nan::New<Integer>(wkbMultiPoint));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiLineString
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiLineString").ToLocalChecked(), Nan::New<Integer>(wkbMultiLineString));
+			Nan::Set(target, Nan::New("wkbMultiLineString").ToLocalChecked(), Nan::New<Integer>(wkbMultiLineString));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiPolygon
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiPolygon").ToLocalChecked(), Nan::New<Integer>(wkbMultiPolygon));
+			Nan::Set(target, Nan::New("wkbMultiPolygon").ToLocalChecked(), Nan::New<Integer>(wkbMultiPolygon));
 			/**
 			 * @final
 			 * @property gdal.wkbGeometryCollection
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbGeometryCollection").ToLocalChecked(), Nan::New<Integer>(wkbGeometryCollection));
+			Nan::Set(target, Nan::New("wkbGeometryCollection").ToLocalChecked(), Nan::New<Integer>(wkbGeometryCollection));
 			/**
 			 * @final
 			 * @property gdal.wkbNone
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbNone").ToLocalChecked(), Nan::New<Integer>(wkbNone));
+			Nan::Set(target, Nan::New("wkbNone").ToLocalChecked(), Nan::New<Integer>(wkbNone));
 			/**
 			 * @final
 			 * @property gdal.wkbLinearRing
 			 * @type {String}
 			 */
-			target->Set(Nan::New("wkbLinearRing").ToLocalChecked(), Nan::New<Integer>(wkbLinearRing));
+			Nan::Set(target, Nan::New("wkbLinearRing").ToLocalChecked(), Nan::New<Integer>(wkbLinearRing));
 			/**
 			 * @final
 			 * @property gdal.wkbPoint25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbPoint25D").ToLocalChecked(), Nan::New<Integer>(wkbPoint25D));
+			Nan::Set(target, Nan::New("wkbPoint25D").ToLocalChecked(), Nan::New<Integer>(wkbPoint25D));
 			/**
 			 * @final
 			 * @property gdal.wkbLineString25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbLineString25D").ToLocalChecked(), Nan::New<Integer>(wkbLineString25D));
+			Nan::Set(target, Nan::New("wkbLineString25D").ToLocalChecked(), Nan::New<Integer>(wkbLineString25D));
 			/**
 			 * @final
 			 * @property gdal.wkbPolygon25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbPolygon25D").ToLocalChecked(), Nan::New<Integer>(wkbPolygon25D));
+			Nan::Set(target, Nan::New("wkbPolygon25D").ToLocalChecked(), Nan::New<Integer>(wkbPolygon25D));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiPoint25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiPoint25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiPoint25D));
+			Nan::Set(target, Nan::New("wkbMultiPoint25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiPoint25D));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiLineString25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiLineString25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiLineString25D));
+			Nan::Set(target, Nan::New("wkbMultiLineString25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiLineString25D));
 			/**
 			 * @final
 			 * @property gdal.wkbMultiPolygon25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbMultiPolygon25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiPolygon25D));
+			Nan::Set(target, Nan::New("wkbMultiPolygon25D").ToLocalChecked(), Nan::New<Integer>(wkbMultiPolygon25D));
 			/**
 			 * @final
 			 * @property gdal.wkbGeometryCollection25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbGeometryCollection25D").ToLocalChecked(), Nan::New<Integer>(wkbGeometryCollection25D));
+			Nan::Set(target, Nan::New("wkbGeometryCollection25D").ToLocalChecked(), Nan::New<Integer>(wkbGeometryCollection25D));
 			/**
 			 * @final
 			 * @property gdal.wkbLinearRing25D
 			 * @type {integer}
 			 */
-			target->Set(Nan::New("wkbLinearRing25D").ToLocalChecked(), Nan::New<Integer>(wkbLinearRing25D));
+			Nan::Set(target, Nan::New("wkbLinearRing25D").ToLocalChecked(), Nan::New<Integer>(wkbLinearRing25D));
 
 			/**
 			 * @class Constants (OFT)
@@ -1012,73 +1012,73 @@ namespace node_gdal {
 			 * @property gdal.OFTInteger
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTInteger").ToLocalChecked(), Nan::New(getFieldTypeName(OFTInteger)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTInteger").ToLocalChecked(), Nan::New(getFieldTypeName(OFTInteger)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTIntegerList
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTIntegerList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTIntegerList)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTIntegerList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTIntegerList)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTReal
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTReal").ToLocalChecked(), Nan::New(getFieldTypeName(OFTReal)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTReal").ToLocalChecked(), Nan::New(getFieldTypeName(OFTReal)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTRealList
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTRealList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTRealList)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTRealList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTRealList)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTString
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTString").ToLocalChecked(), Nan::New(getFieldTypeName(OFTString)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTString").ToLocalChecked(), Nan::New(getFieldTypeName(OFTString)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTStringList
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTStringList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTStringList)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTStringList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTStringList)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTWideString
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTWideString").ToLocalChecked(), Nan::New(getFieldTypeName(OFTWideString)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTWideString").ToLocalChecked(), Nan::New(getFieldTypeName(OFTWideString)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTWideStringList
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTWideStringList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTWideStringList)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTWideStringList").ToLocalChecked(), Nan::New(getFieldTypeName(OFTWideStringList)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTBinary
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTBinary").ToLocalChecked(), Nan::New(getFieldTypeName(OFTBinary)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTBinary").ToLocalChecked(), Nan::New(getFieldTypeName(OFTBinary)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTDate
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTDate").ToLocalChecked(), Nan::New(getFieldTypeName(OFTDate)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTDate").ToLocalChecked(), Nan::New(getFieldTypeName(OFTDate)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTTime
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTTime").ToLocalChecked(), Nan::New(getFieldTypeName(OFTTime)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTTime").ToLocalChecked(), Nan::New(getFieldTypeName(OFTTime)).ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.OFTDateTime
 			 * @type {String}
 			 */
-			target->Set(Nan::New("OFTDateTime").ToLocalChecked(), Nan::New(getFieldTypeName(OFTDateTime)).ToLocalChecked());
+			Nan::Set(target, Nan::New("OFTDateTime").ToLocalChecked(), Nan::New(getFieldTypeName(OFTDateTime)).ToLocalChecked());
 
 			/**
 			 * Resampling options that can be used with the gdal.reprojectImage() method.
@@ -1091,43 +1091,43 @@ namespace node_gdal {
 			 * @property gdal.GRA_NearestNeighbor
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_NearestNeighbor").ToLocalChecked(), Nan::New("NearestNeighbor").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_NearestNeighbor").ToLocalChecked(), Nan::New("NearestNeighbor").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_Bilinear
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_Bilinear").ToLocalChecked(), Nan::New("Bilinear").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_Bilinear").ToLocalChecked(), Nan::New("Bilinear").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_Cubic
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_Cubic").ToLocalChecked(), Nan::New("Cubic").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_Cubic").ToLocalChecked(), Nan::New("Cubic").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_CubicSpline
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_CubicSpline").ToLocalChecked(), Nan::New("CubicSpline").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_CubicSpline").ToLocalChecked(), Nan::New("CubicSpline").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_Lanczos
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_Lanczos").ToLocalChecked(), Nan::New("Lanczos").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_Lanczos").ToLocalChecked(), Nan::New("Lanczos").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_Average
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_Average").ToLocalChecked(), Nan::New("Average").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_Average").ToLocalChecked(), Nan::New("Average").ToLocalChecked());
 			/**
 			 * @final
 			 * @property gdal.GRA_Mode
 			 * @type {String}
 			 */
-			target->Set(Nan::New("GRA_Mode").ToLocalChecked(), Nan::New("Mode").ToLocalChecked());
+			Nan::Set(target, Nan::New("GRA_Mode").ToLocalChecked(), Nan::New("Mode").ToLocalChecked());
 
 			/**
 			 * GDAL version (not the binding version)
@@ -1137,7 +1137,7 @@ namespace node_gdal {
 			 * @property gdal.version
 			 * @type {String}
 			 */
-			target->Set(Nan::New("version").ToLocalChecked(), Nan::New(GDAL_RELEASE_NAME).ToLocalChecked());
+			Nan::Set(target, Nan::New("version").ToLocalChecked(), Nan::New(GDAL_RELEASE_NAME).ToLocalChecked());
 
 			/**
 			 * Details about the last error that occurred. The property
@@ -1152,9 +1152,9 @@ namespace node_gdal {
 			Nan::SetAccessor(target, Nan::New<v8::String>("lastError").ToLocalChecked(), LastErrorGetter, LastErrorSetter);
 
 			// Local<Object> versions = Nan::New<Object>();
-			// versions->Set(Nan::New("node").ToLocalChecked(), Nan::New(NODE_VERSION+1));
-			// versions->Set(Nan::New("v8").ToLocalChecked(), Nan::New(V8::GetVersion()));
-			// target->Set(Nan::New("versions").ToLocalChecked(), versions);
+			// Nan::Set(versions, Nan::New("node").ToLocalChecked(), Nan::New(NODE_VERSION+1));
+			// Nan::Set(versions, Nan::New("v8").ToLocalChecked(), Nan::New(V8::GetVersion()));
+			// Nan::Set(target, Nan::New("versions").ToLocalChecked(), versions);
 
 			/**
 			 * Disables all output.
@@ -1179,7 +1179,7 @@ namespace node_gdal {
 			Nan::SetMethod(target, "log", Log);
 
 			Local<Object> supports = Nan::New<Object>();
-			target->Set(Nan::New("supports").ToLocalChecked(), supports);
+			Nan::Set(target, Nan::New("supports").ToLocalChecked(), supports);
 
 			NODE_DEFINE_CONSTANT(target, CPLE_OpenFailed);
 			NODE_DEFINE_CONSTANT(target, CPLE_IllegalArg);
diff --git a/src/utils/fast_buffer.cpp b/src/utils/fast_buffer.cpp
index eff58be0..adec13ff 100644
--- a/src/utils/fast_buffer.cpp
+++ b/src/utils/fast_buffer.cpp
@@ -12,7 +12,7 @@ Local<Value> FastBuffer::New(unsigned char *data, int length)
 	memcpy(node::Buffer::Data(slowBuffer), data, length);
 
 	Local<Object> globalObj = Nan::GetCurrentContext()->Global();
-	Local<Function> bufferConstructor = globalObj->Get(Nan::New("Buffer").ToLocalChecked()).As<Function>();
+	Local<Function> bufferConstructor = Nan::Get(globalObj, Nan::New("Buffer").ToLocalChecked()).ToLocalChecked().As<Function>();
 	Local<Value> constructorArgs[3] = { slowBuffer, Nan::New<Integer>(length), Nan::New<Integer>(0) };
 	
 	Local<Object> actualBuffer = Nan::NewInstance(bufferConstructor, 3, constructorArgs).ToLocalChecked();
diff --git a/src/utils/number_list.cpp b/src/utils/number_list.cpp
index 17529fdc..bfb209f3 100644
--- a/src/utils/number_list.cpp
+++ b/src/utils/number_list.cpp
@@ -37,9 +37,9 @@ int IntegerList::parse(Local<Value> value)
 
 		list = new int [len];
 		for (i = 0; i < len; ++i) {
-			Local<Value> element = arr->Get(i);
+			Local<Value> element = Nan::Get(arr, i).ToLocalChecked();
 			if(element->IsNumber()){
-				list[i] = element->Int32Value();
+				list[i] = Nan::To<int32_t>(element).ToChecked();
 			} else {
 				std::string err = std::string("Every element in the")+name+" array must be a number";
 				Nan::ThrowTypeError(err.c_str());
@@ -48,7 +48,7 @@ int IntegerList::parse(Local<Value> value)
 		}
 	} else if (value->IsNumber()) {
 		list = new int [1];
-		list[0] = value->Int32Value();
+		list[0] = Nan::To<int32_t>(value).ToChecked();
 		len = 1;
 	} else {
 		std::string err = std::string(name)+"integer list must be an array or single integer";
@@ -91,9 +91,9 @@ int DoubleList::parse(Local<Value> value)
 
 		list = new double [len];
 		for (i = 0; i < len; ++i) {
-			Local<Value> element = arr->Get(i);
+			Local<Value> element = Nan::Get(arr, i).ToLocalChecked();
 			if(element->IsNumber()){
-				list[i] = element->NumberValue();
+				list[i] = Nan::To<double>(element).ToChecked();
 			} else {
 				std::string err = std::string("Every element in the")+name+" array must be a number";
 				Nan::ThrowTypeError(err.c_str());
@@ -102,7 +102,7 @@ int DoubleList::parse(Local<Value> value)
 		}
 	} else if (value->IsNumber()) {
 		list = new double [1];
-		list[0] = value->NumberValue();
+		list[0] = Nan::To<double>(value).ToChecked();
 		len = 1;
 	} else {
 		std::string err = std::string(name)+"double list must be an array or single number";
@@ -113,4 +113,4 @@ int DoubleList::parse(Local<Value> value)
 }
 
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace
diff --git a/src/utils/string_list.cpp b/src/utils/string_list.cpp
index 865fe55e..ffe556b7 100644
--- a/src/utils/string_list.cpp
+++ b/src/utils/string_list.cpp
@@ -28,21 +28,21 @@ int StringList::parse(Local<Value> value)
 		list = new char* [array->Length() + 1];
 		strlist = new std::string [array->Length()];
 		for (i = 0; i < array->Length(); ++i) {
-			strlist[i] = *Nan::Utf8String(array->Get(i));
+			strlist[i] = *Nan::Utf8String(Nan::Get(array, i).ToLocalChecked());
 			list[i] = (char*) strlist[i].c_str();
 		}
 		list[i] = NULL;
 	} else if (value->IsObject()) {
 		Local<Object> obj = value.As<Object>();
-		Local<Array> keys = obj->GetOwnPropertyNames();
+		Local<Array> keys = Nan::GetOwnPropertyNames(obj).ToLocalChecked();
 		if(keys->Length() == 0)
 			return 0;
 
 		list = new char* [keys->Length() + 1];
 		strlist = new std::string [keys->Length()];
 		for (i = 0; i < keys->Length(); ++i) {
-			std::string key = *Nan::Utf8String(keys->Get(i));
-			std::string val = *Nan::Utf8String(obj->Get(keys->Get(i)));
+			std::string key = *Nan::Utf8String(Nan::Get(keys, i).ToLocalChecked());
+			std::string val = *Nan::Utf8String(Nan::Get(obj, Nan::Get(keys, i).ToLocalChecked()).ToLocalChecked());
 			strlist[i] = key+"="+val;
 			list[i] = (char*) strlist[i].c_str();
 		}
@@ -54,4 +54,4 @@ int StringList::parse(Local<Value> value)
 	return 0;
 }
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace
diff --git a/src/utils/typed_array.cpp b/src/utils/typed_array.cpp
index 13645eb3..0a99d595 100644
--- a/src/utils/typed_array.cpp
+++ b/src/utils/typed_array.cpp
@@ -29,7 +29,7 @@ Local<Value> TypedArray::New(GDALDataType type, unsigned int length)  {
 
 
 	// make ArrayBuffer
-	val = global->Get(Nan::New("ArrayBuffer").ToLocalChecked());
+	val = Nan::Get(global, Nan::New("ArrayBuffer").ToLocalChecked()).ToLocalChecked();
 
 	if(val.IsEmpty() || !val->IsFunction()) {
 		Nan::ThrowError("Error getting ArrayBuffer constructor");
@@ -47,7 +47,7 @@ Local<Value> TypedArray::New(GDALDataType type, unsigned int length)  {
 
 
 	// make TypedArray
-	val = global->Get(Nan::New(name).ToLocalChecked());
+	val = Nan::Get(global, Nan::New(name).ToLocalChecked()).ToLocalChecked();
 
 	if(val.IsEmpty() || !val->IsFunction()) {
 		Nan::ThrowError("Error getting typed array constructor");
@@ -62,7 +62,7 @@ Local<Value> TypedArray::New(GDALDataType type, unsigned int length)  {
 		return scope.Escape(Nan::Undefined());
 	}
 
-	array->Set(Nan::New("_gdal_type").ToLocalChecked(), Nan::New(type));
+	Nan::Set(array, Nan::New("_gdal_type").ToLocalChecked(), Nan::New(type));
 
 	return scope.Escape(array);
 }
@@ -72,10 +72,10 @@ GDALDataType TypedArray::Identify(Local<Object> obj) {
 
 	Local<String> sym = Nan::New("_gdal_type").ToLocalChecked();
 	if (!Nan::HasOwnProperty(obj, sym).FromMaybe(false)) return GDT_Unknown;
-	Local<Value> val = obj->Get(sym);
+	Local<Value> val = Nan::Get(obj, sym).ToLocalChecked();
 	if (!val->IsNumber()) return GDT_Unknown;
 
-	return (GDALDataType) val->Int32Value();
+	return (GDALDataType) Nan::To<int32_t>(val).ToChecked();
 }
 
 void* TypedArray::Validate(Local<Object> obj, GDALDataType type, int min_length){
@@ -148,4 +148,4 @@ bool TypedArray::ValidateLength(int length, int min_length){
 	return false;
 }
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace
diff --git a/src/utils/warp_options.cpp b/src/utils/warp_options.cpp
index e0436d50..8c572e9d 100644
--- a/src/utils/warp_options.cpp
+++ b/src/utils/warp_options.cpp
@@ -79,28 +79,28 @@ int WarpOptions::parse(Local<Value> value)
 	Local<Object> obj = value.As<Object>();
 	Local<Value> prop;
 
-	if(Nan::HasOwnProperty(obj, Nan::New("options").ToLocalChecked()).FromMaybe(false) && additional_options.parse(obj->Get(Nan::New("options").ToLocalChecked()))){
+	if(Nan::HasOwnProperty(obj, Nan::New("options").ToLocalChecked()).FromMaybe(false) && additional_options.parse(Nan::Get(obj, Nan::New("options").ToLocalChecked()).ToLocalChecked())){
 		return 1; // error parsing string list
 	}
 
 	options->papszWarpOptions = additional_options.get();
 
 	if(Nan::HasOwnProperty(obj, Nan::New("memoryLimit").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("memoryLimit").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("memoryLimit").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			options->dfWarpMemoryLimit = prop->Int32Value();
+			options->dfWarpMemoryLimit = Nan::To<int32_t>(prop).ToChecked();
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("memoryLimit property must be an integer"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("resampling").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("resampling").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("resampling").ToLocalChecked()).ToLocalChecked();
 		if(parseResamplingAlg(prop)){
 			return 1; //error parsing resampling algorithm
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("src").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("src").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("src").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsObject() && !prop->IsNull() && Nan::New(Dataset::constructor)->HasInstance(prop)){
 			Dataset *ds = Nan::ObjectWrap::Unwrap<Dataset>(prop.As<Object>());
 			options->hSrcDS = ds->getDataset();
@@ -122,7 +122,7 @@ int WarpOptions::parse(Local<Value> value)
 		return 1;
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("dst").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("dst").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("dst").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsObject() && !prop->IsNull() && Nan::New(Dataset::constructor)->HasInstance(prop)){
 			Dataset *ds = Nan::ObjectWrap::Unwrap<Dataset>(prop.As<Object>());
 			options->hDstDS = ds->getDataset();
@@ -141,7 +141,7 @@ int WarpOptions::parse(Local<Value> value)
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("srcBands").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("srcBands").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("srcBands").ToLocalChecked()).ToLocalChecked();
 		if(src_bands.parse(prop)){
 			return 1; //error parsing number list
 		}
@@ -149,7 +149,7 @@ int WarpOptions::parse(Local<Value> value)
 		options->nBandCount = src_bands.length();
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("dstBands").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("dstBands").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("dstBands").ToLocalChecked()).ToLocalChecked();
 		if(dst_bands.parse(prop)){
 			return 1; //error parsing number list
 		}
@@ -169,49 +169,49 @@ int WarpOptions::parse(Local<Value> value)
 		return 1;
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("srcNodata").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("srcNodata").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("srcNodata").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			src_nodata = new double(prop->NumberValue());
+			src_nodata = new double(Nan::To<double>(prop).ToChecked());
 			options->padfSrcNoDataReal = src_nodata;
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("srcNodata property must be a number"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("dstNodata").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("dstNodata").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("dstNodata").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			dst_nodata = new double(prop->NumberValue());
+			dst_nodata = new double(Nan::To<double>(prop).ToChecked());
 			options->padfDstNoDataReal = dst_nodata;
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("dstNodata property must be a number"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("srcAlphaBand").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("srcAlphaBand").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("srcAlphaBand").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			options->nSrcAlphaBand = prop->Int32Value();
+			options->nSrcAlphaBand = Nan::To<int32_t>(prop).ToChecked();
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("srcAlphaBand property must be an integer"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("dstAlphaBand").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("dstAlphaBand").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("dstAlphaBand").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			options->nDstAlphaBand = prop->Int32Value();
+			options->nDstAlphaBand = Nan::To<int32_t>(prop).ToChecked();
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("dstAlphaBand property must be an integer"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("blend").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("blend").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("blend").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsNumber()){
-			options->dfCutlineBlendDist = prop->NumberValue();
+			options->dfCutlineBlendDist = Nan::To<double>(prop).ToChecked();
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
 			Nan::ThrowTypeError("cutline blend distance must be a number"); return 1;
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("cutline").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("cutline").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("cutline").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsObject() && !prop->IsNull() && Nan::New(Geometry::constructor)->HasInstance(prop)){
 			options->hCutline = Nan::ObjectWrap::Unwrap<Geometry>(prop.As<Object>())->get();
 		} else if (!prop->IsUndefined() && !prop->IsNull()) {
@@ -219,7 +219,7 @@ int WarpOptions::parse(Local<Value> value)
 		}
 	}
 	if(Nan::HasOwnProperty(obj, Nan::New("multi").ToLocalChecked()).FromMaybe(false)){
-		prop = obj->Get(Nan::New("multi").ToLocalChecked());
+		prop = Nan::Get(obj, Nan::New("multi").ToLocalChecked()).ToLocalChecked();
 		if(prop->IsTrue()){
 			multi = true;
 		}
@@ -227,4 +227,4 @@ int WarpOptions::parse(Local<Value> value)
 	return 0;
 }
 
-} //node_gdal namespace
\ No newline at end of file
+} //node_gdal namespace