diff --git a/include/grpc++/channel_interface.h b/include/grpc++/channel_interface.h
index 4d48974e69107920d670be4087fa8fed776613c9..10fb9538bcd5f16f3d4b839980330f2c8a5cec0d 100644
--- a/include/grpc++/channel_interface.h
+++ b/include/grpc++/channel_interface.h
@@ -34,6 +34,8 @@
 #ifndef GRPCXX_CHANNEL_INTERFACE_H
 #define GRPCXX_CHANNEL_INTERFACE_H
 
+#include <memory>
+
 #include <grpc++/status.h>
 #include <grpc++/impl/call.h>
 
@@ -47,11 +49,12 @@ class CompletionQueue;
 class RpcMethod;
 class CallInterface;
 
-class ChannelInterface : public CallHook {
+class ChannelInterface : public CallHook,
+                         public std::enable_shared_from_this<ChannelInterface> {
  public:
   virtual ~ChannelInterface() {}
 
-  virtual void *RegisterMethod(const char *method_name) = 0;
+  virtual void* RegisterMethod(const char* method_name) = 0;
   virtual Call CreateCall(const RpcMethod& method, ClientContext* context,
                           CompletionQueue* cq) = 0;
 };
diff --git a/src/cpp/client/channel.h b/src/cpp/client/channel.h
index 46009d20bad7692f3af5a0a74b6c3c0f354da80c..cd239247c8270c9518f39d27a068515c5dd31353 100644
--- a/src/cpp/client/channel.h
+++ b/src/cpp/client/channel.h
@@ -51,7 +51,6 @@ class Credentials;
 class StreamContextInterface;
 
 class Channel GRPC_FINAL : public GrpcLibrary,
-                           public std::enable_shared_from_this<Channel>,
                            public ChannelInterface {
  public:
   Channel(const grpc::string& target, grpc_channel* c_channel);