Resolved merge conflicts
diff --git a/doc/interop-test-descriptions.md b/doc/interop-test-descriptions.md
index 3ee5d0f..6115fe1 100644
--- a/doc/interop-test-descriptions.md
+++ b/doc/interop-test-descriptions.md
@@ -483,18 +483,17 @@
 * received SimpleResponse.oauth_scope is in `--oauth_scope`
 
 
-### Metadata (TODO: fix name)
-
-Status: Not yet implementable
+### custom_metadata
 
 This test verifies that custom metadata in either binary or ascii format can be
-sent in header and trailer.
+sent as initial-metadata by the client and as both initial- and trailing-metadata
+by the server.
 
 Server features:
 * [UnaryCall][]
+* [FullDuplexCall][]
 * [Compressable Payload][]
-* Ability to receive custom metadata from client in header and send custom data
-  back to client in both header and trailer. (TODO: this is not defined)
+* [Echo Metadata][]
 
 Procedure:
  1. While sending custom metadata (ascii + binary) in the header, client calls
@@ -509,21 +508,29 @@
       }
     }
     ```
+The client attaches custom metadata with the following keys and values:
+    ```
+    key: "x-grpc-test-echo-initial", value: "test_initial_metadata_value"
+    key: "x-grpc-test-echo-trailing", value: 0xababab
+    ```
+ 2. Client repeats step 1. with FullDuplexCall instead of UnaryCall.
 
 Asserts:
 * call was successful
-* custom metadata is echoed back in the response header.
-* custom metadata is echoed back in the response trailer.
+* metadata with key `"x-grpc-test-echo-initial"` and value `"test_initial_metadata_value"`is received in the initial metadata.
+* metadata with key `"x-grpc-test-echo-trailing"` and value `0xababab` is received in the trailing metadata.
+
+
 
 ### status_code_and_message
 
-Status: Not yet implementable
-
 This test verifies unary calls succeed in sending messages, and propagates back
 status code and message sent along with the messages.
 
 Server features:
 * [UnaryCall][]
+* [FullDuplexCall][]
+* [Echo Status][]
 
 Procedure:
  1. Client calls UnaryCall with:
@@ -536,6 +543,8 @@
       }
     }
     ```
+2. Client repeats step 1. with FullDuplexCall instead of UnaryCall.
+
 
 Asserts:
 * received status code is the same with sent code
@@ -543,21 +552,15 @@
 
 ### unimplemented_method
 
-Status: Not yet implementable
+Status: Ready for implementation. Blocking beta.
 
-This test verifies calling unimplemented RPC method returns unimplemented
-status.
+This test verifies calling unimplemented RPC method returns the UNIMPLEMENTED status code.
 
 Procedure:
-* Client calls UnimplementedCall with:
+* Client calls UnimplementedCall with an empty request (defined as `grpc.testing.Empty`):
 
     ```
     {
-      response_type: COMPRESSABLE
-      response_size: 314159
-      payload:{
-        body: 271828 bytes of zeros
-      }
     }
     ```
 
@@ -767,6 +770,22 @@
 of the size requested containing all zeros and the payload type is
 COMPRESSABLE.
 
+### Echo Status
+[Echo Status]: #echo-status
+When the client sends a response_status in the request payload, the server closes
+the stream with the status code and messsage contained within said response_status.
+The server will not process any further messages on the stream sent by the client.
+This can be used by clients to verify correct handling of different status codes and
+associated status messages end-to-end.
+
+### Echo Metadata
+[Echo Metadata]: #echo-metadata
+When the client sends metadata with the key `"x-grpc-test-echo-initial"` with its
+request, the server sends back exactly this key and the corresponding value back to
+the client as part of initial metadata. When the client sends metadata with the key
+`"x-grpc-test-echo-trailing"` with its request, the server sends back exactly this
+key and the corresponding value back to the client as trailing metadata.
+
 ### Observe ResponseParameters.interval_us
 [Observe ResponseParameters.interval_us]: #observe-responseparametersinterval_us