diff --git a/http2/adapter/oghttp2_adapter.cc b/http2/adapter/oghttp2_adapter.cc
index 1984173..c4c2e7b 100644
--- a/http2/adapter/oghttp2_adapter.cc
+++ b/http2/adapter/oghttp2_adapter.cc
@@ -11,11 +11,9 @@
 
 namespace {
 
-using spdy::SpdyFrameIR;
 using spdy::SpdyGoAwayIR;
 using spdy::SpdyPingIR;
 using spdy::SpdyPriorityIR;
-using spdy::SpdySettingsIR;
 using spdy::SpdyWindowUpdateIR;
 
 }  // namespace
@@ -39,11 +37,7 @@
 }
 
 void OgHttp2Adapter::SubmitSettings(absl::Span<const Http2Setting> settings) {
-  auto settings_ir = absl::make_unique<SpdySettingsIR>();
-  for (const Http2Setting& setting : settings) {
-    settings_ir->AddSetting(setting.id, setting.value);
-  }
-  session_->EnqueueFrame(std::move(settings_ir));
+  session_->SubmitSettings(settings);
 }
 
 void OgHttp2Adapter::SubmitPriorityForStream(Http2StreamId stream_id,
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc
index 0f1eb0d..399c90c 100644
--- a/http2/adapter/oghttp2_session.cc
+++ b/http2/adapter/oghttp2_session.cc
@@ -19,6 +19,8 @@
 using ConnectionError = Http2VisitorInterface::ConnectionError;
 using SpdyFramerError = Http2DecoderAdapter::SpdyFramerError;
 
+using ::spdy::SpdySettingsIR;
+
 // #define OGHTTP2_DEBUG_TRACE 1
 
 #ifdef OGHTTP2_DEBUG_TRACE
@@ -743,6 +745,14 @@
   }
 }
 
+void OgHttp2Session::SubmitSettings(absl::Span<const Http2Setting> settings) {
+  auto settings_ir = absl::make_unique<SpdySettingsIR>();
+  for (const Http2Setting& setting : settings) {
+    settings_ir->AddSetting(setting.id, setting.value);
+  }
+  EnqueueFrame(std::move(settings_ir));
+}
+
 void OgHttp2Session::OnError(SpdyFramerError error,
                              std::string detailed_error) {
   QUICHE_VLOG(1) << "Error: "
@@ -896,7 +906,7 @@
 
 void OgHttp2Session::OnSettingsEnd() {
   visitor_.OnSettingsEnd();
-  auto settings = absl::make_unique<spdy::SpdySettingsIR>();
+  auto settings = absl::make_unique<SpdySettingsIR>();
   settings->set_is_ack(true);
   EnqueueFrame(std::move(settings));
 }
@@ -1089,9 +1099,8 @@
     // First frame must be a non-ack SETTINGS.
     if (frames_.empty() ||
         frames_.front()->frame_type() != spdy::SpdyFrameType::SETTINGS ||
-        reinterpret_cast<spdy::SpdySettingsIR*>(frames_.front().get())
-            ->is_ack()) {
-      auto settings = absl::make_unique<spdy::SpdySettingsIR>();
+        reinterpret_cast<SpdySettingsIR&>(*frames_.front()).is_ack()) {
+      auto settings = absl::make_unique<SpdySettingsIR>();
       FillInitialSettingsFrame(*settings);
       frames_.push_front(std::move(settings));
     }
@@ -1099,7 +1108,7 @@
   }
 }
 
-void OgHttp2Session::FillInitialSettingsFrame(spdy::SpdySettingsIR& settings) {
+void OgHttp2Session::FillInitialSettingsFrame(SpdySettingsIR& settings) {
   if (!IsServerSession()) {
     // Disable server push. Note that server push from clients is already
     // disabled, so the server does not need to send this disabling setting.
diff --git a/http2/adapter/oghttp2_session.h b/http2/adapter/oghttp2_session.h
index 564ea76..ad007d4 100644
--- a/http2/adapter/oghttp2_session.h
+++ b/http2/adapter/oghttp2_session.h
@@ -63,6 +63,7 @@
   int SubmitTrailer(Http2StreamId stream_id, absl::Span<const Header> trailers);
   void SubmitMetadata(Http2StreamId stream_id,
                       std::unique_ptr<MetadataSource> source);
+  void SubmitSettings(absl::Span<const Http2Setting> settings);
 
   bool IsServerSession() const {
     return options_.perspective == Perspective::kServer;
