diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index a2170283c8b7b..2a93d3c8b69b5 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -3212,9 +3212,7 @@ PHP_METHOD(SoapClient, __setSoapHeaders)
zval *default_headers;
verify_soap_headers_array(Z_ARRVAL_P(headers));
- if ((default_headers = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "__default_headers", sizeof("__default_headers")-1)) == NULL) {
- add_property_zval(this_ptr, "__default_headers", headers);
- }
+ add_property_zval(this_ptr, "__default_headers", headers);
} else if (Z_TYPE_P(headers) == IS_OBJECT &&
instanceof_function(Z_OBJCE_P(headers), soap_header_class_entry)) {
zval default_headers;
diff --git a/ext/soap/tests/bugs/bug73538.phpt b/ext/soap/tests/bugs/bug73538.phpt
new file mode 100644
index 0000000000000..1bf0372419d6f
--- /dev/null
+++ b/ext/soap/tests/bugs/bug73538.phpt
@@ -0,0 +1,35 @@
+--TEST--
+SOAP: SoapClient::__setHeaders array overrides previous headers
+--SKIPIF--
+
+--FILE--
+ "test://",
+ "uri" => "test://",
+ "exceptions" => false,
+ "trace" => true,
+]);
+$client->__setSoapHeaders(new \SoapHeader('ns', 'Header', ['something' => 1]));
+$client->__setSoapHeaders(new \SoapHeader('ns', 'Header', ['something' => 2]));
+$client->test();
+echo $client->__getLastRequest();
+
+$client = new SoapClient(null, [
+ "location" => "test://",
+ "uri" => "test://",
+ "exceptions" => false,
+ "trace" => true,
+]);
+$client->__setSoapHeaders([new \SoapHeader('ns', 'Header', ['something' => 1])]);
+$client->__setSoapHeaders([new \SoapHeader('ns', 'Header', ['something' => 2])]);
+$client->test();
+echo $client->__getLastRequest();
+
+?>
+--EXPECT--
+
+- something2
+
+- something2