diff --git a/gd/l2cap/internal/scheduler.h b/gd/l2cap/internal/scheduler.h
index d400aca..b7bd237 100644
--- a/gd/l2cap/internal/scheduler.h
+++ b/gd/l2cap/internal/scheduler.h
@@ -65,7 +65,7 @@
   virtual void DetachChannel(Cid cid) {}
 
   /**
-   * Callback from the segmenter to indicate that the scheduler could dequeue number_packets from it
+   * Callback from the sender to indicate that the scheduler could dequeue number_packets from it
    */
   virtual void OnPacketsReady(Cid cid, int number_packets) {}
 
diff --git a/gd/l2cap/internal/scheduler_fifo.cc b/gd/l2cap/internal/scheduler_fifo.cc
index f60f38f..cd14f6f 100644
--- a/gd/l2cap/internal/scheduler_fifo.cc
+++ b/gd/l2cap/internal/scheduler_fifo.cc
@@ -30,21 +30,21 @@
 }
 
 Fifo::~Fifo() {
-  segmenter_map_.clear();
+  sender_map_.clear();
   if (link_queue_enqueue_registered_) {
     link_queue_up_end_->UnregisterEnqueue();
   }
 }
 
 void Fifo::AttachChannel(Cid cid, std::shared_ptr<ChannelImpl> channel) {
-  ASSERT(segmenter_map_.find(cid) == segmenter_map_.end());
-  segmenter_map_.emplace(std::piecewise_construct, std::forward_as_tuple(cid),
-                         std::forward_as_tuple(handler_, this, channel));
+  ASSERT(sender_map_.find(cid) == sender_map_.end());
+  sender_map_.emplace(std::piecewise_construct, std::forward_as_tuple(cid),
+                      std::forward_as_tuple(handler_, this, channel));
 }
 
 void Fifo::DetachChannel(Cid cid) {
-  ASSERT(segmenter_map_.find(cid) != segmenter_map_.end());
-  segmenter_map_.erase(cid);
+  ASSERT(sender_map_.find(cid) != sender_map_.end());
+  sender_map_.erase(cid);
 }
 
 void Fifo::OnPacketsReady(Cid cid, int number_packets) {
@@ -60,9 +60,9 @@
   if (channel_id_and_number_packets.second == 0) {
     next_to_dequeue_and_num_packets.pop();
   }
-  auto packet = segmenter_map_.find(channel_id)->second.GetNextPacket();
+  auto packet = sender_map_.find(channel_id)->second.GetNextPacket();
 
-  segmenter_map_.find(channel_id)->second.OnPacketSent();
+  sender_map_.find(channel_id)->second.OnPacketSent();
   if (next_to_dequeue_and_num_packets.empty()) {
     link_queue_up_end_->UnregisterEnqueue();
     link_queue_enqueue_registered_ = false;
@@ -80,15 +80,15 @@
 }
 
 void Fifo::SetChannelRetransmissionFlowControlMode(Cid cid, RetransmissionAndFlowControlModeOption mode) {
-  ASSERT(segmenter_map_.find(cid) != segmenter_map_.end());
-  segmenter_map_.find(cid)->second.SetChannelRetransmissionFlowControlMode(mode);
+  ASSERT(sender_map_.find(cid) != sender_map_.end());
+  sender_map_.find(cid)->second.SetChannelRetransmissionFlowControlMode(mode);
 }
 
 DataController* Fifo::GetDataController(Cid cid) {
-  if (segmenter_map_.find(cid) == segmenter_map_.end()) {
+  if (sender_map_.find(cid) == sender_map_.end()) {
     return nullptr;
   }
-  return segmenter_map_.find(cid)->second.GetDataController();
+  return sender_map_.find(cid)->second.GetDataController();
 }
 
 }  // namespace internal
diff --git a/gd/l2cap/internal/scheduler_fifo.h b/gd/l2cap/internal/scheduler_fifo.h
index 6be3a09..ffbd086 100644
--- a/gd/l2cap/internal/scheduler_fifo.h
+++ b/gd/l2cap/internal/scheduler_fifo.h
@@ -45,7 +45,7 @@
  private:
   LowerQueueUpEnd* link_queue_up_end_;
   os::Handler* handler_;
-  std::unordered_map<Cid, Sender> segmenter_map_;
+  std::unordered_map<Cid, Sender> sender_map_;
   std::queue<std::pair<Cid, int>> next_to_dequeue_and_num_packets;
 
   bool link_queue_enqueue_registered_ = false;
diff --git a/gd/l2cap/internal/sender.h b/gd/l2cap/internal/sender.h
index 97d509c..8d3a72e 100644
--- a/gd/l2cap/internal/sender.h
+++ b/gd/l2cap/internal/sender.h
@@ -49,7 +49,7 @@
   ~Sender();
 
   /**
-   * Callback from scheduler to indicate that scheduler already dequeued a packet from segmenter's queue.
+   * Callback from scheduler to indicate that scheduler already dequeued a packet from sender's queue.
    * Segmenter can continue dequeuing from channel queue end.
    */
   void OnPacketSent();
diff --git a/gd/l2cap/internal/sender_test.cc b/gd/l2cap/internal/sender_test.cc
index 8f67813..c3a913d 100644
--- a/gd/l2cap/internal/sender_test.cc
+++ b/gd/l2cap/internal/sender_test.cc
@@ -71,11 +71,11 @@
         .WillRepeatedly(Return(RetransmissionAndFlowControlModeOption::L2CAP_BASIC));
     EXPECT_CALL(*mock_channel_, GetCid()).WillRepeatedly(Return(0x41));
     EXPECT_CALL(*mock_channel_, GetRemoteCid()).WillRepeatedly(Return(0x41));
-    segmenter_ = new Sender(queue_handler_, &scheduler_, mock_channel_);
+    sender_ = new Sender(queue_handler_, &scheduler_, mock_channel_);
   }
 
   void TearDown() override {
-    delete segmenter_;
+    delete sender_;
     queue_handler_->Clear();
     user_handler_->Clear();
     delete queue_handler_;
@@ -88,7 +88,7 @@
   os::Handler* queue_handler_ = nullptr;
   common::BidiQueue<Sender::UpperEnqueue, Sender::UpperDequeue> channel_queue_{10};
   std::shared_ptr<testing::MockChannelImpl> mock_channel_;
-  Sender* segmenter_ = nullptr;
+  Sender* sender_ = nullptr;
   FakeScheduler scheduler_;
 };
 
@@ -101,7 +101,7 @@
       queue_handler_, common::Bind(&L2capSegmenterTest::enqueue_callback, common::Unretained(this)));
   auto status = future.wait_for(std::chrono::milliseconds(3));
   EXPECT_EQ(status, std::future_status::ready);
-  auto packet = segmenter_->GetNextPacket();
+  auto packet = sender_->GetNextPacket();
   EXPECT_NE(packet, nullptr);
 }
 
