diff --git a/quiche/quic/moqt/moqt_messages.cc b/quiche/quic/moqt/moqt_messages.cc
index 013b1f2..7281cf8 100644
--- a/quiche/quic/moqt/moqt_messages.cc
+++ b/quiche/quic/moqt/moqt_messages.cc
@@ -4,42 +4,17 @@
 
 #include "quiche/quic/moqt/moqt_messages.h"
 
-#include <array>
 #include <cstdint>
 #include <string>
 
-#include "absl/algorithm/container.h"
 #include "absl/strings/str_cat.h"
-#include "quiche/quic/core/quic_time.h"
-#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
+#include "quiche/quic/moqt/moqt_types.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 
 namespace moqt {
 
-void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
-  if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
-    out.path = path;
-    out.authority = authority;
-  }
-  if (max_request_id != kDefaultMaxRequestId) {
-    out.max_request_id = max_request_id;
-  }
-  if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
-    out.max_auth_token_cache_size = max_auth_token_cache_size;
-  }
-  if (support_object_acks != kDefaultSupportObjectAcks) {
-    out.support_object_acks = support_object_acks;
-  }
-  if (!moqt_implementation.empty()) {
-    out.moqt_implementation = moqt_implementation;
-  }
-  for (const AuthToken& token : authorization_token) {
-    out.authorization_tokens.push_back(token);
-  }
-}
-
 MoqtObjectStatus IntegerToObjectStatus(uint64_t integer) {
   if (integer >=
       static_cast<uint64_t>(MoqtObjectStatus::kInvalidObjectStatus)) {
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index c956c8f..3c7552f 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -7,20 +7,14 @@
 #ifndef QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
 #define QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
 
-#include <algorithm>
-#include <bit>
 #include <cstddef>
 #include <cstdint>
 #include <initializer_list>
 #include <optional>
 #include <string>
-#include <utility>
 #include <variant>
-#include <vector>
 
-#include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
-#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
@@ -29,7 +23,6 @@
 #include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_types.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/common/quiche_endian.h"
 
 namespace moqt {
 
@@ -37,53 +30,6 @@
   return quic::ParsedQuicVersionVector{quic::ParsedQuicVersion::RFCv1()};
 }
 
-inline constexpr absl::string_view kDraft16 = "moqt-16";
-inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
-inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
-
-inline constexpr absl::string_view kImplementationName =
-    "Google QUICHE MOQT draft 16";
-inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
-struct QUICHE_EXPORT MoqtSessionParameters {
-  // TODO: support multiple versions.
-  MoqtSessionParameters() = default;
-  explicit MoqtSessionParameters(quic::Perspective perspective)
-      : perspective(perspective), using_webtrans(true) {}
-  MoqtSessionParameters(quic::Perspective perspective, std::string path,
-                        std::string authority)
-      : perspective(perspective),
-        using_webtrans(false),
-        path(std::move(path)),
-        authority(std::move(authority)) {}
-  MoqtSessionParameters(quic::Perspective perspective, std::string path,
-                        std::string authority, uint64_t max_request_id)
-      : perspective(perspective),
-        using_webtrans(true),
-        path(std::move(path)),
-        max_request_id(max_request_id),
-        authority(std::move(authority)) {}
-  MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
-      : perspective(perspective), max_request_id(max_request_id) {}
-  bool operator==(const MoqtSessionParameters& other) const = default;
-
-  std::string version = std::string(kDefaultMoqtVersion);
-  bool deliver_partial_objects = false;
-  quic::Perspective perspective = quic::Perspective::IS_SERVER;
-  bool using_webtrans = true;
-  std::string path;
-  uint64_t max_request_id = kDefaultInitialMaxRequestId;
-  uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
-  bool support_object_acks = false;
-  // TODO(martinduke): Turn authorization_token into structured data.
-  std::vector<AuthToken> authorization_token;
-  std::string authority;
-  std::string moqt_implementation;
-
-  // Takes the relevant fields from this object and populates |out| if not the
-  // protocol default value.
-  void ToSetupParameters(SetupParameters& out) const;
-};
-
 // The maximum length of a message, excluding any OBJECT payload. This prevents
 // DoS attack via forcing the parser to buffer a large message (OBJECT payloads
 // are not buffered by the parser).
@@ -279,25 +225,6 @@
   kObjectAck = 0x3184,
 };
 
-// A tuple uniquely identifying a WebTransport data stream associated with a
-// subscription. By convention, if a DataStreamIndex is necessary for a datagram
-// track, `subgroup` is set to zero.
-struct DataStreamIndex {
-  uint64_t group = 0;
-  uint64_t subgroup = 0;
-
-  DataStreamIndex() = default;
-  DataStreamIndex(uint64_t group, uint64_t subgroup)
-      : group(group), subgroup(subgroup) {}
-
-  auto operator<=>(const DataStreamIndex&) const = default;
-
-  template <typename H>
-  friend H AbslHashValue(H h, const DataStreamIndex& index) {
-    return H::combine(std::move(h), index.group, index.subgroup);
-  }
-};
-
 struct SubgroupPriority {
   uint8_t publisher_priority = 0xf0;
   uint64_t subgroup_id = 0;
@@ -506,13 +433,6 @@
   std::string new_session_uri;
 };
 
-enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
-  kPublish = 0x00,
-  kNamespace = 0x01,
-  kBoth = 0x02,
-};
-static constexpr uint64_t kMaxSubscribeOption = 0x02;
-
 struct QUICHE_EXPORT MoqtSubscribeNamespace {
   uint64_t request_id;
   TrackNamespace track_namespace_prefix;
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 10522fa..c5c2ab8 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -2594,4 +2594,26 @@
       message.delta_from_deadline);
 }
 
+void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
+  if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
+    out.path = path;
+    out.authority = authority;
+  }
+  if (max_request_id != kDefaultMaxRequestId) {
+    out.max_request_id = max_request_id;
+  }
+  if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
+    out.max_auth_token_cache_size = max_auth_token_cache_size;
+  }
+  if (support_object_acks != kDefaultSupportObjectAcks) {
+    out.support_object_acks = support_object_acks;
+  }
+  if (!moqt_implementation.empty()) {
+    out.moqt_implementation = moqt_implementation;
+  }
+  for (const AuthToken& token : authorization_token) {
+    out.authorization_tokens.push_back(token);
+  }
+}
+
 }  // namespace moqt
diff --git a/quiche/quic/moqt/moqt_session_interface.h b/quiche/quic/moqt/moqt_session_interface.h
index 91a68c5..1df78b3 100644
--- a/quiche/quic/moqt/moqt_session_interface.h
+++ b/quiche/quic/moqt/moqt_session_interface.h
@@ -8,23 +8,74 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
+#include <string>
+#include <utility>
 #include <variant>
+#include <vector>
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_fetch_task.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
-#include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_names.h"
 #include "quiche/quic/moqt/moqt_object.h"
-#include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_session_callbacks.h"
+#include "quiche/quic/moqt/moqt_types.h"
+#include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_weak_ptr.h"
 
 namespace moqt {
 
+inline constexpr absl::string_view kDraft16 = "moqt-16";
+inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
+inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
+
+inline constexpr absl::string_view kImplementationName =
+    "Google QUICHE MOQT draft 16";
+inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
+struct QUICHE_EXPORT MoqtSessionParameters {
+  // TODO: support multiple versions.
+  MoqtSessionParameters() = default;
+  explicit MoqtSessionParameters(quic::Perspective perspective)
+      : perspective(perspective), using_webtrans(true) {}
+  MoqtSessionParameters(quic::Perspective perspective, std::string path,
+                        std::string authority)
+      : perspective(perspective),
+        using_webtrans(false),
+        path(std::move(path)),
+        authority(std::move(authority)) {}
+  MoqtSessionParameters(quic::Perspective perspective, std::string path,
+                        std::string authority, uint64_t max_request_id)
+      : perspective(perspective),
+        using_webtrans(true),
+        path(std::move(path)),
+        max_request_id(max_request_id),
+        authority(std::move(authority)) {}
+  MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
+      : perspective(perspective), max_request_id(max_request_id) {}
+  bool operator==(const MoqtSessionParameters& other) const = default;
+
+  std::string version = std::string(kDefaultMoqtVersion);
+  bool deliver_partial_objects = false;
+  quic::Perspective perspective = quic::Perspective::IS_SERVER;
+  bool using_webtrans = true;
+  std::string path;
+  uint64_t max_request_id = kDefaultInitialMaxRequestId;
+  uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
+  bool support_object_acks = false;
+  // TODO(martinduke): Turn authorization_token into structured data.
+  std::vector<AuthToken> authorization_token;
+  std::string authority;
+  std::string moqt_implementation;
+
+  // Takes the relevant fields from this object and populates |out| if not the
+  // protocol default value.
+  void ToSetupParameters(SetupParameters& out) const;
+};
+
 using MoqtObjectAckFunction =
     quiche::MultiUseCallback<void(uint64_t group_id, uint64_t object_id,
                                   quic::QuicTimeDelta delta_from_deadline)>;
diff --git a/quiche/quic/moqt/moqt_types.h b/quiche/quic/moqt/moqt_types.h
index 4698a3c..32f38d6 100644
--- a/quiche/quic/moqt/moqt_types.h
+++ b/quiche/quic/moqt/moqt_types.h
@@ -60,6 +60,32 @@
   kInvalidObjectStatus = 0x5,
 };
 
+// A tuple uniquely identifying a WebTransport data stream associated with a
+// subscription. By convention, if a DataStreamIndex is necessary for a datagram
+// track, `subgroup` is set to zero.
+struct DataStreamIndex {
+  uint64_t group = 0;
+  uint64_t subgroup = 0;
+
+  DataStreamIndex() = default;
+  DataStreamIndex(uint64_t group, uint64_t subgroup)
+      : group(group), subgroup(subgroup) {}
+
+  auto operator<=>(const DataStreamIndex&) const = default;
+
+  template <typename H>
+  friend H AbslHashValue(H h, const DataStreamIndex& index) {
+    return H::combine(std::move(h), index.group, index.subgroup);
+  }
+};
+
+enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
+  kPublish = 0x00,
+  kNamespace = 0x01,
+  kBoth = 0x02,
+};
+static constexpr uint64_t kMaxSubscribeOption = 0x02;
+
 }  // namespace moqt
 
 #endif  // QUICHE_QUIC_MOQT_MOQT_TYPES_H_
