diff --git a/ortc/ortcrtpreceiveradapter.cc b/ortc/ortcrtpreceiveradapter.cc
index ffa9387b..403ddca 100644
--- a/ortc/ortcrtpreceiveradapter.cc
+++ b/ortc/ortcrtpreceiveradapter.cc
@@ -22,7 +22,7 @@
 void FillAudioReceiverParameters(webrtc::RtpParameters* parameters) {
   for (webrtc::RtpCodecParameters& codec : parameters->codecs) {
     if (!codec.num_channels) {
-      codec.num_channels = rtc::Optional<int>(1);
+      codec.num_channels = 1;
     }
   }
 }
@@ -30,7 +30,7 @@
 void FillVideoReceiverParameters(webrtc::RtpParameters* parameters) {
   for (webrtc::RtpCodecParameters& codec : parameters->codecs) {
     if (!codec.clock_rate) {
-      codec.clock_rate = rtc::Optional<int>(cricket::kVideoCodecClockrate);
+      codec.clock_rate = cricket::kVideoCodecClockrate;
     }
   }
 }
diff --git a/ortc/ortcrtpsenderadapter.cc b/ortc/ortcrtpsenderadapter.cc
index 2f1a42e..869a7cd 100644
--- a/ortc/ortcrtpsenderadapter.cc
+++ b/ortc/ortcrtpsenderadapter.cc
@@ -21,7 +21,7 @@
 void FillAudioSenderParameters(webrtc::RtpParameters* parameters) {
   for (webrtc::RtpCodecParameters& codec : parameters->codecs) {
     if (!codec.num_channels) {
-      codec.num_channels = rtc::Optional<int>(1);
+      codec.num_channels = 1;
     }
   }
 }
@@ -29,7 +29,7 @@
 void FillVideoSenderParameters(webrtc::RtpParameters* parameters) {
   for (webrtc::RtpCodecParameters& codec : parameters->codecs) {
     if (!codec.clock_rate) {
-      codec.clock_rate = rtc::Optional<int>(cricket::kVideoCodecClockrate);
+      codec.clock_rate = cricket::kVideoCodecClockrate;
     }
   }
 }
diff --git a/ortc/rtpparametersconversion.cc b/ortc/rtpparametersconversion.cc
index d45b577..0a657ec 100644
--- a/ortc/rtpparametersconversion.cc
+++ b/ortc/rtpparametersconversion.cc
@@ -234,47 +234,44 @@
     const cricket::FeedbackParam& cricket_feedback) {
   if (cricket_feedback.id() == cricket::kRtcpFbParamCcm) {
     if (cricket_feedback.param() == cricket::kRtcpFbCcmParamFir) {
-      return rtc::Optional<RtcpFeedback>(
-          {RtcpFeedbackType::CCM, RtcpFeedbackMessageType::FIR});
+      return RtcpFeedback(RtcpFeedbackType::CCM, RtcpFeedbackMessageType::FIR);
     } else {
       RTC_LOG(LS_WARNING) << "Unsupported parameter for CCM RTCP feedback: "
                           << cricket_feedback.param();
-      return rtc::Optional<RtcpFeedback>();
+      return rtc::nullopt;
     }
   } else if (cricket_feedback.id() == cricket::kRtcpFbParamNack) {
     if (cricket_feedback.param().empty()) {
-      return rtc::Optional<RtcpFeedback>(
-          {RtcpFeedbackType::NACK, RtcpFeedbackMessageType::GENERIC_NACK});
+      return RtcpFeedback(RtcpFeedbackType::NACK,
+                          RtcpFeedbackMessageType::GENERIC_NACK);
     } else if (cricket_feedback.param() == cricket::kRtcpFbNackParamPli) {
-      return rtc::Optional<RtcpFeedback>(
-          {RtcpFeedbackType::NACK, RtcpFeedbackMessageType::PLI});
+      return RtcpFeedback(RtcpFeedbackType::NACK, RtcpFeedbackMessageType::PLI);
     } else {
       RTC_LOG(LS_WARNING) << "Unsupported parameter for NACK RTCP feedback: "
                           << cricket_feedback.param();
-      return rtc::Optional<RtcpFeedback>();
+      return rtc::nullopt;
     }
   } else if (cricket_feedback.id() == cricket::kRtcpFbParamRemb) {
     if (!cricket_feedback.param().empty()) {
       RTC_LOG(LS_WARNING) << "Unsupported parameter for REMB RTCP feedback: "
                           << cricket_feedback.param();
-      return rtc::Optional<RtcpFeedback>();
+      return rtc::nullopt;
     } else {
-      return rtc::Optional<RtcpFeedback>(RtcpFeedback(RtcpFeedbackType::REMB));
+      return RtcpFeedback(RtcpFeedbackType::REMB);
     }
   } else if (cricket_feedback.id() == cricket::kRtcpFbParamTransportCc) {
     if (!cricket_feedback.param().empty()) {
       RTC_LOG(LS_WARNING)
           << "Unsupported parameter for transport-cc RTCP feedback: "
           << cricket_feedback.param();
-      return rtc::Optional<RtcpFeedback>();
+      return rtc::nullopt;
     } else {
-      return rtc::Optional<RtcpFeedback>(
-          RtcpFeedback(RtcpFeedbackType::TRANSPORT_CC));
+      return RtcpFeedback(RtcpFeedbackType::TRANSPORT_CC);
     }
   }
   RTC_LOG(LS_WARNING) << "Unsupported RTCP feedback type: "
                       << cricket_feedback.id();
-  return rtc::Optional<RtcpFeedback>();
+  return rtc::nullopt;
 }
 
 std::vector<RtpEncodingParameters> ToRtpEncodings(
@@ -314,8 +311,7 @@
 void ToRtpCodecCapabilityTypeSpecific<cricket::AudioCodec>(
     const cricket::AudioCodec& cricket_codec,
     RtpCodecCapability* codec) {
-  codec->num_channels =
-      rtc::Optional<int>(static_cast<int>(cricket_codec.channels));
+  codec->num_channels = static_cast<int>(cricket_codec.channels);
 }
 
 template <>
@@ -355,8 +351,7 @@
 void ToRtpCodecParametersTypeSpecific<cricket::AudioCodec>(
     const cricket::AudioCodec& cricket_codec,
     RtpCodecParameters* codec) {
-  codec->num_channels =
-      rtc::Optional<int>(static_cast<int>(cricket_codec.channels));
+  codec->num_channels = static_cast<int>(cricket_codec.channels);
 }
 
 template <>
diff --git a/ortc/rtpparametersconversion_unittest.cc b/ortc/rtpparametersconversion_unittest.cc
index 2dbd6da..d08ce9a 100644
--- a/ortc/rtpparametersconversion_unittest.cc
+++ b/ortc/rtpparametersconversion_unittest.cc
@@ -421,9 +421,9 @@
 
   EXPECT_EQ("foo", codec.name);
   EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, codec.kind);
-  EXPECT_EQ(rtc::Optional<int>(50), codec.preferred_payload_type);
-  EXPECT_EQ(rtc::Optional<int>(22222), codec.clock_rate);
-  EXPECT_EQ(rtc::Optional<int>(4), codec.num_channels);
+  EXPECT_EQ(50, codec.preferred_payload_type);
+  EXPECT_EQ(22222, codec.clock_rate);
+  EXPECT_EQ(4, codec.num_channels);
   ASSERT_EQ(1u, codec.parameters.size());
   EXPECT_EQ("bar", codec.parameters["foo"]);
   EXPECT_EQ(1u, codec.rtcp_feedback.size());
@@ -444,8 +444,8 @@
 
   EXPECT_EQ("VID", codec.name);
   EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, codec.kind);
-  EXPECT_EQ(rtc::Optional<int>(101), codec.preferred_payload_type);
-  EXPECT_EQ(rtc::Optional<int>(80000), codec.clock_rate);
+  EXPECT_EQ(101, codec.preferred_payload_type);
+  EXPECT_EQ(80000, codec.clock_rate);
   ASSERT_EQ(2u, codec.parameters.size());
   EXPECT_EQ("bar", codec.parameters["foo"]);
   EXPECT_EQ("param", codec.parameters["ANOTHER"]);
@@ -496,8 +496,8 @@
   EXPECT_EQ("foo", codec.name);
   EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, codec.kind);
   EXPECT_EQ(50, codec.payload_type);
-  EXPECT_EQ(rtc::Optional<int>(22222), codec.clock_rate);
-  EXPECT_EQ(rtc::Optional<int>(4), codec.num_channels);
+  EXPECT_EQ(22222, codec.clock_rate);
+  EXPECT_EQ(4, codec.num_channels);
   ASSERT_EQ(1u, codec.parameters.size());
   EXPECT_EQ("bar", codec.parameters["foo"]);
   EXPECT_EQ(1u, codec.rtcp_feedback.size());
@@ -519,7 +519,7 @@
   EXPECT_EQ("VID", codec.name);
   EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, codec.kind);
   EXPECT_EQ(101, codec.payload_type);
-  EXPECT_EQ(rtc::Optional<int>(80000), codec.clock_rate);
+  EXPECT_EQ(80000, codec.clock_rate);
   ASSERT_EQ(2u, codec.parameters.size());
   EXPECT_EQ("bar", codec.parameters["foo"]);
   EXPECT_EQ("param", codec.parameters["ANOTHER"]);
diff --git a/ortc/rtptransportadapter.cc b/ortc/rtptransportadapter.cc
index 0509cad..0cf9217 100644
--- a/ortc/rtptransportadapter.cc
+++ b/ortc/rtptransportadapter.cc
@@ -204,7 +204,7 @@
         webrtc::RTCErrorType::UNSUPPORTED_OPERATION,
         "The send key and receive key must have the same cipher suite.");
   }
-  send_key_ = rtc::Optional<cricket::CryptoParams>(params);
+  send_key_ = params;
   return RTCError::OK();
 }
 
@@ -220,7 +220,7 @@
         webrtc::RTCErrorType::UNSUPPORTED_OPERATION,
         "The send key and receive key must have the same cipher suite.");
   }
-  receive_key_ = rtc::Optional<cricket::CryptoParams>(params);
+  receive_key_ = params;
   return RTCError::OK();
 }
 
