diff --git a/http2/adapter/mock_nghttp2_callbacks.cc b/http2/adapter/mock_nghttp2_callbacks.cc
index c3f9e71..4bc1e8e 100644
--- a/http2/adapter/mock_nghttp2_callbacks.cc
+++ b/http2/adapter/mock_nghttp2_callbacks.cc
@@ -7,7 +7,7 @@
 namespace test {
 
 /* static */
-nghttp2_session_callbacks* MockNghttp2Callbacks::GetCallbacks() {
+nghttp2_session_callbacks_unique_ptr MockNghttp2Callbacks::GetCallbacks() {
   nghttp2_session_callbacks* callbacks;
   nghttp2_session_callbacks_new(&callbacks);
 
@@ -107,7 +107,7 @@
             ->OnInvalidFrameRecv(frame, error_code);
       });
 
-  return callbacks;
+  return MakeCallbacksPtr(callbacks);
 }
 
 }  // namespace test
diff --git a/http2/adapter/mock_nghttp2_callbacks.h b/http2/adapter/mock_nghttp2_callbacks.h
index 2d279ad..fcc9c59 100644
--- a/http2/adapter/mock_nghttp2_callbacks.h
+++ b/http2/adapter/mock_nghttp2_callbacks.h
@@ -2,6 +2,7 @@
 #define QUICHE_HTTP2_ADAPTER_MOCK_NGHTTP2_CALLBACKS_H_
 
 #include "absl/strings/string_view.h"
+#include "http2/adapter/nghttp2_util.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
 #include "common/platform/api/quiche_test.h"
 
@@ -16,7 +17,7 @@
   MockNghttp2Callbacks() = default;
 
   // The caller takes ownership of the |nghttp2_session_callbacks|.
-  static nghttp2_session_callbacks* GetCallbacks();
+  static nghttp2_session_callbacks_unique_ptr GetCallbacks();
 
   MOCK_METHOD(ssize_t,
               Send,
diff --git a/http2/adapter/nghttp2_session.cc b/http2/adapter/nghttp2_session.cc
index b288037..6d997a9 100644
--- a/http2/adapter/nghttp2_session.cc
+++ b/http2/adapter/nghttp2_session.cc
@@ -6,10 +6,6 @@
 namespace adapter {
 namespace {
 
-void DeleteSession(nghttp2_session* session) {
-  nghttp2_session_del(session);
-}
-
 void DeleteOptions(nghttp2_option* options) {
   nghttp2_option_del(options);
 }
@@ -20,7 +16,7 @@
                                nghttp2_session_callbacks* callbacks,
                                nghttp2_option* options,
                                void* userdata)
-    : session_(nullptr, DeleteSession),
+    : session_(MakeSessionPtr(nullptr)),
       options_(options, DeleteOptions),
       perspective_(perspective) {
   nghttp2_session* session;
diff --git a/http2/adapter/nghttp2_session.h b/http2/adapter/nghttp2_session.h
index 27a2153..bf1e01b 100644
--- a/http2/adapter/nghttp2_session.h
+++ b/http2/adapter/nghttp2_session.h
@@ -2,6 +2,7 @@
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_
 
 #include "http2/adapter/http2_session.h"
+#include "http2/adapter/nghttp2_util.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
 
 namespace http2 {
@@ -27,10 +28,9 @@
   nghttp2_session* raw_ptr() const { return session_.get(); }
 
  private:
-  using SessionDeleter = void (&)(nghttp2_session*);
   using OptionsDeleter = void (&)(nghttp2_option*);
 
-  std::unique_ptr<nghttp2_session, SessionDeleter> session_;
+  nghttp2_session_unique_ptr session_;
   std::unique_ptr<nghttp2_option, OptionsDeleter> options_;
   Perspective perspective_;
 };
diff --git a/http2/adapter/nghttp2_util.cc b/http2/adapter/nghttp2_util.cc
index c191f4d..f457bb6 100644
--- a/http2/adapter/nghttp2_util.cc
+++ b/http2/adapter/nghttp2_util.cc
@@ -10,6 +10,27 @@
 namespace http2 {
 namespace adapter {
 
+namespace {
+
+void DeleteCallbacks(nghttp2_session_callbacks* callbacks) {
+  nghttp2_session_callbacks_del(callbacks);
+}
+
+void DeleteSession(nghttp2_session* session) {
+  nghttp2_session_del(session);
+}
+
+}  // namespace
+
+nghttp2_session_callbacks_unique_ptr MakeCallbacksPtr(
+    nghttp2_session_callbacks* callbacks) {
+  return nghttp2_session_callbacks_unique_ptr(callbacks, DeleteCallbacks);
+}
+
+nghttp2_session_unique_ptr MakeSessionPtr(nghttp2_session* session) {
+  return nghttp2_session_unique_ptr(session, DeleteSession);
+}
+
 uint8_t* ToUint8Ptr(char* str) { return reinterpret_cast<uint8_t*>(str); }
 uint8_t* ToUint8Ptr(const char* str) {
   return const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(str));
diff --git a/http2/adapter/nghttp2_util.h b/http2/adapter/nghttp2_util.h
index b9c03bb..a8d340a 100644
--- a/http2/adapter/nghttp2_util.h
+++ b/http2/adapter/nghttp2_util.h
@@ -20,6 +20,18 @@
     NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
 inline constexpr int kCancelStatus = NGHTTP2_ERR_CANCEL;
 
+using CallbacksDeleter = void (&)(nghttp2_session_callbacks*);
+using SessionDeleter = void (&)(nghttp2_session*);
+
+using nghttp2_session_callbacks_unique_ptr =
+    std::unique_ptr<nghttp2_session_callbacks, CallbacksDeleter>;
+using nghttp2_session_unique_ptr =
+    std::unique_ptr<nghttp2_session, SessionDeleter>;
+
+nghttp2_session_callbacks_unique_ptr MakeCallbacksPtr(
+    nghttp2_session_callbacks* callbacks);
+nghttp2_session_unique_ptr MakeSessionPtr(nghttp2_session* session);
+
 uint8_t* ToUint8Ptr(char* str);
 uint8_t* ToUint8Ptr(const char* str);
 
