diff --git a/js/gulpfile.js b/js/gulpfile.js
index b236699..449ae50 100644
--- a/js/gulpfile.js
+++ b/js/gulpfile.js
@@ -144,7 +144,7 @@
   exportsFile  + ' > ' + outputFile;
 }
 
-gulp.task('dist', ['genproto_wellknowntypes'], function (cb) {
+gulp.task('dist', gulp.series(['genproto_wellknowntypes'], function (cb) {
   // TODO(haberman): minify this more aggressively.
   // Will require proper externs/exports.
   exec(getClosureBuilderCommand('commonjs/export.js', 'google-protobuf.js'),
@@ -153,7 +153,7 @@
     console.log(stderr);
     cb(err);
   });
-});
+}));
 
 gulp.task('commonjs_asserts', function (cb) {
   exec('mkdir -p commonjs_out/test_node_modules && ' +
@@ -179,7 +179,7 @@
   });
 });
 
-gulp.task('make_commonjs_out', ['dist', 'genproto_well_known_types_commonjs', 'genproto_group1_commonjs', 'genproto_group2_commonjs', 'genproto_commonjs_wellknowntypes', 'commonjs_asserts', 'commonjs_testdeps', 'genproto_group3_commonjs_strict'], function (cb) {
+gulp.task('make_commonjs_out', gulp.series(['dist', 'genproto_well_known_types_commonjs', 'genproto_group1_commonjs', 'genproto_group2_commonjs', 'genproto_commonjs_wellknowntypes', 'commonjs_asserts', 'commonjs_testdeps', 'genproto_group3_commonjs_strict'], function (cb) {
   // TODO(haberman): minify this more aggressively.
   // Will require proper externs/exports.
   var cmd = "mkdir -p commonjs_out/binary && mkdir -p commonjs_out/test_node_modules && ";
@@ -201,35 +201,35 @@
     console.log(stderr);
     cb(err);
   });
-});
+}));
 
-gulp.task('deps', ['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure'], function (cb) {
+gulp.task('deps', gulp.series(['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure'], function (cb) {
   exec('./node_modules/google-closure-library/closure/bin/build/depswriter.py binary/arith.js binary/constants.js binary/decoder.js binary/encoder.js binary/reader.js binary/utils.js binary/writer.js debug.js map.js message.js node_loader.js test_bootstrap.js > deps.js',
        function (err, stdout, stderr) {
     console.log(stdout);
     console.log(stderr);
     cb(err);
   });
-});
+}));
 
-gulp.task('test_closure', ['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure', 'deps'], function (cb) {
+gulp.task('test_closure', gulp.series(['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure', 'deps'], function (cb) {
   exec('JASMINE_CONFIG_PATH=jasmine.json ./node_modules/.bin/jasmine',
        function (err, stdout, stderr) {
     console.log(stdout);
     console.log(stderr);
     cb(err);
   });
-});
+}));
 
-gulp.task('test_commonjs', ['make_commonjs_out'], function (cb) {
+gulp.task('test_commonjs', gulp.series(['make_commonjs_out'], function (cb) {
   exec('cd commonjs_out && JASMINE_CONFIG_PATH=jasmine.json NODE_PATH=test_node_modules ../node_modules/.bin/jasmine',
        function (err, stdout, stderr) {
     console.log(stdout);
     console.log(stderr);
     cb(err);
   });
-});
+}));
 
-gulp.task('test', ['test_closure', 'test_commonjs'], function(cb) {
+gulp.task('test', gulp.series(['test_closure', 'test_commonjs'], function(cb) {
   cb();
-});
+}));
diff --git a/js/package.json b/js/package.json
index 5b3ab59..5043963 100644
--- a/js/package.json
+++ b/js/package.json
@@ -11,7 +11,7 @@
     "glob": "~6.0.4",
     "google-closure-compiler": "~20190301.0.0",
     "google-closure-library": "~20190301.0.0",
-    "gulp": "~3.9.0",
+    "gulp": "~4.0.1",
     "jasmine": "~2.4.1"
   },
   "scripts": {
diff --git a/php/src/Google/Protobuf/Internal/DescriptorPool.php b/php/src/Google/Protobuf/Internal/DescriptorPool.php
index 9b4dcc0..419bbf4 100644
--- a/php/src/Google/Protobuf/Internal/DescriptorPool.php
+++ b/php/src/Google/Protobuf/Internal/DescriptorPool.php
@@ -55,7 +55,7 @@
         return self::$pool;
     }
 
-    public function internalAddGeneratedFile($data)
+    public function internalAddGeneratedFile($data, $use_nested = false)
     {
         $files = new FileDescriptorSet();
         $files->mergeFromString($data);
diff --git a/php/tests/proto/test_wrapper_type_setters.proto b/php/tests/proto/test_wrapper_type_setters.proto
index 41ca7f3..119bd25 100644
--- a/php/tests/proto/test_wrapper_type_setters.proto
+++ b/php/tests/proto/test_wrapper_type_setters.proto
@@ -24,3 +24,14 @@
 
   map<string, google.protobuf.StringValue> map_string_value = 13;
 }
+
+message TestWrapperAccessorConflicts {
+  int32 normal_vs_wrapper_value = 1;
+  google.protobuf.Int32Value normal_vs_wrapper = 2;
+
+  int32 normal_vs_normal_value = 3;
+  int32 normal_vs_normal = 4;
+
+  google.protobuf.Int32Value wrapper_vs_wrapper_value = 5;
+  google.protobuf.Int32Value wrapper_vs_wrapper = 6;
+}
diff --git a/php/tests/wrapper_type_setters_test.php b/php/tests/wrapper_type_setters_test.php
index 5509a17..35e3a7d 100644
--- a/php/tests/wrapper_type_setters_test.php
+++ b/php/tests/wrapper_type_setters_test.php
@@ -16,6 +16,44 @@
 
 class WrapperTypeSettersTest extends TestBase
 {
+    public function testConflictNormalVsWrapper()
+    {
+        $m = new Foo\TestWrapperAccessorConflicts();
+
+        $m->setNormalVsWrapperValue1(1);
+        $this->assertSame(1, $m->getNormalVsWrapperValue1());
+
+        $m->setNormalVsWrapperValue2(1);
+        $this->assertSame(1, $m->getNormalVsWrapperValue2());
+
+        $wrapper = new Int32Value(["value" => 1]);
+        $m->setNormalVsWrapper($wrapper);
+        $this->assertSame(1, $m->getNormalVsWrapper()->getValue());
+    }
+
+    public function testConflictNormalVsNormal()
+    {
+        $m = new Foo\TestWrapperAccessorConflicts();
+
+        $m->setNormalVsNormalValue(1);
+        $this->assertSame(1, $m->getNormalVsNormalValue());
+
+        $m->setNormalVsNormal(1);
+        $this->assertSame(1, $m->getNormalVsNormal());
+    }
+
+    public function testConflictWrapperVsWrapper()
+    {
+        $m = new Foo\TestWrapperAccessorConflicts();
+
+        $m->setWrapperVsWrapperValueValue(1);
+        $this->assertSame(1, $m->getWrapperVsWrapperValueValue());
+
+        $wrapper = new Int32Value(["value" => 1]);
+        $m->setWrapperVsWrapperValue5($wrapper);
+        $this->assertSame(1, $m->getWrapperVsWrapperValue5()->getValue());
+    }
+
     /**
      * @dataProvider gettersAndSettersDataProvider
      */
diff --git a/protobuf.pc.in b/protobuf.pc.in
index 282fef3..4e88b51 100644
--- a/protobuf.pc.in
+++ b/protobuf.pc.in
@@ -8,5 +8,5 @@
 Version: @VERSION@
 Libs: -L${libdir} -lprotobuf @PTHREAD_LIBS@
 Libs.private: @LIBS@
-Cflags: -I${includedir} @PTHREAD_CFLAGS@ @CXXFLAGS@
+Cflags: -I${includedir} @PTHREAD_CFLAGS@
 Conflicts: protobuf-lite
diff --git a/src/google/protobuf/compiler/php/php_generator.cc b/src/google/protobuf/compiler/php/php_generator.cc
index d7e33b2..8e40560 100644
--- a/src/google/protobuf/compiler/php/php_generator.cc
+++ b/src/google/protobuf/compiler/php/php_generator.cc
@@ -655,27 +655,58 @@
 
 void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor,
                            io::Printer* printer) {
+  bool need_other_name_for_accessor = false;
+  bool need_other_name_for_wrapper_accessor = false;
+  const Descriptor* desc = field->containing_type();
+
+  if (!field->is_repeated() &&
+      field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
+      IsWrapperType(field)) {
+    // Check if there is any field called xxx_value
+    const FieldDescriptor* other =
+        desc->FindFieldByName(StrCat(field->name(), "_value"));
+    if (other != NULL) {
+      need_other_name_for_wrapper_accessor = true;
+    }
+  }
+
+  if (strings::EndsWith(field->name(), "_value")) {
+    std::size_t pos = (field->name()).find("_value");  
+    string name = (field->name()).substr(0, pos);
+    const FieldDescriptor* other = desc->FindFieldByName(name);
+    if (other != NULL &&
+        !other->is_repeated() &&
+        other->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
+        IsWrapperType(other)) {
+      need_other_name_for_accessor = true;
+    }
+  }
+
   const OneofDescriptor* oneof = field->containing_oneof();
 
   // Generate getter.
   if (oneof != NULL) {
     GenerateFieldDocComment(printer, field, is_descriptor, kFieldGetter);
     printer->Print(
-        "public function get^camel_name^()\n"
+        "public function get^camel_name^^field_number^()\n"
         "{\n"
         "    return $this->readOneof(^number^);\n"
         "}\n\n",
         "camel_name", UnderscoresToCamelCase(field->name(), true),
-        "number", IntToString(field->number()));
+        "number", IntToString(field->number()),
+        "field_number", need_other_name_for_accessor ?
+            StrCat(field->number()) : "");
   } else {
     GenerateFieldDocComment(printer, field, is_descriptor, kFieldGetter);
     printer->Print(
-        "public function get^camel_name^()\n"
+        "public function get^camel_name^^field_number^()\n"
         "{\n"
         "    return $this->^name^;\n"
         "}\n\n",
-        "camel_name", UnderscoresToCamelCase(field->name(), true), "name",
-        field->name());
+        "camel_name", UnderscoresToCamelCase(field->name(), true),
+        "name", field->name(),
+        "field_number", need_other_name_for_accessor ?
+            StrCat(field->number()) : "");
   }
 
   // For wrapper types, generate an additional getXXXValue getter
@@ -684,21 +715,28 @@
       field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
       IsWrapperType(field)) {
     GenerateWrapperFieldGetterDocComment(printer, field);
+
     printer->Print(
-        "public function get^camel_name^Value()\n"
+        "public function get^camel_name^Value^field_number1^()\n"
         "{\n"
-        "    $wrapper = $this->get^camel_name^();\n"
+        "    $wrapper = $this->get^camel_name^^field_number2^();\n"
         "    return is_null($wrapper) ? null : $wrapper->getValue();\n"
         "}\n\n",
-        "camel_name", UnderscoresToCamelCase(field->name(), true));
+        "camel_name", UnderscoresToCamelCase(field->name(), true),
+        "field_number1", need_other_name_for_wrapper_accessor ?
+            StrCat(field->number()) : "",
+        "field_number2", need_other_name_for_accessor ?
+            StrCat(field->number()) : "");
   }
 
   // Generate setter.
   GenerateFieldDocComment(printer, field, is_descriptor, kFieldSetter);
   printer->Print(
-      "public function set^camel_name^($var)\n"
+      "public function set^camel_name^^field_number^($var)\n"
       "{\n",
-      "camel_name", UnderscoresToCamelCase(field->name(), true));
+      "camel_name", UnderscoresToCamelCase(field->name(), true),
+      "field_number", need_other_name_for_accessor ?
+          StrCat(field->number()) : "");
 
   Indent(printer);
 
@@ -798,13 +836,17 @@
       IsWrapperType(field)) {
     GenerateWrapperFieldSetterDocComment(printer, field);
     printer->Print(
-        "public function set^camel_name^Value($var)\n"
+        "public function set^camel_name^Value^field_number1^($var)\n"
         "{\n"
         "    $wrappedVar = is_null($var) ? null : new \\^wrapper_type^(['value' => $var]);\n"
-        "    return $this->set^camel_name^($wrappedVar);\n"
+        "    return $this->set^camel_name^^field_number2^($wrappedVar);\n"
         "}\n\n",
         "camel_name", UnderscoresToCamelCase(field->name(), true),
-        "wrapper_type", LegacyFullClassName(field->message_type(), is_descriptor));
+        "wrapper_type", LegacyFullClassName(field->message_type(), is_descriptor),
+        "field_number1", need_other_name_for_wrapper_accessor ?
+            StrCat(field->number()) : "",
+        "field_number2", need_other_name_for_accessor ?
+            StrCat(field->number()) : "");
   }
 
   // Generate has method for proto2 only.
