diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c
index cc87e214c9dd49fd33763b95f6dd47ef8e663905..134e02c7fd05d5d6006af62f0557dc584f9e25be 100755
--- a/src/php/ext/grpc/call.c
+++ b/src/php/ext/grpc/call.c
@@ -292,19 +292,17 @@ PHP_METHOD(Call, start_invoke){
  * (optional)
  * @return long Error code
  */
-PHP_METHOD(Call, accept){
+PHP_METHOD(Call, server_accept){
   long tag;
   zval *queue_obj;
-  long flags = 0;
-  /* "Ol|l" == 1 Object, 1 mandatory long, 1 optional long */
+  /* "Ol|l" == 1 Object, 1 long */
   if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
-                           "Ol|l",
+                           "Ol",
                            &queue_obj, grpc_ce_completion_queue,
-                           &tag,
-                           &flags) == FAILURE){
+                           &tag) == FAILURE){
     zend_throw_exception(
         spl_ce_InvalidArgumentException,
-        "accept expects a CompletionQueue, a long, and an optional long",
+        "server_accept expects a CompletionQueue, a long, and an optional long",
         1 TSRMLS_CC);
     return;
   }
@@ -314,10 +312,25 @@ PHP_METHOD(Call, accept){
   wrapped_grpc_completion_queue *queue =
     (wrapped_grpc_completion_queue*)zend_object_store_get_object(
         queue_obj TSRMLS_CC);
-  RETURN_LONG(grpc_call_accept(call->wrapped,
-                               queue->wrapped,
-                               (void*)tag,
-                               (gpr_uint32)flags));
+  RETURN_LONG(grpc_call_server_accept(call->wrapped,
+                                      queue->wrapped,
+                                      (void*)tag));
+}
+
+PHP_METHOD(Call, server_end_initial_metadata) {
+  long flags = 0;
+  /* "|l" == 1 optional long */
+  if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
+                           "|l",
+                           &flags) == FAILURE) {
+    zend_throw_exception(
+        spl_ce_InvalidArgumentException,
+        "server_end_initial_metadata expects an optional long",
+        1 TSRMLS_CC);
+  }
+  wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object(
+      getThis() TSRMLS_CC);
+  RETURN_LONG(grpc_call_server_end_initial_metadata(call->wrapped, flags));
 }
 
 /**
@@ -435,7 +448,8 @@ PHP_METHOD(Call, start_read){
 
 static zend_function_entry call_methods[] = {
   PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
-  PHP_ME(Call, accept, NULL, ZEND_ACC_PUBLIC)
+  PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC)
+  PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC)
   PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC)
   PHP_ME(Call, cancel, NULL, ZEND_ACC_PUBLIC)
   PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC)
diff --git a/src/php/tests/unit_tests/EndToEndTest.php b/src/php/tests/unit_tests/EndToEndTest.php
index be801bf016b9ce2c44431492438533f40d025232..2996780dc1d4e520510c7229755dcfc47b26bf4a 100755
--- a/src/php/tests/unit_tests/EndToEndTest.php
+++ b/src/php/tests/unit_tests/EndToEndTest.php
@@ -52,7 +52,12 @@ class EndToEndTest extends PHPUnit_Framework_TestCase{
     $server_call = $event->get_call();
     $this->assertNotNull($server_call);
     $this->assertEquals(Grpc\CALL_OK,
-                        $server_call->accept($this->server_queue, $server_tag));
+                        $server_call->server_accept($this->server_queue,
+                                                    $server_tag));
+
+    $this->assertEquals(Grpc\CALL_OK,
+                        $server_call->server_end_initial_metadata());
+
 
     // the server sends the status
     $this->assertEquals(Grpc\CALL_OK,
@@ -125,7 +130,11 @@ class EndToEndTest extends PHPUnit_Framework_TestCase{
     $server_call = $event->get_call();
     $this->assertNotNull($server_call);
     $this->assertEquals(Grpc\CALL_OK,
-                        $server_call->accept($this->server_queue, $server_tag));
+                        $server_call->server_accept($this->server_queue,
+                                                    $server_tag));
+
+    $this->assertEquals(Grpc\CALL_OK,
+                        $server_call->server_end_initial_metadata());
 
     // start the server read
     $this->assertEquals(Grpc\CALL_OK, $server_call->start_read($server_tag));
diff --git a/src/php/tests/unit_tests/SecureEndToEndTest.php b/src/php/tests/unit_tests/SecureEndToEndTest.php
index d14574b4f7d9d1b7c2c70dda864e59cd0bce7740..167022334f2e51a6e41cdeacd563d5cee18495c9 100755
--- a/src/php/tests/unit_tests/SecureEndToEndTest.php
+++ b/src/php/tests/unit_tests/SecureEndToEndTest.php
@@ -62,7 +62,11 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
     $server_call = $event->get_call();
     $this->assertNotNull($server_call);
     $this->assertEquals(Grpc\CALL_OK,
-                        $server_call->accept($this->server_queue, $server_tag));
+                        $server_call->server_accept($this->server_queue,
+                                                    $server_tag));
+
+    $this->assertEquals(Grpc\CALL_OK,
+                        $server_call->server_end_initial_metadata());
 
     // the server sends the status
     $this->assertEquals(Grpc\CALL_OK,
@@ -135,7 +139,11 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
     $server_call = $event->get_call();
     $this->assertNotNull($server_call);
     $this->assertEquals(Grpc\CALL_OK,
-                        $server_call->accept($this->server_queue, $server_tag));
+                        $server_call->server_accept($this->server_queue,
+                                                    $server_tag));
+
+    $this->assertEquals(Grpc\CALL_OK,
+                        $server_call->server_end_initial_metadata());
 
     // start the server read
     $this->assertEquals(Grpc\CALL_OK, $server_call->start_read($server_tag));