diff --git a/include/grpc++/async_unary_call.h b/include/grpc++/async_unary_call.h
index 786f8c718469015b9c6bf0e5ad5735a2262ec5f0..abb6308782db4263e38a1772642797b2c010e05a 100644
--- a/include/grpc++/async_unary_call.h
+++ b/include/grpc++/async_unary_call.h
@@ -117,7 +117,7 @@ class ServerAsyncResponseWriter GRPC_FINAL
       ctx_->sent_initial_metadata_ = true;
     }
     // The response is dropped if the status is not OK.
-    if (status.IsOk()) {
+    if (status.ok()) {
       finish_buf_.AddSendMessage(msg);
     }
     finish_buf_.AddServerSendStatus(&ctx_->trailing_metadata_, status);
@@ -125,7 +125,7 @@ class ServerAsyncResponseWriter GRPC_FINAL
   }
 
   void FinishWithError(const Status& status, void* tag) {
-    GPR_ASSERT(!status.IsOk());
+    GPR_ASSERT(!status.ok());
     finish_buf_.Reset(tag);
     if (!ctx_->sent_initial_metadata_) {
       finish_buf_.AddSendInitialMetadata(&ctx_->initial_metadata_);
diff --git a/include/grpc++/client_context.h b/include/grpc++/client_context.h
index 6d9015f278cc852ab4a0d37943e3ff87b6384844..ecf4cc7f7b5ffb05d175795c63d60dc9129ca6ad 100644
--- a/include/grpc++/client_context.h
+++ b/include/grpc++/client_context.h
@@ -41,6 +41,7 @@
 #include <grpc/support/log.h>
 #include <grpc/support/time.h>
 #include <grpc++/config.h>
+#include <grpc++/status.h>
 #include <grpc++/time.h>
 
 struct grpc_call;
@@ -53,7 +54,6 @@ class ChannelInterface;
 class CompletionQueue;
 class Credentials;
 class RpcMethod;
-class Status;
 template <class R>
 class ClientReader;
 template <class W>
diff --git a/include/grpc++/impl/client_unary_call.h b/include/grpc++/impl/client_unary_call.h
index 0e8aeed78162bca78d20f506a4cca815cad320e8..2f234fd3ac7b11eabbcd8e050714ae119aef70d7 100644
--- a/include/grpc++/impl/client_unary_call.h
+++ b/include/grpc++/impl/client_unary_call.h
@@ -35,6 +35,7 @@
 #define GRPCXX_IMPL_CLIENT_UNARY_CALL_H
 
 #include <grpc++/config.h>
+#include <grpc++/status.h>
 
 namespace grpc {
 
@@ -42,7 +43,6 @@ class ChannelInterface;
 class ClientContext;
 class CompletionQueue;
 class RpcMethod;
-class Status;
 
 // Wrapper that performs a blocking unary call
 Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
diff --git a/include/grpc++/impl/service_type.h b/include/grpc++/impl/service_type.h
index bc39bb82ac32683db8956cc9f283a592b2909fcd..25e437edad7f0ce17bedea928c649cccf6ff01c8 100644
--- a/include/grpc++/impl/service_type.h
+++ b/include/grpc++/impl/service_type.h
@@ -35,6 +35,7 @@
 #define GRPCXX_IMPL_SERVICE_TYPE_H
 
 #include <grpc++/config.h>
+#include <grpc++/status.h>
 
 namespace grpc {
 
@@ -44,7 +45,6 @@ class RpcService;
 class Server;
 class ServerCompletionQueue;
 class ServerContext;
-class Status;
 
 class SynchronousService {
  public:
diff --git a/include/grpc++/status.h b/include/grpc++/status.h
index 8073319eab89c3b2a9b305621eb9563525eb5d6d..fb8526ddce0ec29d66215c357a0080302de44f68 100644
--- a/include/grpc++/status.h
+++ b/include/grpc++/status.h
@@ -42,18 +42,17 @@ namespace grpc {
 class Status {
  public:
   Status() : code_(StatusCode::OK) {}
-  explicit Status(StatusCode code) : code_(code) {}
   Status(StatusCode code, const grpc::string& details)
       : code_(code), details_(details) {}
 
   // Pre-defined special status objects.
   static const Status& OK;
-  static const Status& Cancelled;
+  static const Status& CANCELLED;
 
-  StatusCode code() const { return code_; }
-  grpc::string details() const { return details_; }
+  StatusCode error_code() const { return code_; }
+  grpc::string error_message() const { return details_; }
 
-  bool IsOk() const { return code_ == StatusCode::OK; }
+  bool ok() const { return code_ == StatusCode::OK; }
 
  private:
   StatusCode code_;
diff --git a/include/grpc++/stream.h b/include/grpc++/stream.h
index c836f98c2a48f53cab9965ab75a17c8ba8b6c774..472911e62b295f21cff53e08532bde2c528d2a2a 100644
--- a/include/grpc++/stream.h
+++ b/include/grpc++/stream.h
@@ -615,7 +615,7 @@ class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
       ctx_->sent_initial_metadata_ = true;
     }
     // The response is dropped if the status is not OK.
-    if (status.IsOk()) {
+    if (status.ok()) {
       finish_buf_.AddSendMessage(msg);
     }
     finish_buf_.AddServerSendStatus(&ctx_->trailing_metadata_, status);
@@ -623,7 +623,7 @@ class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
   }
 
   void FinishWithError(const Status& status, void* tag) {
-    GPR_ASSERT(!status.IsOk());
+    GPR_ASSERT(!status.ok());
     finish_buf_.Reset(tag);
     if (!ctx_->sent_initial_metadata_) {
       finish_buf_.AddSendInitialMetadata(&ctx_->initial_metadata_);
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index c00c85bb9009eada52b0389338aa80023fac1811..6cd615019b09ba8e32a0cc4af7882a73cd6939a7 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -854,7 +854,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
     printer->Print("  (void) response;\n");
     printer->Print(
         "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED);\n");
+        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
     printer->Print("}\n\n");
   } else if (ClientOnlyStreaming(method)) {
     printer->Print(*vars,
@@ -867,7 +867,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
     printer->Print("  (void) response;\n");
     printer->Print(
         "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED);\n");
+        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
     printer->Print("}\n\n");
   } else if (ServerOnlyStreaming(method)) {
     printer->Print(*vars,
@@ -880,7 +880,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
     printer->Print("  (void) writer;\n");
     printer->Print(
         "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED);\n");
+        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
     printer->Print("}\n\n");
   } else if (BidiStreaming(method)) {
     printer->Print(*vars,
@@ -892,7 +892,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
     printer->Print("  (void) stream;\n");
     printer->Print(
         "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED);\n");
+        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
     printer->Print("}\n\n");
   }
 }
diff --git a/src/cpp/client/client_unary_call.cc b/src/cpp/client/client_unary_call.cc
index 7e7ea78bcde380689a770d87522f59c133512e16..55e589306f117ccfb624223159680d44eb830983 100644
--- a/src/cpp/client/client_unary_call.cc
+++ b/src/cpp/client/client_unary_call.cc
@@ -57,7 +57,7 @@ Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
   buf.AddClientSendClose();
   buf.AddClientRecvStatus(context, &status);
   call.PerformOps(&buf);
-  GPR_ASSERT((cq.Pluck(&buf) && buf.got_message) || !status.IsOk());
+  GPR_ASSERT((cq.Pluck(&buf) && buf.got_message) || !status.ok());
   return status;
 }
 
diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc
index 1068111e3f4748d250180669cef2f5b05f2d7c04..bbe4bf6d8b61265dba8c7005e82155ef337b0bbc 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -214,8 +214,8 @@ void CallOpBuffer::AddServerSendStatus(
     trailing_metadata_count_ = 0;
   }
   send_status_available_ = true;
-  send_status_code_ = static_cast<grpc_status_code>(status.code());
-  send_status_details_ = status.details();
+  send_status_code_ = static_cast<grpc_status_code>(status.error_code());
+  send_status_details_ = status.error_message();
 }
 
 void CallOpBuffer::FillOps(grpc_op* ops, size_t* nops) {
diff --git a/src/cpp/util/status.cc b/src/cpp/util/status.cc
index b694a513e7573eeb47784d6732de4c035b77524e..5bb9eda3d9c898fe2d755165d0053048fc9fdd34 100644
--- a/src/cpp/util/status.cc
+++ b/src/cpp/util/status.cc
@@ -36,6 +36,6 @@
 namespace grpc {
 
 const Status& Status::OK = Status();
-const Status& Status::Cancelled = Status(StatusCode::CANCELLED);
+const Status& Status::CANCELLED = Status(StatusCode::CANCELLED, "");
 
 }  // namespace grpc
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 24595a820f62582681299fe768977623863ee668..871f956491ceba69ec66b5c221701bd88f35888a 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -157,7 +157,7 @@ class AsyncEnd2endTest : public ::testing::Test {
       client_ok(4);
 
       EXPECT_EQ(send_response.message(), recv_response.message());
-      EXPECT_TRUE(recv_status.IsOk());
+      EXPECT_TRUE(recv_status.ok());
     }
   }
 
@@ -218,7 +218,7 @@ TEST_F(AsyncEnd2endTest, AsyncNextRpc) {
   verify_timed_ok(&cli_cq_, 4, true);
 
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 // Two pings and a final pong.
@@ -272,7 +272,7 @@ TEST_F(AsyncEnd2endTest, SimpleClientStreaming) {
   client_ok(10);
 
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 // One ping, two pongs.
@@ -323,7 +323,7 @@ TEST_F(AsyncEnd2endTest, SimpleServerStreaming) {
   cli_stream->Finish(&recv_status, tag(9));
   client_ok(9);
 
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 // One ping, one pong.
@@ -376,7 +376,7 @@ TEST_F(AsyncEnd2endTest, SimpleBidiStreaming) {
   cli_stream->Finish(&recv_status, tag(10));
   client_ok(10);
 
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 // Metadata tests
@@ -420,7 +420,7 @@ TEST_F(AsyncEnd2endTest, ClientInitialMetadataRpc) {
   client_ok(4);
 
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 TEST_F(AsyncEnd2endTest, ServerInitialMetadataRpc) {
@@ -467,7 +467,7 @@ TEST_F(AsyncEnd2endTest, ServerInitialMetadataRpc) {
   client_ok(6);
 
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 TEST_F(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
@@ -507,7 +507,7 @@ TEST_F(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
   response_reader->Finish(&recv_response, &recv_status, tag(5));
   client_ok(5);
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
   auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
   EXPECT_EQ(meta1.second, server_trailing_metadata.find(meta1.first)->second);
   EXPECT_EQ(meta2.second, server_trailing_metadata.find(meta2.first)->second);
@@ -580,7 +580,7 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
   response_reader->Finish(&recv_response, &recv_status, tag(6));
   client_ok(6);
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
   auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
   EXPECT_EQ(meta5.second, server_trailing_metadata.find(meta5.first)->second);
   EXPECT_EQ(meta6.second, server_trailing_metadata.find(meta6.first)->second);
diff --git a/test/cpp/end2end/client_crash_test.cc b/test/cpp/end2end/client_crash_test.cc
index e86681f75a138c0b37683be6bca1a8beb6107f43..aeba29594770b88e0cebc6f4d404500f49f673f8 100644
--- a/test/cpp/end2end/client_crash_test.cc
+++ b/test/cpp/end2end/client_crash_test.cc
@@ -119,7 +119,7 @@ TEST_F(CrashTest, KillAfterWrite) {
 
   EXPECT_FALSE(stream->Read(&response));
 
-  EXPECT_FALSE(stream->Finish().IsOk());
+  EXPECT_FALSE(stream->Finish().ok());
 }
 
 TEST_F(CrashTest, KillBeforeWrite) {
@@ -142,7 +142,7 @@ TEST_F(CrashTest, KillBeforeWrite) {
   EXPECT_FALSE(stream->Write(request));
   EXPECT_FALSE(stream->Read(&response));
 
-  EXPECT_FALSE(stream->Finish().IsOk());
+  EXPECT_FALSE(stream->Finish().ok());
 }
 
 }  // namespace
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index f48cf953a4f6e60e7e8a38c241daef3beafcff96..45ba8b0878b4f64d1bee61a65aaa57dc31a44b59 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -101,13 +101,13 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
             gpr_now(),
             gpr_time_from_micros(request->param().client_cancel_after_us())));
       }
-      return Status::Cancelled;
+      return Status::CANCELLED;
     } else if (request->has_param() &&
                request->param().server_cancel_after_us()) {
       gpr_sleep_until(gpr_time_add(
             gpr_now(),
             gpr_time_from_micros(request->param().server_cancel_after_us())));
-      return Status::Cancelled;
+      return Status::CANCELLED;
     } else {
       EXPECT_FALSE(context->IsCancelled());
     }
@@ -232,7 +232,7 @@ static void SendRpc(grpc::cpp::test::util::TestService::Stub* stub,
     ClientContext context;
     Status s = stub->Echo(&context, request, &response);
     EXPECT_EQ(response.message(), request.message());
-    EXPECT_TRUE(s.IsOk());
+    EXPECT_TRUE(s.ok());
   }
 }
 
@@ -265,7 +265,7 @@ TEST_F(End2endTest, RpcDeadlineExpires) {
       std::chrono::system_clock::now() + std::chrono::microseconds(10);
   context.set_deadline(deadline);
   Status s = stub_->Echo(&context, request, &response);
-  EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.code());
+  EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.error_code());
 }
 
 // Set a long but finite deadline.
@@ -281,7 +281,7 @@ TEST_F(End2endTest, RpcLongDeadline) {
   context.set_deadline(deadline);
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 // Ask server to echo back the deadline it sees.
@@ -298,7 +298,7 @@ TEST_F(End2endTest, EchoDeadline) {
   context.set_deadline(deadline);
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
   gpr_timespec sent_deadline;
   Timepoint2Timespec(deadline, &sent_deadline);
   // Allow 1 second error.
@@ -317,7 +317,7 @@ TEST_F(End2endTest, EchoDeadlineForNoDeadlineRpc) {
   ClientContext context;
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
   EXPECT_EQ(response.param().request_deadline(), gpr_inf_future.tv_sec);
 }
 
@@ -329,9 +329,9 @@ TEST_F(End2endTest, UnimplementedRpc) {
 
   ClientContext context;
   Status s = stub_->Unimplemented(&context, request, &response);
-  EXPECT_FALSE(s.IsOk());
-  EXPECT_EQ(s.code(), grpc::StatusCode::UNIMPLEMENTED);
-  EXPECT_EQ(s.details(), "");
+  EXPECT_FALSE(s.ok());
+  EXPECT_EQ(s.error_code(), grpc::StatusCode::UNIMPLEMENTED);
+  EXPECT_EQ(s.error_message(), "");
   EXPECT_EQ(response.message(), "");
 }
 
@@ -347,7 +347,7 @@ TEST_F(End2endTest, RequestStreamOneRequest) {
   stream->WritesDone();
   Status s = stream->Finish();
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 TEST_F(End2endTest, RequestStreamTwoRequests) {
@@ -363,7 +363,7 @@ TEST_F(End2endTest, RequestStreamTwoRequests) {
   stream->WritesDone();
   Status s = stream->Finish();
   EXPECT_EQ(response.message(), "hellohello");
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 TEST_F(End2endTest, ResponseStream) {
@@ -383,7 +383,7 @@ TEST_F(End2endTest, ResponseStream) {
   EXPECT_FALSE(stream->Read(&response));
 
   Status s = stream->Finish();
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 TEST_F(End2endTest, BidiStream) {
@@ -414,7 +414,7 @@ TEST_F(End2endTest, BidiStream) {
   EXPECT_FALSE(stream->Read(&response));
 
   Status s = stream->Finish();
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 // Talk to the two services with the same name but different package names.
@@ -433,7 +433,7 @@ TEST_F(End2endTest, DiffPackageServices) {
   ClientContext context;
   Status s = stub->Echo(&context, request, &response);
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 
   std::unique_ptr<grpc::cpp::test::util::duplicate::TestService::Stub>
       dup_pkg_stub(
@@ -441,7 +441,7 @@ TEST_F(End2endTest, DiffPackageServices) {
   ClientContext context2;
   s = dup_pkg_stub->Echo(&context2, request, &response);
   EXPECT_EQ("no package", response.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 // rpc and stream should fail on bad credentials.
@@ -459,16 +459,16 @@ TEST_F(End2endTest, BadCredentials) {
 
   Status s = stub->Echo(&context, request, &response);
   EXPECT_EQ("", response.message());
-  EXPECT_FALSE(s.IsOk());
-  EXPECT_EQ(StatusCode::UNKNOWN, s.code());
-  EXPECT_EQ("Rpc sent on a lame channel.", s.details());
+  EXPECT_FALSE(s.ok());
+  EXPECT_EQ(StatusCode::UNKNOWN, s.error_code());
+  EXPECT_EQ("Rpc sent on a lame channel.", s.error_message());
 
   ClientContext context2;
   auto stream = stub->BidiStream(&context2);
   s = stream->Finish();
-  EXPECT_FALSE(s.IsOk());
-  EXPECT_EQ(StatusCode::UNKNOWN, s.code());
-  EXPECT_EQ("Rpc sent on a lame channel.", s.details());
+  EXPECT_FALSE(s.ok());
+  EXPECT_EQ(StatusCode::UNKNOWN, s.error_code());
+  EXPECT_EQ("Rpc sent on a lame channel.", s.error_message());
 }
 
 void CancelRpc(ClientContext* context, int delay_us, TestServiceImpl* service) {
@@ -491,8 +491,8 @@ TEST_F(End2endTest, ClientCancelsRpc) {
   std::thread cancel_thread(CancelRpc, &context, kCancelDelayUs, &service_);
   Status s = stub_->Echo(&context, request, &response);
   cancel_thread.join();
-  EXPECT_EQ(StatusCode::CANCELLED, s.code());
-  EXPECT_EQ(s.details(), "Cancelled");
+  EXPECT_EQ(StatusCode::CANCELLED, s.error_code());
+  EXPECT_EQ(s.error_message(), "Cancelled");
 }
 
 // Server cancels rpc after 1ms
@@ -505,8 +505,8 @@ TEST_F(End2endTest, ServerCancelsRpc) {
 
   ClientContext context;
   Status s = stub_->Echo(&context, request, &response);
-  EXPECT_EQ(StatusCode::CANCELLED, s.code());
-  EXPECT_TRUE(s.details().empty());
+  EXPECT_EQ(StatusCode::CANCELLED, s.error_code());
+  EXPECT_TRUE(s.error_message().empty());
 }
 
 // Client cancels request stream after sending two messages
@@ -524,7 +524,7 @@ TEST_F(End2endTest, ClientCancelsRequestStream) {
   context.TryCancel();
 
   Status s = stream->Finish();
-  EXPECT_EQ(grpc::StatusCode::CANCELLED, s.code());
+  EXPECT_EQ(grpc::StatusCode::CANCELLED, s.error_code());
 
   EXPECT_EQ(response.message(), "");
 }
@@ -558,7 +558,7 @@ TEST_F(End2endTest, ClientCancelsResponseStream) {
   Status s = stream->Finish();
   // The final status could be either of CANCELLED or OK depending on
   // who won the race.
-  EXPECT_GE(grpc::StatusCode::CANCELLED, s.code());
+  EXPECT_GE(grpc::StatusCode::CANCELLED, s.error_code());
 }
 
 // Client cancels bidi stream after sending some messages
@@ -591,7 +591,7 @@ TEST_F(End2endTest, ClientCancelsBidi) {
   }
 
   Status s = stream->Finish();
-  EXPECT_EQ(grpc::StatusCode::CANCELLED, s.code());
+  EXPECT_EQ(grpc::StatusCode::CANCELLED, s.error_code());
 }
 
 TEST_F(End2endTest, RpcMaxMessageSize) {
@@ -602,7 +602,7 @@ TEST_F(End2endTest, RpcMaxMessageSize) {
 
   ClientContext context;
   Status s = stub_->Echo(&context, request, &response);
-  EXPECT_FALSE(s.IsOk());
+  EXPECT_FALSE(s.ok());
 }
 
 bool MetadataContains(const std::multimap<grpc::string, grpc::string>& metadata,
@@ -632,7 +632,7 @@ TEST_F(End2endTest, SetPerCallCredentials) {
 
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(request.message(), response.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
   EXPECT_TRUE(MetadataContains(context.GetServerTrailingMetadata(),
                                GRPC_IAM_AUTHORIZATION_TOKEN_METADATA_KEY,
                                "fake_token"));
@@ -652,8 +652,8 @@ TEST_F(End2endTest, InsecurePerCallCredentials) {
   request.mutable_param()->set_echo_metadata(true);
 
   Status s = stub_->Echo(&context, request, &response);
-  EXPECT_EQ(StatusCode::CANCELLED, s.code());
-  EXPECT_EQ("Failed to set credentials to rpc.", s.details());
+  EXPECT_EQ(StatusCode::CANCELLED, s.error_code());
+  EXPECT_EQ("Failed to set credentials to rpc.", s.error_message());
 }
 
 TEST_F(End2endTest, OverridePerCallCredentials) {
@@ -684,7 +684,7 @@ TEST_F(End2endTest, OverridePerCallCredentials) {
                                 GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY,
                                 "fake_selector1"));
   EXPECT_EQ(request.message(), response.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 }
 
 }  // namespace testing
diff --git a/test/cpp/end2end/generic_end2end_test.cc b/test/cpp/end2end/generic_end2end_test.cc
index 80e43fd8544688ec1e74f1e3b78c18c3bea09dda..7132b6b1f180f88b01c127d8a91c6078c0683a4b 100644
--- a/test/cpp/end2end/generic_end2end_test.cc
+++ b/test/cpp/end2end/generic_end2end_test.cc
@@ -190,7 +190,7 @@ class GenericEnd2endTest : public ::testing::Test {
       client_ok(9);
 
       EXPECT_EQ(send_response.message(), recv_response.message());
-      EXPECT_TRUE(recv_status.IsOk());
+      EXPECT_TRUE(recv_status.ok());
     }
   }
 
@@ -273,7 +273,7 @@ TEST_F(GenericEnd2endTest, SimpleBidiStreaming) {
   client_ok(10);
 
   EXPECT_EQ(send_response.message(), recv_response.message());
-  EXPECT_TRUE(recv_status.IsOk());
+  EXPECT_TRUE(recv_status.ok());
 }
 
 }  // namespace
diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc
index 0226da672c9fe7c7105706229a42fa29c985b20d..2809ab8d3cfb21909e9bfe95b30b60efa49577d0 100644
--- a/test/cpp/end2end/mock_test.cc
+++ b/test/cpp/end2end/mock_test.cc
@@ -168,7 +168,7 @@ class FakeClient {
     request.set_message("hello world");
     Status s = stub_->Echo(&context, request, &response);
     EXPECT_EQ(request.message(), response.message());
-    EXPECT_TRUE(s.IsOk());
+    EXPECT_TRUE(s.ok());
   }
 
   void DoBidiStream() {
@@ -199,7 +199,7 @@ class FakeClient {
     EXPECT_FALSE(stream->Read(&response));
 
     Status s = stream->Finish();
-    EXPECT_TRUE(s.IsOk());
+    EXPECT_TRUE(s.ok());
   }
 
   void ResetStub(TestService::StubInterface* stub) { stub_ = stub; }
diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc
index 5ee29e40f43eb97a0e563e62e8fa57ff52f59faf..0b43dfd1062fd605e4973db10f531ecc9a006153 100644
--- a/test/cpp/end2end/thread_stress_test.cc
+++ b/test/cpp/end2end/thread_stress_test.cc
@@ -99,13 +99,13 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
             gpr_now(),
             gpr_time_from_micros(request->param().client_cancel_after_us())));
       }
-      return Status::Cancelled;
+      return Status::CANCELLED;
     } else if (request->has_param() &&
                request->param().server_cancel_after_us()) {
       gpr_sleep_until(gpr_time_add(
           gpr_now(),
           gpr_time_from_micros(request->param().server_cancel_after_us())));
-      return Status::Cancelled;
+      return Status::CANCELLED;
     } else {
       EXPECT_FALSE(context->IsCancelled());
     }
@@ -219,7 +219,7 @@ static void SendRpc(grpc::cpp::test::util::TestService::Stub* stub,
     ClientContext context;
     Status s = stub->Echo(&context, request, &response);
     EXPECT_EQ(response.message(), request.message());
-    EXPECT_TRUE(s.IsOk());
+    EXPECT_TRUE(s.ok());
   }
 }
 
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index e3510592468c1c3183b34f0a88bf424c33f02004..f08f90b13993098d15735682d198f6577bbd3960 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -65,11 +65,11 @@ InteropClient::InteropClient(std::shared_ptr<ChannelInterface> channel)
     : channel_(channel) {}
 
 void InteropClient::AssertOkOrPrintErrorStatus(const Status& s) {
-  if (s.IsOk()) {
+  if (s.ok()) {
     return;
   }
-  gpr_log(GPR_INFO, "Error status code: %d, message: %s", s.code(),
-          s.details().c_str());
+  gpr_log(GPR_INFO, "Error status code: %d, message: %s", s.error_code(),
+          s.error_message().c_str());
   GPR_ASSERT(0);
 }
 
@@ -321,7 +321,7 @@ void InteropClient::DoCancelAfterBegin() {
   gpr_log(GPR_INFO, "Trying to cancel...");
   context.TryCancel();
   Status s = stream->Finish();
-  GPR_ASSERT(s.code() == StatusCode::CANCELLED);
+  GPR_ASSERT(s.error_code() == StatusCode::CANCELLED);
   gpr_log(GPR_INFO, "Canceling streaming done.");
 }
 
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index d1682caf066742a0077f90d606ed4792b9dd44ce..718698bfe1dec0fba0cc482970a9409f215f04f1 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -103,7 +103,7 @@ class SynchronousUnaryClient GRPC_FINAL : public SynchronousClient {
     grpc::Status s =
         stub->UnaryCall(&context, request_, &responses_[thread_idx]);
     histogram->Add((Timer::Now() - start) * 1e9);
-    return s.IsOk();
+    return s.ok();
   }
 };
 
@@ -124,7 +124,7 @@ class SynchronousStreamingClient GRPC_FINAL : public SynchronousClient {
     for (auto stream = stream_.begin(); stream != stream_.end(); stream++) {
       if (*stream) {
         (*stream)->WritesDone();
-        EXPECT_TRUE((*stream)->Finish().IsOk());
+        EXPECT_TRUE((*stream)->Finish().ok());
       }
     }
   }
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index bf12730f97f00cf6f5128713d46d12c9438c58e8..c8cc11e6ab3483a4fccf3e579168439c7f64b330 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -241,11 +241,11 @@ std::unique_ptr<ScenarioResult> RunScenario(
 
   for (auto client = clients.begin(); client != clients.end(); client++) {
     GPR_ASSERT(client->stream->WritesDone());
-    GPR_ASSERT(client->stream->Finish().IsOk());
+    GPR_ASSERT(client->stream->Finish().ok());
   }
   for (auto server = servers.begin(); server != servers.end(); server++) {
     GPR_ASSERT(server->stream->WritesDone());
-    GPR_ASSERT(server->stream->Finish().IsOk());
+    GPR_ASSERT(server->stream->Finish().ok());
   }
   return result;
 }
diff --git a/test/cpp/qps/qps_worker.cc b/test/cpp/qps/qps_worker.cc
index 40cc4cb89bacd1711d9eeee7428e8aa14449fc9d..423275ee859dcdcc1bda495746d72d5a0b3c0e3e 100644
--- a/test/cpp/qps/qps_worker.cc
+++ b/test/cpp/qps/qps_worker.cc
@@ -100,7 +100,7 @@ class WorkerImpl GRPC_FINAL : public Worker::Service {
       GRPC_OVERRIDE {
     InstanceGuard g(this);
     if (!g.Acquired()) {
-      return Status(RESOURCE_EXHAUSTED);
+      return Status(StatusCode::RESOURCE_EXHAUSTED, "");
     }
 
     grpc_profiler_start("qps_client.prof");
@@ -114,7 +114,7 @@ class WorkerImpl GRPC_FINAL : public Worker::Service {
       GRPC_OVERRIDE {
     InstanceGuard g(this);
     if (!g.Acquired()) {
-      return Status(RESOURCE_EXHAUSTED);
+      return Status(StatusCode::RESOURCE_EXHAUSTED, "");
     }
 
     grpc_profiler_start("qps_server.prof");
@@ -159,22 +159,22 @@ class WorkerImpl GRPC_FINAL : public Worker::Service {
                      ServerReaderWriter<ClientStatus, ClientArgs>* stream) {
     ClientArgs args;
     if (!stream->Read(&args)) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     if (!args.has_setup()) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     auto client = CreateClient(args.setup());
     if (!client) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     ClientStatus status;
     if (!stream->Write(status)) {
-      return Status(UNKNOWN);
+      return Status(StatusCode::UNKNOWN, "");
     }
     while (stream->Read(&args)) {
       if (!args.has_mark()) {
-        return Status(INVALID_ARGUMENT);
+        return Status(StatusCode::INVALID_ARGUMENT, "");
       }
       *status.mutable_stats() = client->Mark();
       stream->Write(status);
@@ -187,23 +187,23 @@ class WorkerImpl GRPC_FINAL : public Worker::Service {
                        ServerReaderWriter<ServerStatus, ServerArgs>* stream) {
     ServerArgs args;
     if (!stream->Read(&args)) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     if (!args.has_setup()) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     auto server = CreateServer(args.setup(), server_port_);
     if (!server) {
-      return Status(INVALID_ARGUMENT);
+      return Status(StatusCode::INVALID_ARGUMENT, "");
     }
     ServerStatus status;
     status.set_port(server_port_);
     if (!stream->Write(status)) {
-      return Status(UNKNOWN);
+      return Status(StatusCode::UNKNOWN, "");
     }
     while (stream->Read(&args)) {
       if (!args.has_mark()) {
-        return Status(INVALID_ARGUMENT);
+        return Status(StatusCode::INVALID_ARGUMENT, "");
       }
       *status.mutable_stats() = server->Mark();
       stream->Write(status);
diff --git a/test/cpp/util/cli_call.cc b/test/cpp/util/cli_call.cc
index eb67b8d314bc2e21e11268a1d699402102b2ae10..fa952e8349dff4ae9c95f3cb9612b19344bc4d30 100644
--- a/test/cpp/util/cli_call.cc
+++ b/test/cpp/util/cli_call.cc
@@ -86,7 +86,7 @@ void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
   cq.Next(&got_tag, &ok);
   GPR_ASSERT(ok);
 
-  if (status.IsOk()) {
+  if (status.ok()) {
     std::cout << "RPC finished with OK status." << std::endl;
     std::vector<grpc::Slice> slices;
     recv_buffer.Dump(&slices);
@@ -97,8 +97,8 @@ void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
                        slices[i].size());
     }
   } else {
-    std::cout << "RPC finished with status code " << status.code()
-              << " details: " << status.details() << std::endl;
+    std::cout << "RPC finished with status code " << status.error_code()
+              << " details: " << status.error_message() << std::endl;
   }
 }
 
diff --git a/test/cpp/util/cli_call_test.cc b/test/cpp/util/cli_call_test.cc
index 457a5e77de8d1b6d5f6263a5bb8b27f96936e433..12539c7479cb622cc922a7f6f53bf8cc18cc59e0 100644
--- a/test/cpp/util/cli_call_test.cc
+++ b/test/cpp/util/cli_call_test.cc
@@ -108,7 +108,7 @@ TEST_F(CliCallTest, SimpleRpc) {
   ClientContext context;
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(response.message(), request.message());
-  EXPECT_TRUE(s.IsOk());
+  EXPECT_TRUE(s.ok());
 
   const grpc::string kMethod("/grpc.cpp.test.util.TestService/Echo");
   grpc::string request_bin, response_bin, expected_response_bin;