diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
index 246aa520027ee83c3f410f7adb68aec05c3d1a10..0f3e7eb4a66fc6869fc425f24c587c771f5686a9 100644
--- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp
+++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
@@ -142,7 +142,7 @@ int AudioRtpFactory::getSessionMedia()
     if (rtpSession_ == NULL)
         throw AudioRtpFactoryException("RTP session was null when trying to get session media type");
 
-    return rtpSession_->getCodecPayloadType();
+    return rtpSession_->getEncoderPayloadType();
 }
 
 void AudioRtpFactory::updateSessionMedia(const std::vector<AudioCodec*> &audioCodecs)
diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp
index cbc6f456e3647306e9f75174da20bf1060706e68..6fcf3737201acfdba9ea8ffc86ed83360ef8662e 100644
--- a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp
+++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp
@@ -92,7 +92,8 @@ AudioRtpRecord::AudioRtpRecord() :
     , dtmfQueue_()
     , audioCodecs_()
     , audioCodecMutex_()
-    , codecPayloadType_(0)
+    , encoderPayloadType_(0)
+    , decoderPayloadType_(0)
     , hasDynamicPayloadType_(false)
     , decData_()     // std::tr1::arrays will be 0-initialized
     , resampledData_()
@@ -144,7 +145,7 @@ bool AudioRtpRecord::tryToSwitchPayloadTypes(int newPt)
 {
     for (std::vector<AudioCodec *>::iterator i = audioCodecs_.begin(); i != audioCodecs_.end(); ++i)
         if (*i and (*i)->getPayloadType() == newPt) {
-            codecPayloadType_ = (*i)->getPayloadType();
+            decoderPayloadType_ = (*i)->getPayloadType();
             codecSampleRate_ = (*i)->getClockRate();
             codecFrameSize_ = (*i)->getFrameSize();
             hasDynamicPayloadType_ = (*i)->hasDynamicPayload();
@@ -204,7 +205,7 @@ void AudioRtpRecordHandler::setRtpMedia(const std::vector<AudioCodec*> &audioCod
     audioRtpRecord_.audioCodecs_ = audioCodecs;
 
     audioRtpRecord_.currentCodecIndex_ = 0;
-    audioRtpRecord_.codecPayloadType_ = audioCodecs[0]->getPayloadType();
+    audioRtpRecord_.encoderPayloadType_ = audioRtpRecord_.decoderPayloadType_ = audioCodecs[0]->getPayloadType();
     audioRtpRecord_.codecSampleRate_ = audioCodecs[0]->getClockRate();
     audioRtpRecord_.codecFrameSize_ = audioCodecs[0]->getFrameSize();
     audioRtpRecord_.hasDynamicPayloadType_ = audioCodecs[0]->hasDynamicPayload();
@@ -316,12 +317,12 @@ void AudioRtpRecordHandler::processDataDecode(unsigned char *spkrData, size_t si
 {
     if (audioRtpRecord_.isDead())
         return;
-    if (audioRtpRecord_.codecPayloadType_ != payloadType) {
+    if (audioRtpRecord_.decoderPayloadType_ != payloadType) {
         const bool switched = audioRtpRecord_.tryToSwitchPayloadTypes(payloadType);
         if (not switched) {
             if (!warningInterval_) {
                 warningInterval_ = 250;
-                WARN("Invalid payload type %d, expected %d", payloadType, audioRtpRecord_.codecPayloadType_);
+                WARN("Invalid payload type %d, expected %d", payloadType, audioRtpRecord_.decoderPayloadType_);
             }
             warningInterval_--;
             return;
diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.h b/daemon/src/audio/audiortp/audio_rtp_record_handler.h
index 98695bf922ab65affea95c9abc776f2f4dceedb4..c055842060a93589147daff3f13ff57b285c9d25 100644
--- a/daemon/src/audio/audiortp/audio_rtp_record_handler.h
+++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.h
@@ -82,7 +82,10 @@ class AudioRtpRecord {
     private:
         std::vector<AudioCodec*> audioCodecs_;
         ost::Mutex audioCodecMutex_;
-        int codecPayloadType_;
+        // these will have the same value unless we are sending
+        // a different codec than we are receiving (asymmetric RTP)
+        int encoderPayloadType_;
+        int decoderPayloadType_;
         bool hasDynamicPayloadType_;
         std::tr1::array<SFLDataFormat, DEC_BUFFER_SIZE> decData_;
 // FIXME: resampledData should be resized as needed
@@ -132,8 +135,8 @@ class AudioRtpRecordHandler {
             return audioRtpRecord_.audioCodecs_[0];
         }
 
-        int getCodecPayloadType() const {
-            return audioRtpRecord_.codecPayloadType_;
+        int getEncoderPayloadType() const {
+            return audioRtpRecord_.encoderPayloadType_;
         }
 
         int getCodecSampleRate() const {
diff --git a/daemon/src/audio/audiortp/audio_rtp_session.cpp b/daemon/src/audio/audiortp/audio_rtp_session.cpp
index e7eb4fbbaeb3d32265e3e0add7c3ec44fe4cfdf9..721f5dd547f1be716cec4b6f47b49f824a77a10c 100644
--- a/daemon/src/audio/audiortp/audio_rtp_session.cpp
+++ b/daemon/src/audio/audiortp/audio_rtp_session.cpp
@@ -84,7 +84,7 @@ void AudioRtpSession::setSessionMedia(const std::vector<AudioCodec*> &audioCodec
     setRtpMedia(audioCodecs);
 
     // G722 requires timestamp to be incremented at 8kHz
-    const ost::PayloadType payloadType = getCodecPayloadType();
+    const ost::PayloadType payloadType = getEncoderPayloadType();
     if (payloadType == ost::sptG722) {
         const int G722_RTP_TIME_INCREMENT = 160;
         timestampIncrement_ = G722_RTP_TIME_INCREMENT;
@@ -134,7 +134,7 @@ void AudioRtpSession::sendDtmfEvent()
     }
 
     // restore the payload to audio
-    const ost::StaticPayloadFormat pf(static_cast<ost::StaticPayloadType>(getCodecPayloadType()));
+    const ost::StaticPayloadFormat pf(static_cast<ost::StaticPayloadType>(getEncoderPayloadType()));
     queue_.setPayloadFormat(pf);
 
     // decrease length remaining to process for this event
diff --git a/daemon/test/sdptest.cpp b/daemon/test/sdptest.cpp
index baa1e35284aa54204ab3f7f910e6d776c10079a1..6020471f802997ab038b195c2aedeef968ef1ff7 100644
--- a/daemon/test/sdptest.cpp
+++ b/daemon/test/sdptest.cpp
@@ -287,7 +287,9 @@ void SDPTest::testReinvite()
 
     CPPUNIT_ASSERT(session_->getLocalIP() == LOCALHOST);
     CPPUNIT_ASSERT(session_->getRemoteIP() == "host.example.com");
-    sfl::AudioCodec *codec = session_->getSessionAudioMedia();
+    std::vector<sfl::AudioCodec*> codecs;
+    session_->getSessionAudioMedia(codecs);
+    sfl::AudioCodec *codec = codecs[0];
     CPPUNIT_ASSERT(codec and codec->getMimeSubtype() == "PCMU");
 
     pjmedia_sdp_session *reinviteOffer;