Fix ownership
diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h
index 5922e25..9ac92a0 100644
--- a/include/grpc++/impl/call.h
+++ b/include/grpc++/impl/call.h
@@ -112,11 +112,6 @@
   grpc_metadata *trailing_metadata_ = nullptr;
 };
 
-class CCallDeleter {
- public:
-  void operator()(grpc_call *c);
-};
-
 // Channel and Server implement this to allow them to hook performing ops
 class CallHook {
  public:
@@ -127,17 +122,18 @@
 // Straightforward wrapping of the C call object
 class Call final {
  public:
+  /* call is owned by the caller */
   Call(grpc_call *call, CallHook *call_hook_, CompletionQueue *cq);
 
   void PerformOps(CallOpBuffer *buffer);
 
-  grpc_call *call() { return call_.get(); }
+  grpc_call *call() { return call_; }
   CompletionQueue *cq() { return cq_; }
 
  private:
   CallHook *call_hook_;
   CompletionQueue *cq_;
-  std::unique_ptr<grpc_call, CCallDeleter> call_;
+  grpc_call* call_;
 };
 
 }  // namespace grpc
diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc
index 6148855..84791aa 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -243,10 +243,6 @@
   }
 }
 
-void CCallDeleter::operator()(grpc_call* c) {
-  grpc_call_destroy(c);
-}
-
 Call::Call(grpc_call* call, CallHook *call_hook, CompletionQueue* cq)
     : call_hook_(call_hook), cq_(cq), call_(call) {}
 
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index 4392739..2ee8581 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -157,6 +157,10 @@
       mrd->request_metadata_.count = 0;
     }
 
+    ~CallData() {
+      grpc_call_destroy(call_.call());
+    }
+
     void Run() {
       std::unique_ptr<google::protobuf::Message> req;
       std::unique_ptr<google::protobuf::Message> res;