diff --git a/include/axolotl/message.hh b/include/axolotl/message.hh
index 5bce2777ad42472594838da3fe778c5960b183ac..4d7a1c7250340f1f367a38c13b544c60c482d4d6 100644
--- a/include/axolotl/message.hh
+++ b/include/axolotl/message.hh
@@ -79,9 +79,7 @@ struct PreKeyMessageWriter {
 
 struct PreKeyMessageReader {
     std::uint8_t version;
-    bool has_registration_id;
     bool has_one_time_key_id;
-    std::uint32_t registration_id;
     std::uint32_t one_time_key_id;
     std::uint8_t const * identity_key; std::size_t identity_key_length;
     std::uint8_t const * base_key; std::size_t base_key_length;
@@ -93,7 +91,6 @@ struct PreKeyMessageReader {
  * The length of the buffer needed to hold a message.
  */
 std::size_t encode_one_time_key_message_length(
-    std::uint32_t registration_id,
     std::uint32_t one_time_key_id,
     std::size_t identity_key_length,
     std::size_t base_key_length,
@@ -108,7 +105,6 @@ std::size_t encode_one_time_key_message_length(
 void encode_one_time_key_message(
     PreKeyMessageWriter & writer,
     std::uint8_t version,
-    std::uint32_t registration_id,
     std::uint32_t one_time_key_id,
     std::size_t identity_key_length,
     std::size_t base_key_length,
diff --git a/src/message.cpp b/src/message.cpp
index d9978cb605ac36888610275123452d3aac081dc9..6ce8ca6573cf66718ce080704bee2a9832c318d7 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -231,7 +231,6 @@ void axolotl::decode_message(
 
 namespace {
 
-static std::uint8_t const REGISTRATION_ID_TAG = 050;
 static std::uint8_t const ONE_TIME_KEY_ID_TAG = 010;
 static std::uint8_t const BASE_KEY_TAG = 022;
 static std::uint8_t const IDENTITY_KEY_TAG = 032;
@@ -241,14 +240,12 @@ static std::uint8_t const MESSAGE_TAG = 042;
 
 
 std::size_t axolotl::encode_one_time_key_message_length(
-    std::uint32_t registration_id,
     std::uint32_t one_time_key_id,
     std::size_t identity_key_length,
     std::size_t base_key_length,
     std::size_t message_length
 ) {
     std::size_t length = VERSION_LENGTH;
-    length += 1 + varint_length(registration_id);
     length += 1 + varint_length(one_time_key_id);
     length += 1 + varstring_length(identity_key_length);
     length += 1 + varstring_length(base_key_length);
@@ -260,7 +257,6 @@ std::size_t axolotl::encode_one_time_key_message_length(
 void axolotl::encode_one_time_key_message(
     axolotl::PreKeyMessageWriter & writer,
     std::uint8_t version,
-    std::uint32_t registration_id,
     std::uint32_t one_time_key_id,
     std::size_t identity_key_length,
     std::size_t base_key_length,
@@ -269,7 +265,6 @@ void axolotl::encode_one_time_key_message(
 ) {
     std::uint8_t * pos = output;
     *(pos++) = version;
-    pos = encode(pos, REGISTRATION_ID_TAG, registration_id);
     pos = encode(pos, ONE_TIME_KEY_ID_TAG, one_time_key_id);
     pos = encode(pos, BASE_KEY_TAG, writer.base_key, base_key_length);
     pos = encode(pos, IDENTITY_KEY_TAG, writer.identity_key, identity_key_length);
@@ -287,17 +282,12 @@ void axolotl::decode_one_time_key_message(
 
     if (pos == end) return;
     reader.version = *(pos++);
-    reader.has_registration_id = false;
     reader.has_one_time_key_id = false;
     reader.identity_key = nullptr;
     reader.base_key = nullptr;
     reader.message = nullptr;
 
     while (pos != end) {
-        pos = decode(
-            pos, end, REGISTRATION_ID_TAG,
-            reader.registration_id, reader.has_registration_id
-        );
         pos = decode(
             pos, end, ONE_TIME_KEY_ID_TAG,
             reader.one_time_key_id, reader.has_one_time_key_id
diff --git a/src/session.cpp b/src/session.cpp
index 7fb07e25448b343fe8d52d34160bdb54302e9c77..9d0935b6ece1ef74d19c6d73726b7e2d3cfa96d5 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -112,7 +112,6 @@ bool check_message_fields(
     ok = ok && reader.base_key;
     ok = ok && reader.base_key_length == KEY_LENGTH;
     ok = ok && reader.has_one_time_key_id;
-    ok = ok && reader.has_registration_id;
     return ok;
 }
 
@@ -143,7 +142,6 @@ std::size_t axolotl::Session::new_inbound_session(
         return std::size_t(-1);
     }
 
-    alice_identity_key.id = reader.registration_id;
     std::memcpy(alice_identity_key.key.public_key, reader.identity_key, 32);
     std::memcpy(alice_base_key.public_key, reader.base_key, 32);
     bob_one_time_key_id = reader.one_time_key_id;
@@ -195,7 +193,6 @@ bool axolotl::Session::matches_inbound_session(
         reader.base_key, alice_base_key.public_key, KEY_LENGTH
     );
     same = same && reader.one_time_key_id == bob_one_time_key_id;
-    same = same && reader.registration_id == alice_identity_key.id;
     return same;
 }
 
@@ -221,7 +218,6 @@ std::size_t axolotl::Session::encrypt_message_length(
     }
 
     return encode_one_time_key_message_length(
-        alice_identity_key.id,
         bob_one_time_key_id,
         KEY_LENGTH,
         KEY_LENGTH,
@@ -256,7 +252,6 @@ std::size_t axolotl::Session::encrypt(
         encode_one_time_key_message(
             writer,
             PROTOCOL_VERSION,
-            alice_identity_key.id,
             bob_one_time_key_id,
             KEY_LENGTH,
             KEY_LENGTH,