]> granicus.if.org Git - ejabberd/commitdiff
Recompile the xmpp_codec using updated XML generator
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 26 Aug 2014 18:21:27 +0000 (22:21 +0400)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 27 Aug 2014 08:55:31 +0000 (12:55 +0400)
test/ejabberd_SUITE.erl
tools/xmpp_codec.erl
tools/xmpp_codec.hrl
tools/xmpp_codec.spec

index f6f6bef44918102222e96f7f1e2b589574947d73..a1a2256b73fd8ce2430a63fd2e2da7d9bfe88612 100644 (file)
@@ -519,16 +519,16 @@ sm(Config) ->
     Msg = #message{to = ServerJID, body = [#text{data = <<"body">>}]},
     true = ?config(sm, Config),
     %% Enable the session management with resumption enabled
-    send(Config, #sm_enable{resume = true}),
+    send(Config, #sm_enable{resume = true, xmlns = ?NS_STREAM_MGMT_3}),
     #sm_enabled{id = ID, resume = true} = recv(),
     %% Initial request; 'h' should be 0.
-    send(Config, #sm_r{}),
+    send(Config, #sm_r{xmlns = ?NS_STREAM_MGMT_3}),
     #sm_a{h = 0} = recv(),
     %% sending two messages and requesting again; 'h' should be 3.
     send(Config, Msg),
     send(Config, Msg),
     send(Config, Msg),
-    send(Config, #sm_r{}),
+    send(Config, #sm_r{xmlns = ?NS_STREAM_MGMT_3}),
     #sm_a{h = 3} = recv(),
     close_socket(Config),
     {save_config, set_opt(sm_previd, ID, Config)}.
@@ -543,11 +543,11 @@ sm_resume(Config) ->
     Msg = #message{from = ServerJID, to = MyJID, body = [Txt]},
     %% Route message. The message should be queued by the C2S process.
     ejabberd_router:route(ServerJID, MyJID, xmpp_codec:encode(Msg)),
-    send(Config, #sm_resume{previd = ID, h = 0}),
+    send(Config, #sm_resume{previd = ID, h = 0, xmlns = ?NS_STREAM_MGMT_3}),
     #sm_resumed{previd = ID, h = 3} = recv(),
     #message{from = ServerJID, to = MyJID, body = [Txt]} = recv(),
     #sm_r{} = recv(),
-    send(Config, #sm_a{h = 1}),
+    send(Config, #sm_a{h = 1, xmlns = ?NS_STREAM_MGMT_3}),
     disconnect(Config).
 
 private(Config) ->
index 3ad90fe1f8a1c0de86200d8fbffac637f7aa12cd..5a549aebb6bb93edeedbd42d9fd0df8cc2c5be14 100644 (file)
 
 decode({xmlel, _name, _attrs, _} = _el) ->
     case {_name, get_attr(<<"xmlns">>, _attrs)} of
+      {<<"failed">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_failed(<<"urn:xmpp:sm:2">>, _el);
       {<<"failed">>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_failed(_el);
-      {<<"a">>, <<"urn:xmpp:sm:3">>} -> decode_sm_a(_el);
-      {<<"r">>, <<"urn:xmpp:sm:3">>} -> decode_sm_r(_el);
+         decode_sm_failed(<<"urn:xmpp:sm:3">>, _el);
+      {<<"a">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_a(<<"urn:xmpp:sm:2">>, _el);
+      {<<"a">>, <<"urn:xmpp:sm:3">>} ->
+         decode_sm_a(<<"urn:xmpp:sm:3">>, _el);
+      {<<"r">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_r(<<"urn:xmpp:sm:2">>, _el);
+      {<<"r">>, <<"urn:xmpp:sm:3">>} ->
+         decode_sm_r(<<"urn:xmpp:sm:3">>, _el);
+      {<<"resumed">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_resumed(<<"urn:xmpp:sm:2">>, _el);
       {<<"resumed">>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_resumed(_el);
+         decode_sm_resumed(<<"urn:xmpp:sm:3">>, _el);
+      {<<"resume">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_resume(<<"urn:xmpp:sm:2">>, _el);
       {<<"resume">>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_resume(_el);
+         decode_sm_resume(<<"urn:xmpp:sm:3">>, _el);
+      {<<"enabled">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_enabled(<<"urn:xmpp:sm:2">>, _el);
       {<<"enabled">>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_enabled(_el);
+         decode_sm_enabled(<<"urn:xmpp:sm:3">>, _el);
+      {<<"enable">>, <<"urn:xmpp:sm:2">>} ->
+         decode_sm_enable(<<"urn:xmpp:sm:2">>, _el);
       {<<"enable">>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_enable(_el);
+         decode_sm_enable(<<"urn:xmpp:sm:3">>, _el);
+      {<<"sm">>, <<"urn:xmpp:sm:2">>} ->
+         decode_feature_sm(<<"urn:xmpp:sm:2">>, _el);
       {<<"sm">>, <<"urn:xmpp:sm:3">>} ->
-         decode_feature_sm(_el);
+         decode_feature_sm(<<"urn:xmpp:sm:3">>, _el);
       {<<"sent">>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_sent(_el);
+         decode_carbons_sent(<<"urn:xmpp:carbons:2">>, _el);
       {<<"received">>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_received(_el);
+         decode_carbons_received(<<"urn:xmpp:carbons:2">>, _el);
       {<<"private">>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_private(_el);
+         decode_carbons_private(<<"urn:xmpp:carbons:2">>, _el);
       {<<"enable">>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_enable(_el);
+         decode_carbons_enable(<<"urn:xmpp:carbons:2">>, _el);
       {<<"disable">>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_disable(_el);
+         decode_carbons_disable(<<"urn:xmpp:carbons:2">>, _el);
       {<<"forwarded">>, <<"urn:xmpp:forward:0">>} ->
-         decode_forwarded(_el);
+         decode_forwarded(<<"urn:xmpp:forward:0">>, _el);
       {<<"x">>, <<"http://jabber.org/protocol/muc">>} ->
-         decode_muc(_el);
+         decode_muc(<<"http://jabber.org/protocol/muc">>, _el);
       {<<"query">>,
        <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin(_el);
+         decode_muc_admin(<<"http://jabber.org/protocol/muc#admin">>,
+                          _el);
       {<<"reason">>,
        <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_reason(_el);
+         decode_muc_admin_reason(<<"http://jabber.org/protocol/muc#admin">>,
+                                 _el);
       {<<"continue">>,
        <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_continue(_el);
+         decode_muc_admin_continue(<<"http://jabber.org/protocol/muc#admin">>,
+                                   _el);
       {<<"actor">>,
        <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_actor(_el);
+         decode_muc_admin_actor(<<"http://jabber.org/protocol/muc#admin">>,
+                                _el);
       {<<"item">>,
        <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_item(_el);
+         decode_muc_admin_item(<<"http://jabber.org/protocol/muc#admin">>,
+                               _el);
       {<<"query">>,
        <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner(_el);
+         decode_muc_owner(<<"http://jabber.org/protocol/muc#owner">>,
+                          _el);
       {<<"destroy">>,
        <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner_destroy(_el);
+         decode_muc_owner_destroy(<<"http://jabber.org/protocol/muc#owner">>,
+                                  _el);
       {<<"reason">>,
        <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner_reason(_el);
+         decode_muc_owner_reason(<<"http://jabber.org/protocol/muc#owner">>,
+                                 _el);
       {<<"password">>,
        <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner_password(_el);
+         decode_muc_owner_password(<<"http://jabber.org/protocol/muc#owner">>,
+                                   _el);
       {<<"x">>, <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user(_el);
+         decode_muc_user(<<"http://jabber.org/protocol/muc#user">>,
+                         _el);
       {<<"item">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_item(_el);
+         decode_muc_user_item(<<"http://jabber.org/protocol/muc#user">>,
+                              _el);
       {<<"status">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_status(_el);
+         decode_muc_user_status(<<"http://jabber.org/protocol/muc#user">>,
+                                _el);
       {<<"continue">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_continue(_el);
+         decode_muc_user_continue(<<"http://jabber.org/protocol/muc#user">>,
+                                  _el);
       {<<"actor">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_actor(_el);
+         decode_muc_user_actor(<<"http://jabber.org/protocol/muc#user">>,
+                               _el);
       {<<"invite">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_invite(_el);
+         decode_muc_user_invite(<<"http://jabber.org/protocol/muc#user">>,
+                                _el);
       {<<"destroy">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_destroy(_el);
+         decode_muc_user_destroy(<<"http://jabber.org/protocol/muc#user">>,
+                                 _el);
       {<<"decline">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_decline(_el);
+         decode_muc_user_decline(<<"http://jabber.org/protocol/muc#user">>,
+                                 _el);
       {<<"reason">>,
        <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_reason(_el);
+         decode_muc_user_reason(<<"http://jabber.org/protocol/muc#user">>,
+                                _el);
       {<<"history">>, <<"http://jabber.org/protocol/muc">>} ->
-         decode_muc_history(_el);
+         decode_muc_history(<<"http://jabber.org/protocol/muc">>,
+                            _el);
       {<<"query">>,
        <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams(_el);
+         decode_bytestreams(<<"http://jabber.org/protocol/bytestreams">>,
+                            _el);
       {<<"activate">>,
        <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_activate(_el);
+         decode_bytestreams_activate(<<"http://jabber.org/protocol/bytestreams">>,
+                                     _el);
       {<<"streamhost-used">>,
        <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_streamhost_used(_el);
+         decode_bytestreams_streamhost_used(<<"http://jabber.org/protocol/bytestreams">>,
+                                            _el);
       {<<"streamhost">>,
        <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_streamhost(_el);
+         decode_bytestreams_streamhost(<<"http://jabber.org/protocol/bytestreams">>,
+                                       _el);
       {<<"x">>, <<"jabber:x:delay">>} ->
-         decode_legacy_delay(_el);
+         decode_legacy_delay(<<"jabber:x:delay">>, _el);
       {<<"delay">>, <<"urn:xmpp:delay">>} ->
-         decode_delay(_el);
+         decode_delay(<<"urn:xmpp:delay">>, _el);
       {<<"headers">>,
        <<"http://jabber.org/protocol/shim">>} ->
-         decode_shim_headers(_el);
+         decode_shim_headers(<<"http://jabber.org/protocol/shim">>,
+                             _el);
       {<<"header">>, <<"http://jabber.org/protocol/shim">>} ->
-         decode_shim_header(_el);
+         decode_shim_header(<<"http://jabber.org/protocol/shim">>,
+                            _el);
       {<<"pubsub">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub(_el);
+         decode_pubsub(<<"http://jabber.org/protocol/pubsub">>,
+                       _el);
       {<<"retract">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_retract(_el);
+         decode_pubsub_retract(<<"http://jabber.org/protocol/pubsub">>,
+                               _el);
       {<<"options">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_options(_el);
+         decode_pubsub_options(<<"http://jabber.org/protocol/pubsub">>,
+                               _el);
       {<<"publish">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_publish(_el);
+         decode_pubsub_publish(<<"http://jabber.org/protocol/pubsub">>,
+                               _el);
       {<<"unsubscribe">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_unsubscribe(_el);
+         decode_pubsub_unsubscribe(<<"http://jabber.org/protocol/pubsub">>,
+                                   _el);
       {<<"subscribe">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscribe(_el);
+         decode_pubsub_subscribe(<<"http://jabber.org/protocol/pubsub">>,
+                                 _el);
       {<<"affiliations">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_affiliations(_el);
+         decode_pubsub_affiliations(<<"http://jabber.org/protocol/pubsub">>,
+                                    _el);
       {<<"subscriptions">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscriptions(_el);
+         decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub">>,
+                                     _el);
       {<<"event">>,
        <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event(_el);
+         decode_pubsub_event(<<"http://jabber.org/protocol/pubsub#event">>,
+                             _el);
       {<<"items">>,
        <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event_items(_el);
+         decode_pubsub_event_items(<<"http://jabber.org/protocol/pubsub#event">>,
+                                   _el);
       {<<"item">>,
        <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event_item(_el);
+         decode_pubsub_event_item(<<"http://jabber.org/protocol/pubsub#event">>,
+                                  _el);
       {<<"retract">>,
        <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event_retract(_el);
+         decode_pubsub_event_retract(<<"http://jabber.org/protocol/pubsub#event">>,
+                                     _el);
       {<<"items">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_items(_el);
+         decode_pubsub_items(<<"http://jabber.org/protocol/pubsub">>,
+                             _el);
       {<<"item">>, <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_item(_el);
+         decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
+                            _el);
       {<<"affiliation">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_affiliation(_el);
+         decode_pubsub_affiliation(<<"http://jabber.org/protocol/pubsub">>,
+                                   _el);
       {<<"subscription">>,
        <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscription(_el);
-      {<<"x">>, <<"jabber:x:data">>} -> decode_xdata(_el);
+         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
+                                    _el);
+      {<<"x">>, <<"jabber:x:data">>} ->
+         decode_xdata(<<"jabber:x:data">>, _el);
       {<<"item">>, <<"jabber:x:data">>} ->
-         decode_xdata_item(_el);
+         decode_xdata_item(<<"jabber:x:data">>, _el);
       {<<"reported">>, <<"jabber:x:data">>} ->
-         decode_xdata_reported(_el);
+         decode_xdata_reported(<<"jabber:x:data">>, _el);
       {<<"title">>, <<"jabber:x:data">>} ->
-         decode_xdata_title(_el);
+         decode_xdata_title(<<"jabber:x:data">>, _el);
       {<<"instructions">>, <<"jabber:x:data">>} ->
-         decode_xdata_instructions(_el);
+         decode_xdata_instructions(<<"jabber:x:data">>, _el);
       {<<"field">>, <<"jabber:x:data">>} ->
-         decode_xdata_field(_el);
+         decode_xdata_field(<<"jabber:x:data">>, _el);
       {<<"option">>, <<"jabber:x:data">>} ->
-         decode_xdata_field_option(_el);
+         decode_xdata_field_option(<<"jabber:x:data">>, _el);
       {<<"value">>, <<"jabber:x:data">>} ->
-         decode_xdata_field_value(_el);
+         decode_xdata_field_value(<<"jabber:x:data">>, _el);
       {<<"desc">>, <<"jabber:x:data">>} ->
-         decode_xdata_field_desc(_el);
+         decode_xdata_field_desc(<<"jabber:x:data">>, _el);
       {<<"required">>, <<"jabber:x:data">>} ->
-         decode_xdata_field_required(_el);
-      {<<"vCard">>, <<"vcard-temp">>} -> decode_vcard(_el);
+         decode_xdata_field_required(<<"jabber:x:data">>, _el);
+      {<<"vCard">>, <<"vcard-temp">>} ->
+         decode_vcard(<<"vcard-temp">>, _el);
       {<<"CLASS">>, <<"vcard-temp">>} ->
-         decode_vcard_CLASS(_el);
+         decode_vcard_CLASS(<<"vcard-temp">>, _el);
       {<<"CATEGORIES">>, <<"vcard-temp">>} ->
-         decode_vcard_CATEGORIES(_el);
-      {<<"KEY">>, <<"vcard-temp">>} -> decode_vcard_KEY(_el);
+         decode_vcard_CATEGORIES(<<"vcard-temp">>, _el);
+      {<<"KEY">>, <<"vcard-temp">>} ->
+         decode_vcard_KEY(<<"vcard-temp">>, _el);
       {<<"SOUND">>, <<"vcard-temp">>} ->
-         decode_vcard_SOUND(_el);
-      {<<"ORG">>, <<"vcard-temp">>} -> decode_vcard_ORG(_el);
+         decode_vcard_SOUND(<<"vcard-temp">>, _el);
+      {<<"ORG">>, <<"vcard-temp">>} ->
+         decode_vcard_ORG(<<"vcard-temp">>, _el);
       {<<"PHOTO">>, <<"vcard-temp">>} ->
-         decode_vcard_PHOTO(_el);
+         decode_vcard_PHOTO(<<"vcard-temp">>, _el);
       {<<"LOGO">>, <<"vcard-temp">>} ->
-         decode_vcard_LOGO(_el);
+         decode_vcard_LOGO(<<"vcard-temp">>, _el);
       {<<"BINVAL">>, <<"vcard-temp">>} ->
-         decode_vcard_BINVAL(_el);
-      {<<"GEO">>, <<"vcard-temp">>} -> decode_vcard_GEO(_el);
+         decode_vcard_BINVAL(<<"vcard-temp">>, _el);
+      {<<"GEO">>, <<"vcard-temp">>} ->
+         decode_vcard_GEO(<<"vcard-temp">>, _el);
       {<<"EMAIL">>, <<"vcard-temp">>} ->
-         decode_vcard_EMAIL(_el);
-      {<<"TEL">>, <<"vcard-temp">>} -> decode_vcard_TEL(_el);
+         decode_vcard_EMAIL(<<"vcard-temp">>, _el);
+      {<<"TEL">>, <<"vcard-temp">>} ->
+         decode_vcard_TEL(<<"vcard-temp">>, _el);
       {<<"LABEL">>, <<"vcard-temp">>} ->
-         decode_vcard_LABEL(_el);
-      {<<"ADR">>, <<"vcard-temp">>} -> decode_vcard_ADR(_el);
-      {<<"N">>, <<"vcard-temp">>} -> decode_vcard_N(_el);
+         decode_vcard_LABEL(<<"vcard-temp">>, _el);
+      {<<"ADR">>, <<"vcard-temp">>} ->
+         decode_vcard_ADR(<<"vcard-temp">>, _el);
+      {<<"N">>, <<"vcard-temp">>} ->
+         decode_vcard_N(<<"vcard-temp">>, _el);
       {<<"CONFIDENTIAL">>, <<"vcard-temp">>} ->
-         decode_vcard_CONFIDENTIAL(_el);
+         decode_vcard_CONFIDENTIAL(<<"vcard-temp">>, _el);
       {<<"PRIVATE">>, <<"vcard-temp">>} ->
-         decode_vcard_PRIVATE(_el);
+         decode_vcard_PRIVATE(<<"vcard-temp">>, _el);
       {<<"PUBLIC">>, <<"vcard-temp">>} ->
-         decode_vcard_PUBLIC(_el);
+         decode_vcard_PUBLIC(<<"vcard-temp">>, _el);
       {<<"EXTVAL">>, <<"vcard-temp">>} ->
-         decode_vcard_EXTVAL(_el);
+         decode_vcard_EXTVAL(<<"vcard-temp">>, _el);
       {<<"TYPE">>, <<"vcard-temp">>} ->
-         decode_vcard_TYPE(_el);
+         decode_vcard_TYPE(<<"vcard-temp">>, _el);
       {<<"DESC">>, <<"vcard-temp">>} ->
-         decode_vcard_DESC(_el);
-      {<<"URL">>, <<"vcard-temp">>} -> decode_vcard_URL(_el);
-      {<<"UID">>, <<"vcard-temp">>} -> decode_vcard_UID(_el);
+         decode_vcard_DESC(<<"vcard-temp">>, _el);
+      {<<"URL">>, <<"vcard-temp">>} ->
+         decode_vcard_URL(<<"vcard-temp">>, _el);
+      {<<"UID">>, <<"vcard-temp">>} ->
+         decode_vcard_UID(<<"vcard-temp">>, _el);
       {<<"SORT-STRING">>, <<"vcard-temp">>} ->
-         decode_vcard_SORT_STRING(_el);
-      {<<"REV">>, <<"vcard-temp">>} -> decode_vcard_REV(_el);
+         decode_vcard_SORT_STRING(<<"vcard-temp">>, _el);
+      {<<"REV">>, <<"vcard-temp">>} ->
+         decode_vcard_REV(<<"vcard-temp">>, _el);
       {<<"PRODID">>, <<"vcard-temp">>} ->
-         decode_vcard_PRODID(_el);
+         decode_vcard_PRODID(<<"vcard-temp">>, _el);
       {<<"NOTE">>, <<"vcard-temp">>} ->
-         decode_vcard_NOTE(_el);
+         decode_vcard_NOTE(<<"vcard-temp">>, _el);
       {<<"KEYWORD">>, <<"vcard-temp">>} ->
-         decode_vcard_KEYWORD(_el);
+         decode_vcard_KEYWORD(<<"vcard-temp">>, _el);
       {<<"ROLE">>, <<"vcard-temp">>} ->
-         decode_vcard_ROLE(_el);
+         decode_vcard_ROLE(<<"vcard-temp">>, _el);
       {<<"TITLE">>, <<"vcard-temp">>} ->
-         decode_vcard_TITLE(_el);
-      {<<"TZ">>, <<"vcard-temp">>} -> decode_vcard_TZ(_el);
+         decode_vcard_TITLE(<<"vcard-temp">>, _el);
+      {<<"TZ">>, <<"vcard-temp">>} ->
+         decode_vcard_TZ(<<"vcard-temp">>, _el);
       {<<"MAILER">>, <<"vcard-temp">>} ->
-         decode_vcard_MAILER(_el);
+         decode_vcard_MAILER(<<"vcard-temp">>, _el);
       {<<"JABBERID">>, <<"vcard-temp">>} ->
-         decode_vcard_JABBERID(_el);
+         decode_vcard_JABBERID(<<"vcard-temp">>, _el);
       {<<"BDAY">>, <<"vcard-temp">>} ->
-         decode_vcard_BDAY(_el);
+         decode_vcard_BDAY(<<"vcard-temp">>, _el);
       {<<"NICKNAME">>, <<"vcard-temp">>} ->
-         decode_vcard_NICKNAME(_el);
-      {<<"FN">>, <<"vcard-temp">>} -> decode_vcard_FN(_el);
+         decode_vcard_NICKNAME(<<"vcard-temp">>, _el);
+      {<<"FN">>, <<"vcard-temp">>} ->
+         decode_vcard_FN(<<"vcard-temp">>, _el);
       {<<"VERSION">>, <<"vcard-temp">>} ->
-         decode_vcard_VERSION(_el);
+         decode_vcard_VERSION(<<"vcard-temp">>, _el);
       {<<"CRED">>, <<"vcard-temp">>} ->
-         decode_vcard_CRED(_el);
+         decode_vcard_CRED(<<"vcard-temp">>, _el);
       {<<"PHONETIC">>, <<"vcard-temp">>} ->
-         decode_vcard_PHONETIC(_el);
+         decode_vcard_PHONETIC(<<"vcard-temp">>, _el);
       {<<"ORGUNIT">>, <<"vcard-temp">>} ->
-         decode_vcard_ORGUNIT(_el);
+         decode_vcard_ORGUNIT(<<"vcard-temp">>, _el);
       {<<"ORGNAME">>, <<"vcard-temp">>} ->
-         decode_vcard_ORGNAME(_el);
-      {<<"LON">>, <<"vcard-temp">>} -> decode_vcard_LON(_el);
-      {<<"LAT">>, <<"vcard-temp">>} -> decode_vcard_LAT(_el);
+         decode_vcard_ORGNAME(<<"vcard-temp">>, _el);
+      {<<"LON">>, <<"vcard-temp">>} ->
+         decode_vcard_LON(<<"vcard-temp">>, _el);
+      {<<"LAT">>, <<"vcard-temp">>} ->
+         decode_vcard_LAT(<<"vcard-temp">>, _el);
       {<<"USERID">>, <<"vcard-temp">>} ->
-         decode_vcard_USERID(_el);
+         decode_vcard_USERID(<<"vcard-temp">>, _el);
       {<<"NUMBER">>, <<"vcard-temp">>} ->
-         decode_vcard_NUMBER(_el);
+         decode_vcard_NUMBER(<<"vcard-temp">>, _el);
       {<<"LINE">>, <<"vcard-temp">>} ->
-         decode_vcard_LINE(_el);
+         decode_vcard_LINE(<<"vcard-temp">>, _el);
       {<<"CTRY">>, <<"vcard-temp">>} ->
-         decode_vcard_CTRY(_el);
+         decode_vcard_CTRY(<<"vcard-temp">>, _el);
       {<<"PCODE">>, <<"vcard-temp">>} ->
-         decode_vcard_PCODE(_el);
+         decode_vcard_PCODE(<<"vcard-temp">>, _el);
       {<<"REGION">>, <<"vcard-temp">>} ->
-         decode_vcard_REGION(_el);
+         decode_vcard_REGION(<<"vcard-temp">>, _el);
       {<<"LOCALITY">>, <<"vcard-temp">>} ->
-         decode_vcard_LOCALITY(_el);
+         decode_vcard_LOCALITY(<<"vcard-temp">>, _el);
       {<<"STREET">>, <<"vcard-temp">>} ->
-         decode_vcard_STREET(_el);
+         decode_vcard_STREET(<<"vcard-temp">>, _el);
       {<<"EXTADD">>, <<"vcard-temp">>} ->
-         decode_vcard_EXTADD(_el);
+         decode_vcard_EXTADD(<<"vcard-temp">>, _el);
       {<<"POBOX">>, <<"vcard-temp">>} ->
-         decode_vcard_POBOX(_el);
+         decode_vcard_POBOX(<<"vcard-temp">>, _el);
       {<<"SUFFIX">>, <<"vcard-temp">>} ->
-         decode_vcard_SUFFIX(_el);
+         decode_vcard_SUFFIX(<<"vcard-temp">>, _el);
       {<<"PREFIX">>, <<"vcard-temp">>} ->
-         decode_vcard_PREFIX(_el);
+         decode_vcard_PREFIX(<<"vcard-temp">>, _el);
       {<<"MIDDLE">>, <<"vcard-temp">>} ->
-         decode_vcard_MIDDLE(_el);
+         decode_vcard_MIDDLE(<<"vcard-temp">>, _el);
       {<<"GIVEN">>, <<"vcard-temp">>} ->
-         decode_vcard_GIVEN(_el);
+         decode_vcard_GIVEN(<<"vcard-temp">>, _el);
       {<<"FAMILY">>, <<"vcard-temp">>} ->
-         decode_vcard_FAMILY(_el);
+         decode_vcard_FAMILY(<<"vcard-temp">>, _el);
       {<<"X400">>, <<"vcard-temp">>} ->
-         decode_vcard_X400(_el);
+         decode_vcard_X400(<<"vcard-temp">>, _el);
       {<<"INTERNET">>, <<"vcard-temp">>} ->
-         decode_vcard_INTERNET(_el);
+         decode_vcard_INTERNET(<<"vcard-temp">>, _el);
       {<<"PREF">>, <<"vcard-temp">>} ->
-         decode_vcard_PREF(_el);
+         decode_vcard_PREF(<<"vcard-temp">>, _el);
       {<<"INTL">>, <<"vcard-temp">>} ->
-         decode_vcard_INTL(_el);
-      {<<"DOM">>, <<"vcard-temp">>} -> decode_vcard_DOM(_el);
+         decode_vcard_INTL(<<"vcard-temp">>, _el);
+      {<<"DOM">>, <<"vcard-temp">>} ->
+         decode_vcard_DOM(<<"vcard-temp">>, _el);
       {<<"PARCEL">>, <<"vcard-temp">>} ->
-         decode_vcard_PARCEL(_el);
+         decode_vcard_PARCEL(<<"vcard-temp">>, _el);
       {<<"POSTAL">>, <<"vcard-temp">>} ->
-         decode_vcard_POSTAL(_el);
-      {<<"PCS">>, <<"vcard-temp">>} -> decode_vcard_PCS(_el);
+         decode_vcard_POSTAL(<<"vcard-temp">>, _el);
+      {<<"PCS">>, <<"vcard-temp">>} ->
+         decode_vcard_PCS(<<"vcard-temp">>, _el);
       {<<"ISDN">>, <<"vcard-temp">>} ->
-         decode_vcard_ISDN(_el);
+         decode_vcard_ISDN(<<"vcard-temp">>, _el);
       {<<"MODEM">>, <<"vcard-temp">>} ->
-         decode_vcard_MODEM(_el);
-      {<<"BBS">>, <<"vcard-temp">>} -> decode_vcard_BBS(_el);
+         decode_vcard_MODEM(<<"vcard-temp">>, _el);
+      {<<"BBS">>, <<"vcard-temp">>} ->
+         decode_vcard_BBS(<<"vcard-temp">>, _el);
       {<<"VIDEO">>, <<"vcard-temp">>} ->
-         decode_vcard_VIDEO(_el);
+         decode_vcard_VIDEO(<<"vcard-temp">>, _el);
       {<<"CELL">>, <<"vcard-temp">>} ->
-         decode_vcard_CELL(_el);
-      {<<"MSG">>, <<"vcard-temp">>} -> decode_vcard_MSG(_el);
+         decode_vcard_CELL(<<"vcard-temp">>, _el);
+      {<<"MSG">>, <<"vcard-temp">>} ->
+         decode_vcard_MSG(<<"vcard-temp">>, _el);
       {<<"PAGER">>, <<"vcard-temp">>} ->
-         decode_vcard_PAGER(_el);
-      {<<"FAX">>, <<"vcard-temp">>} -> decode_vcard_FAX(_el);
+         decode_vcard_PAGER(<<"vcard-temp">>, _el);
+      {<<"FAX">>, <<"vcard-temp">>} ->
+         decode_vcard_FAX(<<"vcard-temp">>, _el);
       {<<"VOICE">>, <<"vcard-temp">>} ->
-         decode_vcard_VOICE(_el);
+         decode_vcard_VOICE(<<"vcard-temp">>, _el);
       {<<"WORK">>, <<"vcard-temp">>} ->
-         decode_vcard_WORK(_el);
+         decode_vcard_WORK(<<"vcard-temp">>, _el);
       {<<"HOME">>, <<"vcard-temp">>} ->
-         decode_vcard_HOME(_el);
+         decode_vcard_HOME(<<"vcard-temp">>, _el);
       {<<"stream:error">>,
        <<"http://etherx.jabber.org/streams">>} ->
-         decode_stream_error(_el);
+         decode_stream_error(<<"http://etherx.jabber.org/streams">>,
+                             _el);
       {<<"unsupported-version">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_version(_el);
+         decode_stream_error_unsupported_version(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                 _el);
       {<<"unsupported-stanza-type">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_stanza_type(_el);
+         decode_stream_error_unsupported_stanza_type(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                     _el);
       {<<"unsupported-encoding">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_encoding(_el);
+         decode_stream_error_unsupported_encoding(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                  _el);
       {<<"undefined-condition">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_undefined_condition(_el);
+         decode_stream_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                 _el);
       {<<"system-shutdown">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_system_shutdown(_el);
+         decode_stream_error_system_shutdown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                             _el);
       {<<"see-other-host">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_see_other_host(_el);
+         decode_stream_error_see_other_host(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                            _el);
       {<<"restricted-xml">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_restricted_xml(_el);
+         decode_stream_error_restricted_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                            _el);
       {<<"resource-constraint">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_resource_constraint(_el);
+         decode_stream_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                 _el);
       {<<"reset">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_reset(_el);
+         decode_stream_error_reset(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                   _el);
       {<<"remote-connection-failed">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_remote_connection_failed(_el);
+         decode_stream_error_remote_connection_failed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                      _el);
       {<<"policy-violation">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_policy_violation(_el);
+         decode_stream_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                              _el);
       {<<"not-well-formed">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_not_well_formed(_el);
+         decode_stream_error_not_well_formed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                             _el);
       {<<"not-authorized">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_not_authorized(_el);
+         decode_stream_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                            _el);
       {<<"invalid-xml">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_xml(_el);
+         decode_stream_error_invalid_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                         _el);
       {<<"invalid-namespace">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_namespace(_el);
+         decode_stream_error_invalid_namespace(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                               _el);
       {<<"invalid-id">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_id(_el);
+         decode_stream_error_invalid_id(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                        _el);
       {<<"invalid-from">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_from(_el);
+         decode_stream_error_invalid_from(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                          _el);
       {<<"internal-server-error">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_internal_server_error(_el);
+         decode_stream_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                   _el);
       {<<"improper-addressing">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_improper_addressing(_el);
+         decode_stream_error_improper_addressing(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                 _el);
       {<<"host-unknown">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_host_unknown(_el);
+         decode_stream_error_host_unknown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                          _el);
       {<<"host-gone">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_host_gone(_el);
+         decode_stream_error_host_gone(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                       _el);
       {<<"connection-timeout">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_connection_timeout(_el);
+         decode_stream_error_connection_timeout(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                _el);
       {<<"conflict">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_conflict(_el);
+         decode_stream_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                      _el);
       {<<"bad-namespace-prefix">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_bad_namespace_prefix(_el);
+         decode_stream_error_bad_namespace_prefix(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                                  _el);
       {<<"bad-format">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_bad_format(_el);
+         decode_stream_error_bad_format(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                        _el);
       {<<"text">>,
        <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_text(_el);
-      {<<"time">>, <<"urn:xmpp:time">>} -> decode_time(_el);
+         decode_stream_error_text(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
+                                  _el);
+      {<<"time">>, <<"urn:xmpp:time">>} ->
+         decode_time(<<"urn:xmpp:time">>, _el);
       {<<"tzo">>, <<"urn:xmpp:time">>} ->
-         decode_time_tzo(_el);
+         decode_time_tzo(<<"urn:xmpp:time">>, _el);
       {<<"utc">>, <<"urn:xmpp:time">>} ->
-         decode_time_utc(_el);
-      {<<"ping">>, <<"urn:xmpp:ping">>} -> decode_ping(_el);
+         decode_time_utc(<<"urn:xmpp:time">>, _el);
+      {<<"ping">>, <<"urn:xmpp:ping">>} ->
+         decode_ping(<<"urn:xmpp:ping">>, _el);
       {<<"session">>,
        <<"urn:ietf:params:xml:ns:xmpp-session">>} ->
-         decode_session(_el);
+         decode_session(<<"urn:ietf:params:xml:ns:xmpp-session">>,
+                        _el);
       {<<"query">>, <<"jabber:iq:register">>} ->
-         decode_register(_el);
+         decode_register(<<"jabber:iq:register">>, _el);
       {<<"key">>, <<"jabber:iq:register">>} ->
-         decode_register_key(_el);
+         decode_register_key(<<"jabber:iq:register">>, _el);
       {<<"text">>, <<"jabber:iq:register">>} ->
-         decode_register_text(_el);
+         decode_register_text(<<"jabber:iq:register">>, _el);
       {<<"misc">>, <<"jabber:iq:register">>} ->
-         decode_register_misc(_el);
+         decode_register_misc(<<"jabber:iq:register">>, _el);
       {<<"date">>, <<"jabber:iq:register">>} ->
-         decode_register_date(_el);
+         decode_register_date(<<"jabber:iq:register">>, _el);
       {<<"url">>, <<"jabber:iq:register">>} ->
-         decode_register_url(_el);
+         decode_register_url(<<"jabber:iq:register">>, _el);
       {<<"phone">>, <<"jabber:iq:register">>} ->
-         decode_register_phone(_el);
+         decode_register_phone(<<"jabber:iq:register">>, _el);
       {<<"zip">>, <<"jabber:iq:register">>} ->
-         decode_register_zip(_el);
+         decode_register_zip(<<"jabber:iq:register">>, _el);
       {<<"state">>, <<"jabber:iq:register">>} ->
-         decode_register_state(_el);
+         decode_register_state(<<"jabber:iq:register">>, _el);
       {<<"city">>, <<"jabber:iq:register">>} ->
-         decode_register_city(_el);
+         decode_register_city(<<"jabber:iq:register">>, _el);
       {<<"address">>, <<"jabber:iq:register">>} ->
-         decode_register_address(_el);
+         decode_register_address(<<"jabber:iq:register">>, _el);
       {<<"email">>, <<"jabber:iq:register">>} ->
-         decode_register_email(_el);
+         decode_register_email(<<"jabber:iq:register">>, _el);
       {<<"last">>, <<"jabber:iq:register">>} ->
-         decode_register_last(_el);
+         decode_register_last(<<"jabber:iq:register">>, _el);
       {<<"first">>, <<"jabber:iq:register">>} ->
-         decode_register_first(_el);
+         decode_register_first(<<"jabber:iq:register">>, _el);
       {<<"name">>, <<"jabber:iq:register">>} ->
-         decode_register_name(_el);
+         decode_register_name(<<"jabber:iq:register">>, _el);
       {<<"password">>, <<"jabber:iq:register">>} ->
-         decode_register_password(_el);
+         decode_register_password(<<"jabber:iq:register">>, _el);
       {<<"nick">>, <<"jabber:iq:register">>} ->
-         decode_register_nick(_el);
+         decode_register_nick(<<"jabber:iq:register">>, _el);
       {<<"username">>, <<"jabber:iq:register">>} ->
-         decode_register_username(_el);
+         decode_register_username(<<"jabber:iq:register">>, _el);
       {<<"instructions">>, <<"jabber:iq:register">>} ->
-         decode_register_instructions(_el);
+         decode_register_instructions(<<"jabber:iq:register">>,
+                                      _el);
       {<<"remove">>, <<"jabber:iq:register">>} ->
-         decode_register_remove(_el);
+         decode_register_remove(<<"jabber:iq:register">>, _el);
       {<<"registered">>, <<"jabber:iq:register">>} ->
-         decode_register_registered(_el);
+         decode_register_registered(<<"jabber:iq:register">>,
+                                    _el);
       {<<"register">>,
        <<"http://jabber.org/features/iq-register">>} ->
-         decode_feature_register(_el);
+         decode_feature_register(<<"http://jabber.org/features/iq-register">>,
+                                 _el);
       {<<"c">>, <<"http://jabber.org/protocol/caps">>} ->
-         decode_caps(_el);
-      {<<"ack">>, <<"p1:ack">>} -> decode_p1_ack(_el);
+         decode_caps(<<"http://jabber.org/protocol/caps">>, _el);
+      {<<"ack">>, <<"p1:ack">>} ->
+         decode_p1_ack(<<"p1:ack">>, _el);
       {<<"rebind">>, <<"p1:rebind">>} ->
-         decode_p1_rebind(_el);
-      {<<"push">>, <<"p1:push">>} -> decode_p1_push(_el);
+         decode_p1_rebind(<<"p1:rebind">>, _el);
+      {<<"push">>, <<"p1:push">>} ->
+         decode_p1_push(<<"p1:push">>, _el);
       {<<"stream:features">>,
        <<"http://etherx.jabber.org/streams">>} ->
-         decode_stream_features(_el);
+         decode_stream_features(<<"http://etherx.jabber.org/streams">>,
+                                _el);
       {<<"compression">>,
        <<"http://jabber.org/features/compress">>} ->
-         decode_compression(_el);
+         decode_compression(<<"http://jabber.org/features/compress">>,
+                            _el);
       {<<"method">>,
        <<"http://jabber.org/features/compress">>} ->
-         decode_compression_method(_el);
+         decode_compression_method(<<"http://jabber.org/features/compress">>,
+                                   _el);
       {<<"compressed">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compressed(_el);
+         decode_compressed(<<"http://jabber.org/protocol/compress">>,
+                           _el);
       {<<"compress">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress(_el);
+         decode_compress(<<"http://jabber.org/protocol/compress">>,
+                         _el);
       {<<"method">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_method(_el);
+         decode_compress_method(<<"http://jabber.org/protocol/compress">>,
+                                _el);
       {<<"failure">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure(_el);
+         decode_compress_failure(<<"http://jabber.org/protocol/compress">>,
+                                 _el);
       {<<"unsupported-method">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_unsupported_method(_el);
+         decode_compress_failure_unsupported_method(<<"http://jabber.org/protocol/compress">>,
+                                                    _el);
       {<<"processing-failed">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_processing_failed(_el);
+         decode_compress_failure_processing_failed(<<"http://jabber.org/protocol/compress">>,
+                                                   _el);
       {<<"setup-failed">>,
        <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_setup_failed(_el);
+         decode_compress_failure_setup_failed(<<"http://jabber.org/protocol/compress">>,
+                                              _el);
       {<<"failure">>,
        <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_failure(_el);
+         decode_starttls_failure(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
+                                 _el);
       {<<"proceed">>,
        <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_proceed(_el);
+         decode_starttls_proceed(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
+                                 _el);
       {<<"starttls">>,
        <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls(_el);
+         decode_starttls(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
+                         _el);
       {<<"required">>,
        <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_required(_el);
+         decode_starttls_required(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
+                                  _el);
       {<<"mechanisms">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_mechanisms(_el);
+         decode_sasl_mechanisms(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                _el);
       {<<"mechanism">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_mechanism(_el);
+         decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                               _el);
       {<<"failure">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure(_el);
+         decode_sasl_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                             _el);
       {<<"temporary-auth-failure">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_temporary_auth_failure(_el);
+         decode_sasl_failure_temporary_auth_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                    _el);
       {<<"not-authorized">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_not_authorized(_el);
+         decode_sasl_failure_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                            _el);
       {<<"mechanism-too-weak">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_mechanism_too_weak(_el);
+         decode_sasl_failure_mechanism_too_weak(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                _el);
       {<<"malformed-request">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_malformed_request(_el);
+         decode_sasl_failure_malformed_request(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                               _el);
       {<<"invalid-mechanism">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_invalid_mechanism(_el);
+         decode_sasl_failure_invalid_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                               _el);
       {<<"invalid-authzid">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_invalid_authzid(_el);
+         decode_sasl_failure_invalid_authzid(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                             _el);
       {<<"incorrect-encoding">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_incorrect_encoding(_el);
+         decode_sasl_failure_incorrect_encoding(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                _el);
       {<<"encryption-required">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_encryption_required(_el);
+         decode_sasl_failure_encryption_required(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                 _el);
       {<<"credentials-expired">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_credentials_expired(_el);
+         decode_sasl_failure_credentials_expired(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                 _el);
       {<<"account-disabled">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_account_disabled(_el);
+         decode_sasl_failure_account_disabled(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                              _el);
       {<<"aborted">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_aborted(_el);
+         decode_sasl_failure_aborted(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                     _el);
       {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_text(_el);
+         decode_sasl_failure_text(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                  _el);
       {<<"success">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_success(_el);
+         decode_sasl_success(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                             _el);
       {<<"response">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_response(_el);
+         decode_sasl_response(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                              _el);
       {<<"challenge">>,
        <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_challenge(_el);
+         decode_sasl_challenge(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                               _el);
       {<<"abort">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_abort(_el);
+         decode_sasl_abort(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                           _el);
       {<<"auth">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_auth(_el);
+         decode_sasl_auth(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                          _el);
       {<<"bind">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind(_el);
+         decode_bind(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
+                     _el);
       {<<"resource">>,
        <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind_resource(_el);
+         decode_bind_resource(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
+                              _el);
       {<<"jid">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind_jid(_el);
-      {<<"error">>, <<"jabber:client">>} -> decode_error(_el);
+         decode_bind_jid(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
+                         _el);
+      {<<"error">>, <<"jabber:client">>} ->
+         decode_error(<<"jabber:client">>, _el);
       {<<"text">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_text(_el);
+         decode_error_text(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                           _el);
       {<<"unexpected-request">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_unexpected_request(_el);
+         decode_error_unexpected_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                         _el);
       {<<"undefined-condition">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_undefined_condition(_el);
+         decode_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                          _el);
       {<<"subscription-required">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_subscription_required(_el);
+         decode_error_subscription_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                            _el);
       {<<"service-unavailable">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_service_unavailable(_el);
+         decode_error_service_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                          _el);
       {<<"resource-constraint">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_resource_constraint(_el);
+         decode_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                          _el);
       {<<"remote-server-timeout">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_remote_server_timeout(_el);
+         decode_error_remote_server_timeout(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                            _el);
       {<<"remote-server-not-found">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_remote_server_not_found(_el);
+         decode_error_remote_server_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                              _el);
       {<<"registration-required">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_registration_required(_el);
+         decode_error_registration_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                            _el);
       {<<"redirect">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_redirect(_el);
+         decode_error_redirect(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                               _el);
       {<<"recipient-unavailable">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_recipient_unavailable(_el);
+         decode_error_recipient_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                            _el);
       {<<"policy-violation">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_policy_violation(_el);
+         decode_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                       _el);
       {<<"not-authorized">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_authorized(_el);
+         decode_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                     _el);
       {<<"not-allowed">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_allowed(_el);
+         decode_error_not_allowed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                  _el);
       {<<"not-acceptable">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_acceptable(_el);
+         decode_error_not_acceptable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                     _el);
       {<<"jid-malformed">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_jid_malformed(_el);
+         decode_error_jid_malformed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                    _el);
       {<<"item-not-found">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_item_not_found(_el);
+         decode_error_item_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                     _el);
       {<<"internal-server-error">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_internal_server_error(_el);
+         decode_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                            _el);
       {<<"gone">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_gone(_el);
+         decode_error_gone(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                           _el);
       {<<"forbidden">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_forbidden(_el);
+         decode_error_forbidden(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                _el);
       {<<"feature-not-implemented">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_feature_not_implemented(_el);
+         decode_error_feature_not_implemented(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                              _el);
       {<<"conflict">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_conflict(_el);
+         decode_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                               _el);
       {<<"bad-request">>,
        <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_bad_request(_el);
+         decode_error_bad_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+                                  _el);
       {<<"presence">>, <<"jabber:client">>} ->
-         decode_presence(_el);
+         decode_presence(<<"jabber:client">>, _el);
       {<<"priority">>, <<"jabber:client">>} ->
-         decode_presence_priority(_el);
+         decode_presence_priority(<<"jabber:client">>, _el);
       {<<"status">>, <<"jabber:client">>} ->
-         decode_presence_status(_el);
+         decode_presence_status(<<"jabber:client">>, _el);
       {<<"show">>, <<"jabber:client">>} ->
-         decode_presence_show(_el);
+         decode_presence_show(<<"jabber:client">>, _el);
       {<<"message">>, <<"jabber:client">>} ->
-         decode_message(_el);
+         decode_message(<<"jabber:client">>, _el);
       {<<"thread">>, <<"jabber:client">>} ->
-         decode_message_thread(_el);
+         decode_message_thread(<<"jabber:client">>, _el);
       {<<"body">>, <<"jabber:client">>} ->
-         decode_message_body(_el);
+         decode_message_body(<<"jabber:client">>, _el);
       {<<"subject">>, <<"jabber:client">>} ->
-         decode_message_subject(_el);
-      {<<"iq">>, <<"jabber:client">>} -> decode_iq(_el);
+         decode_message_subject(<<"jabber:client">>, _el);
+      {<<"iq">>, <<"jabber:client">>} ->
+         decode_iq(<<"jabber:client">>, _el);
       {<<"query">>, <<"http://jabber.org/protocol/stats">>} ->
-         decode_stats(_el);
+         decode_stats(<<"http://jabber.org/protocol/stats">>,
+                      _el);
       {<<"stat">>, <<"http://jabber.org/protocol/stats">>} ->
-         decode_stat(_el);
+         decode_stat(<<"http://jabber.org/protocol/stats">>,
+                     _el);
       {<<"error">>, <<"http://jabber.org/protocol/stats">>} ->
-         decode_stat_error(_el);
+         decode_stat_error(<<"http://jabber.org/protocol/stats">>,
+                           _el);
       {<<"storage">>, <<"storage:bookmarks">>} ->
-         decode_bookmarks_storage(_el);
+         decode_bookmarks_storage(<<"storage:bookmarks">>, _el);
       {<<"url">>, <<"storage:bookmarks">>} ->
-         decode_bookmark_url(_el);
+         decode_bookmark_url(<<"storage:bookmarks">>, _el);
       {<<"conference">>, <<"storage:bookmarks">>} ->
-         decode_bookmark_conference(_el);
+         decode_bookmark_conference(<<"storage:bookmarks">>,
+                                    _el);
       {<<"password">>, <<"storage:bookmarks">>} ->
-         decode_conference_password(_el);
+         decode_conference_password(<<"storage:bookmarks">>,
+                                    _el);
       {<<"nick">>, <<"storage:bookmarks">>} ->
-         decode_conference_nick(_el);
+         decode_conference_nick(<<"storage:bookmarks">>, _el);
       {<<"query">>, <<"jabber:iq:private">>} ->
-         decode_private(_el);
+         decode_private(<<"jabber:iq:private">>, _el);
       {<<"query">>,
        <<"http://jabber.org/protocol/disco#items">>} ->
-         decode_disco_items(_el);
+         decode_disco_items(<<"http://jabber.org/protocol/disco#items">>,
+                            _el);
       {<<"item">>,
        <<"http://jabber.org/protocol/disco#items">>} ->
-         decode_disco_item(_el);
+         decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
+                           _el);
       {<<"query">>,
        <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_info(_el);
+         decode_disco_info(<<"http://jabber.org/protocol/disco#info">>,
+                           _el);
       {<<"feature">>,
        <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_feature(_el);
+         decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
+                              _el);
       {<<"identity">>,
        <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_identity(_el);
+         decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
+                               _el);
       {<<"blocklist">>, <<"urn:xmpp:blocking">>} ->
-         decode_block_list(_el);
+         decode_block_list(<<"urn:xmpp:blocking">>, _el);
       {<<"unblock">>, <<"urn:xmpp:blocking">>} ->
-         decode_unblock(_el);
+         decode_unblock(<<"urn:xmpp:blocking">>, _el);
       {<<"block">>, <<"urn:xmpp:blocking">>} ->
-         decode_block(_el);
+         decode_block(<<"urn:xmpp:blocking">>, _el);
       {<<"item">>, <<"urn:xmpp:blocking">>} ->
-         decode_block_item(_el);
+         decode_block_item(<<"urn:xmpp:blocking">>, _el);
       {<<"query">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy(_el);
+         decode_privacy(<<"jabber:iq:privacy">>, _el);
       {<<"active">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_active_list(_el);
+         decode_privacy_active_list(<<"jabber:iq:privacy">>,
+                                    _el);
       {<<"default">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_default_list(_el);
+         decode_privacy_default_list(<<"jabber:iq:privacy">>,
+                                     _el);
       {<<"list">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_list(_el);
+         decode_privacy_list(<<"jabber:iq:privacy">>, _el);
       {<<"item">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_item(_el);
+         decode_privacy_item(<<"jabber:iq:privacy">>, _el);
       {<<"presence-out">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_presence_out(_el);
+         decode_privacy_presence_out(<<"jabber:iq:privacy">>,
+                                     _el);
       {<<"presence-in">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_presence_in(_el);
+         decode_privacy_presence_in(<<"jabber:iq:privacy">>,
+                                    _el);
       {<<"iq">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_iq(_el);
+         decode_privacy_iq(<<"jabber:iq:privacy">>, _el);
       {<<"message">>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_message(_el);
+         decode_privacy_message(<<"jabber:iq:privacy">>, _el);
       {<<"query">>, <<"jabber:iq:roster">>} ->
-         decode_roster(_el);
+         decode_roster(<<"jabber:iq:roster">>, _el);
       {<<"item">>, <<"jabber:iq:roster">>} ->
-         decode_roster_item(_el);
+         decode_roster_item(<<"jabber:iq:roster">>, _el);
       {<<"group">>, <<"jabber:iq:roster">>} ->
-         decode_roster_group(_el);
+         decode_roster_group(<<"jabber:iq:roster">>, _el);
       {<<"query">>, <<"jabber:iq:version">>} ->
-         decode_version(_el);
+         decode_version(<<"jabber:iq:version">>, _el);
       {<<"os">>, <<"jabber:iq:version">>} ->
-         decode_version_os(_el);
+         decode_version_os(<<"jabber:iq:version">>, _el);
       {<<"version">>, <<"jabber:iq:version">>} ->
-         decode_version_ver(_el);
+         decode_version_ver(<<"jabber:iq:version">>, _el);
       {<<"name">>, <<"jabber:iq:version">>} ->
-         decode_version_name(_el);
-      {<<"query">>, <<"jabber:iq:last">>} -> decode_last(_el);
+         decode_version_name(<<"jabber:iq:version">>, _el);
+      {<<"query">>, <<"jabber:iq:last">>} ->
+         decode_last(<<"jabber:iq:last">>, _el);
       {_name, _xmlns} ->
          erlang:error({xmpp_codec, {unknown_tag, _name, _xmlns}})
     end.
 
 is_known_tag({xmlel, _name, _attrs, _} = _el) ->
     case {_name, get_attr(<<"xmlns">>, _attrs)} of
+      {<<"failed">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"failed">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"a">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"a">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"r">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"r">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"resumed">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"resumed">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"resume">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"resume">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"enabled">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"enabled">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"enable">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"enable">>, <<"urn:xmpp:sm:3">>} -> true;
+      {<<"sm">>, <<"urn:xmpp:sm:2">>} -> true;
       {<<"sm">>, <<"urn:xmpp:sm:3">>} -> true;
       {<<"sent">>, <<"urn:xmpp:carbons:2">>} -> true;
       {<<"received">>, <<"urn:xmpp:carbons:2">>} -> true;
@@ -1307,381 +1506,373 @@ is_known_tag({xmlel, _name, _attrs, _} = _el) ->
       _ -> false
     end.
 
-encode({sm_failed, _} = Failed) ->
-    encode_sm_failed(Failed,
-                    [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_a, _} = A) ->
-    encode_sm_a(A, [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_r} = R) ->
-    encode_sm_r(R, [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_resumed, _, _} = Resumed) ->
-    encode_sm_resumed(Resumed,
-                     [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_resume, _, _} = Resume) ->
-    encode_sm_resume(Resume,
-                    [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_enabled, _, _, _, _} = Enabled) ->
-    encode_sm_enabled(Enabled,
-                     [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({sm_enable, _, _} = Enable) ->
-    encode_sm_enable(Enable,
-                    [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({feature_sm} = Sm) ->
-    encode_feature_sm(Sm,
-                     [{<<"xmlns">>, <<"urn:xmpp:sm:3">>}]);
-encode({carbons_sent, _} = Sent) ->
-    encode_carbons_sent(Sent,
-                       [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
-encode({carbons_received, _} = Received) ->
-    encode_carbons_received(Received,
-                           [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
-encode({carbons_private} = Private) ->
-    encode_carbons_private(Private,
-                          [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
-encode({carbons_enable} = Enable) ->
-    encode_carbons_enable(Enable,
-                         [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
-encode({carbons_disable} = Disable) ->
-    encode_carbons_disable(Disable,
-                          [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
-encode({forwarded, _, _} = Forwarded) ->
-    encode_forwarded(Forwarded,
-                    [{<<"xmlns">>, <<"urn:xmpp:forward:0">>}]);
-encode({muc, _, _} = X) ->
-    encode_muc(X,
-              [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
-encode({muc_admin, _} = Query) ->
-    encode_muc_admin(Query,
-                    [{<<"xmlns">>,
-                      <<"http://jabber.org/protocol/muc#admin">>}]);
-encode({muc_owner, _, _} = Query) ->
-    encode_muc_owner(Query,
+encode({last, _, _} = Query) ->
+    encode_last(Query,
+               [{<<"xmlns">>, <<"jabber:iq:last">>}]);
+encode({version, _, _, _} = Query) ->
+    encode_version(Query,
+                  [{<<"xmlns">>, <<"jabber:iq:version">>}]);
+encode({roster_item, _, _, _, _, _} = Item) ->
+    encode_roster_item(Item,
+                      [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
+encode({roster, _, _} = Query) ->
+    encode_roster(Query,
+                 [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
+encode({privacy_item, _, _, _, _, _} = Item) ->
+    encode_privacy_item(Item,
+                       [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({privacy_list, _, _} = List) ->
+    encode_privacy_list(List,
+                       [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({privacy, _, _, _} = Query) ->
+    encode_privacy(Query,
+                  [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({block, _} = Block) ->
+    encode_block(Block,
+                [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({unblock, _} = Unblock) ->
+    encode_unblock(Unblock,
+                  [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({block_list} = Blocklist) ->
+    encode_block_list(Blocklist,
+                     [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({identity, _, _, _, _} = Identity) ->
+    encode_disco_identity(Identity,
+                         [{<<"xmlns">>,
+                           <<"http://jabber.org/protocol/disco#info">>}]);
+encode({disco_info, _, _, _, _} = Query) ->
+    encode_disco_info(Query,
+                     [{<<"xmlns">>,
+                       <<"http://jabber.org/protocol/disco#info">>}]);
+encode({disco_item, _, _, _} = Item) ->
+    encode_disco_item(Item,
+                     [{<<"xmlns">>,
+                       <<"http://jabber.org/protocol/disco#items">>}]);
+encode({disco_items, _, _} = Query) ->
+    encode_disco_items(Query,
+                      [{<<"xmlns">>,
+                        <<"http://jabber.org/protocol/disco#items">>}]);
+encode({private, _} = Query) ->
+    encode_private(Query,
+                  [{<<"xmlns">>, <<"jabber:iq:private">>}]);
+encode({bookmark_conference, _, _, _, _, _} =
+          Conference) ->
+    encode_bookmark_conference(Conference,
+                              [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({bookmark_url, _, _} = Url) ->
+    encode_bookmark_url(Url,
+                       [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({bookmark_storage, _, _} = Storage) ->
+    encode_bookmarks_storage(Storage,
+                            [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({stat, _, _, _, _} = Stat) ->
+    encode_stat(Stat,
+               [{<<"xmlns">>,
+                 <<"http://jabber.org/protocol/stats">>}]);
+encode({stats, _} = Query) ->
+    encode_stats(Query,
+                [{<<"xmlns">>,
+                  <<"http://jabber.org/protocol/stats">>}]);
+encode({iq, _, _, _, _, _, _, _} = Iq) ->
+    encode_iq(Iq, [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({message, _, _, _, _, _, _, _, _, _, _} =
+          Message) ->
+    encode_message(Message,
+                  [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({presence, _, _, _, _, _, _, _, _, _, _} =
+          Presence) ->
+    encode_presence(Presence,
+                   [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({gone, _} = Gone) ->
+    encode_error_gone(Gone,
+                     [{<<"xmlns">>,
+                       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
+encode({redirect, _} = Redirect) ->
+    encode_error_redirect(Redirect,
+                         [{<<"xmlns">>,
+                           <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
+encode({error, _, _, _, _} = Error) ->
+    encode_error(Error,
+                [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({bind, _, _} = Bind) ->
+    encode_bind(Bind,
+               [{<<"xmlns">>,
+                 <<"urn:ietf:params:xml:ns:xmpp-bind">>}]);
+encode({sasl_auth, _, _} = Auth) ->
+    encode_sasl_auth(Auth,
                     [{<<"xmlns">>,
-                      <<"http://jabber.org/protocol/muc#owner">>}]);
-encode({muc_owner_destroy, _, _, _} = Destroy) ->
-    encode_muc_owner_destroy(Destroy,
-                            [{<<"xmlns">>,
-                              <<"http://jabber.org/protocol/muc#owner">>}]);
-encode({muc_user, _, _, _, _, _, _} = X) ->
-    encode_muc_user(X,
-                   [{<<"xmlns">>,
-                     <<"http://jabber.org/protocol/muc#user">>}]);
-encode({muc_invite, _, _, _} = Invite) ->
-    encode_muc_user_invite(Invite,
+                      <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_abort} = Abort) ->
+    encode_sasl_abort(Abort,
+                     [{<<"xmlns">>,
+                       <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_challenge, _} = Challenge) ->
+    encode_sasl_challenge(Challenge,
+                         [{<<"xmlns">>,
+                           <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_response, _} = Response) ->
+    encode_sasl_response(Response,
+                        [{<<"xmlns">>,
+                          <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_success, _} = Success) ->
+    encode_sasl_success(Success,
+                       [{<<"xmlns">>,
+                         <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_failure, _, _} = Failure) ->
+    encode_sasl_failure(Failure,
+                       [{<<"xmlns">>,
+                         <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_mechanisms, _} = Mechanisms) ->
+    encode_sasl_mechanisms(Mechanisms,
                           [{<<"xmlns">>,
-                            <<"http://jabber.org/protocol/muc#user">>}]);
-encode({muc_user_destroy, _, _} = Destroy) ->
-    encode_muc_user_destroy(Destroy,
+                            <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({starttls, _} = Starttls) ->
+    encode_starttls(Starttls,
+                   [{<<"xmlns">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({starttls_proceed} = Proceed) ->
+    encode_starttls_proceed(Proceed,
                            [{<<"xmlns">>,
-                             <<"http://jabber.org/protocol/muc#user">>}]);
-encode({muc_decline, _, _, _} = Decline) ->
-    encode_muc_user_decline(Decline,
+                             <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({starttls_failure} = Failure) ->
+    encode_starttls_failure(Failure,
                            [{<<"xmlns">>,
-                             <<"http://jabber.org/protocol/muc#user">>}]);
-encode({muc_history, _, _, _, _} = History) ->
-    encode_muc_history(History,
-                      [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
-encode({bytestreams, _, _, _, _, _, _} = Query) ->
-    encode_bytestreams(Query,
+                             <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({compress_failure, _} = Failure) ->
+    encode_compress_failure(Failure,
+                           [{<<"xmlns">>,
+                             <<"http://jabber.org/protocol/compress">>}]);
+encode({compress, _} = Compress) ->
+    encode_compress(Compress,
+                   [{<<"xmlns">>,
+                     <<"http://jabber.org/protocol/compress">>}]);
+encode({compressed} = Compressed) ->
+    encode_compressed(Compressed,
+                     [{<<"xmlns">>,
+                       <<"http://jabber.org/protocol/compress">>}]);
+encode({compression, _} = Compression) ->
+    encode_compression(Compression,
                       [{<<"xmlns">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}]);
-encode({streamhost, _, _, _} = Streamhost) ->
-    encode_bytestreams_streamhost(Streamhost,
-                                 [{<<"xmlns">>,
-                                   <<"http://jabber.org/protocol/bytestreams">>}]);
-encode({legacy_delay, _, _} = X) ->
-    encode_legacy_delay(X,
-                       [{<<"xmlns">>, <<"jabber:x:delay">>}]);
-encode({delay, _, _} = Delay) ->
-    encode_delay(Delay,
-                [{<<"xmlns">>, <<"urn:xmpp:delay">>}]);
-encode({shim, _} = Headers) ->
-    encode_shim_headers(Headers,
-                       [{<<"xmlns">>, <<"http://jabber.org/protocol/shim">>}]);
-encode({pubsub, _, _, _, _, _, _, _, _} = Pubsub) ->
-    encode_pubsub(Pubsub,
-                 [{<<"xmlns">>,
-                   <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_retract, _, _, _} = Retract) ->
-    encode_pubsub_retract(Retract,
-                         [{<<"xmlns">>,
-                           <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_options, _, _, _, _} = Options) ->
-    encode_pubsub_options(Options,
-                         [{<<"xmlns">>,
-                           <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_publish, _, _} = Publish) ->
-    encode_pubsub_publish(Publish,
-                         [{<<"xmlns">>,
-                           <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_unsubscribe, _, _, _} = Unsubscribe) ->
-    encode_pubsub_unsubscribe(Unsubscribe,
-                             [{<<"xmlns">>,
-                               <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_subscribe, _, _} = Subscribe) ->
-    encode_pubsub_subscribe(Subscribe,
+                        <<"http://jabber.org/features/compress">>}]);
+encode({stream_features, _} = Stream_features) ->
+    encode_stream_features(Stream_features,
+                          [{<<"xmlns">>,
+                            <<"http://etherx.jabber.org/streams">>}]);
+encode({p1_push} = Push) ->
+    encode_p1_push(Push, [{<<"xmlns">>, <<"p1:push">>}]);
+encode({p1_rebind} = Rebind) ->
+    encode_p1_rebind(Rebind,
+                    [{<<"xmlns">>, <<"p1:rebind">>}]);
+encode({p1_ack} = Ack) ->
+    encode_p1_ack(Ack, [{<<"xmlns">>, <<"p1:ack">>}]);
+encode({caps, _, _, _} = C) ->
+    encode_caps(C,
+               [{<<"xmlns">>, <<"http://jabber.org/protocol/caps">>}]);
+encode({feature_register} = Register) ->
+    encode_feature_register(Register,
                            [{<<"xmlns">>,
-                             <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_event, _} = Event) ->
-    encode_pubsub_event(Event,
-                       [{<<"xmlns">>,
-                         <<"http://jabber.org/protocol/pubsub#event">>}]);
-encode({pubsub_event_items, _, _, _} = Items) ->
-    encode_pubsub_event_items(Items,
-                             [{<<"xmlns">>,
-                               <<"http://jabber.org/protocol/pubsub#event">>}]);
-encode({pubsub_event_item, _, _, _} = Item) ->
-    encode_pubsub_event_item(Item,
-                            [{<<"xmlns">>,
-                              <<"http://jabber.org/protocol/pubsub#event">>}]);
-encode({pubsub_items, _, _, _, _} = Items) ->
-    encode_pubsub_items(Items,
+                             <<"http://jabber.org/features/iq-register">>}]);
+encode({register, _, _, _, _, _, _, _, _, _, _, _, _, _,
+       _, _, _, _, _, _, _} =
+          Query) ->
+    encode_register(Query,
+                   [{<<"xmlns">>, <<"jabber:iq:register">>}]);
+encode({session} = Session) ->
+    encode_session(Session,
+                  [{<<"xmlns">>,
+                    <<"urn:ietf:params:xml:ns:xmpp-session">>}]);
+encode({ping} = Ping) ->
+    encode_ping(Ping, [{<<"xmlns">>, <<"urn:xmpp:ping">>}]);
+encode({time, _, _} = Time) ->
+    encode_time(Time, [{<<"xmlns">>, <<"urn:xmpp:time">>}]);
+encode({'see-other-host', _} = See_other_host) ->
+    encode_stream_error_see_other_host(See_other_host,
+                                      [{<<"xmlns">>,
+                                        <<"urn:ietf:params:xml:ns:xmpp-streams">>}]);
+encode({stream_error, _, _} = Stream_error) ->
+    encode_stream_error(Stream_error,
                        [{<<"xmlns">>,
-                         <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_item, _, _} = Item) ->
-    encode_pubsub_item(Item,
-                      [{<<"xmlns">>,
-                        <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_affiliation, _, _} = Affiliation) ->
-    encode_pubsub_affiliation(Affiliation,
-                             [{<<"xmlns">>,
-                               <<"http://jabber.org/protocol/pubsub">>}]);
-encode({pubsub_subscription, _, _, _, _} =
-          Subscription) ->
-    encode_pubsub_subscription(Subscription,
-                              [{<<"xmlns">>,
-                                <<"http://jabber.org/protocol/pubsub">>}]);
-encode({xdata, _, _, _, _, _, _} = X) ->
-    encode_xdata(X, [{<<"xmlns">>, <<"jabber:x:data">>}]);
-encode({xdata_field, _, _, _, _, _, _, _} = Field) ->
-    encode_xdata_field(Field,
-                      [{<<"xmlns">>, <<"jabber:x:data">>}]);
-encode({vcard, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
-          Vcard) ->
-    encode_vcard(Vcard, [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_key, _, _} = Key) ->
-    encode_vcard_KEY(Key,
-                    [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_sound, _, _, _} = Sound) ->
-    encode_vcard_SOUND(Sound,
-                      [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_org, _, _} = Org) ->
-    encode_vcard_ORG(Org,
-                    [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_photo, _, _, _} = Photo) ->
-    encode_vcard_PHOTO(Photo,
-                      [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_logo, _, _, _} = Logo) ->
-    encode_vcard_LOGO(Logo,
-                     [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_geo, _, _} = Geo) ->
-    encode_vcard_GEO(Geo,
+                         <<"http://etherx.jabber.org/streams">>}]);
+encode({vcard_name, _, _, _, _, _} = N) ->
+    encode_vcard_N(N, [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
+       _, _} =
+          Adr) ->
+    encode_vcard_ADR(Adr,
                     [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_email, _, _, _, _, _, _} = Email) ->
-    encode_vcard_EMAIL(Email,
+encode({vcard_label, _, _, _, _, _, _, _, _} = Label) ->
+    encode_vcard_LABEL(Label,
                       [{<<"xmlns">>, <<"vcard-temp">>}]);
 encode({vcard_tel, _, _, _, _, _, _, _, _, _, _, _, _,
        _, _} =
           Tel) ->
     encode_vcard_TEL(Tel,
                     [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_label, _, _, _, _, _, _, _, _} = Label) ->
-    encode_vcard_LABEL(Label,
+encode({vcard_email, _, _, _, _, _, _} = Email) ->
+    encode_vcard_EMAIL(Email,
                       [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _} =
-          Adr) ->
-    encode_vcard_ADR(Adr,
+encode({vcard_geo, _, _} = Geo) ->
+    encode_vcard_GEO(Geo,
                     [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_name, _, _, _, _, _} = N) ->
-    encode_vcard_N(N, [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({stream_error, _, _} = Stream_error) ->
-    encode_stream_error(Stream_error,
-                       [{<<"xmlns">>,
-                         <<"http://etherx.jabber.org/streams">>}]);
-encode({'see-other-host', _} = See_other_host) ->
-    encode_stream_error_see_other_host(See_other_host,
-                                      [{<<"xmlns">>,
-                                        <<"urn:ietf:params:xml:ns:xmpp-streams">>}]);
-encode({time, _, _} = Time) ->
-    encode_time(Time, [{<<"xmlns">>, <<"urn:xmpp:time">>}]);
-encode({ping} = Ping) ->
-    encode_ping(Ping, [{<<"xmlns">>, <<"urn:xmpp:ping">>}]);
-encode({session} = Session) ->
-    encode_session(Session,
-                  [{<<"xmlns">>,
-                    <<"urn:ietf:params:xml:ns:xmpp-session">>}]);
-encode({register, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _} =
-          Query) ->
-    encode_register(Query,
-                   [{<<"xmlns">>, <<"jabber:iq:register">>}]);
-encode({feature_register} = Register) ->
-    encode_feature_register(Register,
-                           [{<<"xmlns">>,
-                             <<"http://jabber.org/features/iq-register">>}]);
-encode({caps, _, _, _} = C) ->
-    encode_caps(C,
-               [{<<"xmlns">>, <<"http://jabber.org/protocol/caps">>}]);
-encode({p1_ack} = Ack) ->
-    encode_p1_ack(Ack, [{<<"xmlns">>, <<"p1:ack">>}]);
-encode({p1_rebind} = Rebind) ->
-    encode_p1_rebind(Rebind,
-                    [{<<"xmlns">>, <<"p1:rebind">>}]);
-encode({p1_push} = Push) ->
-    encode_p1_push(Push, [{<<"xmlns">>, <<"p1:push">>}]);
-encode({stream_features, _} = Stream_features) ->
-    encode_stream_features(Stream_features,
-                          [{<<"xmlns">>,
-                            <<"http://etherx.jabber.org/streams">>}]);
-encode({compression, _} = Compression) ->
-    encode_compression(Compression,
+encode({vcard_logo, _, _, _} = Logo) ->
+    encode_vcard_LOGO(Logo,
+                     [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_photo, _, _, _} = Photo) ->
+    encode_vcard_PHOTO(Photo,
+                      [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_org, _, _} = Org) ->
+    encode_vcard_ORG(Org,
+                    [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_sound, _, _, _} = Sound) ->
+    encode_vcard_SOUND(Sound,
+                      [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_key, _, _} = Key) ->
+    encode_vcard_KEY(Key,
+                    [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+       _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
+          Vcard) ->
+    encode_vcard(Vcard, [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({xdata_field, _, _, _, _, _, _, _} = Field) ->
+    encode_xdata_field(Field,
+                      [{<<"xmlns">>, <<"jabber:x:data">>}]);
+encode({xdata, _, _, _, _, _, _} = X) ->
+    encode_xdata(X, [{<<"xmlns">>, <<"jabber:x:data">>}]);
+encode({pubsub_subscription, _, _, _, _} =
+          Subscription) ->
+    encode_pubsub_subscription(Subscription,
+                              [{<<"xmlns">>,
+                                <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_affiliation, _, _} = Affiliation) ->
+    encode_pubsub_affiliation(Affiliation,
+                             [{<<"xmlns">>,
+                               <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_item, _, _} = Item) ->
+    encode_pubsub_item(Item,
                       [{<<"xmlns">>,
-                        <<"http://jabber.org/features/compress">>}]);
-encode({compressed} = Compressed) ->
-    encode_compressed(Compressed,
-                     [{<<"xmlns">>,
-                       <<"http://jabber.org/protocol/compress">>}]);
-encode({compress, _} = Compress) ->
-    encode_compress(Compress,
-                   [{<<"xmlns">>,
-                     <<"http://jabber.org/protocol/compress">>}]);
-encode({compress_failure, _} = Failure) ->
-    encode_compress_failure(Failure,
-                           [{<<"xmlns">>,
-                             <<"http://jabber.org/protocol/compress">>}]);
-encode({starttls_failure} = Failure) ->
-    encode_starttls_failure(Failure,
-                           [{<<"xmlns">>,
-                             <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
-encode({starttls_proceed} = Proceed) ->
-    encode_starttls_proceed(Proceed,
-                           [{<<"xmlns">>,
-                             <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
-encode({starttls, _} = Starttls) ->
-    encode_starttls(Starttls,
-                   [{<<"xmlns">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
-encode({sasl_mechanisms, _} = Mechanisms) ->
-    encode_sasl_mechanisms(Mechanisms,
-                          [{<<"xmlns">>,
-                            <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_failure, _, _} = Failure) ->
-    encode_sasl_failure(Failure,
+                        <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_items, _, _, _, _} = Items) ->
+    encode_pubsub_items(Items,
                        [{<<"xmlns">>,
-                         <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_success, _} = Success) ->
-    encode_sasl_success(Success,
+                         <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_event_item, _, _, _} = Item) ->
+    encode_pubsub_event_item(Item,
+                            [{<<"xmlns">>,
+                              <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_event_items, _, _, _} = Items) ->
+    encode_pubsub_event_items(Items,
+                             [{<<"xmlns">>,
+                               <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_event, _} = Event) ->
+    encode_pubsub_event(Event,
                        [{<<"xmlns">>,
-                         <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_response, _} = Response) ->
-    encode_sasl_response(Response,
-                        [{<<"xmlns">>,
-                          <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_challenge, _} = Challenge) ->
-    encode_sasl_challenge(Challenge,
-                         [{<<"xmlns">>,
-                           <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_abort} = Abort) ->
-    encode_sasl_abort(Abort,
-                     [{<<"xmlns">>,
-                       <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({sasl_auth, _, _} = Auth) ->
-    encode_sasl_auth(Auth,
-                    [{<<"xmlns">>,
-                      <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
-encode({bind, _, _} = Bind) ->
-    encode_bind(Bind,
-               [{<<"xmlns">>,
-                 <<"urn:ietf:params:xml:ns:xmpp-bind">>}]);
-encode({error, _, _, _, _} = Error) ->
-    encode_error(Error,
-                [{<<"xmlns">>, <<"jabber:client">>}]);
-encode({redirect, _} = Redirect) ->
-    encode_error_redirect(Redirect,
+                         <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_subscribe, _, _} = Subscribe) ->
+    encode_pubsub_subscribe(Subscribe,
+                           [{<<"xmlns">>,
+                             <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_unsubscribe, _, _, _} = Unsubscribe) ->
+    encode_pubsub_unsubscribe(Unsubscribe,
+                             [{<<"xmlns">>,
+                               <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_publish, _, _} = Publish) ->
+    encode_pubsub_publish(Publish,
                          [{<<"xmlns">>,
-                           <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
-encode({gone, _} = Gone) ->
-    encode_error_gone(Gone,
-                     [{<<"xmlns">>,
-                       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
-encode({presence, _, _, _, _, _, _, _, _, _, _} =
-          Presence) ->
-    encode_presence(Presence,
-                   [{<<"xmlns">>, <<"jabber:client">>}]);
-encode({message, _, _, _, _, _, _, _, _, _, _} =
-          Message) ->
-    encode_message(Message,
-                  [{<<"xmlns">>, <<"jabber:client">>}]);
-encode({iq, _, _, _, _, _, _, _} = Iq) ->
-    encode_iq(Iq, [{<<"xmlns">>, <<"jabber:client">>}]);
-encode({stats, _} = Query) ->
-    encode_stats(Query,
-                [{<<"xmlns">>,
-                  <<"http://jabber.org/protocol/stats">>}]);
-encode({stat, _, _, _, _} = Stat) ->
-    encode_stat(Stat,
-               [{<<"xmlns">>,
-                 <<"http://jabber.org/protocol/stats">>}]);
-encode({bookmark_storage, _, _} = Storage) ->
-    encode_bookmarks_storage(Storage,
-                            [{<<"xmlns">>, <<"storage:bookmarks">>}]);
-encode({bookmark_url, _, _} = Url) ->
-    encode_bookmark_url(Url,
-                       [{<<"xmlns">>, <<"storage:bookmarks">>}]);
-encode({bookmark_conference, _, _, _, _, _} =
-          Conference) ->
-    encode_bookmark_conference(Conference,
-                              [{<<"xmlns">>, <<"storage:bookmarks">>}]);
-encode({private, _} = Query) ->
-    encode_private(Query,
-                  [{<<"xmlns">>, <<"jabber:iq:private">>}]);
-encode({disco_items, _, _} = Query) ->
-    encode_disco_items(Query,
-                      [{<<"xmlns">>,
-                        <<"http://jabber.org/protocol/disco#items">>}]);
-encode({disco_item, _, _, _} = Item) ->
-    encode_disco_item(Item,
-                     [{<<"xmlns">>,
-                       <<"http://jabber.org/protocol/disco#items">>}]);
-encode({disco_info, _, _, _, _} = Query) ->
-    encode_disco_info(Query,
-                     [{<<"xmlns">>,
-                       <<"http://jabber.org/protocol/disco#info">>}]);
-encode({identity, _, _, _, _} = Identity) ->
-    encode_disco_identity(Identity,
+                           <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_options, _, _, _, _} = Options) ->
+    encode_pubsub_options(Options,
                          [{<<"xmlns">>,
-                           <<"http://jabber.org/protocol/disco#info">>}]);
-encode({block_list} = Blocklist) ->
-    encode_block_list(Blocklist,
-                     [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
-encode({unblock, _} = Unblock) ->
-    encode_unblock(Unblock,
-                  [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
-encode({block, _} = Block) ->
-    encode_block(Block,
-                [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
-encode({privacy, _, _, _} = Query) ->
-    encode_privacy(Query,
-                  [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
-encode({privacy_list, _, _} = List) ->
-    encode_privacy_list(List,
-                       [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
-encode({privacy_item, _, _, _, _, _} = Item) ->
-    encode_privacy_item(Item,
-                       [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
-encode({roster, _, _} = Query) ->
-    encode_roster(Query,
-                 [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
-encode({roster_item, _, _, _, _, _} = Item) ->
-    encode_roster_item(Item,
-                      [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
-encode({version, _, _, _} = Query) ->
-    encode_version(Query,
-                  [{<<"xmlns">>, <<"jabber:iq:version">>}]);
-encode({last, _, _} = Query) ->
-    encode_last(Query,
-               [{<<"xmlns">>, <<"jabber:iq:last">>}]).
+                           <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_retract, _, _, _} = Retract) ->
+    encode_pubsub_retract(Retract,
+                         [{<<"xmlns">>,
+                           <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub, _, _, _, _, _, _, _, _} = Pubsub) ->
+    encode_pubsub(Pubsub,
+                 [{<<"xmlns">>,
+                   <<"http://jabber.org/protocol/pubsub">>}]);
+encode({shim, _} = Headers) ->
+    encode_shim_headers(Headers,
+                       [{<<"xmlns">>, <<"http://jabber.org/protocol/shim">>}]);
+encode({delay, _, _} = Delay) ->
+    encode_delay(Delay,
+                [{<<"xmlns">>, <<"urn:xmpp:delay">>}]);
+encode({legacy_delay, _, _} = X) ->
+    encode_legacy_delay(X,
+                       [{<<"xmlns">>, <<"jabber:x:delay">>}]);
+encode({streamhost, _, _, _} = Streamhost) ->
+    encode_bytestreams_streamhost(Streamhost,
+                                 [{<<"xmlns">>,
+                                   <<"http://jabber.org/protocol/bytestreams">>}]);
+encode({bytestreams, _, _, _, _, _, _} = Query) ->
+    encode_bytestreams(Query,
+                      [{<<"xmlns">>,
+                        <<"http://jabber.org/protocol/bytestreams">>}]);
+encode({muc_history, _, _, _, _} = History) ->
+    encode_muc_history(History,
+                      [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
+encode({muc_decline, _, _, _} = Decline) ->
+    encode_muc_user_decline(Decline,
+                           [{<<"xmlns">>,
+                             <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_user_destroy, _, _} = Destroy) ->
+    encode_muc_user_destroy(Destroy,
+                           [{<<"xmlns">>,
+                             <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_invite, _, _, _} = Invite) ->
+    encode_muc_user_invite(Invite,
+                          [{<<"xmlns">>,
+                            <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_user, _, _, _, _, _, _} = X) ->
+    encode_muc_user(X,
+                   [{<<"xmlns">>,
+                     <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_owner_destroy, _, _, _} = Destroy) ->
+    encode_muc_owner_destroy(Destroy,
+                            [{<<"xmlns">>,
+                              <<"http://jabber.org/protocol/muc#owner">>}]);
+encode({muc_owner, _, _} = Query) ->
+    encode_muc_owner(Query,
+                    [{<<"xmlns">>,
+                      <<"http://jabber.org/protocol/muc#owner">>}]);
+encode({muc_admin, _} = Query) ->
+    encode_muc_admin(Query,
+                    [{<<"xmlns">>,
+                      <<"http://jabber.org/protocol/muc#admin">>}]);
+encode({muc, _, _} = X) ->
+    encode_muc(X,
+              [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
+encode({forwarded, _, _} = Forwarded) ->
+    encode_forwarded(Forwarded,
+                    [{<<"xmlns">>, <<"urn:xmpp:forward:0">>}]);
+encode({carbons_disable} = Disable) ->
+    encode_carbons_disable(Disable,
+                          [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({carbons_enable} = Enable) ->
+    encode_carbons_enable(Enable,
+                         [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({carbons_private} = Private) ->
+    encode_carbons_private(Private,
+                          [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({carbons_received, _} = Received) ->
+    encode_carbons_received(Received,
+                           [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({carbons_sent, _} = Sent) ->
+    encode_carbons_sent(Sent,
+                       [{<<"xmlns">>, <<"urn:xmpp:carbons:2">>}]);
+encode({feature_sm, _} = Sm) ->
+    encode_feature_sm(Sm, []);
+encode({sm_enable, _, _, _} = Enable) ->
+    encode_sm_enable(Enable, []);
+encode({sm_enabled, _, _, _, _, _} = Enabled) ->
+    encode_sm_enabled(Enabled, []);
+encode({sm_resume, _, _, _} = Resume) ->
+    encode_sm_resume(Resume, []);
+encode({sm_resumed, _, _, _} = Resumed) ->
+    encode_sm_resumed(Resumed, []);
+encode({sm_r, _} = R) -> encode_sm_r(R, []);
+encode({sm_a, _, _} = A) -> encode_sm_a(A, []);
+encode({sm_failed, _, _} = Failed) ->
+    encode_sm_failed(Failed, []).
 
 dec_int(Val) -> dec_int(Val, infinity, infinity).
 
@@ -1864,14 +2055,14 @@ pp(carbons_enable, 0) -> [];
 pp(carbons_private, 0) -> [];
 pp(carbons_received, 1) -> [forwarded];
 pp(carbons_sent, 1) -> [forwarded];
-pp(feature_sm, 0) -> [];
-pp(sm_enable, 2) -> [max, resume];
-pp(sm_enabled, 4) -> [id, location, max, resume];
-pp(sm_resume, 2) -> [h, previd];
-pp(sm_resumed, 2) -> [h, previd];
-pp(sm_r, 0) -> [];
-pp(sm_a, 1) -> [h];
-pp(sm_failed, 1) -> [reason];
+pp(feature_sm, 1) -> [xmlns];
+pp(sm_enable, 3) -> [max, resume, xmlns];
+pp(sm_enabled, 5) -> [id, location, max, resume, xmlns];
+pp(sm_resume, 3) -> [h, previd, xmlns];
+pp(sm_resumed, 3) -> [h, previd, xmlns];
+pp(sm_r, 1) -> [xmlns];
+pp(sm_a, 2) -> [h, xmlns];
+pp(sm_failed, 2) -> [reason, xmlns];
 pp(_, _) -> no.
 
 enc_bool(false) -> <<"false">>;
@@ -1914,276 +2105,271 @@ dec_tzo(Val) ->
     M = jlib:binary_to_integer(M1),
     if H >= -12, H =< 12, M >= 0, M < 60 -> {H, M} end.
 
-decode_sm_failed({xmlel, <<"failed">>, _attrs, _els}) ->
-    Reason = decode_sm_failed_els(_els, undefined),
-    {sm_failed, Reason}.
+decode_sm_failed(__TopXMLNS,
+                {xmlel, <<"failed">>, _attrs, _els}) ->
+    Reason = decode_sm_failed_els(__TopXMLNS, _els,
+                                 undefined),
+    Xmlns = decode_sm_failed_attrs(__TopXMLNS, _attrs,
+                                  undefined),
+    {sm_failed, Reason, Xmlns}.
 
-decode_sm_failed_els([], Reason) -> Reason;
-decode_sm_failed_els([{xmlel, <<"bad-request">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS, [], Reason) -> Reason;
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"bad-request">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_bad_request(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_bad_request(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"conflict">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"conflict">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els, decode_error_conflict(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_conflict(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"feature-not-implemented">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"feature-not-implemented">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_feature_not_implemented(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_feature_not_implemented(_xmlns,
+                                                                    _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"forbidden">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"forbidden">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els, decode_error_forbidden(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_forbidden(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"gone">>, _attrs, _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"gone">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els, decode_error_gone(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_gone(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"internal-server-error">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_internal_server_error(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_internal_server_error(_xmlns,
+                                                                  _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"item-not-found">>,
-                      _attrs, _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"item-not-found">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_item_not_found(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_item_not_found(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"jid-malformed">>,
-                      _attrs, _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"jid-malformed">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_jid_malformed(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_jid_malformed(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"not-acceptable">>,
-                      _attrs, _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"not-acceptable">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_not_acceptable(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_not_acceptable(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"not-allowed">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"not-allowed">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_not_allowed(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_not_allowed(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"not-authorized">>,
-                      _attrs, _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_not_authorized(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_not_authorized(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"policy-violation">>,
-                      _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"policy-violation">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_policy_violation(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_policy_violation(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"recipient-unavailable">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"recipient-unavailable">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_recipient_unavailable(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_recipient_unavailable(_xmlns,
+                                                                  _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"redirect">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"redirect">>, _attrs, _} = _el | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els, decode_error_redirect(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_redirect(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"registration-required">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"registration-required">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_registration_required(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_registration_required(_xmlns,
+                                                                  _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"remote-server-not-found">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"remote-server-not-found">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_remote_server_not_found(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_remote_server_not_found(_xmlns,
+                                                                    _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"remote-server-timeout">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"remote-server-timeout">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_remote_server_timeout(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_remote_server_timeout(_xmlns,
+                                                                  _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"resource-constraint">>,
-                      _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_resource_constraint(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_resource_constraint(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"service-unavailable">>,
-                      _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"service-unavailable">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_service_unavailable(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_service_unavailable(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel,
-                      <<"subscription-required">>, _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"subscription-required">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_subscription_required(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_subscription_required(_xmlns,
+                                                                  _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"undefined-condition">>,
-                      _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_undefined_condition(_el));
-       true -> decode_sm_failed_els(_els, Reason)
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_undefined_condition(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
     end;
-decode_sm_failed_els([{xmlel, <<"unexpected-request">>,
-                      _attrs, _} =
-                         _el
+decode_sm_failed_els(__TopXMLNS,
+                    [{xmlel, <<"unexpected-request">>, _attrs, _} = _el
                      | _els],
                     Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_sm_failed_els(_els,
-                               decode_error_unexpected_request(_el));
-       true -> decode_sm_failed_els(_els, Reason)
-    end;
-decode_sm_failed_els([_ | _els], Reason) ->
-    decode_sm_failed_els(_els, Reason).
-
-encode_sm_failed({sm_failed, Reason}, _xmlns_attrs) ->
+          decode_sm_failed_els(__TopXMLNS, _els,
+                               decode_error_unexpected_request(_xmlns, _el));
+       true -> decode_sm_failed_els(__TopXMLNS, _els, Reason)
+    end;
+decode_sm_failed_els(__TopXMLNS, [_ | _els], Reason) ->
+    decode_sm_failed_els(__TopXMLNS, _els, Reason).
+
+decode_sm_failed_attrs(__TopXMLNS,
+                      [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
+    decode_sm_failed_attrs(__TopXMLNS, _attrs, _val);
+decode_sm_failed_attrs(__TopXMLNS, [_ | _attrs],
+                      Xmlns) ->
+    decode_sm_failed_attrs(__TopXMLNS, _attrs, Xmlns);
+decode_sm_failed_attrs(__TopXMLNS, [], Xmlns) ->
+    decode_sm_failed_attr_xmlns(__TopXMLNS, Xmlns).
+
+encode_sm_failed({sm_failed, Reason, Xmlns},
+                _xmlns_attrs) ->
     _els = 'encode_sm_failed_$reason'(Reason, []),
-    _attrs = _xmlns_attrs,
+    _attrs = encode_sm_failed_attr_xmlns(Xmlns,
+                                        _xmlns_attrs),
     {xmlel, <<"failed">>, _attrs, _els}.
 
 'encode_sm_failed_$reason'(undefined, _acc) -> _acc;
@@ -2328,210 +2514,316 @@ encode_sm_failed({sm_failed, Reason}, _xmlns_attrs) ->
                                       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
      | _acc].
 
-decode_sm_a({xmlel, <<"a">>, _attrs, _els}) ->
-    H = decode_sm_a_attrs(_attrs, undefined), {sm_a, H}.
+decode_sm_failed_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_failed_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-decode_sm_a_attrs([{<<"h">>, _val} | _attrs], _H) ->
-    decode_sm_a_attrs(_attrs, _val);
-decode_sm_a_attrs([_ | _attrs], H) ->
-    decode_sm_a_attrs(_attrs, H);
-decode_sm_a_attrs([], H) -> decode_sm_a_attr_h(H).
+encode_sm_failed_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_failed_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
 
-encode_sm_a({sm_a, H}, _xmlns_attrs) ->
+decode_sm_a(__TopXMLNS,
+           {xmlel, <<"a">>, _attrs, _els}) ->
+    {H, Xmlns} = decode_sm_a_attrs(__TopXMLNS, _attrs,
+                                  undefined, undefined),
+    {sm_a, H, Xmlns}.
+
+decode_sm_a_attrs(__TopXMLNS,
+                 [{<<"h">>, _val} | _attrs], _H, Xmlns) ->
+    decode_sm_a_attrs(__TopXMLNS, _attrs, _val, Xmlns);
+decode_sm_a_attrs(__TopXMLNS,
+                 [{<<"xmlns">>, _val} | _attrs], H, _Xmlns) ->
+    decode_sm_a_attrs(__TopXMLNS, _attrs, H, _val);
+decode_sm_a_attrs(__TopXMLNS, [_ | _attrs], H, Xmlns) ->
+    decode_sm_a_attrs(__TopXMLNS, _attrs, H, Xmlns);
+decode_sm_a_attrs(__TopXMLNS, [], H, Xmlns) ->
+    {decode_sm_a_attr_h(__TopXMLNS, H),
+     decode_sm_a_attr_xmlns(__TopXMLNS, Xmlns)}.
+
+encode_sm_a({sm_a, H, Xmlns}, _xmlns_attrs) ->
     _els = [],
-    _attrs = encode_sm_a_attr_h(H, _xmlns_attrs),
+    _attrs = encode_sm_a_attr_xmlns(Xmlns,
+                                   encode_sm_a_attr_h(H, _xmlns_attrs)),
     {xmlel, <<"a">>, _attrs, _els}.
 
-decode_sm_a_attr_h(undefined) ->
+decode_sm_a_attr_h(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"a">>, <<"urn:xmpp:sm:3">>}});
-decode_sm_a_attr_h(_val) ->
+                 {missing_attr, <<"h">>, <<"a">>, __TopXMLNS}});
+decode_sm_a_attr_h(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"a">>,
-                        <<"urn:xmpp:sm:3">>}});
+                       {bad_attr_value, <<"h">>, <<"a">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_sm_a_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
-decode_sm_r({xmlel, <<"r">>, _attrs, _els}) -> {sm_r}.
-
-encode_sm_r({sm_r}, _xmlns_attrs) ->
+decode_sm_a_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_a_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_a_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_a_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_sm_r(__TopXMLNS,
+           {xmlel, <<"r">>, _attrs, _els}) ->
+    Xmlns = decode_sm_r_attrs(__TopXMLNS, _attrs,
+                             undefined),
+    {sm_r, Xmlns}.
+
+decode_sm_r_attrs(__TopXMLNS,
+                 [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
+    decode_sm_r_attrs(__TopXMLNS, _attrs, _val);
+decode_sm_r_attrs(__TopXMLNS, [_ | _attrs], Xmlns) ->
+    decode_sm_r_attrs(__TopXMLNS, _attrs, Xmlns);
+decode_sm_r_attrs(__TopXMLNS, [], Xmlns) ->
+    decode_sm_r_attr_xmlns(__TopXMLNS, Xmlns).
+
+encode_sm_r({sm_r, Xmlns}, _xmlns_attrs) ->
     _els = [],
-    _attrs = _xmlns_attrs,
+    _attrs = encode_sm_r_attr_xmlns(Xmlns, _xmlns_attrs),
     {xmlel, <<"r">>, _attrs, _els}.
 
-decode_sm_resumed({xmlel, <<"resumed">>, _attrs,
-                  _els}) ->
-    {H, Previd} = decode_sm_resumed_attrs(_attrs, undefined,
-                                         undefined),
-    {sm_resumed, H, Previd}.
+decode_sm_r_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_r_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_r_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_r_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
 
-decode_sm_resumed_attrs([{<<"h">>, _val} | _attrs], _H,
+decode_sm_resumed(__TopXMLNS,
+                 {xmlel, <<"resumed">>, _attrs, _els}) ->
+    {H, Xmlns, Previd} = decode_sm_resumed_attrs(__TopXMLNS,
+                                                _attrs, undefined, undefined,
+                                                undefined),
+    {sm_resumed, H, Previd, Xmlns}.
+
+decode_sm_resumed_attrs(__TopXMLNS,
+                       [{<<"h">>, _val} | _attrs], _H, Xmlns, Previd) ->
+    decode_sm_resumed_attrs(__TopXMLNS, _attrs, _val, Xmlns,
+                           Previd);
+decode_sm_resumed_attrs(__TopXMLNS,
+                       [{<<"xmlns">>, _val} | _attrs], H, _Xmlns, Previd) ->
+    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, _val,
+                           Previd);
+decode_sm_resumed_attrs(__TopXMLNS,
+                       [{<<"previd">>, _val} | _attrs], H, Xmlns, _Previd) ->
+    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, Xmlns,
+                           _val);
+decode_sm_resumed_attrs(__TopXMLNS, [_ | _attrs], H,
+                       Xmlns, Previd) ->
+    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, Xmlns,
+                           Previd);
+decode_sm_resumed_attrs(__TopXMLNS, [], H, Xmlns,
                        Previd) ->
-    decode_sm_resumed_attrs(_attrs, _val, Previd);
-decode_sm_resumed_attrs([{<<"previd">>, _val} | _attrs],
-                       H, _Previd) ->
-    decode_sm_resumed_attrs(_attrs, H, _val);
-decode_sm_resumed_attrs([_ | _attrs], H, Previd) ->
-    decode_sm_resumed_attrs(_attrs, H, Previd);
-decode_sm_resumed_attrs([], H, Previd) ->
-    {decode_sm_resumed_attr_h(H),
-     decode_sm_resumed_attr_previd(Previd)}.
-
-encode_sm_resumed({sm_resumed, H, Previd},
+    {decode_sm_resumed_attr_h(__TopXMLNS, H),
+     decode_sm_resumed_attr_xmlns(__TopXMLNS, Xmlns),
+     decode_sm_resumed_attr_previd(__TopXMLNS, Previd)}.
+
+encode_sm_resumed({sm_resumed, H, Previd, Xmlns},
                  _xmlns_attrs) ->
     _els = [],
     _attrs = encode_sm_resumed_attr_previd(Previd,
-                                          encode_sm_resumed_attr_h(H,
-                                                                   _xmlns_attrs)),
+                                          encode_sm_resumed_attr_xmlns(Xmlns,
+                                                                       encode_sm_resumed_attr_h(H,
+                                                                                                _xmlns_attrs))),
     {xmlel, <<"resumed">>, _attrs, _els}.
 
-decode_sm_resumed_attr_h(undefined) ->
+decode_sm_resumed_attr_h(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"resumed">>,
-                  <<"urn:xmpp:sm:3">>}});
-decode_sm_resumed_attr_h(_val) ->
+                 {missing_attr, <<"h">>, <<"resumed">>, __TopXMLNS}});
+decode_sm_resumed_attr_h(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"resumed">>,
-                        <<"urn:xmpp:sm:3">>}});
+                       {bad_attr_value, <<"h">>, <<"resumed">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_sm_resumed_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
-decode_sm_resumed_attr_previd(undefined) ->
+decode_sm_resumed_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_resumed_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_resumed_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_resumed_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_sm_resumed_attr_previd(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"previd">>, <<"resumed">>,
-                  <<"urn:xmpp:sm:3">>}});
-decode_sm_resumed_attr_previd(_val) -> _val.
+                  __TopXMLNS}});
+decode_sm_resumed_attr_previd(__TopXMLNS, _val) -> _val.
 
 encode_sm_resumed_attr_previd(_val, _acc) ->
     [{<<"previd">>, _val} | _acc].
 
-decode_sm_resume({xmlel, <<"resume">>, _attrs, _els}) ->
-    {H, Previd} = decode_sm_resume_attrs(_attrs, undefined,
-                                        undefined),
-    {sm_resume, H, Previd}.
-
-decode_sm_resume_attrs([{<<"h">>, _val} | _attrs], _H,
+decode_sm_resume(__TopXMLNS,
+                {xmlel, <<"resume">>, _attrs, _els}) ->
+    {H, Xmlns, Previd} = decode_sm_resume_attrs(__TopXMLNS,
+                                               _attrs, undefined, undefined,
+                                               undefined),
+    {sm_resume, H, Previd, Xmlns}.
+
+decode_sm_resume_attrs(__TopXMLNS,
+                      [{<<"h">>, _val} | _attrs], _H, Xmlns, Previd) ->
+    decode_sm_resume_attrs(__TopXMLNS, _attrs, _val, Xmlns,
+                          Previd);
+decode_sm_resume_attrs(__TopXMLNS,
+                      [{<<"xmlns">>, _val} | _attrs], H, _Xmlns, Previd) ->
+    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, _val,
+                          Previd);
+decode_sm_resume_attrs(__TopXMLNS,
+                      [{<<"previd">>, _val} | _attrs], H, Xmlns, _Previd) ->
+    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, Xmlns,
+                          _val);
+decode_sm_resume_attrs(__TopXMLNS, [_ | _attrs], H,
+                      Xmlns, Previd) ->
+    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, Xmlns,
+                          Previd);
+decode_sm_resume_attrs(__TopXMLNS, [], H, Xmlns,
                       Previd) ->
-    decode_sm_resume_attrs(_attrs, _val, Previd);
-decode_sm_resume_attrs([{<<"previd">>, _val} | _attrs],
-                      H, _Previd) ->
-    decode_sm_resume_attrs(_attrs, H, _val);
-decode_sm_resume_attrs([_ | _attrs], H, Previd) ->
-    decode_sm_resume_attrs(_attrs, H, Previd);
-decode_sm_resume_attrs([], H, Previd) ->
-    {decode_sm_resume_attr_h(H),
-     decode_sm_resume_attr_previd(Previd)}.
-
-encode_sm_resume({sm_resume, H, Previd},
+    {decode_sm_resume_attr_h(__TopXMLNS, H),
+     decode_sm_resume_attr_xmlns(__TopXMLNS, Xmlns),
+     decode_sm_resume_attr_previd(__TopXMLNS, Previd)}.
+
+encode_sm_resume({sm_resume, H, Previd, Xmlns},
                 _xmlns_attrs) ->
     _els = [],
     _attrs = encode_sm_resume_attr_previd(Previd,
-                                         encode_sm_resume_attr_h(H,
-                                                                 _xmlns_attrs)),
+                                         encode_sm_resume_attr_xmlns(Xmlns,
+                                                                     encode_sm_resume_attr_h(H,
+                                                                                             _xmlns_attrs))),
     {xmlel, <<"resume">>, _attrs, _els}.
 
-decode_sm_resume_attr_h(undefined) ->
+decode_sm_resume_attr_h(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"resume">>,
-                  <<"urn:xmpp:sm:3">>}});
-decode_sm_resume_attr_h(_val) ->
+                 {missing_attr, <<"h">>, <<"resume">>, __TopXMLNS}});
+decode_sm_resume_attr_h(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"resume">>,
-                        <<"urn:xmpp:sm:3">>}});
+                       {bad_attr_value, <<"h">>, <<"resume">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_sm_resume_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
-decode_sm_resume_attr_previd(undefined) ->
+decode_sm_resume_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_resume_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_resume_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_resume_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_sm_resume_attr_previd(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"previd">>, <<"resume">>,
-                  <<"urn:xmpp:sm:3">>}});
-decode_sm_resume_attr_previd(_val) -> _val.
+                  __TopXMLNS}});
+decode_sm_resume_attr_previd(__TopXMLNS, _val) -> _val.
 
 encode_sm_resume_attr_previd(_val, _acc) ->
     [{<<"previd">>, _val} | _acc].
 
-decode_sm_enabled({xmlel, <<"enabled">>, _attrs,
-                  _els}) ->
-    {Id, Location, Max, Resume} =
-       decode_sm_enabled_attrs(_attrs, undefined, undefined,
-                               undefined, undefined),
-    {sm_enabled, Id, Location, Max, Resume}.
-
-decode_sm_enabled_attrs([{<<"id">>, _val} | _attrs],
-                       _Id, Location, Max, Resume) ->
-    decode_sm_enabled_attrs(_attrs, _val, Location, Max,
-                           Resume);
-decode_sm_enabled_attrs([{<<"location">>, _val}
-                        | _attrs],
-                       Id, _Location, Max, Resume) ->
-    decode_sm_enabled_attrs(_attrs, Id, _val, Max, Resume);
-decode_sm_enabled_attrs([{<<"max">>, _val} | _attrs],
-                       Id, Location, _Max, Resume) ->
-    decode_sm_enabled_attrs(_attrs, Id, Location, _val,
-                           Resume);
-decode_sm_enabled_attrs([{<<"resume">>, _val} | _attrs],
-                       Id, Location, Max, _Resume) ->
-    decode_sm_enabled_attrs(_attrs, Id, Location, Max,
-                           _val);
-decode_sm_enabled_attrs([_ | _attrs], Id, Location, Max,
+decode_sm_enabled(__TopXMLNS,
+                 {xmlel, <<"enabled">>, _attrs, _els}) ->
+    {Id, Location, Xmlns, Max, Resume} =
+       decode_sm_enabled_attrs(__TopXMLNS, _attrs, undefined,
+                               undefined, undefined, undefined, undefined),
+    {sm_enabled, Id, Location, Max, Resume, Xmlns}.
+
+decode_sm_enabled_attrs(__TopXMLNS,
+                       [{<<"id">>, _val} | _attrs], _Id, Location, Xmlns, Max,
                        Resume) ->
-    decode_sm_enabled_attrs(_attrs, Id, Location, Max,
-                           Resume);
-decode_sm_enabled_attrs([], Id, Location, Max,
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, _val,
+                           Location, Xmlns, Max, Resume);
+decode_sm_enabled_attrs(__TopXMLNS,
+                       [{<<"location">>, _val} | _attrs], Id, _Location, Xmlns,
+                       Max, Resume) ->
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id, _val,
+                           Xmlns, Max, Resume);
+decode_sm_enabled_attrs(__TopXMLNS,
+                       [{<<"xmlns">>, _val} | _attrs], Id, Location, _Xmlns,
+                       Max, Resume) ->
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
+                           Location, _val, Max, Resume);
+decode_sm_enabled_attrs(__TopXMLNS,
+                       [{<<"max">>, _val} | _attrs], Id, Location, Xmlns, _Max,
                        Resume) ->
-    {decode_sm_enabled_attr_id(Id),
-     decode_sm_enabled_attr_location(Location),
-     decode_sm_enabled_attr_max(Max),
-     decode_sm_enabled_attr_resume(Resume)}.
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
+                           Location, Xmlns, _val, Resume);
+decode_sm_enabled_attrs(__TopXMLNS,
+                       [{<<"resume">>, _val} | _attrs], Id, Location, Xmlns,
+                       Max, _Resume) ->
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
+                           Location, Xmlns, Max, _val);
+decode_sm_enabled_attrs(__TopXMLNS, [_ | _attrs], Id,
+                       Location, Xmlns, Max, Resume) ->
+    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
+                           Location, Xmlns, Max, Resume);
+decode_sm_enabled_attrs(__TopXMLNS, [], Id, Location,
+                       Xmlns, Max, Resume) ->
+    {decode_sm_enabled_attr_id(__TopXMLNS, Id),
+     decode_sm_enabled_attr_location(__TopXMLNS, Location),
+     decode_sm_enabled_attr_xmlns(__TopXMLNS, Xmlns),
+     decode_sm_enabled_attr_max(__TopXMLNS, Max),
+     decode_sm_enabled_attr_resume(__TopXMLNS, Resume)}.
 
 encode_sm_enabled({sm_enabled, Id, Location, Max,
-                  Resume},
+                  Resume, Xmlns},
                  _xmlns_attrs) ->
     _els = [],
     _attrs = encode_sm_enabled_attr_resume(Resume,
                                           encode_sm_enabled_attr_max(Max,
-                                                                     encode_sm_enabled_attr_location(Location,
-                                                                                                     encode_sm_enabled_attr_id(Id,
-                                                                                                                               _xmlns_attrs)))),
+                                                                     encode_sm_enabled_attr_xmlns(Xmlns,
+                                                                                                  encode_sm_enabled_attr_location(Location,
+                                                                                                                                  encode_sm_enabled_attr_id(Id,
+                                                                                                                                                            _xmlns_attrs))))),
     {xmlel, <<"enabled">>, _attrs, _els}.
 
-decode_sm_enabled_attr_id(undefined) -> undefined;
-decode_sm_enabled_attr_id(_val) -> _val.
+decode_sm_enabled_attr_id(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_enabled_attr_id(__TopXMLNS, _val) -> _val.
 
 encode_sm_enabled_attr_id(undefined, _acc) -> _acc;
 encode_sm_enabled_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_sm_enabled_attr_location(undefined) -> undefined;
-decode_sm_enabled_attr_location(_val) -> _val.
+decode_sm_enabled_attr_location(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_sm_enabled_attr_location(__TopXMLNS, _val) ->
+    _val.
 
 encode_sm_enabled_attr_location(undefined, _acc) ->
     _acc;
 encode_sm_enabled_attr_location(_val, _acc) ->
     [{<<"location">>, _val} | _acc].
 
-decode_sm_enabled_attr_max(undefined) -> undefined;
-decode_sm_enabled_attr_max(_val) ->
+decode_sm_enabled_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_enabled_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_enabled_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_enabled_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_sm_enabled_attr_max(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_enabled_attr_max(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"max">>, <<"enabled">>,
-                        <<"urn:xmpp:sm:3">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -2539,13 +2831,14 @@ encode_sm_enabled_attr_max(undefined, _acc) -> _acc;
 encode_sm_enabled_attr_max(_val, _acc) ->
     [{<<"max">>, enc_int(_val)} | _acc].
 
-decode_sm_enabled_attr_resume(undefined) -> false;
-decode_sm_enabled_attr_resume(_val) ->
+decode_sm_enabled_attr_resume(__TopXMLNS, undefined) ->
+    false;
+decode_sm_enabled_attr_resume(__TopXMLNS, _val) ->
     case catch dec_bool(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"resume">>, <<"enabled">>,
-                        <<"urn:xmpp:sm:3">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -2553,38 +2846,51 @@ encode_sm_enabled_attr_resume(false, _acc) -> _acc;
 encode_sm_enabled_attr_resume(_val, _acc) ->
     [{<<"resume">>, enc_bool(_val)} | _acc].
 
-decode_sm_enable({xmlel, <<"enable">>, _attrs, _els}) ->
-    {Max, Resume} = decode_sm_enable_attrs(_attrs,
-                                          undefined, undefined),
-    {sm_enable, Max, Resume}.
-
-decode_sm_enable_attrs([{<<"max">>, _val} | _attrs],
-                      _Max, Resume) ->
-    decode_sm_enable_attrs(_attrs, _val, Resume);
-decode_sm_enable_attrs([{<<"resume">>, _val} | _attrs],
-                      Max, _Resume) ->
-    decode_sm_enable_attrs(_attrs, Max, _val);
-decode_sm_enable_attrs([_ | _attrs], Max, Resume) ->
-    decode_sm_enable_attrs(_attrs, Max, Resume);
-decode_sm_enable_attrs([], Max, Resume) ->
-    {decode_sm_enable_attr_max(Max),
-     decode_sm_enable_attr_resume(Resume)}.
-
-encode_sm_enable({sm_enable, Max, Resume},
+decode_sm_enable(__TopXMLNS,
+                {xmlel, <<"enable">>, _attrs, _els}) ->
+    {Max, Xmlns, Resume} =
+       decode_sm_enable_attrs(__TopXMLNS, _attrs, undefined,
+                              undefined, undefined),
+    {sm_enable, Max, Resume, Xmlns}.
+
+decode_sm_enable_attrs(__TopXMLNS,
+                      [{<<"max">>, _val} | _attrs], _Max, Xmlns, Resume) ->
+    decode_sm_enable_attrs(__TopXMLNS, _attrs, _val, Xmlns,
+                          Resume);
+decode_sm_enable_attrs(__TopXMLNS,
+                      [{<<"xmlns">>, _val} | _attrs], Max, _Xmlns, Resume) ->
+    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, _val,
+                          Resume);
+decode_sm_enable_attrs(__TopXMLNS,
+                      [{<<"resume">>, _val} | _attrs], Max, Xmlns, _Resume) ->
+    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, Xmlns,
+                          _val);
+decode_sm_enable_attrs(__TopXMLNS, [_ | _attrs], Max,
+                      Xmlns, Resume) ->
+    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, Xmlns,
+                          Resume);
+decode_sm_enable_attrs(__TopXMLNS, [], Max, Xmlns,
+                      Resume) ->
+    {decode_sm_enable_attr_max(__TopXMLNS, Max),
+     decode_sm_enable_attr_xmlns(__TopXMLNS, Xmlns),
+     decode_sm_enable_attr_resume(__TopXMLNS, Resume)}.
+
+encode_sm_enable({sm_enable, Max, Resume, Xmlns},
                 _xmlns_attrs) ->
     _els = [],
     _attrs = encode_sm_enable_attr_resume(Resume,
-                                         encode_sm_enable_attr_max(Max,
-                                                                   _xmlns_attrs)),
+                                         encode_sm_enable_attr_xmlns(Xmlns,
+                                                                     encode_sm_enable_attr_max(Max,
+                                                                                               _xmlns_attrs))),
     {xmlel, <<"enable">>, _attrs, _els}.
 
-decode_sm_enable_attr_max(undefined) -> undefined;
-decode_sm_enable_attr_max(_val) ->
+decode_sm_enable_attr_max(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_enable_attr_max(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"max">>, <<"enable">>,
-                        <<"urn:xmpp:sm:3">>}});
+                       {bad_attr_value, <<"max">>, <<"enable">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -2592,13 +2898,22 @@ encode_sm_enable_attr_max(undefined, _acc) -> _acc;
 encode_sm_enable_attr_max(_val, _acc) ->
     [{<<"max">>, enc_int(_val)} | _acc].
 
-decode_sm_enable_attr_resume(undefined) -> false;
-decode_sm_enable_attr_resume(_val) ->
+decode_sm_enable_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_sm_enable_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_sm_enable_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_enable_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_sm_enable_attr_resume(__TopXMLNS, undefined) ->
+    false;
+decode_sm_enable_attr_resume(__TopXMLNS, _val) ->
     case catch dec_bool(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"resume">>, <<"enable">>,
-                        <<"urn:xmpp:sm:3">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -2606,40 +2921,61 @@ encode_sm_enable_attr_resume(false, _acc) -> _acc;
 encode_sm_enable_attr_resume(_val, _acc) ->
     [{<<"resume">>, enc_bool(_val)} | _acc].
 
-decode_feature_sm({xmlel, <<"sm">>, _attrs, _els}) ->
-    {feature_sm}.
-
-encode_feature_sm({feature_sm}, _xmlns_attrs) ->
+decode_feature_sm(__TopXMLNS,
+                 {xmlel, <<"sm">>, _attrs, _els}) ->
+    Xmlns = decode_feature_sm_attrs(__TopXMLNS, _attrs,
+                                   undefined),
+    {feature_sm, Xmlns}.
+
+decode_feature_sm_attrs(__TopXMLNS,
+                       [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
+    decode_feature_sm_attrs(__TopXMLNS, _attrs, _val);
+decode_feature_sm_attrs(__TopXMLNS, [_ | _attrs],
+                       Xmlns) ->
+    decode_feature_sm_attrs(__TopXMLNS, _attrs, Xmlns);
+decode_feature_sm_attrs(__TopXMLNS, [], Xmlns) ->
+    decode_feature_sm_attr_xmlns(__TopXMLNS, Xmlns).
+
+encode_feature_sm({feature_sm, Xmlns}, _xmlns_attrs) ->
     _els = [],
-    _attrs = _xmlns_attrs,
+    _attrs = encode_feature_sm_attr_xmlns(Xmlns,
+                                         _xmlns_attrs),
     {xmlel, <<"sm">>, _attrs, _els}.
 
-decode_carbons_sent({xmlel, <<"sent">>, _attrs,
-                    _els}) ->
-    Forwarded = decode_carbons_sent_els(_els, error),
+decode_feature_sm_attr_xmlns(__TopXMLNS, undefined) ->
+    undefined;
+decode_feature_sm_attr_xmlns(__TopXMLNS, _val) -> _val.
+
+encode_feature_sm_attr_xmlns(undefined, _acc) -> _acc;
+encode_feature_sm_attr_xmlns(_val, _acc) ->
+    [{<<"xmlns">>, _val} | _acc].
+
+decode_carbons_sent(__TopXMLNS,
+                   {xmlel, <<"sent">>, _attrs, _els}) ->
+    Forwarded = decode_carbons_sent_els(__TopXMLNS, _els,
+                                       error),
     {carbons_sent, Forwarded}.
 
-decode_carbons_sent_els([], Forwarded) ->
+decode_carbons_sent_els(__TopXMLNS, [], Forwarded) ->
     case Forwarded of
       error ->
          erlang:error({xmpp_codec,
-                       {missing_tag, <<"forwarded">>,
-                        <<"urn:xmpp:forward:0">>}});
+                       {missing_tag, <<"forwarded">>, __TopXMLNS}});
       {value, Forwarded1} -> Forwarded1
     end;
-decode_carbons_sent_els([{xmlel, <<"forwarded">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_carbons_sent_els(__TopXMLNS,
+                       [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
                        Forwarded) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"urn:xmpp:forward:0">> ->
-          decode_carbons_sent_els(_els,
-                                  {value, decode_forwarded(_el)});
-       true -> decode_carbons_sent_els(_els, Forwarded)
+          decode_carbons_sent_els(__TopXMLNS, _els,
+                                  {value, decode_forwarded(_xmlns, _el)});
+       true ->
+          decode_carbons_sent_els(__TopXMLNS, _els, Forwarded)
     end;
-decode_carbons_sent_els([_ | _els], Forwarded) ->
-    decode_carbons_sent_els(_els, Forwarded).
+decode_carbons_sent_els(__TopXMLNS, [_ | _els],
+                       Forwarded) ->
+    decode_carbons_sent_els(__TopXMLNS, _els, Forwarded).
 
 encode_carbons_sent({carbons_sent, Forwarded},
                    _xmlns_attrs) ->
@@ -2652,32 +2988,34 @@ encode_carbons_sent({carbons_sent, Forwarded},
                      [{<<"xmlns">>, <<"urn:xmpp:forward:0">>}])
      | _acc].
 
-decode_carbons_received({xmlel, <<"received">>, _attrs,
-                        _els}) ->
-    Forwarded = decode_carbons_received_els(_els, error),
+decode_carbons_received(__TopXMLNS,
+                       {xmlel, <<"received">>, _attrs, _els}) ->
+    Forwarded = decode_carbons_received_els(__TopXMLNS,
+                                           _els, error),
     {carbons_received, Forwarded}.
 
-decode_carbons_received_els([], Forwarded) ->
+decode_carbons_received_els(__TopXMLNS, [],
+                           Forwarded) ->
     case Forwarded of
       error ->
          erlang:error({xmpp_codec,
-                       {missing_tag, <<"forwarded">>,
-                        <<"urn:xmpp:forward:0">>}});
+                       {missing_tag, <<"forwarded">>, __TopXMLNS}});
       {value, Forwarded1} -> Forwarded1
     end;
-decode_carbons_received_els([{xmlel, <<"forwarded">>,
-                             _attrs, _} =
-                                _el
-                            | _els],
+decode_carbons_received_els(__TopXMLNS,
+                           [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
                            Forwarded) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"urn:xmpp:forward:0">> ->
-          decode_carbons_received_els(_els,
-                                      {value, decode_forwarded(_el)});
-       true -> decode_carbons_received_els(_els, Forwarded)
+          decode_carbons_received_els(__TopXMLNS, _els,
+                                      {value, decode_forwarded(_xmlns, _el)});
+       true ->
+          decode_carbons_received_els(__TopXMLNS, _els, Forwarded)
     end;
-decode_carbons_received_els([_ | _els], Forwarded) ->
-    decode_carbons_received_els(_els, Forwarded).
+decode_carbons_received_els(__TopXMLNS, [_ | _els],
+                           Forwarded) ->
+    decode_carbons_received_els(__TopXMLNS, _els,
+                               Forwarded).
 
 encode_carbons_received({carbons_received, Forwarded},
                        _xmlns_attrs) ->
@@ -2691,8 +3029,8 @@ encode_carbons_received({carbons_received, Forwarded},
                      [{<<"xmlns">>, <<"urn:xmpp:forward:0">>}])
      | _acc].
 
-decode_carbons_private({xmlel, <<"private">>, _attrs,
-                       _els}) ->
+decode_carbons_private(__TopXMLNS,
+                      {xmlel, <<"private">>, _attrs, _els}) ->
     {carbons_private}.
 
 encode_carbons_private({carbons_private},
@@ -2701,8 +3039,8 @@ encode_carbons_private({carbons_private},
     _attrs = _xmlns_attrs,
     {xmlel, <<"private">>, _attrs, _els}.
 
-decode_carbons_enable({xmlel, <<"enable">>, _attrs,
-                      _els}) ->
+decode_carbons_enable(__TopXMLNS,
+                     {xmlel, <<"enable">>, _attrs, _els}) ->
     {carbons_enable}.
 
 encode_carbons_enable({carbons_enable}, _xmlns_attrs) ->
@@ -2710,8 +3048,8 @@ encode_carbons_enable({carbons_enable}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"enable">>, _attrs, _els}.
 
-decode_carbons_disable({xmlel, <<"disable">>, _attrs,
-                       _els}) ->
+decode_carbons_disable(__TopXMLNS,
+                      {xmlel, <<"disable">>, _attrs, _els}) ->
     {carbons_disable}.
 
 encode_carbons_disable({carbons_disable},
@@ -2720,33 +3058,36 @@ encode_carbons_disable({carbons_disable},
     _attrs = _xmlns_attrs,
     {xmlel, <<"disable">>, _attrs, _els}.
 
-decode_forwarded({xmlel, <<"forwarded">>, _attrs,
-                 _els}) ->
-    {Delay, __Els} = decode_forwarded_els(_els, undefined,
-                                         []),
+decode_forwarded(__TopXMLNS,
+                {xmlel, <<"forwarded">>, _attrs, _els}) ->
+    {Delay, __Els} = decode_forwarded_els(__TopXMLNS, _els,
+                                         undefined, []),
     {forwarded, Delay, __Els}.
 
-decode_forwarded_els([], Delay, __Els) ->
+decode_forwarded_els(__TopXMLNS, [], Delay, __Els) ->
     {Delay, lists:reverse(__Els)};
-decode_forwarded_els([{xmlel, <<"delay">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Delay, __Els) ->
+decode_forwarded_els(__TopXMLNS,
+                    [{xmlel, <<"delay">>, _attrs, _} = _el | _els], Delay,
+                    __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"urn:xmpp:delay">> ->
-          decode_forwarded_els(_els, decode_delay(_el), __Els);
-       true -> decode_forwarded_els(_els, Delay, __Els)
+          decode_forwarded_els(__TopXMLNS, _els,
+                               decode_delay(_xmlns, _el), __Els);
+       true ->
+          decode_forwarded_els(__TopXMLNS, _els, Delay, __Els)
     end;
-decode_forwarded_els([{xmlel, _, _, _} = _el | _els],
-                    Delay, __Els) ->
+decode_forwarded_els(__TopXMLNS,
+                    [{xmlel, _, _, _} = _el | _els], Delay, __Els) ->
     case is_known_tag(_el) of
       true ->
-         decode_forwarded_els(_els, Delay,
+         decode_forwarded_els(__TopXMLNS, _els, Delay,
                               [decode(_el) | __Els]);
-      false -> decode_forwarded_els(_els, Delay, __Els)
+      false ->
+         decode_forwarded_els(__TopXMLNS, _els, Delay, __Els)
     end;
-decode_forwarded_els([_ | _els], Delay, __Els) ->
-    decode_forwarded_els(_els, Delay, __Els).
+decode_forwarded_els(__TopXMLNS, [_ | _els], Delay,
+                    __Els) ->
+    decode_forwarded_els(__TopXMLNS, _els, Delay, __Els).
 
 encode_forwarded({forwarded, Delay, __Els},
                 _xmlns_attrs) ->
@@ -2761,31 +3102,33 @@ encode_forwarded({forwarded, Delay, __Els},
                  [{<<"xmlns">>, <<"urn:xmpp:delay">>}])
      | _acc].
 
-decode_muc({xmlel, <<"x">>, _attrs, _els}) ->
-    History = decode_muc_els(_els, undefined),
-    Password = decode_muc_attrs(_attrs, undefined),
+decode_muc(__TopXMLNS,
+          {xmlel, <<"x">>, _attrs, _els}) ->
+    History = decode_muc_els(__TopXMLNS, _els, undefined),
+    Password = decode_muc_attrs(__TopXMLNS, _attrs,
+                               undefined),
     {muc, History, Password}.
 
-decode_muc_els([], History) -> History;
-decode_muc_els([{xmlel, <<"history">>, _attrs, _} = _el
-               | _els],
+decode_muc_els(__TopXMLNS, [], History) -> History;
+decode_muc_els(__TopXMLNS,
+              [{xmlel, <<"history">>, _attrs, _} = _el | _els],
               History) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc">> ->
-          decode_muc_els(_els, decode_muc_history(_el));
-       true -> decode_muc_els(_els, History)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_els(__TopXMLNS, _els,
+                         decode_muc_history(__TopXMLNS, _el));
+       true -> decode_muc_els(__TopXMLNS, _els, History)
     end;
-decode_muc_els([_ | _els], History) ->
-    decode_muc_els(_els, History).
+decode_muc_els(__TopXMLNS, [_ | _els], History) ->
+    decode_muc_els(__TopXMLNS, _els, History).
 
-decode_muc_attrs([{<<"password">>, _val} | _attrs],
-                _Password) ->
-    decode_muc_attrs(_attrs, _val);
-decode_muc_attrs([_ | _attrs], Password) ->
-    decode_muc_attrs(_attrs, Password);
-decode_muc_attrs([], Password) ->
-    decode_muc_attr_password(Password).
+decode_muc_attrs(__TopXMLNS,
+                [{<<"password">>, _val} | _attrs], _Password) ->
+    decode_muc_attrs(__TopXMLNS, _attrs, _val);
+decode_muc_attrs(__TopXMLNS, [_ | _attrs], Password) ->
+    decode_muc_attrs(__TopXMLNS, _attrs, Password);
+decode_muc_attrs(__TopXMLNS, [], Password) ->
+    decode_muc_attr_password(__TopXMLNS, Password).
 
 encode_muc({muc, History, Password}, _xmlns_attrs) ->
     _els = 'encode_muc_$history'(History, []),
@@ -2797,31 +3140,32 @@ encode_muc({muc, History, Password}, _xmlns_attrs) ->
 'encode_muc_$history'(History, _acc) ->
     [encode_muc_history(History, []) | _acc].
 
-decode_muc_attr_password(undefined) -> undefined;
-decode_muc_attr_password(_val) -> _val.
+decode_muc_attr_password(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_attr_password(__TopXMLNS, _val) -> _val.
 
 encode_muc_attr_password(undefined, _acc) -> _acc;
 encode_muc_attr_password(_val, _acc) ->
     [{<<"password">>, _val} | _acc].
 
-decode_muc_admin({xmlel, <<"query">>, _attrs, _els}) ->
-    Items = decode_muc_admin_els(_els, []),
+decode_muc_admin(__TopXMLNS,
+                {xmlel, <<"query">>, _attrs, _els}) ->
+    Items = decode_muc_admin_els(__TopXMLNS, _els, []),
     {muc_admin, Items}.
 
-decode_muc_admin_els([], Items) -> lists:reverse(Items);
-decode_muc_admin_els([{xmlel, <<"item">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Items) ->
+decode_muc_admin_els(__TopXMLNS, [], Items) ->
+    lists:reverse(Items);
+decode_muc_admin_els(__TopXMLNS,
+                    [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#admin">> ->
-          decode_muc_admin_els(_els,
-                               [decode_muc_admin_item(_el) | Items]);
-       true -> decode_muc_admin_els(_els, Items)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_admin_els(__TopXMLNS, _els,
+                               [decode_muc_admin_item(__TopXMLNS, _el)
+                                | Items]);
+       true -> decode_muc_admin_els(__TopXMLNS, _els, Items)
     end;
-decode_muc_admin_els([_ | _els], Items) ->
-    decode_muc_admin_els(_els, Items).
+decode_muc_admin_els(__TopXMLNS, [_ | _els], Items) ->
+    decode_muc_admin_els(__TopXMLNS, _els, Items).
 
 encode_muc_admin({muc_admin, Items}, _xmlns_attrs) ->
     _els = 'encode_muc_admin_$items'(Items, []),
@@ -2833,45 +3177,53 @@ encode_muc_admin({muc_admin, Items}, _xmlns_attrs) ->
     'encode_muc_admin_$items'(_els,
                              [encode_muc_admin_item(Items, []) | _acc]).
 
-decode_muc_admin_reason({xmlel, <<"reason">>, _attrs,
-                        _els}) ->
-    Cdata = decode_muc_admin_reason_els(_els, <<>>), Cdata.
+decode_muc_admin_reason(__TopXMLNS,
+                       {xmlel, <<"reason">>, _attrs, _els}) ->
+    Cdata = decode_muc_admin_reason_els(__TopXMLNS, _els,
+                                       <<>>),
+    Cdata.
 
-decode_muc_admin_reason_els([], Cdata) ->
-    decode_muc_admin_reason_cdata(Cdata);
-decode_muc_admin_reason_els([{xmlcdata, _data} | _els],
-                           Cdata) ->
-    decode_muc_admin_reason_els(_els,
+decode_muc_admin_reason_els(__TopXMLNS, [], Cdata) ->
+    decode_muc_admin_reason_cdata(__TopXMLNS, Cdata);
+decode_muc_admin_reason_els(__TopXMLNS,
+                           [{xmlcdata, _data} | _els], Cdata) ->
+    decode_muc_admin_reason_els(__TopXMLNS, _els,
                                <<Cdata/binary, _data/binary>>);
-decode_muc_admin_reason_els([_ | _els], Cdata) ->
-    decode_muc_admin_reason_els(_els, Cdata).
+decode_muc_admin_reason_els(__TopXMLNS, [_ | _els],
+                           Cdata) ->
+    decode_muc_admin_reason_els(__TopXMLNS, _els, Cdata).
 
 encode_muc_admin_reason(Cdata, _xmlns_attrs) ->
     _els = encode_muc_admin_reason_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"reason">>, _attrs, _els}.
 
-decode_muc_admin_reason_cdata(<<>>) -> undefined;
-decode_muc_admin_reason_cdata(_val) -> _val.
+decode_muc_admin_reason_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_muc_admin_reason_cdata(__TopXMLNS, _val) -> _val.
 
 encode_muc_admin_reason_cdata(undefined, _acc) -> _acc;
 encode_muc_admin_reason_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_muc_admin_continue({xmlel, <<"continue">>,
-                          _attrs, _els}) ->
-    Thread = decode_muc_admin_continue_attrs(_attrs,
-                                            undefined),
+decode_muc_admin_continue(__TopXMLNS,
+                         {xmlel, <<"continue">>, _attrs, _els}) ->
+    Thread = decode_muc_admin_continue_attrs(__TopXMLNS,
+                                            _attrs, undefined),
     Thread.
 
-decode_muc_admin_continue_attrs([{<<"thread">>, _val}
-                                | _attrs],
-                               _Thread) ->
-    decode_muc_admin_continue_attrs(_attrs, _val);
-decode_muc_admin_continue_attrs([_ | _attrs], Thread) ->
-    decode_muc_admin_continue_attrs(_attrs, Thread);
-decode_muc_admin_continue_attrs([], Thread) ->
-    decode_muc_admin_continue_attr_thread(Thread).
+decode_muc_admin_continue_attrs(__TopXMLNS,
+                               [{<<"thread">>, _val} | _attrs], _Thread) ->
+    decode_muc_admin_continue_attrs(__TopXMLNS, _attrs,
+                                   _val);
+decode_muc_admin_continue_attrs(__TopXMLNS,
+                               [_ | _attrs], Thread) ->
+    decode_muc_admin_continue_attrs(__TopXMLNS, _attrs,
+                                   Thread);
+decode_muc_admin_continue_attrs(__TopXMLNS, [],
+                               Thread) ->
+    decode_muc_admin_continue_attr_thread(__TopXMLNS,
+                                         Thread).
 
 encode_muc_admin_continue(Thread, _xmlns_attrs) ->
     _els = [],
@@ -2879,9 +3231,12 @@ encode_muc_admin_continue(Thread, _xmlns_attrs) ->
                                                   _xmlns_attrs),
     {xmlel, <<"continue">>, _attrs, _els}.
 
-decode_muc_admin_continue_attr_thread(undefined) ->
+decode_muc_admin_continue_attr_thread(__TopXMLNS,
+                                     undefined) ->
     undefined;
-decode_muc_admin_continue_attr_thread(_val) -> _val.
+decode_muc_admin_continue_attr_thread(__TopXMLNS,
+                                     _val) ->
+    _val.
 
 encode_muc_admin_continue_attr_thread(undefined,
                                      _acc) ->
@@ -2889,25 +3244,28 @@ encode_muc_admin_continue_attr_thread(undefined,
 encode_muc_admin_continue_attr_thread(_val, _acc) ->
     [{<<"thread">>, _val} | _acc].
 
-decode_muc_admin_actor({xmlel, <<"actor">>, _attrs,
-                       _els}) ->
-    {Jid, Nick} = decode_muc_admin_actor_attrs(_attrs,
-                                              undefined, undefined),
+decode_muc_admin_actor(__TopXMLNS,
+                      {xmlel, <<"actor">>, _attrs, _els}) ->
+    {Jid, Nick} = decode_muc_admin_actor_attrs(__TopXMLNS,
+                                              _attrs, undefined, undefined),
     {muc_actor, Jid, Nick}.
 
-decode_muc_admin_actor_attrs([{<<"jid">>, _val}
-                             | _attrs],
-                            _Jid, Nick) ->
-    decode_muc_admin_actor_attrs(_attrs, _val, Nick);
-decode_muc_admin_actor_attrs([{<<"nick">>, _val}
-                             | _attrs],
-                            Jid, _Nick) ->
-    decode_muc_admin_actor_attrs(_attrs, Jid, _val);
-decode_muc_admin_actor_attrs([_ | _attrs], Jid, Nick) ->
-    decode_muc_admin_actor_attrs(_attrs, Jid, Nick);
-decode_muc_admin_actor_attrs([], Jid, Nick) ->
-    {decode_muc_admin_actor_attr_jid(Jid),
-     decode_muc_admin_actor_attr_nick(Nick)}.
+decode_muc_admin_actor_attrs(__TopXMLNS,
+                            [{<<"jid">>, _val} | _attrs], _Jid, Nick) ->
+    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, _val,
+                                Nick);
+decode_muc_admin_actor_attrs(__TopXMLNS,
+                            [{<<"nick">>, _val} | _attrs], Jid, _Nick) ->
+    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, Jid,
+                                _val);
+decode_muc_admin_actor_attrs(__TopXMLNS, [_ | _attrs],
+                            Jid, Nick) ->
+    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, Jid,
+                                Nick);
+decode_muc_admin_actor_attrs(__TopXMLNS, [], Jid,
+                            Nick) ->
+    {decode_muc_admin_actor_attr_jid(__TopXMLNS, Jid),
+     decode_muc_admin_actor_attr_nick(__TopXMLNS, Nick)}.
 
 encode_muc_admin_actor({muc_actor, Jid, Nick},
                       _xmlns_attrs) ->
@@ -2917,13 +3275,14 @@ encode_muc_admin_actor({muc_actor, Jid, Nick},
                                                                              _xmlns_attrs)),
     {xmlel, <<"actor">>, _attrs, _els}.
 
-decode_muc_admin_actor_attr_jid(undefined) -> undefined;
-decode_muc_admin_actor_attr_jid(_val) ->
+decode_muc_admin_actor_attr_jid(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_admin_actor_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"actor">>,
-                        <<"http://jabber.org/protocol/muc#admin">>}});
+                       {bad_attr_value, <<"jid">>, <<"actor">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -2932,104 +3291,103 @@ encode_muc_admin_actor_attr_jid(undefined, _acc) ->
 encode_muc_admin_actor_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_admin_actor_attr_nick(undefined) ->
+decode_muc_admin_actor_attr_nick(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_muc_admin_actor_attr_nick(_val) -> _val.
+decode_muc_admin_actor_attr_nick(__TopXMLNS, _val) ->
+    _val.
 
 encode_muc_admin_actor_attr_nick(undefined, _acc) ->
     _acc;
 encode_muc_admin_actor_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
-decode_muc_admin_item({xmlel, <<"item">>, _attrs,
-                      _els}) ->
+decode_muc_admin_item(__TopXMLNS,
+                     {xmlel, <<"item">>, _attrs, _els}) ->
     {Actor, Continue, Reason} =
-       decode_muc_admin_item_els(_els, undefined, undefined,
-                                 undefined),
+       decode_muc_admin_item_els(__TopXMLNS, _els, undefined,
+                                 undefined, undefined),
     {Affiliation, Role, Jid, Nick} =
-       decode_muc_admin_item_attrs(_attrs, undefined,
-                                   undefined, undefined, undefined),
+       decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
+                                   undefined, undefined, undefined, undefined),
     {muc_item, Actor, Continue, Reason, Affiliation, Role,
      Jid, Nick}.
 
-decode_muc_admin_item_els([], Actor, Continue,
-                         Reason) ->
+decode_muc_admin_item_els(__TopXMLNS, [], Actor,
+                         Continue, Reason) ->
     {Actor, Continue, Reason};
-decode_muc_admin_item_els([{xmlel, <<"actor">>, _attrs,
-                           _} =
-                              _el
-                          | _els],
-                         Actor, Continue, Reason) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#admin">> ->
-          decode_muc_admin_item_els(_els,
-                                    decode_muc_admin_actor(_el), Continue,
-                                    Reason);
+decode_muc_admin_item_els(__TopXMLNS,
+                         [{xmlel, <<"actor">>, _attrs, _} = _el | _els], Actor,
+                         Continue, Reason) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_admin_item_els(__TopXMLNS, _els,
+                                    decode_muc_admin_actor(__TopXMLNS, _el),
+                                    Continue, Reason);
        true ->
-          decode_muc_admin_item_els(_els, Actor, Continue, Reason)
+          decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                                    Continue, Reason)
     end;
-decode_muc_admin_item_els([{xmlel, <<"continue">>,
-                           _attrs, _} =
-                              _el
-                          | _els],
+decode_muc_admin_item_els(__TopXMLNS,
+                         [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
                          Actor, Continue, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#admin">> ->
-          decode_muc_admin_item_els(_els, Actor,
-                                    decode_muc_admin_continue(_el), Reason);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                                    decode_muc_admin_continue(__TopXMLNS, _el),
+                                    Reason);
        true ->
-          decode_muc_admin_item_els(_els, Actor, Continue, Reason)
+          decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                                    Continue, Reason)
     end;
-decode_muc_admin_item_els([{xmlel, <<"reason">>, _attrs,
-                           _} =
-                              _el
-                          | _els],
+decode_muc_admin_item_els(__TopXMLNS,
+                         [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
                          Actor, Continue, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#admin">> ->
-          decode_muc_admin_item_els(_els, Actor, Continue,
-                                    decode_muc_admin_reason(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                                    Continue,
+                                    decode_muc_admin_reason(__TopXMLNS, _el));
        true ->
-          decode_muc_admin_item_els(_els, Actor, Continue, Reason)
+          decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                                    Continue, Reason)
     end;
-decode_muc_admin_item_els([_ | _els], Actor, Continue,
-                         Reason) ->
-    decode_muc_admin_item_els(_els, Actor, Continue,
-                             Reason).
+decode_muc_admin_item_els(__TopXMLNS, [_ | _els], Actor,
+                         Continue, Reason) ->
+    decode_muc_admin_item_els(__TopXMLNS, _els, Actor,
+                             Continue, Reason).
 
-decode_muc_admin_item_attrs([{<<"affiliation">>, _val}
-                            | _attrs],
-                           _Affiliation, Role, Jid, Nick) ->
-    decode_muc_admin_item_attrs(_attrs, _val, Role, Jid,
-                               Nick);
-decode_muc_admin_item_attrs([{<<"role">>, _val}
-                            | _attrs],
-                           Affiliation, _Role, Jid, Nick) ->
-    decode_muc_admin_item_attrs(_attrs, Affiliation, _val,
-                               Jid, Nick);
-decode_muc_admin_item_attrs([{<<"jid">>, _val}
-                            | _attrs],
-                           Affiliation, Role, _Jid, Nick) ->
-    decode_muc_admin_item_attrs(_attrs, Affiliation, Role,
-                               _val, Nick);
-decode_muc_admin_item_attrs([{<<"nick">>, _val}
-                            | _attrs],
-                           Affiliation, Role, Jid, _Nick) ->
-    decode_muc_admin_item_attrs(_attrs, Affiliation, Role,
-                               Jid, _val);
-decode_muc_admin_item_attrs([_ | _attrs], Affiliation,
+decode_muc_admin_item_attrs(__TopXMLNS,
+                           [{<<"affiliation">>, _val} | _attrs], _Affiliation,
                            Role, Jid, Nick) ->
-    decode_muc_admin_item_attrs(_attrs, Affiliation, Role,
-                               Jid, Nick);
-decode_muc_admin_item_attrs([], Affiliation, Role, Jid,
-                           Nick) ->
-    {decode_muc_admin_item_attr_affiliation(Affiliation),
-     decode_muc_admin_item_attr_role(Role),
-     decode_muc_admin_item_attr_jid(Jid),
-     decode_muc_admin_item_attr_nick(Nick)}.
+    decode_muc_admin_item_attrs(__TopXMLNS, _attrs, _val,
+                               Role, Jid, Nick);
+decode_muc_admin_item_attrs(__TopXMLNS,
+                           [{<<"role">>, _val} | _attrs], Affiliation, _Role,
+                           Jid, Nick) ->
+    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
+                               Affiliation, _val, Jid, Nick);
+decode_muc_admin_item_attrs(__TopXMLNS,
+                           [{<<"jid">>, _val} | _attrs], Affiliation, Role,
+                           _Jid, Nick) ->
+    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
+                               Affiliation, Role, _val, Nick);
+decode_muc_admin_item_attrs(__TopXMLNS,
+                           [{<<"nick">>, _val} | _attrs], Affiliation, Role,
+                           Jid, _Nick) ->
+    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
+                               Affiliation, Role, Jid, _val);
+decode_muc_admin_item_attrs(__TopXMLNS, [_ | _attrs],
+                           Affiliation, Role, Jid, Nick) ->
+    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
+                               Affiliation, Role, Jid, Nick);
+decode_muc_admin_item_attrs(__TopXMLNS, [], Affiliation,
+                           Role, Jid, Nick) ->
+    {decode_muc_admin_item_attr_affiliation(__TopXMLNS,
+                                           Affiliation),
+     decode_muc_admin_item_attr_role(__TopXMLNS, Role),
+     decode_muc_admin_item_attr_jid(__TopXMLNS, Jid),
+     decode_muc_admin_item_attr_nick(__TopXMLNS, Nick)}.
 
 encode_muc_admin_item({muc_item, Actor, Continue,
                       Reason, Affiliation, Role, Jid, Nick},
@@ -3059,16 +3417,18 @@ encode_muc_admin_item({muc_item, Actor, Continue,
 'encode_muc_admin_item_$reason'(Reason, _acc) ->
     [encode_muc_admin_reason(Reason, []) | _acc].
 
-decode_muc_admin_item_attr_affiliation(undefined) ->
+decode_muc_admin_item_attr_affiliation(__TopXMLNS,
+                                      undefined) ->
     undefined;
-decode_muc_admin_item_attr_affiliation(_val) ->
+decode_muc_admin_item_attr_affiliation(__TopXMLNS,
+                                      _val) ->
     case catch dec_enum(_val,
                        [admin, member, none, outcast, owner])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"affiliation">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#admin">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3078,15 +3438,16 @@ encode_muc_admin_item_attr_affiliation(undefined,
 encode_muc_admin_item_attr_affiliation(_val, _acc) ->
     [{<<"affiliation">>, enc_enum(_val)} | _acc].
 
-decode_muc_admin_item_attr_role(undefined) -> undefined;
-decode_muc_admin_item_attr_role(_val) ->
+decode_muc_admin_item_attr_role(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_admin_item_attr_role(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [moderator, none, participant, visitor])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"role">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#admin">>}});
+                       {bad_attr_value, <<"role">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3095,13 +3456,13 @@ encode_muc_admin_item_attr_role(undefined, _acc) ->
 encode_muc_admin_item_attr_role(_val, _acc) ->
     [{<<"role">>, enc_enum(_val)} | _acc].
 
-decode_muc_admin_item_attr_jid(undefined) -> undefined;
-decode_muc_admin_item_attr_jid(_val) ->
+decode_muc_admin_item_attr_jid(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_admin_item_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#admin">>}});
+                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3109,43 +3470,48 @@ encode_muc_admin_item_attr_jid(undefined, _acc) -> _acc;
 encode_muc_admin_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_admin_item_attr_nick(undefined) -> undefined;
-decode_muc_admin_item_attr_nick(_val) -> _val.
+decode_muc_admin_item_attr_nick(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_admin_item_attr_nick(__TopXMLNS, _val) ->
+    _val.
 
 encode_muc_admin_item_attr_nick(undefined, _acc) ->
     _acc;
 encode_muc_admin_item_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
-decode_muc_owner({xmlel, <<"query">>, _attrs, _els}) ->
-    {Config, Destroy} = decode_muc_owner_els(_els,
-                                            undefined, undefined),
+decode_muc_owner(__TopXMLNS,
+                {xmlel, <<"query">>, _attrs, _els}) ->
+    {Config, Destroy} = decode_muc_owner_els(__TopXMLNS,
+                                            _els, undefined, undefined),
     {muc_owner, Destroy, Config}.
 
-decode_muc_owner_els([], Config, Destroy) ->
+decode_muc_owner_els(__TopXMLNS, [], Config, Destroy) ->
     {Config, Destroy};
-decode_muc_owner_els([{xmlel, <<"destroy">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
+decode_muc_owner_els(__TopXMLNS,
+                    [{xmlel, <<"destroy">>, _attrs, _} = _el | _els],
                     Config, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
-          decode_muc_owner_els(_els, Config,
-                               decode_muc_owner_destroy(_el));
-       true -> decode_muc_owner_els(_els, Config, Destroy)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_owner_els(__TopXMLNS, _els, Config,
+                               decode_muc_owner_destroy(__TopXMLNS, _el));
+       true ->
+          decode_muc_owner_els(__TopXMLNS, _els, Config, Destroy)
     end;
-decode_muc_owner_els([{xmlel, <<"x">>, _attrs, _} = _el
-                     | _els],
-                    Config, Destroy) ->
+decode_muc_owner_els(__TopXMLNS,
+                    [{xmlel, <<"x">>, _attrs, _} = _el | _els], Config,
+                    Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"jabber:x:data">> ->
-          decode_muc_owner_els(_els, decode_xdata(_el), Destroy);
-       true -> decode_muc_owner_els(_els, Config, Destroy)
+          decode_muc_owner_els(__TopXMLNS, _els,
+                               decode_xdata(_xmlns, _el), Destroy);
+       true ->
+          decode_muc_owner_els(__TopXMLNS, _els, Config, Destroy)
     end;
-decode_muc_owner_els([_ | _els], Config, Destroy) ->
-    decode_muc_owner_els(_els, Config, Destroy).
+decode_muc_owner_els(__TopXMLNS, [_ | _els], Config,
+                    Destroy) ->
+    decode_muc_owner_els(__TopXMLNS, _els, Config, Destroy).
 
 encode_muc_owner({muc_owner, Destroy, Config},
                 _xmlns_attrs) ->
@@ -3164,53 +3530,57 @@ encode_muc_owner({muc_owner, Destroy, Config},
 'encode_muc_owner_$destroy'(Destroy, _acc) ->
     [encode_muc_owner_destroy(Destroy, []) | _acc].
 
-decode_muc_owner_destroy({xmlel, <<"destroy">>, _attrs,
-                         _els}) ->
-    {Password, Reason} = decode_muc_owner_destroy_els(_els,
-                                                     undefined, undefined),
-    Jid = decode_muc_owner_destroy_attrs(_attrs, undefined),
+decode_muc_owner_destroy(__TopXMLNS,
+                        {xmlel, <<"destroy">>, _attrs, _els}) ->
+    {Password, Reason} =
+       decode_muc_owner_destroy_els(__TopXMLNS, _els,
+                                    undefined, undefined),
+    Jid = decode_muc_owner_destroy_attrs(__TopXMLNS, _attrs,
+                                        undefined),
     {muc_owner_destroy, Jid, Reason, Password}.
 
-decode_muc_owner_destroy_els([], Password, Reason) ->
+decode_muc_owner_destroy_els(__TopXMLNS, [], Password,
+                            Reason) ->
     {Password, Reason};
-decode_muc_owner_destroy_els([{xmlel, <<"password">>,
-                              _attrs, _} =
-                                 _el
-                             | _els],
+decode_muc_owner_destroy_els(__TopXMLNS,
+                            [{xmlel, <<"password">>, _attrs, _} = _el | _els],
                             Password, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
-          decode_muc_owner_destroy_els(_els,
-                                       decode_muc_owner_password(_el), Reason);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_owner_destroy_els(__TopXMLNS, _els,
+                                       decode_muc_owner_password(__TopXMLNS,
+                                                                 _el),
+                                       Reason);
        true ->
-          decode_muc_owner_destroy_els(_els, Password, Reason)
+          decode_muc_owner_destroy_els(__TopXMLNS, _els, Password,
+                                       Reason)
     end;
-decode_muc_owner_destroy_els([{xmlel, <<"reason">>,
-                              _attrs, _} =
-                                 _el
-                             | _els],
+decode_muc_owner_destroy_els(__TopXMLNS,
+                            [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
                             Password, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
-          decode_muc_owner_destroy_els(_els, Password,
-                                       decode_muc_owner_reason(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_owner_destroy_els(__TopXMLNS, _els, Password,
+                                       decode_muc_owner_reason(__TopXMLNS,
+                                                               _el));
        true ->
-          decode_muc_owner_destroy_els(_els, Password, Reason)
+          decode_muc_owner_destroy_els(__TopXMLNS, _els, Password,
+                                       Reason)
     end;
-decode_muc_owner_destroy_els([_ | _els], Password,
-                            Reason) ->
-    decode_muc_owner_destroy_els(_els, Password, Reason).
-
-decode_muc_owner_destroy_attrs([{<<"jid">>, _val}
-                               | _attrs],
-                              _Jid) ->
-    decode_muc_owner_destroy_attrs(_attrs, _val);
-decode_muc_owner_destroy_attrs([_ | _attrs], Jid) ->
-    decode_muc_owner_destroy_attrs(_attrs, Jid);
-decode_muc_owner_destroy_attrs([], Jid) ->
-    decode_muc_owner_destroy_attr_jid(Jid).
+decode_muc_owner_destroy_els(__TopXMLNS, [_ | _els],
+                            Password, Reason) ->
+    decode_muc_owner_destroy_els(__TopXMLNS, _els, Password,
+                                Reason).
+
+decode_muc_owner_destroy_attrs(__TopXMLNS,
+                              [{<<"jid">>, _val} | _attrs], _Jid) ->
+    decode_muc_owner_destroy_attrs(__TopXMLNS, _attrs,
+                                  _val);
+decode_muc_owner_destroy_attrs(__TopXMLNS, [_ | _attrs],
+                              Jid) ->
+    decode_muc_owner_destroy_attrs(__TopXMLNS, _attrs, Jid);
+decode_muc_owner_destroy_attrs(__TopXMLNS, [], Jid) ->
+    decode_muc_owner_destroy_attr_jid(__TopXMLNS, Jid).
 
 encode_muc_owner_destroy({muc_owner_destroy, Jid,
                          Reason, Password},
@@ -3232,14 +3602,15 @@ encode_muc_owner_destroy({muc_owner_destroy, Jid,
 'encode_muc_owner_destroy_$reason'(Reason, _acc) ->
     [encode_muc_owner_reason(Reason, []) | _acc].
 
-decode_muc_owner_destroy_attr_jid(undefined) ->
+decode_muc_owner_destroy_attr_jid(__TopXMLNS,
+                                 undefined) ->
     undefined;
-decode_muc_owner_destroy_attr_jid(_val) ->
+decode_muc_owner_destroy_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"destroy">>,
-                        <<"http://jabber.org/protocol/muc#owner">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3248,154 +3619,159 @@ encode_muc_owner_destroy_attr_jid(undefined, _acc) ->
 encode_muc_owner_destroy_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_owner_reason({xmlel, <<"reason">>, _attrs,
-                        _els}) ->
-    Cdata = decode_muc_owner_reason_els(_els, <<>>), Cdata.
+decode_muc_owner_reason(__TopXMLNS,
+                       {xmlel, <<"reason">>, _attrs, _els}) ->
+    Cdata = decode_muc_owner_reason_els(__TopXMLNS, _els,
+                                       <<>>),
+    Cdata.
 
-decode_muc_owner_reason_els([], Cdata) ->
-    decode_muc_owner_reason_cdata(Cdata);
-decode_muc_owner_reason_els([{xmlcdata, _data} | _els],
-                           Cdata) ->
-    decode_muc_owner_reason_els(_els,
+decode_muc_owner_reason_els(__TopXMLNS, [], Cdata) ->
+    decode_muc_owner_reason_cdata(__TopXMLNS, Cdata);
+decode_muc_owner_reason_els(__TopXMLNS,
+                           [{xmlcdata, _data} | _els], Cdata) ->
+    decode_muc_owner_reason_els(__TopXMLNS, _els,
                                <<Cdata/binary, _data/binary>>);
-decode_muc_owner_reason_els([_ | _els], Cdata) ->
-    decode_muc_owner_reason_els(_els, Cdata).
+decode_muc_owner_reason_els(__TopXMLNS, [_ | _els],
+                           Cdata) ->
+    decode_muc_owner_reason_els(__TopXMLNS, _els, Cdata).
 
 encode_muc_owner_reason(Cdata, _xmlns_attrs) ->
     _els = encode_muc_owner_reason_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"reason">>, _attrs, _els}.
 
-decode_muc_owner_reason_cdata(<<>>) -> undefined;
-decode_muc_owner_reason_cdata(_val) -> _val.
+decode_muc_owner_reason_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_muc_owner_reason_cdata(__TopXMLNS, _val) -> _val.
 
 encode_muc_owner_reason_cdata(undefined, _acc) -> _acc;
 encode_muc_owner_reason_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_muc_owner_password({xmlel, <<"password">>,
-                          _attrs, _els}) ->
-    Cdata = decode_muc_owner_password_els(_els, <<>>),
+decode_muc_owner_password(__TopXMLNS,
+                         {xmlel, <<"password">>, _attrs, _els}) ->
+    Cdata = decode_muc_owner_password_els(__TopXMLNS, _els,
+                                         <<>>),
     Cdata.
 
-decode_muc_owner_password_els([], Cdata) ->
-    decode_muc_owner_password_cdata(Cdata);
-decode_muc_owner_password_els([{xmlcdata, _data}
-                              | _els],
-                             Cdata) ->
-    decode_muc_owner_password_els(_els,
+decode_muc_owner_password_els(__TopXMLNS, [], Cdata) ->
+    decode_muc_owner_password_cdata(__TopXMLNS, Cdata);
+decode_muc_owner_password_els(__TopXMLNS,
+                             [{xmlcdata, _data} | _els], Cdata) ->
+    decode_muc_owner_password_els(__TopXMLNS, _els,
                                  <<Cdata/binary, _data/binary>>);
-decode_muc_owner_password_els([_ | _els], Cdata) ->
-    decode_muc_owner_password_els(_els, Cdata).
+decode_muc_owner_password_els(__TopXMLNS, [_ | _els],
+                             Cdata) ->
+    decode_muc_owner_password_els(__TopXMLNS, _els, Cdata).
 
 encode_muc_owner_password(Cdata, _xmlns_attrs) ->
     _els = encode_muc_owner_password_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"password">>, _attrs, _els}.
 
-decode_muc_owner_password_cdata(<<>>) -> undefined;
-decode_muc_owner_password_cdata(_val) -> _val.
+decode_muc_owner_password_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_muc_owner_password_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_muc_owner_password_cdata(undefined, _acc) ->
     _acc;
 encode_muc_owner_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_muc_user({xmlel, <<"x">>, _attrs, _els}) ->
+decode_muc_user(__TopXMLNS,
+               {xmlel, <<"x">>, _attrs, _els}) ->
     {Status_codes, Items, Invites, Decline, Destroy} =
-       decode_muc_user_els(_els, [], [], [], undefined,
-                           undefined),
-    Password = decode_muc_user_attrs(_attrs, undefined),
+       decode_muc_user_els(__TopXMLNS, _els, [], [], [],
+                           undefined, undefined),
+    Password = decode_muc_user_attrs(__TopXMLNS, _attrs,
+                                    undefined),
     {muc_user, Decline, Destroy, Invites, Items,
      Status_codes, Password}.
 
-decode_muc_user_els([], Status_codes, Items, Invites,
-                   Decline, Destroy) ->
+decode_muc_user_els(__TopXMLNS, [], Status_codes, Items,
+                   Invites, Decline, Destroy) ->
     {lists:reverse(Status_codes), lists:reverse(Items),
      lists:reverse(Invites), Decline, Destroy};
-decode_muc_user_els([{xmlel, <<"decline">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_muc_user_els(__TopXMLNS,
+                   [{xmlel, <<"decline">>, _attrs, _} = _el | _els],
                    Status_codes, Items, Invites, Decline, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              decode_muc_user_decline(_el), Destroy);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites,
+                              decode_muc_user_decline(__TopXMLNS, _el),
+                              Destroy);
        true ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, Destroy)
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline, Destroy)
     end;
-decode_muc_user_els([{xmlel, <<"destroy">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_muc_user_els(__TopXMLNS,
+                   [{xmlel, <<"destroy">>, _attrs, _} = _el | _els],
                    Status_codes, Items, Invites, Decline, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, decode_muc_user_destroy(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline,
+                              decode_muc_user_destroy(__TopXMLNS, _el));
        true ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, Destroy)
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline, Destroy)
     end;
-decode_muc_user_els([{xmlel, <<"invite">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_muc_user_els(__TopXMLNS,
+                   [{xmlel, <<"invite">>, _attrs, _} = _el | _els],
                    Status_codes, Items, Invites, Decline, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_els(_els, Status_codes, Items,
-                              [decode_muc_user_invite(_el) | Invites], Decline,
-                              Destroy);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items,
+                              [decode_muc_user_invite(__TopXMLNS, _el)
+                               | Invites],
+                              Decline, Destroy);
        true ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, Destroy)
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline, Destroy)
     end;
-decode_muc_user_els([{xmlel, <<"item">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_muc_user_els(__TopXMLNS,
+                   [{xmlel, <<"item">>, _attrs, _} = _el | _els],
                    Status_codes, Items, Invites, Decline, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_els(_els, Status_codes,
-                              [decode_muc_user_item(_el) | Items], Invites,
-                              Decline, Destroy);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              [decode_muc_user_item(__TopXMLNS, _el) | Items],
+                              Invites, Decline, Destroy);
        true ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, Destroy)
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline, Destroy)
     end;
-decode_muc_user_els([{xmlel, <<"status">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_muc_user_els(__TopXMLNS,
+                   [{xmlel, <<"status">>, _attrs, _} = _el | _els],
                    Status_codes, Items, Invites, Decline, Destroy) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_els(_els,
-                              case decode_muc_user_status(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_els(__TopXMLNS, _els,
+                              case decode_muc_user_status(__TopXMLNS, _el) of
                                 undefined -> Status_codes;
                                 _new_el -> [_new_el | Status_codes]
                               end,
                               Items, Invites, Decline, Destroy);
        true ->
-          decode_muc_user_els(_els, Status_codes, Items, Invites,
-                              Decline, Destroy)
+          decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                              Items, Invites, Decline, Destroy)
     end;
-decode_muc_user_els([_ | _els], Status_codes, Items,
-                   Invites, Decline, Destroy) ->
-    decode_muc_user_els(_els, Status_codes, Items, Invites,
-                       Decline, Destroy).
-
-decode_muc_user_attrs([{<<"password">>, _val} | _attrs],
-                     _Password) ->
-    decode_muc_user_attrs(_attrs, _val);
-decode_muc_user_attrs([_ | _attrs], Password) ->
-    decode_muc_user_attrs(_attrs, Password);
-decode_muc_user_attrs([], Password) ->
-    decode_muc_user_attr_password(Password).
+decode_muc_user_els(__TopXMLNS, [_ | _els],
+                   Status_codes, Items, Invites, Decline, Destroy) ->
+    decode_muc_user_els(__TopXMLNS, _els, Status_codes,
+                       Items, Invites, Decline, Destroy).
+
+decode_muc_user_attrs(__TopXMLNS,
+                     [{<<"password">>, _val} | _attrs], _Password) ->
+    decode_muc_user_attrs(__TopXMLNS, _attrs, _val);
+decode_muc_user_attrs(__TopXMLNS, [_ | _attrs],
+                     Password) ->
+    decode_muc_user_attrs(__TopXMLNS, _attrs, Password);
+decode_muc_user_attrs(__TopXMLNS, [], Password) ->
+    decode_muc_user_attr_password(__TopXMLNS, Password).
 
 encode_muc_user({muc_user, Decline, Destroy, Invites,
                 Items, Status_codes, Password},
@@ -3435,99 +3811,100 @@ encode_muc_user({muc_user, Decline, Destroy, Invites,
 'encode_muc_user_$destroy'(Destroy, _acc) ->
     [encode_muc_user_destroy(Destroy, []) | _acc].
 
-decode_muc_user_attr_password(undefined) -> undefined;
-decode_muc_user_attr_password(_val) -> _val.
+decode_muc_user_attr_password(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_attr_password(__TopXMLNS, _val) -> _val.
 
 encode_muc_user_attr_password(undefined, _acc) -> _acc;
 encode_muc_user_attr_password(_val, _acc) ->
     [{<<"password">>, _val} | _acc].
 
-decode_muc_user_item({xmlel, <<"item">>, _attrs,
-                     _els}) ->
+decode_muc_user_item(__TopXMLNS,
+                    {xmlel, <<"item">>, _attrs, _els}) ->
     {Actor, Continue, Reason} =
-       decode_muc_user_item_els(_els, undefined, undefined,
-                                undefined),
+       decode_muc_user_item_els(__TopXMLNS, _els, undefined,
+                                undefined, undefined),
     {Affiliation, Role, Jid, Nick} =
-       decode_muc_user_item_attrs(_attrs, undefined, undefined,
-                                  undefined, undefined),
+       decode_muc_user_item_attrs(__TopXMLNS, _attrs,
+                                  undefined, undefined, undefined, undefined),
     {muc_item, Actor, Continue, Reason, Affiliation, Role,
      Jid, Nick}.
 
-decode_muc_user_item_els([], Actor, Continue, Reason) ->
+decode_muc_user_item_els(__TopXMLNS, [], Actor,
+                        Continue, Reason) ->
     {Actor, Continue, Reason};
-decode_muc_user_item_els([{xmlel, <<"actor">>, _attrs,
-                          _} =
-                             _el
-                         | _els],
+decode_muc_user_item_els(__TopXMLNS,
+                        [{xmlel, <<"actor">>, _attrs, _} = _el | _els], Actor,
+                        Continue, Reason) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_item_els(__TopXMLNS, _els,
+                                   decode_muc_user_actor(__TopXMLNS, _el),
+                                   Continue, Reason);
+       true ->
+          decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                                   Continue, Reason)
+    end;
+decode_muc_user_item_els(__TopXMLNS,
+                        [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
                         Actor, Continue, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_item_els(_els,
-                                   decode_muc_user_actor(_el), Continue,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                                   decode_muc_user_continue(__TopXMLNS, _el),
                                    Reason);
        true ->
-          decode_muc_user_item_els(_els, Actor, Continue, Reason)
+          decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                                   Continue, Reason)
     end;
-decode_muc_user_item_els([{xmlel, <<"continue">>,
-                          _attrs, _} =
-                             _el
-                         | _els],
-                        Actor, Continue, Reason) ->
+decode_muc_user_item_els(__TopXMLNS,
+                        [{xmlel, <<"reason">>, _attrs, _} = _el | _els], Actor,
+                        Continue, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_item_els(_els, Actor,
-                                   decode_muc_user_continue(_el), Reason);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                                   Continue,
+                                   decode_muc_user_reason(__TopXMLNS, _el));
        true ->
-          decode_muc_user_item_els(_els, Actor, Continue, Reason)
+          decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                                   Continue, Reason)
     end;
-decode_muc_user_item_els([{xmlel, <<"reason">>, _attrs,
-                          _} =
-                             _el
-                         | _els],
-                        Actor, Continue, Reason) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_item_els(_els, Actor, Continue,
-                                   decode_muc_user_reason(_el));
-       true ->
-          decode_muc_user_item_els(_els, Actor, Continue, Reason)
-    end;
-decode_muc_user_item_els([_ | _els], Actor, Continue,
-                        Reason) ->
-    decode_muc_user_item_els(_els, Actor, Continue, Reason).
-
-decode_muc_user_item_attrs([{<<"affiliation">>, _val}
-                           | _attrs],
-                          _Affiliation, Role, Jid, Nick) ->
-    decode_muc_user_item_attrs(_attrs, _val, Role, Jid,
-                              Nick);
-decode_muc_user_item_attrs([{<<"role">>, _val}
-                           | _attrs],
-                          Affiliation, _Role, Jid, Nick) ->
-    decode_muc_user_item_attrs(_attrs, Affiliation, _val,
-                              Jid, Nick);
-decode_muc_user_item_attrs([{<<"jid">>, _val} | _attrs],
-                          Affiliation, Role, _Jid, Nick) ->
-    decode_muc_user_item_attrs(_attrs, Affiliation, Role,
-                              _val, Nick);
-decode_muc_user_item_attrs([{<<"nick">>, _val}
-                           | _attrs],
-                          Affiliation, Role, Jid, _Nick) ->
-    decode_muc_user_item_attrs(_attrs, Affiliation, Role,
-                              Jid, _val);
-decode_muc_user_item_attrs([_ | _attrs], Affiliation,
+decode_muc_user_item_els(__TopXMLNS, [_ | _els], Actor,
+                        Continue, Reason) ->
+    decode_muc_user_item_els(__TopXMLNS, _els, Actor,
+                            Continue, Reason).
+
+decode_muc_user_item_attrs(__TopXMLNS,
+                          [{<<"affiliation">>, _val} | _attrs], _Affiliation,
                           Role, Jid, Nick) ->
-    decode_muc_user_item_attrs(_attrs, Affiliation, Role,
-                              Jid, Nick);
-decode_muc_user_item_attrs([], Affiliation, Role, Jid,
-                          Nick) ->
-    {decode_muc_user_item_attr_affiliation(Affiliation),
-     decode_muc_user_item_attr_role(Role),
-     decode_muc_user_item_attr_jid(Jid),
-     decode_muc_user_item_attr_nick(Nick)}.
+    decode_muc_user_item_attrs(__TopXMLNS, _attrs, _val,
+                              Role, Jid, Nick);
+decode_muc_user_item_attrs(__TopXMLNS,
+                          [{<<"role">>, _val} | _attrs], Affiliation, _Role,
+                          Jid, Nick) ->
+    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
+                              Affiliation, _val, Jid, Nick);
+decode_muc_user_item_attrs(__TopXMLNS,
+                          [{<<"jid">>, _val} | _attrs], Affiliation, Role,
+                          _Jid, Nick) ->
+    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
+                              Affiliation, Role, _val, Nick);
+decode_muc_user_item_attrs(__TopXMLNS,
+                          [{<<"nick">>, _val} | _attrs], Affiliation, Role,
+                          Jid, _Nick) ->
+    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
+                              Affiliation, Role, Jid, _val);
+decode_muc_user_item_attrs(__TopXMLNS, [_ | _attrs],
+                          Affiliation, Role, Jid, Nick) ->
+    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
+                              Affiliation, Role, Jid, Nick);
+decode_muc_user_item_attrs(__TopXMLNS, [], Affiliation,
+                          Role, Jid, Nick) ->
+    {decode_muc_user_item_attr_affiliation(__TopXMLNS,
+                                          Affiliation),
+     decode_muc_user_item_attr_role(__TopXMLNS, Role),
+     decode_muc_user_item_attr_jid(__TopXMLNS, Jid),
+     decode_muc_user_item_attr_nick(__TopXMLNS, Nick)}.
 
 encode_muc_user_item({muc_item, Actor, Continue, Reason,
                      Affiliation, Role, Jid, Nick},
@@ -3556,16 +3933,18 @@ encode_muc_user_item({muc_item, Actor, Continue, Reason,
 'encode_muc_user_item_$reason'(Reason, _acc) ->
     [encode_muc_user_reason(Reason, []) | _acc].
 
-decode_muc_user_item_attr_affiliation(undefined) ->
+decode_muc_user_item_attr_affiliation(__TopXMLNS,
+                                     undefined) ->
     undefined;
-decode_muc_user_item_attr_affiliation(_val) ->
+decode_muc_user_item_attr_affiliation(__TopXMLNS,
+                                     _val) ->
     case catch dec_enum(_val,
                        [admin, member, none, outcast, owner])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"affiliation">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3575,15 +3954,15 @@ encode_muc_user_item_attr_affiliation(undefined,
 encode_muc_user_item_attr_affiliation(_val, _acc) ->
     [{<<"affiliation">>, enc_enum(_val)} | _acc].
 
-decode_muc_user_item_attr_role(undefined) -> undefined;
-decode_muc_user_item_attr_role(_val) ->
+decode_muc_user_item_attr_role(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_item_attr_role(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [moderator, none, participant, visitor])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"role">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                       {bad_attr_value, <<"role">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3591,13 +3970,13 @@ encode_muc_user_item_attr_role(undefined, _acc) -> _acc;
 encode_muc_user_item_attr_role(_val, _acc) ->
     [{<<"role">>, enc_enum(_val)} | _acc].
 
-decode_muc_user_item_attr_jid(undefined) -> undefined;
-decode_muc_user_item_attr_jid(_val) ->
+decode_muc_user_item_attr_jid(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_item_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3605,26 +3984,29 @@ encode_muc_user_item_attr_jid(undefined, _acc) -> _acc;
 encode_muc_user_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_item_attr_nick(undefined) -> undefined;
-decode_muc_user_item_attr_nick(_val) -> _val.
+decode_muc_user_item_attr_nick(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_item_attr_nick(__TopXMLNS, _val) ->
+    _val.
 
 encode_muc_user_item_attr_nick(undefined, _acc) -> _acc;
 encode_muc_user_item_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
-decode_muc_user_status({xmlel, <<"status">>, _attrs,
-                       _els}) ->
-    Code = decode_muc_user_status_attrs(_attrs, undefined),
+decode_muc_user_status(__TopXMLNS,
+                      {xmlel, <<"status">>, _attrs, _els}) ->
+    Code = decode_muc_user_status_attrs(__TopXMLNS, _attrs,
+                                       undefined),
     Code.
 
-decode_muc_user_status_attrs([{<<"code">>, _val}
-                             | _attrs],
-                            _Code) ->
-    decode_muc_user_status_attrs(_attrs, _val);
-decode_muc_user_status_attrs([_ | _attrs], Code) ->
-    decode_muc_user_status_attrs(_attrs, Code);
-decode_muc_user_status_attrs([], Code) ->
-    decode_muc_user_status_attr_code(Code).
+decode_muc_user_status_attrs(__TopXMLNS,
+                            [{<<"code">>, _val} | _attrs], _Code) ->
+    decode_muc_user_status_attrs(__TopXMLNS, _attrs, _val);
+decode_muc_user_status_attrs(__TopXMLNS, [_ | _attrs],
+                            Code) ->
+    decode_muc_user_status_attrs(__TopXMLNS, _attrs, Code);
+decode_muc_user_status_attrs(__TopXMLNS, [], Code) ->
+    decode_muc_user_status_attr_code(__TopXMLNS, Code).
 
 encode_muc_user_status(Code, _xmlns_attrs) ->
     _els = [],
@@ -3632,14 +4014,15 @@ encode_muc_user_status(Code, _xmlns_attrs) ->
                                              _xmlns_attrs),
     {xmlel, <<"status">>, _attrs, _els}.
 
-decode_muc_user_status_attr_code(undefined) ->
+decode_muc_user_status_attr_code(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_muc_user_status_attr_code(_val) ->
+decode_muc_user_status_attr_code(__TopXMLNS, _val) ->
     case catch dec_int(_val, 100, 999) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"code">>, <<"status">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3648,20 +4031,24 @@ encode_muc_user_status_attr_code(undefined, _acc) ->
 encode_muc_user_status_attr_code(_val, _acc) ->
     [{<<"code">>, enc_int(_val)} | _acc].
 
-decode_muc_user_continue({xmlel, <<"continue">>, _attrs,
-                         _els}) ->
-    Thread = decode_muc_user_continue_attrs(_attrs,
-                                           undefined),
+decode_muc_user_continue(__TopXMLNS,
+                        {xmlel, <<"continue">>, _attrs, _els}) ->
+    Thread = decode_muc_user_continue_attrs(__TopXMLNS,
+                                           _attrs, undefined),
     Thread.
 
-decode_muc_user_continue_attrs([{<<"thread">>, _val}
-                               | _attrs],
-                              _Thread) ->
-    decode_muc_user_continue_attrs(_attrs, _val);
-decode_muc_user_continue_attrs([_ | _attrs], Thread) ->
-    decode_muc_user_continue_attrs(_attrs, Thread);
-decode_muc_user_continue_attrs([], Thread) ->
-    decode_muc_user_continue_attr_thread(Thread).
+decode_muc_user_continue_attrs(__TopXMLNS,
+                              [{<<"thread">>, _val} | _attrs], _Thread) ->
+    decode_muc_user_continue_attrs(__TopXMLNS, _attrs,
+                                  _val);
+decode_muc_user_continue_attrs(__TopXMLNS, [_ | _attrs],
+                              Thread) ->
+    decode_muc_user_continue_attrs(__TopXMLNS, _attrs,
+                                  Thread);
+decode_muc_user_continue_attrs(__TopXMLNS, [],
+                              Thread) ->
+    decode_muc_user_continue_attr_thread(__TopXMLNS,
+                                        Thread).
 
 encode_muc_user_continue(Thread, _xmlns_attrs) ->
     _els = [],
@@ -3669,34 +4056,40 @@ encode_muc_user_continue(Thread, _xmlns_attrs) ->
                                                  _xmlns_attrs),
     {xmlel, <<"continue">>, _attrs, _els}.
 
-decode_muc_user_continue_attr_thread(undefined) ->
+decode_muc_user_continue_attr_thread(__TopXMLNS,
+                                    undefined) ->
     undefined;
-decode_muc_user_continue_attr_thread(_val) -> _val.
+decode_muc_user_continue_attr_thread(__TopXMLNS,
+                                    _val) ->
+    _val.
 
 encode_muc_user_continue_attr_thread(undefined, _acc) ->
     _acc;
 encode_muc_user_continue_attr_thread(_val, _acc) ->
     [{<<"thread">>, _val} | _acc].
 
-decode_muc_user_actor({xmlel, <<"actor">>, _attrs,
-                      _els}) ->
-    {Jid, Nick} = decode_muc_user_actor_attrs(_attrs,
-                                             undefined, undefined),
+decode_muc_user_actor(__TopXMLNS,
+                     {xmlel, <<"actor">>, _attrs, _els}) ->
+    {Jid, Nick} = decode_muc_user_actor_attrs(__TopXMLNS,
+                                             _attrs, undefined, undefined),
     {muc_actor, Jid, Nick}.
 
-decode_muc_user_actor_attrs([{<<"jid">>, _val}
-                            | _attrs],
-                           _Jid, Nick) ->
-    decode_muc_user_actor_attrs(_attrs, _val, Nick);
-decode_muc_user_actor_attrs([{<<"nick">>, _val}
-                            | _attrs],
-                           Jid, _Nick) ->
-    decode_muc_user_actor_attrs(_attrs, Jid, _val);
-decode_muc_user_actor_attrs([_ | _attrs], Jid, Nick) ->
-    decode_muc_user_actor_attrs(_attrs, Jid, Nick);
-decode_muc_user_actor_attrs([], Jid, Nick) ->
-    {decode_muc_user_actor_attr_jid(Jid),
-     decode_muc_user_actor_attr_nick(Nick)}.
+decode_muc_user_actor_attrs(__TopXMLNS,
+                           [{<<"jid">>, _val} | _attrs], _Jid, Nick) ->
+    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, _val,
+                               Nick);
+decode_muc_user_actor_attrs(__TopXMLNS,
+                           [{<<"nick">>, _val} | _attrs], Jid, _Nick) ->
+    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, Jid,
+                               _val);
+decode_muc_user_actor_attrs(__TopXMLNS, [_ | _attrs],
+                           Jid, Nick) ->
+    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, Jid,
+                               Nick);
+decode_muc_user_actor_attrs(__TopXMLNS, [], Jid,
+                           Nick) ->
+    {decode_muc_user_actor_attr_jid(__TopXMLNS, Jid),
+     decode_muc_user_actor_attr_nick(__TopXMLNS, Nick)}.
 
 encode_muc_user_actor({muc_actor, Jid, Nick},
                      _xmlns_attrs) ->
@@ -3706,13 +4099,13 @@ encode_muc_user_actor({muc_actor, Jid, Nick},
                                                                            _xmlns_attrs)),
     {xmlel, <<"actor">>, _attrs, _els}.
 
-decode_muc_user_actor_attr_jid(undefined) -> undefined;
-decode_muc_user_actor_attr_jid(_val) ->
+decode_muc_user_actor_attr_jid(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_actor_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"actor">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                       {bad_attr_value, <<"jid">>, <<"actor">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3720,50 +4113,57 @@ encode_muc_user_actor_attr_jid(undefined, _acc) -> _acc;
 encode_muc_user_actor_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_actor_attr_nick(undefined) -> undefined;
-decode_muc_user_actor_attr_nick(_val) -> _val.
+decode_muc_user_actor_attr_nick(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_user_actor_attr_nick(__TopXMLNS, _val) ->
+    _val.
 
 encode_muc_user_actor_attr_nick(undefined, _acc) ->
     _acc;
 encode_muc_user_actor_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
-decode_muc_user_invite({xmlel, <<"invite">>, _attrs,
-                       _els}) ->
-    Reason = decode_muc_user_invite_els(_els, undefined),
-    {To, From} = decode_muc_user_invite_attrs(_attrs,
-                                             undefined, undefined),
+decode_muc_user_invite(__TopXMLNS,
+                      {xmlel, <<"invite">>, _attrs, _els}) ->
+    Reason = decode_muc_user_invite_els(__TopXMLNS, _els,
+                                       undefined),
+    {To, From} = decode_muc_user_invite_attrs(__TopXMLNS,
+                                             _attrs, undefined, undefined),
     {muc_invite, Reason, From, To}.
 
-decode_muc_user_invite_els([], Reason) -> Reason;
-decode_muc_user_invite_els([{xmlel, <<"reason">>,
-                            _attrs, _} =
-                               _el
-                           | _els],
+decode_muc_user_invite_els(__TopXMLNS, [], Reason) ->
+    Reason;
+decode_muc_user_invite_els(__TopXMLNS,
+                          [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
                           Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_invite_els(_els,
-                                     decode_muc_user_reason(_el));
-       true -> decode_muc_user_invite_els(_els, Reason)
-    end;
-decode_muc_user_invite_els([_ | _els], Reason) ->
-    decode_muc_user_invite_els(_els, Reason).
-
-decode_muc_user_invite_attrs([{<<"to">>, _val}
-                             | _attrs],
-                            _To, From) ->
-    decode_muc_user_invite_attrs(_attrs, _val, From);
-decode_muc_user_invite_attrs([{<<"from">>, _val}
-                             | _attrs],
-                            To, _From) ->
-    decode_muc_user_invite_attrs(_attrs, To, _val);
-decode_muc_user_invite_attrs([_ | _attrs], To, From) ->
-    decode_muc_user_invite_attrs(_attrs, To, From);
-decode_muc_user_invite_attrs([], To, From) ->
-    {decode_muc_user_invite_attr_to(To),
-     decode_muc_user_invite_attr_from(From)}.
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_invite_els(__TopXMLNS, _els,
+                                     decode_muc_user_reason(__TopXMLNS, _el));
+       true ->
+          decode_muc_user_invite_els(__TopXMLNS, _els, Reason)
+    end;
+decode_muc_user_invite_els(__TopXMLNS, [_ | _els],
+                          Reason) ->
+    decode_muc_user_invite_els(__TopXMLNS, _els, Reason).
+
+decode_muc_user_invite_attrs(__TopXMLNS,
+                            [{<<"to">>, _val} | _attrs], _To, From) ->
+    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, _val,
+                                From);
+decode_muc_user_invite_attrs(__TopXMLNS,
+                            [{<<"from">>, _val} | _attrs], To, _From) ->
+    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, To,
+                                _val);
+decode_muc_user_invite_attrs(__TopXMLNS, [_ | _attrs],
+                            To, From) ->
+    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, To,
+                                From);
+decode_muc_user_invite_attrs(__TopXMLNS, [], To,
+                            From) ->
+    {decode_muc_user_invite_attr_to(__TopXMLNS, To),
+     decode_muc_user_invite_attr_from(__TopXMLNS, From)}.
 
 encode_muc_user_invite({muc_invite, Reason, From, To},
                       _xmlns_attrs) ->
@@ -3778,13 +4178,13 @@ encode_muc_user_invite({muc_invite, Reason, From, To},
 'encode_muc_user_invite_$reason'(Reason, _acc) ->
     [encode_muc_user_reason(Reason, []) | _acc].
 
-decode_muc_user_invite_attr_to(undefined) -> undefined;
-decode_muc_user_invite_attr_to(_val) ->
+decode_muc_user_invite_attr_to(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_user_invite_attr_to(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"invite">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                       {bad_attr_value, <<"to">>, <<"invite">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3792,14 +4192,15 @@ encode_muc_user_invite_attr_to(undefined, _acc) -> _acc;
 encode_muc_user_invite_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_invite_attr_from(undefined) ->
+decode_muc_user_invite_attr_from(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_muc_user_invite_attr_from(_val) ->
+decode_muc_user_invite_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"from">>, <<"invite">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3808,36 +4209,38 @@ encode_muc_user_invite_attr_from(undefined, _acc) ->
 encode_muc_user_invite_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_destroy({xmlel, <<"destroy">>, _attrs,
-                        _els}) ->
-    Reason = decode_muc_user_destroy_els(_els, undefined),
-    Jid = decode_muc_user_destroy_attrs(_attrs, undefined),
+decode_muc_user_destroy(__TopXMLNS,
+                       {xmlel, <<"destroy">>, _attrs, _els}) ->
+    Reason = decode_muc_user_destroy_els(__TopXMLNS, _els,
+                                        undefined),
+    Jid = decode_muc_user_destroy_attrs(__TopXMLNS, _attrs,
+                                       undefined),
     {muc_user_destroy, Reason, Jid}.
 
-decode_muc_user_destroy_els([], Reason) -> Reason;
-decode_muc_user_destroy_els([{xmlel, <<"reason">>,
-                             _attrs, _} =
-                                _el
-                            | _els],
+decode_muc_user_destroy_els(__TopXMLNS, [], Reason) ->
+    Reason;
+decode_muc_user_destroy_els(__TopXMLNS,
+                           [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
                            Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_destroy_els(_els,
-                                      decode_muc_user_reason(_el));
-       true -> decode_muc_user_destroy_els(_els, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_destroy_els(__TopXMLNS, _els,
+                                      decode_muc_user_reason(__TopXMLNS, _el));
+       true ->
+          decode_muc_user_destroy_els(__TopXMLNS, _els, Reason)
     end;
-decode_muc_user_destroy_els([_ | _els], Reason) ->
-    decode_muc_user_destroy_els(_els, Reason).
+decode_muc_user_destroy_els(__TopXMLNS, [_ | _els],
+                           Reason) ->
+    decode_muc_user_destroy_els(__TopXMLNS, _els, Reason).
 
-decode_muc_user_destroy_attrs([{<<"jid">>, _val}
-                              | _attrs],
-                             _Jid) ->
-    decode_muc_user_destroy_attrs(_attrs, _val);
-decode_muc_user_destroy_attrs([_ | _attrs], Jid) ->
-    decode_muc_user_destroy_attrs(_attrs, Jid);
-decode_muc_user_destroy_attrs([], Jid) ->
-    decode_muc_user_destroy_attr_jid(Jid).
+decode_muc_user_destroy_attrs(__TopXMLNS,
+                             [{<<"jid">>, _val} | _attrs], _Jid) ->
+    decode_muc_user_destroy_attrs(__TopXMLNS, _attrs, _val);
+decode_muc_user_destroy_attrs(__TopXMLNS, [_ | _attrs],
+                             Jid) ->
+    decode_muc_user_destroy_attrs(__TopXMLNS, _attrs, Jid);
+decode_muc_user_destroy_attrs(__TopXMLNS, [], Jid) ->
+    decode_muc_user_destroy_attr_jid(__TopXMLNS, Jid).
 
 encode_muc_user_destroy({muc_user_destroy, Reason, Jid},
                        _xmlns_attrs) ->
@@ -3851,14 +4254,15 @@ encode_muc_user_destroy({muc_user_destroy, Reason, Jid},
 'encode_muc_user_destroy_$reason'(Reason, _acc) ->
     [encode_muc_user_reason(Reason, []) | _acc].
 
-decode_muc_user_destroy_attr_jid(undefined) ->
+decode_muc_user_destroy_attr_jid(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_muc_user_destroy_attr_jid(_val) ->
+decode_muc_user_destroy_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"destroy">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3867,42 +4271,46 @@ encode_muc_user_destroy_attr_jid(undefined, _acc) ->
 encode_muc_user_destroy_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_decline({xmlel, <<"decline">>, _attrs,
-                        _els}) ->
-    Reason = decode_muc_user_decline_els(_els, undefined),
-    {To, From} = decode_muc_user_decline_attrs(_attrs,
-                                              undefined, undefined),
+decode_muc_user_decline(__TopXMLNS,
+                       {xmlel, <<"decline">>, _attrs, _els}) ->
+    Reason = decode_muc_user_decline_els(__TopXMLNS, _els,
+                                        undefined),
+    {To, From} = decode_muc_user_decline_attrs(__TopXMLNS,
+                                              _attrs, undefined, undefined),
     {muc_decline, Reason, From, To}.
 
-decode_muc_user_decline_els([], Reason) -> Reason;
-decode_muc_user_decline_els([{xmlel, <<"reason">>,
-                             _attrs, _} =
-                                _el
-                            | _els],
+decode_muc_user_decline_els(__TopXMLNS, [], Reason) ->
+    Reason;
+decode_muc_user_decline_els(__TopXMLNS,
+                           [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
                            Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
-          decode_muc_user_decline_els(_els,
-                                      decode_muc_user_reason(_el));
-       true -> decode_muc_user_decline_els(_els, Reason)
-    end;
-decode_muc_user_decline_els([_ | _els], Reason) ->
-    decode_muc_user_decline_els(_els, Reason).
-
-decode_muc_user_decline_attrs([{<<"to">>, _val}
-                              | _attrs],
-                             _To, From) ->
-    decode_muc_user_decline_attrs(_attrs, _val, From);
-decode_muc_user_decline_attrs([{<<"from">>, _val}
-                              | _attrs],
-                             To, _From) ->
-    decode_muc_user_decline_attrs(_attrs, To, _val);
-decode_muc_user_decline_attrs([_ | _attrs], To, From) ->
-    decode_muc_user_decline_attrs(_attrs, To, From);
-decode_muc_user_decline_attrs([], To, From) ->
-    {decode_muc_user_decline_attr_to(To),
-     decode_muc_user_decline_attr_from(From)}.
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_muc_user_decline_els(__TopXMLNS, _els,
+                                      decode_muc_user_reason(__TopXMLNS, _el));
+       true ->
+          decode_muc_user_decline_els(__TopXMLNS, _els, Reason)
+    end;
+decode_muc_user_decline_els(__TopXMLNS, [_ | _els],
+                           Reason) ->
+    decode_muc_user_decline_els(__TopXMLNS, _els, Reason).
+
+decode_muc_user_decline_attrs(__TopXMLNS,
+                             [{<<"to">>, _val} | _attrs], _To, From) ->
+    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, _val,
+                                 From);
+decode_muc_user_decline_attrs(__TopXMLNS,
+                             [{<<"from">>, _val} | _attrs], To, _From) ->
+    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, To,
+                                 _val);
+decode_muc_user_decline_attrs(__TopXMLNS, [_ | _attrs],
+                             To, From) ->
+    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, To,
+                                 From);
+decode_muc_user_decline_attrs(__TopXMLNS, [], To,
+                             From) ->
+    {decode_muc_user_decline_attr_to(__TopXMLNS, To),
+     decode_muc_user_decline_attr_from(__TopXMLNS, From)}.
 
 encode_muc_user_decline({muc_decline, Reason, From, To},
                        _xmlns_attrs) ->
@@ -3917,13 +4325,14 @@ encode_muc_user_decline({muc_decline, Reason, From, To},
 'encode_muc_user_decline_$reason'(Reason, _acc) ->
     [encode_muc_user_reason(Reason, []) | _acc].
 
-decode_muc_user_decline_attr_to(undefined) -> undefined;
-decode_muc_user_decline_attr_to(_val) ->
+decode_muc_user_decline_attr_to(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_user_decline_attr_to(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"decline">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                       {bad_attr_value, <<"to">>, <<"decline">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3932,14 +4341,15 @@ encode_muc_user_decline_attr_to(undefined, _acc) ->
 encode_muc_user_decline_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_decline_attr_from(undefined) ->
+decode_muc_user_decline_attr_from(__TopXMLNS,
+                                 undefined) ->
     undefined;
-decode_muc_user_decline_attr_from(_val) ->
+decode_muc_user_decline_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"from">>, <<"decline">>,
-                        <<"http://jabber.org/protocol/muc#user">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -3948,67 +4358,73 @@ encode_muc_user_decline_attr_from(undefined, _acc) ->
 encode_muc_user_decline_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_muc_user_reason({xmlel, <<"reason">>, _attrs,
-                       _els}) ->
-    Cdata = decode_muc_user_reason_els(_els, <<>>), Cdata.
+decode_muc_user_reason(__TopXMLNS,
+                      {xmlel, <<"reason">>, _attrs, _els}) ->
+    Cdata = decode_muc_user_reason_els(__TopXMLNS, _els,
+                                      <<>>),
+    Cdata.
 
-decode_muc_user_reason_els([], Cdata) ->
-    decode_muc_user_reason_cdata(Cdata);
-decode_muc_user_reason_els([{xmlcdata, _data} | _els],
-                          Cdata) ->
-    decode_muc_user_reason_els(_els,
+decode_muc_user_reason_els(__TopXMLNS, [], Cdata) ->
+    decode_muc_user_reason_cdata(__TopXMLNS, Cdata);
+decode_muc_user_reason_els(__TopXMLNS,
+                          [{xmlcdata, _data} | _els], Cdata) ->
+    decode_muc_user_reason_els(__TopXMLNS, _els,
                               <<Cdata/binary, _data/binary>>);
-decode_muc_user_reason_els([_ | _els], Cdata) ->
-    decode_muc_user_reason_els(_els, Cdata).
+decode_muc_user_reason_els(__TopXMLNS, [_ | _els],
+                          Cdata) ->
+    decode_muc_user_reason_els(__TopXMLNS, _els, Cdata).
 
 encode_muc_user_reason(Cdata, _xmlns_attrs) ->
     _els = encode_muc_user_reason_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"reason">>, _attrs, _els}.
 
-decode_muc_user_reason_cdata(<<>>) -> undefined;
-decode_muc_user_reason_cdata(_val) -> _val.
+decode_muc_user_reason_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_muc_user_reason_cdata(__TopXMLNS, _val) -> _val.
 
 encode_muc_user_reason_cdata(undefined, _acc) -> _acc;
 encode_muc_user_reason_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_muc_history({xmlel, <<"history">>, _attrs,
-                   _els}) ->
+decode_muc_history(__TopXMLNS,
+                  {xmlel, <<"history">>, _attrs, _els}) ->
     {Maxchars, Maxstanzas, Seconds, Since} =
-       decode_muc_history_attrs(_attrs, undefined, undefined,
-                                undefined, undefined),
+       decode_muc_history_attrs(__TopXMLNS, _attrs, undefined,
+                                undefined, undefined, undefined),
     {muc_history, Maxchars, Maxstanzas, Seconds, Since}.
 
-decode_muc_history_attrs([{<<"maxchars">>, _val}
-                         | _attrs],
-                        _Maxchars, Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(_attrs, _val, Maxstanzas,
-                            Seconds, Since);
-decode_muc_history_attrs([{<<"maxstanzas">>, _val}
-                         | _attrs],
-                        Maxchars, _Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(_attrs, Maxchars, _val,
-                            Seconds, Since);
-decode_muc_history_attrs([{<<"seconds">>, _val}
-                         | _attrs],
-                        Maxchars, Maxstanzas, _Seconds, Since) ->
-    decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
-                            _val, Since);
-decode_muc_history_attrs([{<<"since">>, _val} | _attrs],
-                        Maxchars, Maxstanzas, Seconds, _Since) ->
-    decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
-                            Seconds, _val);
-decode_muc_history_attrs([_ | _attrs], Maxchars,
+decode_muc_history_attrs(__TopXMLNS,
+                        [{<<"maxchars">>, _val} | _attrs], _Maxchars,
                         Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
-                            Seconds, Since);
-decode_muc_history_attrs([], Maxchars, Maxstanzas,
-                        Seconds, Since) ->
-    {decode_muc_history_attr_maxchars(Maxchars),
-     decode_muc_history_attr_maxstanzas(Maxstanzas),
-     decode_muc_history_attr_seconds(Seconds),
-     decode_muc_history_attr_since(Since)}.
+    decode_muc_history_attrs(__TopXMLNS, _attrs, _val,
+                            Maxstanzas, Seconds, Since);
+decode_muc_history_attrs(__TopXMLNS,
+                        [{<<"maxstanzas">>, _val} | _attrs], Maxchars,
+                        _Maxstanzas, Seconds, Since) ->
+    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
+                            _val, Seconds, Since);
+decode_muc_history_attrs(__TopXMLNS,
+                        [{<<"seconds">>, _val} | _attrs], Maxchars, Maxstanzas,
+                        _Seconds, Since) ->
+    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
+                            Maxstanzas, _val, Since);
+decode_muc_history_attrs(__TopXMLNS,
+                        [{<<"since">>, _val} | _attrs], Maxchars, Maxstanzas,
+                        Seconds, _Since) ->
+    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
+                            Maxstanzas, Seconds, _val);
+decode_muc_history_attrs(__TopXMLNS, [_ | _attrs],
+                        Maxchars, Maxstanzas, Seconds, Since) ->
+    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
+                            Maxstanzas, Seconds, Since);
+decode_muc_history_attrs(__TopXMLNS, [], Maxchars,
+                        Maxstanzas, Seconds, Since) ->
+    {decode_muc_history_attr_maxchars(__TopXMLNS, Maxchars),
+     decode_muc_history_attr_maxstanzas(__TopXMLNS,
+                                       Maxstanzas),
+     decode_muc_history_attr_seconds(__TopXMLNS, Seconds),
+     decode_muc_history_attr_since(__TopXMLNS, Since)}.
 
 encode_muc_history({muc_history, Maxchars, Maxstanzas,
                    Seconds, Since},
@@ -4021,14 +4437,15 @@ encode_muc_history({muc_history, Maxchars, Maxstanzas,
                                                                                                                                               _xmlns_attrs)))),
     {xmlel, <<"history">>, _attrs, _els}.
 
-decode_muc_history_attr_maxchars(undefined) ->
+decode_muc_history_attr_maxchars(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_muc_history_attr_maxchars(_val) ->
+decode_muc_history_attr_maxchars(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"maxchars">>, <<"history">>,
-                        <<"http://jabber.org/protocol/muc">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4037,14 +4454,15 @@ encode_muc_history_attr_maxchars(undefined, _acc) ->
 encode_muc_history_attr_maxchars(_val, _acc) ->
     [{<<"maxchars">>, enc_int(_val)} | _acc].
 
-decode_muc_history_attr_maxstanzas(undefined) ->
+decode_muc_history_attr_maxstanzas(__TopXMLNS,
+                                  undefined) ->
     undefined;
-decode_muc_history_attr_maxstanzas(_val) ->
+decode_muc_history_attr_maxstanzas(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"maxstanzas">>, <<"history">>,
-                        <<"http://jabber.org/protocol/muc">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4053,13 +4471,15 @@ encode_muc_history_attr_maxstanzas(undefined, _acc) ->
 encode_muc_history_attr_maxstanzas(_val, _acc) ->
     [{<<"maxstanzas">>, enc_int(_val)} | _acc].
 
-decode_muc_history_attr_seconds(undefined) -> undefined;
-decode_muc_history_attr_seconds(_val) ->
+decode_muc_history_attr_seconds(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_muc_history_attr_seconds(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"seconds">>, <<"history">>,
-                        <<"http://jabber.org/protocol/muc">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4068,13 +4488,14 @@ encode_muc_history_attr_seconds(undefined, _acc) ->
 encode_muc_history_attr_seconds(_val, _acc) ->
     [{<<"seconds">>, enc_int(_val)} | _acc].
 
-decode_muc_history_attr_since(undefined) -> undefined;
-decode_muc_history_attr_since(_val) ->
+decode_muc_history_attr_since(__TopXMLNS, undefined) ->
+    undefined;
+decode_muc_history_attr_since(__TopXMLNS, _val) ->
     case catch dec_utc(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"since">>, <<"history">>,
-                        <<"http://jabber.org/protocol/muc">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4082,83 +4503,86 @@ encode_muc_history_attr_since(undefined, _acc) -> _acc;
 encode_muc_history_attr_since(_val, _acc) ->
     [{<<"since">>, enc_utc(_val)} | _acc].
 
-decode_bytestreams({xmlel, <<"query">>, _attrs,
-                   _els}) ->
-    {Hosts, Used, Activate} = decode_bytestreams_els(_els,
-                                                    [], undefined, undefined),
-    {Dstaddr, Sid, Mode} = decode_bytestreams_attrs(_attrs,
-                                                   undefined, undefined,
-                                                   undefined),
+decode_bytestreams(__TopXMLNS,
+                  {xmlel, <<"query">>, _attrs, _els}) ->
+    {Hosts, Used, Activate} =
+       decode_bytestreams_els(__TopXMLNS, _els, [], undefined,
+                              undefined),
+    {Dstaddr, Sid, Mode} =
+       decode_bytestreams_attrs(__TopXMLNS, _attrs, undefined,
+                                undefined, undefined),
     {bytestreams, Hosts, Used, Activate, Dstaddr, Mode,
      Sid}.
 
-decode_bytestreams_els([], Hosts, Used, Activate) ->
+decode_bytestreams_els(__TopXMLNS, [], Hosts, Used,
+                      Activate) ->
     {lists:reverse(Hosts), Used, Activate};
-decode_bytestreams_els([{xmlel, <<"streamhost">>,
-                        _attrs, _} =
-                           _el
-                       | _els],
+decode_bytestreams_els(__TopXMLNS,
+                      [{xmlel, <<"streamhost">>, _attrs, _} = _el | _els],
                       Hosts, Used, Activate) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/bytestreams">> ->
-          decode_bytestreams_els(_els,
-                                 [decode_bytestreams_streamhost(_el) | Hosts],
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bytestreams_els(__TopXMLNS, _els,
+                                 [decode_bytestreams_streamhost(__TopXMLNS,
+                                                                _el)
+                                  | Hosts],
                                  Used, Activate);
        true ->
-          decode_bytestreams_els(_els, Hosts, Used, Activate)
+          decode_bytestreams_els(__TopXMLNS, _els, Hosts, Used,
+                                 Activate)
     end;
-decode_bytestreams_els([{xmlel, <<"streamhost-used">>,
-                        _attrs, _} =
-                           _el
+decode_bytestreams_els(__TopXMLNS,
+                      [{xmlel, <<"streamhost-used">>, _attrs, _} = _el
                        | _els],
                       Hosts, Used, Activate) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/bytestreams">> ->
-          decode_bytestreams_els(_els, Hosts,
-                                 decode_bytestreams_streamhost_used(_el),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bytestreams_els(__TopXMLNS, _els, Hosts,
+                                 decode_bytestreams_streamhost_used(__TopXMLNS,
+                                                                    _el),
                                  Activate);
        true ->
-          decode_bytestreams_els(_els, Hosts, Used, Activate)
+          decode_bytestreams_els(__TopXMLNS, _els, Hosts, Used,
+                                 Activate)
     end;
-decode_bytestreams_els([{xmlel, <<"activate">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_bytestreams_els(__TopXMLNS,
+                      [{xmlel, <<"activate">>, _attrs, _} = _el | _els],
                       Hosts, Used, Activate) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/bytestreams">> ->
-          decode_bytestreams_els(_els, Hosts, Used,
-                                 decode_bytestreams_activate(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bytestreams_els(__TopXMLNS, _els, Hosts, Used,
+                                 decode_bytestreams_activate(__TopXMLNS, _el));
        true ->
-          decode_bytestreams_els(_els, Hosts, Used, Activate)
+          decode_bytestreams_els(__TopXMLNS, _els, Hosts, Used,
+                                 Activate)
     end;
-decode_bytestreams_els([_ | _els], Hosts, Used,
-                      Activate) ->
-    decode_bytestreams_els(_els, Hosts, Used, Activate).
-
-decode_bytestreams_attrs([{<<"dstaddr">>, _val}
-                         | _attrs],
-                        _Dstaddr, Sid, Mode) ->
-    decode_bytestreams_attrs(_attrs, _val, Sid, Mode);
-decode_bytestreams_attrs([{<<"sid">>, _val} | _attrs],
-                        Dstaddr, _Sid, Mode) ->
-    decode_bytestreams_attrs(_attrs, Dstaddr, _val, Mode);
-decode_bytestreams_attrs([{<<"mode">>, _val} | _attrs],
-                        Dstaddr, Sid, _Mode) ->
-    decode_bytestreams_attrs(_attrs, Dstaddr, Sid, _val);
-decode_bytestreams_attrs([_ | _attrs], Dstaddr, Sid,
+decode_bytestreams_els(__TopXMLNS, [_ | _els], Hosts,
+                      Used, Activate) ->
+    decode_bytestreams_els(__TopXMLNS, _els, Hosts, Used,
+                          Activate).
+
+decode_bytestreams_attrs(__TopXMLNS,
+                        [{<<"dstaddr">>, _val} | _attrs], _Dstaddr, Sid,
                         Mode) ->
-    decode_bytestreams_attrs(_attrs, Dstaddr, Sid, Mode);
-decode_bytestreams_attrs([], Dstaddr, Sid, Mode) ->
-    {decode_bytestreams_attr_dstaddr(Dstaddr),
-     decode_bytestreams_attr_sid(Sid),
-     decode_bytestreams_attr_mode(Mode)}.
+    decode_bytestreams_attrs(__TopXMLNS, _attrs, _val, Sid,
+                            Mode);
+decode_bytestreams_attrs(__TopXMLNS,
+                        [{<<"sid">>, _val} | _attrs], Dstaddr, _Sid, Mode) ->
+    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
+                            _val, Mode);
+decode_bytestreams_attrs(__TopXMLNS,
+                        [{<<"mode">>, _val} | _attrs], Dstaddr, Sid, _Mode) ->
+    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
+                            Sid, _val);
+decode_bytestreams_attrs(__TopXMLNS, [_ | _attrs],
+                        Dstaddr, Sid, Mode) ->
+    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
+                            Sid, Mode);
+decode_bytestreams_attrs(__TopXMLNS, [], Dstaddr, Sid,
+                        Mode) ->
+    {decode_bytestreams_attr_dstaddr(__TopXMLNS, Dstaddr),
+     decode_bytestreams_attr_sid(__TopXMLNS, Sid),
+     decode_bytestreams_attr_mode(__TopXMLNS, Mode)}.
 
 encode_bytestreams({bytestreams, Hosts, Used, Activate,
                    Dstaddr, Mode, Sid},
@@ -4187,28 +4611,32 @@ encode_bytestreams({bytestreams, Hosts, Used, Activate,
 'encode_bytestreams_$activate'(Activate, _acc) ->
     [encode_bytestreams_activate(Activate, []) | _acc].
 
-decode_bytestreams_attr_dstaddr(undefined) -> undefined;
-decode_bytestreams_attr_dstaddr(_val) -> _val.
+decode_bytestreams_attr_dstaddr(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_bytestreams_attr_dstaddr(__TopXMLNS, _val) ->
+    _val.
 
 encode_bytestreams_attr_dstaddr(undefined, _acc) ->
     _acc;
 encode_bytestreams_attr_dstaddr(_val, _acc) ->
     [{<<"dstaddr">>, _val} | _acc].
 
-decode_bytestreams_attr_sid(undefined) -> undefined;
-decode_bytestreams_attr_sid(_val) -> _val.
+decode_bytestreams_attr_sid(__TopXMLNS, undefined) ->
+    undefined;
+decode_bytestreams_attr_sid(__TopXMLNS, _val) -> _val.
 
 encode_bytestreams_attr_sid(undefined, _acc) -> _acc;
 encode_bytestreams_attr_sid(_val, _acc) ->
     [{<<"sid">>, _val} | _acc].
 
-decode_bytestreams_attr_mode(undefined) -> tcp;
-decode_bytestreams_attr_mode(_val) ->
+decode_bytestreams_attr_mode(__TopXMLNS, undefined) ->
+    tcp;
+decode_bytestreams_attr_mode(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [tcp, udp]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"mode">>, <<"query">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}});
+                       {bad_attr_value, <<"mode">>, <<"query">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4216,33 +4644,36 @@ encode_bytestreams_attr_mode(tcp, _acc) -> _acc;
 encode_bytestreams_attr_mode(_val, _acc) ->
     [{<<"mode">>, enc_enum(_val)} | _acc].
 
-decode_bytestreams_activate({xmlel, <<"activate">>,
-                            _attrs, _els}) ->
-    Cdata = decode_bytestreams_activate_els(_els, <<>>),
+decode_bytestreams_activate(__TopXMLNS,
+                           {xmlel, <<"activate">>, _attrs, _els}) ->
+    Cdata = decode_bytestreams_activate_els(__TopXMLNS,
+                                           _els, <<>>),
     Cdata.
 
-decode_bytestreams_activate_els([], Cdata) ->
-    decode_bytestreams_activate_cdata(Cdata);
-decode_bytestreams_activate_els([{xmlcdata, _data}
-                                | _els],
+decode_bytestreams_activate_els(__TopXMLNS, [],
                                Cdata) ->
-    decode_bytestreams_activate_els(_els,
+    decode_bytestreams_activate_cdata(__TopXMLNS, Cdata);
+decode_bytestreams_activate_els(__TopXMLNS,
+                               [{xmlcdata, _data} | _els], Cdata) ->
+    decode_bytestreams_activate_els(__TopXMLNS, _els,
                                    <<Cdata/binary, _data/binary>>);
-decode_bytestreams_activate_els([_ | _els], Cdata) ->
-    decode_bytestreams_activate_els(_els, Cdata).
+decode_bytestreams_activate_els(__TopXMLNS, [_ | _els],
+                               Cdata) ->
+    decode_bytestreams_activate_els(__TopXMLNS, _els,
+                                   Cdata).
 
 encode_bytestreams_activate(Cdata, _xmlns_attrs) ->
     _els = encode_bytestreams_activate_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"activate">>, _attrs, _els}.
 
-decode_bytestreams_activate_cdata(<<>>) -> undefined;
-decode_bytestreams_activate_cdata(_val) ->
+decode_bytestreams_activate_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_bytestreams_activate_cdata(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"activate">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}});
+                       {bad_cdata_value, <<>>, <<"activate">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4251,22 +4682,26 @@ encode_bytestreams_activate_cdata(undefined, _acc) ->
 encode_bytestreams_activate_cdata(_val, _acc) ->
     [{xmlcdata, enc_jid(_val)} | _acc].
 
-decode_bytestreams_streamhost_used({xmlel,
-                                   <<"streamhost-used">>, _attrs, _els}) ->
-    Jid = decode_bytestreams_streamhost_used_attrs(_attrs,
-                                                  undefined),
+decode_bytestreams_streamhost_used(__TopXMLNS,
+                                  {xmlel, <<"streamhost-used">>, _attrs,
+                                   _els}) ->
+    Jid =
+       decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
+                                                _attrs, undefined),
     Jid.
 
-decode_bytestreams_streamhost_used_attrs([{<<"jid">>,
-                                          _val}
-                                         | _attrs],
-                                        _Jid) ->
-    decode_bytestreams_streamhost_used_attrs(_attrs, _val);
-decode_bytestreams_streamhost_used_attrs([_ | _attrs],
+decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
+                                        [{<<"jid">>, _val} | _attrs], _Jid) ->
+    decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
+                                            _attrs, _val);
+decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
+                                        [_ | _attrs], Jid) ->
+    decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
+                                            _attrs, Jid);
+decode_bytestreams_streamhost_used_attrs(__TopXMLNS, [],
                                         Jid) ->
-    decode_bytestreams_streamhost_used_attrs(_attrs, Jid);
-decode_bytestreams_streamhost_used_attrs([], Jid) ->
-    decode_bytestreams_streamhost_used_attr_jid(Jid).
+    decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
+                                               Jid).
 
 encode_bytestreams_streamhost_used(Jid, _xmlns_attrs) ->
     _els = [],
@@ -4275,16 +4710,18 @@ encode_bytestreams_streamhost_used(Jid, _xmlns_attrs) ->
                                                    _xmlns_attrs),
     {xmlel, <<"streamhost-used">>, _attrs, _els}.
 
-decode_bytestreams_streamhost_used_attr_jid(undefined) ->
+decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
+                                           undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"streamhost-used">>,
-                  <<"http://jabber.org/protocol/bytestreams">>}});
-decode_bytestreams_streamhost_used_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
+                                           _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"streamhost-used">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4292,37 +4729,40 @@ encode_bytestreams_streamhost_used_attr_jid(_val,
                                            _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_bytestreams_streamhost({xmlel, <<"streamhost">>,
-                              _attrs, _els}) ->
+decode_bytestreams_streamhost(__TopXMLNS,
+                             {xmlel, <<"streamhost">>, _attrs, _els}) ->
     {Jid, Host, Port} =
-       decode_bytestreams_streamhost_attrs(_attrs, undefined,
-                                           undefined, undefined),
+       decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
+                                           undefined, undefined, undefined),
     {streamhost, Jid, Host, Port}.
 
-decode_bytestreams_streamhost_attrs([{<<"jid">>, _val}
-                                    | _attrs],
-                                   _Jid, Host, Port) ->
-    decode_bytestreams_streamhost_attrs(_attrs, _val, Host,
-                                       Port);
-decode_bytestreams_streamhost_attrs([{<<"host">>, _val}
-                                    | _attrs],
-                                   Jid, _Host, Port) ->
-    decode_bytestreams_streamhost_attrs(_attrs, Jid, _val,
-                                       Port);
-decode_bytestreams_streamhost_attrs([{<<"port">>, _val}
-                                    | _attrs],
-                                   Jid, Host, _Port) ->
-    decode_bytestreams_streamhost_attrs(_attrs, Jid, Host,
-                                       _val);
-decode_bytestreams_streamhost_attrs([_ | _attrs], Jid,
-                                   Host, Port) ->
-    decode_bytestreams_streamhost_attrs(_attrs, Jid, Host,
-                                       Port);
-decode_bytestreams_streamhost_attrs([], Jid, Host,
+decode_bytestreams_streamhost_attrs(__TopXMLNS,
+                                   [{<<"jid">>, _val} | _attrs], _Jid, Host,
                                    Port) ->
-    {decode_bytestreams_streamhost_attr_jid(Jid),
-     decode_bytestreams_streamhost_attr_host(Host),
-     decode_bytestreams_streamhost_attr_port(Port)}.
+    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
+                                       _val, Host, Port);
+decode_bytestreams_streamhost_attrs(__TopXMLNS,
+                                   [{<<"host">>, _val} | _attrs], Jid, _Host,
+                                   Port) ->
+    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
+                                       Jid, _val, Port);
+decode_bytestreams_streamhost_attrs(__TopXMLNS,
+                                   [{<<"port">>, _val} | _attrs], Jid, Host,
+                                   _Port) ->
+    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
+                                       Jid, Host, _val);
+decode_bytestreams_streamhost_attrs(__TopXMLNS,
+                                   [_ | _attrs], Jid, Host, Port) ->
+    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
+                                       Jid, Host, Port);
+decode_bytestreams_streamhost_attrs(__TopXMLNS, [], Jid,
+                                   Host, Port) ->
+    {decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
+                                           Jid),
+     decode_bytestreams_streamhost_attr_host(__TopXMLNS,
+                                            Host),
+     decode_bytestreams_streamhost_attr_port(__TopXMLNS,
+                                            Port)}.
 
 encode_bytestreams_streamhost({streamhost, Jid, Host,
                               Port},
@@ -4334,39 +4774,46 @@ encode_bytestreams_streamhost({streamhost, Jid, Host,
                                                                                                                                    _xmlns_attrs))),
     {xmlel, <<"streamhost">>, _attrs, _els}.
 
-decode_bytestreams_streamhost_attr_jid(undefined) ->
+decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
+                                      undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"streamhost">>,
-                  <<"http://jabber.org/protocol/bytestreams">>}});
-decode_bytestreams_streamhost_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
+                                      _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"streamhost">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_bytestreams_streamhost_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_bytestreams_streamhost_attr_host(undefined) ->
+decode_bytestreams_streamhost_attr_host(__TopXMLNS,
+                                       undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"host">>, <<"streamhost">>,
-                  <<"http://jabber.org/protocol/bytestreams">>}});
-decode_bytestreams_streamhost_attr_host(_val) -> _val.
+                  __TopXMLNS}});
+decode_bytestreams_streamhost_attr_host(__TopXMLNS,
+                                       _val) ->
+    _val.
 
 encode_bytestreams_streamhost_attr_host(_val, _acc) ->
     [{<<"host">>, _val} | _acc].
 
-decode_bytestreams_streamhost_attr_port(undefined) ->
+decode_bytestreams_streamhost_attr_port(__TopXMLNS,
+                                       undefined) ->
     1080;
-decode_bytestreams_streamhost_attr_port(_val) ->
+decode_bytestreams_streamhost_attr_port(__TopXMLNS,
+                                       _val) ->
     case catch dec_int(_val, 0, 65535) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"port">>, <<"streamhost">>,
-                        <<"http://jabber.org/protocol/bytestreams">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4375,23 +4822,28 @@ encode_bytestreams_streamhost_attr_port(1080, _acc) ->
 encode_bytestreams_streamhost_attr_port(_val, _acc) ->
     [{<<"port">>, enc_int(_val)} | _acc].
 
-decode_legacy_delay({xmlel, <<"x">>, _attrs, _els}) ->
-    {Stamp, From} = decode_legacy_delay_attrs(_attrs,
-                                             undefined, undefined),
+decode_legacy_delay(__TopXMLNS,
+                   {xmlel, <<"x">>, _attrs, _els}) ->
+    {Stamp, From} = decode_legacy_delay_attrs(__TopXMLNS,
+                                             _attrs, undefined, undefined),
     {legacy_delay, Stamp, From}.
 
-decode_legacy_delay_attrs([{<<"stamp">>, _val}
-                          | _attrs],
-                         _Stamp, From) ->
-    decode_legacy_delay_attrs(_attrs, _val, From);
-decode_legacy_delay_attrs([{<<"from">>, _val} | _attrs],
-                         Stamp, _From) ->
-    decode_legacy_delay_attrs(_attrs, Stamp, _val);
-decode_legacy_delay_attrs([_ | _attrs], Stamp, From) ->
-    decode_legacy_delay_attrs(_attrs, Stamp, From);
-decode_legacy_delay_attrs([], Stamp, From) ->
-    {decode_legacy_delay_attr_stamp(Stamp),
-     decode_legacy_delay_attr_from(From)}.
+decode_legacy_delay_attrs(__TopXMLNS,
+                         [{<<"stamp">>, _val} | _attrs], _Stamp, From) ->
+    decode_legacy_delay_attrs(__TopXMLNS, _attrs, _val,
+                             From);
+decode_legacy_delay_attrs(__TopXMLNS,
+                         [{<<"from">>, _val} | _attrs], Stamp, _From) ->
+    decode_legacy_delay_attrs(__TopXMLNS, _attrs, Stamp,
+                             _val);
+decode_legacy_delay_attrs(__TopXMLNS, [_ | _attrs],
+                         Stamp, From) ->
+    decode_legacy_delay_attrs(__TopXMLNS, _attrs, Stamp,
+                             From);
+decode_legacy_delay_attrs(__TopXMLNS, [], Stamp,
+                         From) ->
+    {decode_legacy_delay_attr_stamp(__TopXMLNS, Stamp),
+     decode_legacy_delay_attr_from(__TopXMLNS, From)}.
 
 encode_legacy_delay({legacy_delay, Stamp, From},
                    _xmlns_attrs) ->
@@ -4401,22 +4853,22 @@ encode_legacy_delay({legacy_delay, Stamp, From},
                                                                          _xmlns_attrs)),
     {xmlel, <<"x">>, _attrs, _els}.
 
-decode_legacy_delay_attr_stamp(undefined) ->
+decode_legacy_delay_attr_stamp(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"stamp">>, <<"x">>,
-                  <<"jabber:x:delay">>}});
-decode_legacy_delay_attr_stamp(_val) -> _val.
+                 {missing_attr, <<"stamp">>, <<"x">>, __TopXMLNS}});
+decode_legacy_delay_attr_stamp(__TopXMLNS, _val) ->
+    _val.
 
 encode_legacy_delay_attr_stamp(_val, _acc) ->
     [{<<"stamp">>, _val} | _acc].
 
-decode_legacy_delay_attr_from(undefined) -> undefined;
-decode_legacy_delay_attr_from(_val) ->
+decode_legacy_delay_attr_from(__TopXMLNS, undefined) ->
+    undefined;
+decode_legacy_delay_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"x">>,
-                        <<"jabber:x:delay">>}});
+                       {bad_attr_value, <<"from">>, <<"x">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4424,22 +4876,24 @@ encode_legacy_delay_attr_from(undefined, _acc) -> _acc;
 encode_legacy_delay_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_delay({xmlel, <<"delay">>, _attrs, _els}) ->
-    {Stamp, From} = decode_delay_attrs(_attrs, undefined,
-                                      undefined),
+decode_delay(__TopXMLNS,
+            {xmlel, <<"delay">>, _attrs, _els}) ->
+    {Stamp, From} = decode_delay_attrs(__TopXMLNS, _attrs,
+                                      undefined, undefined),
     {delay, Stamp, From}.
 
-decode_delay_attrs([{<<"stamp">>, _val} | _attrs],
-                  _Stamp, From) ->
-    decode_delay_attrs(_attrs, _val, From);
-decode_delay_attrs([{<<"from">>, _val} | _attrs], Stamp,
-                  _From) ->
-    decode_delay_attrs(_attrs, Stamp, _val);
-decode_delay_attrs([_ | _attrs], Stamp, From) ->
-    decode_delay_attrs(_attrs, Stamp, From);
-decode_delay_attrs([], Stamp, From) ->
-    {decode_delay_attr_stamp(Stamp),
-     decode_delay_attr_from(From)}.
+decode_delay_attrs(__TopXMLNS,
+                  [{<<"stamp">>, _val} | _attrs], _Stamp, From) ->
+    decode_delay_attrs(__TopXMLNS, _attrs, _val, From);
+decode_delay_attrs(__TopXMLNS,
+                  [{<<"from">>, _val} | _attrs], Stamp, _From) ->
+    decode_delay_attrs(__TopXMLNS, _attrs, Stamp, _val);
+decode_delay_attrs(__TopXMLNS, [_ | _attrs], Stamp,
+                  From) ->
+    decode_delay_attrs(__TopXMLNS, _attrs, Stamp, From);
+decode_delay_attrs(__TopXMLNS, [], Stamp, From) ->
+    {decode_delay_attr_stamp(__TopXMLNS, Stamp),
+     decode_delay_attr_from(__TopXMLNS, From)}.
 
 encode_delay({delay, Stamp, From}, _xmlns_attrs) ->
     _els = [],
@@ -4448,29 +4902,28 @@ encode_delay({delay, Stamp, From}, _xmlns_attrs) ->
                                                            _xmlns_attrs)),
     {xmlel, <<"delay">>, _attrs, _els}.
 
-decode_delay_attr_stamp(undefined) ->
+decode_delay_attr_stamp(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"stamp">>, <<"delay">>,
-                  <<"urn:xmpp:delay">>}});
-decode_delay_attr_stamp(_val) ->
+                 {missing_attr, <<"stamp">>, <<"delay">>, __TopXMLNS}});
+decode_delay_attr_stamp(__TopXMLNS, _val) ->
     case catch dec_utc(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"stamp">>, <<"delay">>,
-                        <<"urn:xmpp:delay">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_delay_attr_stamp(_val, _acc) ->
     [{<<"stamp">>, enc_utc(_val)} | _acc].
 
-decode_delay_attr_from(undefined) -> undefined;
-decode_delay_attr_from(_val) ->
+decode_delay_attr_from(__TopXMLNS, undefined) ->
+    undefined;
+decode_delay_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"delay">>,
-                        <<"urn:xmpp:delay">>}});
+                       {bad_attr_value, <<"from">>, <<"delay">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4478,27 +4931,27 @@ encode_delay_attr_from(undefined, _acc) -> _acc;
 encode_delay_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_shim_headers({xmlel, <<"headers">>, _attrs,
-                    _els}) ->
-    Headers = decode_shim_headers_els(_els, []),
+decode_shim_headers(__TopXMLNS,
+                   {xmlel, <<"headers">>, _attrs, _els}) ->
+    Headers = decode_shim_headers_els(__TopXMLNS, _els, []),
     {shim, Headers}.
 
-decode_shim_headers_els([], Headers) ->
+decode_shim_headers_els(__TopXMLNS, [], Headers) ->
     lists:reverse(Headers);
-decode_shim_headers_els([{xmlel, <<"header">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
+decode_shim_headers_els(__TopXMLNS,
+                       [{xmlel, <<"header">>, _attrs, _} = _el | _els],
                        Headers) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/shim">> ->
-          decode_shim_headers_els(_els,
-                                  [decode_shim_header(_el) | Headers]);
-       true -> decode_shim_headers_els(_els, Headers)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_shim_headers_els(__TopXMLNS, _els,
+                                  [decode_shim_header(__TopXMLNS, _el)
+                                   | Headers]);
+       true ->
+          decode_shim_headers_els(__TopXMLNS, _els, Headers)
     end;
-decode_shim_headers_els([_ | _els], Headers) ->
-    decode_shim_headers_els(_els, Headers).
+decode_shim_headers_els(__TopXMLNS, [_ | _els],
+                       Headers) ->
+    decode_shim_headers_els(__TopXMLNS, _els, Headers).
 
 encode_shim_headers({shim, Headers}, _xmlns_attrs) ->
     _els = 'encode_shim_headers_$headers'(Headers, []),
@@ -4511,28 +4964,30 @@ encode_shim_headers({shim, Headers}, _xmlns_attrs) ->
     'encode_shim_headers_$headers'(_els,
                                   [encode_shim_header(Headers, []) | _acc]).
 
-decode_shim_header({xmlel, <<"header">>, _attrs,
-                   _els}) ->
-    Cdata = decode_shim_header_els(_els, <<>>),
-    Name = decode_shim_header_attrs(_attrs, undefined),
+decode_shim_header(__TopXMLNS,
+                  {xmlel, <<"header">>, _attrs, _els}) ->
+    Cdata = decode_shim_header_els(__TopXMLNS, _els, <<>>),
+    Name = decode_shim_header_attrs(__TopXMLNS, _attrs,
+                                   undefined),
     {Name, Cdata}.
 
-decode_shim_header_els([], Cdata) ->
-    decode_shim_header_cdata(Cdata);
-decode_shim_header_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_shim_header_els(_els,
+decode_shim_header_els(__TopXMLNS, [], Cdata) ->
+    decode_shim_header_cdata(__TopXMLNS, Cdata);
+decode_shim_header_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_shim_header_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_shim_header_els([_ | _els], Cdata) ->
-    decode_shim_header_els(_els, Cdata).
-
-decode_shim_header_attrs([{<<"name">>, _val} | _attrs],
-                        _Name) ->
-    decode_shim_header_attrs(_attrs, _val);
-decode_shim_header_attrs([_ | _attrs], Name) ->
-    decode_shim_header_attrs(_attrs, Name);
-decode_shim_header_attrs([], Name) ->
-    decode_shim_header_attr_name(Name).
+decode_shim_header_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_shim_header_els(__TopXMLNS, _els, Cdata).
+
+decode_shim_header_attrs(__TopXMLNS,
+                        [{<<"name">>, _val} | _attrs], _Name) ->
+    decode_shim_header_attrs(__TopXMLNS, _attrs, _val);
+decode_shim_header_attrs(__TopXMLNS, [_ | _attrs],
+                        Name) ->
+    decode_shim_header_attrs(__TopXMLNS, _attrs, Name);
+decode_shim_header_attrs(__TopXMLNS, [], Name) ->
+    decode_shim_header_attr_name(__TopXMLNS, Name).
 
 encode_shim_header({Name, Cdata}, _xmlns_attrs) ->
     _els = encode_shim_header_cdata(Cdata, []),
@@ -4540,174 +4995,160 @@ encode_shim_header({Name, Cdata}, _xmlns_attrs) ->
                                          _xmlns_attrs),
     {xmlel, <<"header">>, _attrs, _els}.
 
-decode_shim_header_attr_name(undefined) ->
+decode_shim_header_attr_name(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"header">>,
-                  <<"http://jabber.org/protocol/shim">>}});
-decode_shim_header_attr_name(_val) -> _val.
+                 {missing_attr, <<"name">>, <<"header">>, __TopXMLNS}});
+decode_shim_header_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_shim_header_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_shim_header_cdata(<<>>) -> undefined;
-decode_shim_header_cdata(_val) -> _val.
+decode_shim_header_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_shim_header_cdata(__TopXMLNS, _val) -> _val.
 
 encode_shim_header_cdata(undefined, _acc) -> _acc;
 encode_shim_header_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_pubsub({xmlel, <<"pubsub">>, _attrs, _els}) ->
+decode_pubsub(__TopXMLNS,
+             {xmlel, <<"pubsub">>, _attrs, _els}) ->
     {Items, Options, Affiliations, Subscriptions, Retract,
      Unsubscribe, Subscribe, Publish} =
-       decode_pubsub_els(_els, undefined, undefined, undefined,
-                         undefined, undefined, undefined, undefined,
-                         undefined),
+       decode_pubsub_els(__TopXMLNS, _els, undefined,
+                         undefined, undefined, undefined, undefined, undefined,
+                         undefined, undefined),
     {pubsub, Subscriptions, Affiliations, Publish,
      Subscribe, Unsubscribe, Options, Items, Retract}.
 
-decode_pubsub_els([], Items, Options, Affiliations,
-                 Subscriptions, Retract, Unsubscribe, Subscribe,
-                 Publish) ->
+decode_pubsub_els(__TopXMLNS, [], Items, Options,
+                 Affiliations, Subscriptions, Retract, Unsubscribe,
+                 Subscribe, Publish) ->
     {Items, Options, Affiliations, Subscriptions, Retract,
      Unsubscribe, Subscribe, Publish};
-decode_pubsub_els([{xmlel, <<"subscriptions">>, _attrs,
-                   _} =
-                      _el
-                  | _els],
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"subscriptions">>, _attrs, _} = _el | _els],
                  Items, Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            decode_pubsub_subscriptions(_el), Retract,
-                            Unsubscribe, Subscribe, Publish);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations,
+                            decode_pubsub_subscriptions(__TopXMLNS, _el),
+                            Retract, Unsubscribe, Subscribe, Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"affiliations">>, _attrs,
-                   _} =
-                      _el
-                  | _els],
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"affiliations">>, _attrs, _} = _el | _els],
                  Items, Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options,
-                            decode_pubsub_affiliations(_el), Subscriptions,
-                            Retract, Unsubscribe, Subscribe, Publish);
-       true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            decode_pubsub_affiliations(__TopXMLNS, _el),
                             Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+                            Publish);
+       true ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"subscribe">>, _attrs, _} =
-                      _el
-                  | _els],
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"subscribe">>, _attrs, _} = _el | _els],
                  Items, Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe,
-                            decode_pubsub_subscribe(_el), Publish);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            decode_pubsub_subscribe(__TopXMLNS, _el), Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"unsubscribe">>, _attrs,
-                   _} =
-                      _el
-                  | _els],
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"unsubscribe">>, _attrs, _} = _el | _els],
                  Items, Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract,
-                            decode_pubsub_unsubscribe(_el), Subscribe,
-                            Publish);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract,
+                            decode_pubsub_unsubscribe(__TopXMLNS, _el),
+                            Subscribe, Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"options">>, _attrs, _} =
-                      _el
-                  | _els],
-                 Items, Options, Affiliations, Subscriptions, Retract,
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"options">>, _attrs, _} = _el | _els], Items,
+                 Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items,
-                            decode_pubsub_options(_el), Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items,
+                            decode_pubsub_options(__TopXMLNS, _el),
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"items">>, _attrs, _} = _el
-                  | _els],
-                 Items, Options, Affiliations, Subscriptions, Retract,
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"items">>, _attrs, _} = _el | _els], Items,
+                 Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, decode_pubsub_items(_el),
-                            Options, Affiliations, Subscriptions, Retract,
-                            Unsubscribe, Subscribe, Publish);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els,
+                            decode_pubsub_items(__TopXMLNS, _el), Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"retract">>, _attrs, _} =
-                      _el
-                  | _els],
-                 Items, Options, Affiliations, Subscriptions, Retract,
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"retract">>, _attrs, _} = _el | _els], Items,
+                 Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, decode_pubsub_retract(_el),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions,
+                            decode_pubsub_retract(__TopXMLNS, _el),
                             Unsubscribe, Subscribe, Publish);
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([{xmlel, <<"publish">>, _attrs, _} =
-                      _el
-                  | _els],
-                 Items, Options, Affiliations, Subscriptions, Retract,
+decode_pubsub_els(__TopXMLNS,
+                 [{xmlel, <<"publish">>, _attrs, _} = _el | _els], Items,
+                 Options, Affiliations, Subscriptions, Retract,
                  Unsubscribe, Subscribe, Publish) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            decode_pubsub_publish(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, decode_pubsub_publish(__TopXMLNS, _el));
        true ->
-          decode_pubsub_els(_els, Items, Options, Affiliations,
-                            Subscriptions, Retract, Unsubscribe, Subscribe,
-                            Publish)
+          decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                            Affiliations, Subscriptions, Retract, Unsubscribe,
+                            Subscribe, Publish)
     end;
-decode_pubsub_els([_ | _els], Items, Options,
-                 Affiliations, Subscriptions, Retract, Unsubscribe,
-                 Subscribe, Publish) ->
-    decode_pubsub_els(_els, Items, Options, Affiliations,
-                     Subscriptions, Retract, Unsubscribe, Subscribe,
-                     Publish).
+decode_pubsub_els(__TopXMLNS, [_ | _els], Items,
+                 Options, Affiliations, Subscriptions, Retract,
+                 Unsubscribe, Subscribe, Publish) ->
+    decode_pubsub_els(__TopXMLNS, _els, Items, Options,
+                     Affiliations, Subscriptions, Retract, Unsubscribe,
+                     Subscribe, Publish).
 
 encode_pubsub({pubsub, Subscriptions, Affiliations,
               Publish, Subscribe, Unsubscribe, Options, Items,
@@ -4757,44 +5198,46 @@ encode_pubsub({pubsub, Subscriptions, Affiliations,
 'encode_pubsub_$publish'(Publish, _acc) ->
     [encode_pubsub_publish(Publish, []) | _acc].
 
-decode_pubsub_retract({xmlel, <<"retract">>, _attrs,
-                      _els}) ->
-    Items = decode_pubsub_retract_els(_els, []),
-    {Node, Notify} = decode_pubsub_retract_attrs(_attrs,
-                                                undefined, undefined),
+decode_pubsub_retract(__TopXMLNS,
+                     {xmlel, <<"retract">>, _attrs, _els}) ->
+    Items = decode_pubsub_retract_els(__TopXMLNS, _els, []),
+    {Node, Notify} = decode_pubsub_retract_attrs(__TopXMLNS,
+                                                _attrs, undefined, undefined),
     {pubsub_retract, Node, Notify, Items}.
 
-decode_pubsub_retract_els([], Items) ->
+decode_pubsub_retract_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_pubsub_retract_els([{xmlel, <<"item">>, _attrs,
-                           _} =
-                              _el
-                          | _els],
+decode_pubsub_retract_els(__TopXMLNS,
+                         [{xmlel, <<"item">>, _attrs, _} = _el | _els],
                          Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_retract_els(_els,
-                                    [decode_pubsub_item(_el) | Items]);
-       true -> decode_pubsub_retract_els(_els, Items)
-    end;
-decode_pubsub_retract_els([_ | _els], Items) ->
-    decode_pubsub_retract_els(_els, Items).
-
-decode_pubsub_retract_attrs([{<<"node">>, _val}
-                            | _attrs],
-                           _Node, Notify) ->
-    decode_pubsub_retract_attrs(_attrs, _val, Notify);
-decode_pubsub_retract_attrs([{<<"notify">>, _val}
-                            | _attrs],
-                           Node, _Notify) ->
-    decode_pubsub_retract_attrs(_attrs, Node, _val);
-decode_pubsub_retract_attrs([_ | _attrs], Node,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_retract_els(__TopXMLNS, _els,
+                                    [decode_pubsub_item(__TopXMLNS, _el)
+                                     | Items]);
+       true ->
+          decode_pubsub_retract_els(__TopXMLNS, _els, Items)
+    end;
+decode_pubsub_retract_els(__TopXMLNS, [_ | _els],
+                         Items) ->
+    decode_pubsub_retract_els(__TopXMLNS, _els, Items).
+
+decode_pubsub_retract_attrs(__TopXMLNS,
+                           [{<<"node">>, _val} | _attrs], _Node, Notify) ->
+    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, _val,
+                               Notify);
+decode_pubsub_retract_attrs(__TopXMLNS,
+                           [{<<"notify">>, _val} | _attrs], Node, _Notify) ->
+    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, Node,
+                               _val);
+decode_pubsub_retract_attrs(__TopXMLNS, [_ | _attrs],
+                           Node, Notify) ->
+    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, Node,
+                               Notify);
+decode_pubsub_retract_attrs(__TopXMLNS, [], Node,
                            Notify) ->
-    decode_pubsub_retract_attrs(_attrs, Node, Notify);
-decode_pubsub_retract_attrs([], Node, Notify) ->
-    {decode_pubsub_retract_attr_node(Node),
-     decode_pubsub_retract_attr_notify(Notify)}.
+    {decode_pubsub_retract_attr_node(__TopXMLNS, Node),
+     decode_pubsub_retract_attr_notify(__TopXMLNS, Notify)}.
 
 encode_pubsub_retract({pubsub_retract, Node, Notify,
                       Items},
@@ -4810,22 +5253,25 @@ encode_pubsub_retract({pubsub_retract, Node, Notify,
     'encode_pubsub_retract_$items'(_els,
                                   [encode_pubsub_item(Items, []) | _acc]).
 
-decode_pubsub_retract_attr_node(undefined) ->
+decode_pubsub_retract_attr_node(__TopXMLNS,
+                               undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"retract">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_retract_attr_node(_val) -> _val.
+                 {missing_attr, <<"node">>, <<"retract">>, __TopXMLNS}});
+decode_pubsub_retract_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_retract_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_retract_attr_notify(undefined) -> false;
-decode_pubsub_retract_attr_notify(_val) ->
+decode_pubsub_retract_attr_notify(__TopXMLNS,
+                                 undefined) ->
+    false;
+decode_pubsub_retract_attr_notify(__TopXMLNS, _val) ->
     case catch dec_bool(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"notify">>, <<"retract">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -4833,46 +5279,52 @@ encode_pubsub_retract_attr_notify(false, _acc) -> _acc;
 encode_pubsub_retract_attr_notify(_val, _acc) ->
     [{<<"notify">>, enc_bool(_val)} | _acc].
 
-decode_pubsub_options({xmlel, <<"options">>, _attrs,
-                      _els}) ->
-    Xdata = decode_pubsub_options_els(_els, undefined),
-    {Node, Subid, Jid} = decode_pubsub_options_attrs(_attrs,
-                                                    undefined, undefined,
-                                                    undefined),
+decode_pubsub_options(__TopXMLNS,
+                     {xmlel, <<"options">>, _attrs, _els}) ->
+    Xdata = decode_pubsub_options_els(__TopXMLNS, _els,
+                                     undefined),
+    {Node, Subid, Jid} =
+       decode_pubsub_options_attrs(__TopXMLNS, _attrs,
+                                   undefined, undefined, undefined),
     {pubsub_options, Node, Jid, Subid, Xdata}.
 
-decode_pubsub_options_els([], Xdata) -> Xdata;
-decode_pubsub_options_els([{xmlel, <<"x">>, _attrs, _} =
-                              _el
-                          | _els],
-                         Xdata) ->
+decode_pubsub_options_els(__TopXMLNS, [], Xdata) ->
+    Xdata;
+decode_pubsub_options_els(__TopXMLNS,
+                         [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"jabber:x:data">> ->
-          decode_pubsub_options_els(_els, decode_xdata(_el));
-       true -> decode_pubsub_options_els(_els, Xdata)
-    end;
-decode_pubsub_options_els([_ | _els], Xdata) ->
-    decode_pubsub_options_els(_els, Xdata).
-
-decode_pubsub_options_attrs([{<<"node">>, _val}
-                            | _attrs],
-                           _Node, Subid, Jid) ->
-    decode_pubsub_options_attrs(_attrs, _val, Subid, Jid);
-decode_pubsub_options_attrs([{<<"subid">>, _val}
-                            | _attrs],
-                           Node, _Subid, Jid) ->
-    decode_pubsub_options_attrs(_attrs, Node, _val, Jid);
-decode_pubsub_options_attrs([{<<"jid">>, _val}
-                            | _attrs],
-                           Node, Subid, _Jid) ->
-    decode_pubsub_options_attrs(_attrs, Node, Subid, _val);
-decode_pubsub_options_attrs([_ | _attrs], Node, Subid,
+          decode_pubsub_options_els(__TopXMLNS, _els,
+                                    decode_xdata(_xmlns, _el));
+       true ->
+          decode_pubsub_options_els(__TopXMLNS, _els, Xdata)
+    end;
+decode_pubsub_options_els(__TopXMLNS, [_ | _els],
+                         Xdata) ->
+    decode_pubsub_options_els(__TopXMLNS, _els, Xdata).
+
+decode_pubsub_options_attrs(__TopXMLNS,
+                           [{<<"node">>, _val} | _attrs], _Node, Subid, Jid) ->
+    decode_pubsub_options_attrs(__TopXMLNS, _attrs, _val,
+                               Subid, Jid);
+decode_pubsub_options_attrs(__TopXMLNS,
+                           [{<<"subid">>, _val} | _attrs], Node, _Subid,
+                           Jid) ->
+    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
+                               _val, Jid);
+decode_pubsub_options_attrs(__TopXMLNS,
+                           [{<<"jid">>, _val} | _attrs], Node, Subid, _Jid) ->
+    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
+                               Subid, _val);
+decode_pubsub_options_attrs(__TopXMLNS, [_ | _attrs],
+                           Node, Subid, Jid) ->
+    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
+                               Subid, Jid);
+decode_pubsub_options_attrs(__TopXMLNS, [], Node, Subid,
                            Jid) ->
-    decode_pubsub_options_attrs(_attrs, Node, Subid, Jid);
-decode_pubsub_options_attrs([], Node, Subid, Jid) ->
-    {decode_pubsub_options_attr_node(Node),
-     decode_pubsub_options_attr_subid(Subid),
-     decode_pubsub_options_attr_jid(Jid)}.
+    {decode_pubsub_options_attr_node(__TopXMLNS, Node),
+     decode_pubsub_options_attr_subid(__TopXMLNS, Subid),
+     decode_pubsub_options_attr_jid(__TopXMLNS, Jid)}.
 
 encode_pubsub_options({pubsub_options, Node, Jid, Subid,
                       Xdata},
@@ -4890,70 +5342,75 @@ encode_pubsub_options({pubsub_options, Node, Jid, Subid,
                  [{<<"xmlns">>, <<"jabber:x:data">>}])
      | _acc].
 
-decode_pubsub_options_attr_node(undefined) -> undefined;
-decode_pubsub_options_attr_node(_val) -> _val.
+decode_pubsub_options_attr_node(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_pubsub_options_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_options_attr_node(undefined, _acc) ->
     _acc;
 encode_pubsub_options_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_options_attr_subid(undefined) ->
+decode_pubsub_options_attr_subid(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_pubsub_options_attr_subid(_val) -> _val.
+decode_pubsub_options_attr_subid(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_options_attr_subid(undefined, _acc) ->
     _acc;
 encode_pubsub_options_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
-decode_pubsub_options_attr_jid(undefined) ->
+decode_pubsub_options_attr_jid(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"options">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_options_attr_jid(_val) ->
+                 {missing_attr, <<"jid">>, <<"options">>, __TopXMLNS}});
+decode_pubsub_options_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"options">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_pubsub_options_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_pubsub_publish({xmlel, <<"publish">>, _attrs,
-                      _els}) ->
-    Items = decode_pubsub_publish_els(_els, []),
-    Node = decode_pubsub_publish_attrs(_attrs, undefined),
+decode_pubsub_publish(__TopXMLNS,
+                     {xmlel, <<"publish">>, _attrs, _els}) ->
+    Items = decode_pubsub_publish_els(__TopXMLNS, _els, []),
+    Node = decode_pubsub_publish_attrs(__TopXMLNS, _attrs,
+                                      undefined),
     {pubsub_publish, Node, Items}.
 
-decode_pubsub_publish_els([], Items) ->
+decode_pubsub_publish_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_pubsub_publish_els([{xmlel, <<"item">>, _attrs,
-                           _} =
-                              _el
-                          | _els],
+decode_pubsub_publish_els(__TopXMLNS,
+                         [{xmlel, <<"item">>, _attrs, _} = _el | _els],
                          Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_publish_els(_els,
-                                    [decode_pubsub_item(_el) | Items]);
-       true -> decode_pubsub_publish_els(_els, Items)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_publish_els(__TopXMLNS, _els,
+                                    [decode_pubsub_item(__TopXMLNS, _el)
+                                     | Items]);
+       true ->
+          decode_pubsub_publish_els(__TopXMLNS, _els, Items)
     end;
-decode_pubsub_publish_els([_ | _els], Items) ->
-    decode_pubsub_publish_els(_els, Items).
+decode_pubsub_publish_els(__TopXMLNS, [_ | _els],
+                         Items) ->
+    decode_pubsub_publish_els(__TopXMLNS, _els, Items).
 
-decode_pubsub_publish_attrs([{<<"node">>, _val}
-                            | _attrs],
-                           _Node) ->
-    decode_pubsub_publish_attrs(_attrs, _val);
-decode_pubsub_publish_attrs([_ | _attrs], Node) ->
-    decode_pubsub_publish_attrs(_attrs, Node);
-decode_pubsub_publish_attrs([], Node) ->
-    decode_pubsub_publish_attr_node(Node).
+decode_pubsub_publish_attrs(__TopXMLNS,
+                           [{<<"node">>, _val} | _attrs], _Node) ->
+    decode_pubsub_publish_attrs(__TopXMLNS, _attrs, _val);
+decode_pubsub_publish_attrs(__TopXMLNS, [_ | _attrs],
+                           Node) ->
+    decode_pubsub_publish_attrs(__TopXMLNS, _attrs, Node);
+decode_pubsub_publish_attrs(__TopXMLNS, [], Node) ->
+    decode_pubsub_publish_attr_node(__TopXMLNS, Node).
 
 encode_pubsub_publish({pubsub_publish, Node, Items},
                      _xmlns_attrs) ->
@@ -4967,45 +5424,47 @@ encode_pubsub_publish({pubsub_publish, Node, Items},
     'encode_pubsub_publish_$items'(_els,
                                   [encode_pubsub_item(Items, []) | _acc]).
 
-decode_pubsub_publish_attr_node(undefined) ->
+decode_pubsub_publish_attr_node(__TopXMLNS,
+                               undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"publish">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_publish_attr_node(_val) -> _val.
+                 {missing_attr, <<"node">>, <<"publish">>, __TopXMLNS}});
+decode_pubsub_publish_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_publish_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_unsubscribe({xmlel, <<"unsubscribe">>,
-                          _attrs, _els}) ->
+decode_pubsub_unsubscribe(__TopXMLNS,
+                         {xmlel, <<"unsubscribe">>, _attrs, _els}) ->
     {Node, Subid, Jid} =
-       decode_pubsub_unsubscribe_attrs(_attrs, undefined,
-                                       undefined, undefined),
+       decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
+                                       undefined, undefined, undefined),
     {pubsub_unsubscribe, Node, Jid, Subid}.
 
-decode_pubsub_unsubscribe_attrs([{<<"node">>, _val}
-                                | _attrs],
-                               _Node, Subid, Jid) ->
-    decode_pubsub_unsubscribe_attrs(_attrs, _val, Subid,
-                                   Jid);
-decode_pubsub_unsubscribe_attrs([{<<"subid">>, _val}
-                                | _attrs],
-                               Node, _Subid, Jid) ->
-    decode_pubsub_unsubscribe_attrs(_attrs, Node, _val,
-                                   Jid);
-decode_pubsub_unsubscribe_attrs([{<<"jid">>, _val}
-                                | _attrs],
-                               Node, Subid, _Jid) ->
-    decode_pubsub_unsubscribe_attrs(_attrs, Node, Subid,
-                                   _val);
-decode_pubsub_unsubscribe_attrs([_ | _attrs], Node,
+decode_pubsub_unsubscribe_attrs(__TopXMLNS,
+                               [{<<"node">>, _val} | _attrs], _Node, Subid,
+                               Jid) ->
+    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
+                                   _val, Subid, Jid);
+decode_pubsub_unsubscribe_attrs(__TopXMLNS,
+                               [{<<"subid">>, _val} | _attrs], Node, _Subid,
+                               Jid) ->
+    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
+                                   Node, _val, Jid);
+decode_pubsub_unsubscribe_attrs(__TopXMLNS,
+                               [{<<"jid">>, _val} | _attrs], Node, Subid,
+                               _Jid) ->
+    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
+                                   Node, Subid, _val);
+decode_pubsub_unsubscribe_attrs(__TopXMLNS,
+                               [_ | _attrs], Node, Subid, Jid) ->
+    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
+                                   Node, Subid, Jid);
+decode_pubsub_unsubscribe_attrs(__TopXMLNS, [], Node,
                                Subid, Jid) ->
-    decode_pubsub_unsubscribe_attrs(_attrs, Node, Subid,
-                                   Jid);
-decode_pubsub_unsubscribe_attrs([], Node, Subid, Jid) ->
-    {decode_pubsub_unsubscribe_attr_node(Node),
-     decode_pubsub_unsubscribe_attr_subid(Subid),
-     decode_pubsub_unsubscribe_attr_jid(Jid)}.
+    {decode_pubsub_unsubscribe_attr_node(__TopXMLNS, Node),
+     decode_pubsub_unsubscribe_attr_subid(__TopXMLNS, Subid),
+     decode_pubsub_unsubscribe_attr_jid(__TopXMLNS, Jid)}.
 
 encode_pubsub_unsubscribe({pubsub_unsubscribe, Node,
                           Jid, Subid},
@@ -5017,60 +5476,68 @@ encode_pubsub_unsubscribe({pubsub_unsubscribe, Node,
                                                                                                                         _xmlns_attrs))),
     {xmlel, <<"unsubscribe">>, _attrs, _els}.
 
-decode_pubsub_unsubscribe_attr_node(undefined) ->
+decode_pubsub_unsubscribe_attr_node(__TopXMLNS,
+                                   undefined) ->
     undefined;
-decode_pubsub_unsubscribe_attr_node(_val) -> _val.
+decode_pubsub_unsubscribe_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_unsubscribe_attr_node(undefined, _acc) ->
     _acc;
 encode_pubsub_unsubscribe_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_unsubscribe_attr_subid(undefined) ->
+decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
+                                    undefined) ->
     undefined;
-decode_pubsub_unsubscribe_attr_subid(_val) -> _val.
+decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
+                                    _val) ->
+    _val.
 
 encode_pubsub_unsubscribe_attr_subid(undefined, _acc) ->
     _acc;
 encode_pubsub_unsubscribe_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
-decode_pubsub_unsubscribe_attr_jid(undefined) ->
+decode_pubsub_unsubscribe_attr_jid(__TopXMLNS,
+                                  undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"unsubscribe">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_unsubscribe_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_pubsub_unsubscribe_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"unsubscribe">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_pubsub_unsubscribe_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_pubsub_subscribe({xmlel, <<"subscribe">>, _attrs,
-                        _els}) ->
-    {Node, Jid} = decode_pubsub_subscribe_attrs(_attrs,
-                                               undefined, undefined),
+decode_pubsub_subscribe(__TopXMLNS,
+                       {xmlel, <<"subscribe">>, _attrs, _els}) ->
+    {Node, Jid} = decode_pubsub_subscribe_attrs(__TopXMLNS,
+                                               _attrs, undefined, undefined),
     {pubsub_subscribe, Node, Jid}.
 
-decode_pubsub_subscribe_attrs([{<<"node">>, _val}
-                              | _attrs],
-                             _Node, Jid) ->
-    decode_pubsub_subscribe_attrs(_attrs, _val, Jid);
-decode_pubsub_subscribe_attrs([{<<"jid">>, _val}
-                              | _attrs],
-                             Node, _Jid) ->
-    decode_pubsub_subscribe_attrs(_attrs, Node, _val);
-decode_pubsub_subscribe_attrs([_ | _attrs], Node,
+decode_pubsub_subscribe_attrs(__TopXMLNS,
+                             [{<<"node">>, _val} | _attrs], _Node, Jid) ->
+    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, _val,
+                                 Jid);
+decode_pubsub_subscribe_attrs(__TopXMLNS,
+                             [{<<"jid">>, _val} | _attrs], Node, _Jid) ->
+    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, Node,
+                                 _val);
+decode_pubsub_subscribe_attrs(__TopXMLNS, [_ | _attrs],
+                             Node, Jid) ->
+    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, Node,
+                                 Jid);
+decode_pubsub_subscribe_attrs(__TopXMLNS, [], Node,
                              Jid) ->
-    decode_pubsub_subscribe_attrs(_attrs, Node, Jid);
-decode_pubsub_subscribe_attrs([], Node, Jid) ->
-    {decode_pubsub_subscribe_attr_node(Node),
-     decode_pubsub_subscribe_attr_jid(Jid)}.
+    {decode_pubsub_subscribe_attr_node(__TopXMLNS, Node),
+     decode_pubsub_subscribe_attr_jid(__TopXMLNS, Jid)}.
 
 encode_pubsub_subscribe({pubsub_subscribe, Node, Jid},
                        _xmlns_attrs) ->
@@ -5080,55 +5547,61 @@ encode_pubsub_subscribe({pubsub_subscribe, Node, Jid},
                                                                                _xmlns_attrs)),
     {xmlel, <<"subscribe">>, _attrs, _els}.
 
-decode_pubsub_subscribe_attr_node(undefined) ->
+decode_pubsub_subscribe_attr_node(__TopXMLNS,
+                                 undefined) ->
     undefined;
-decode_pubsub_subscribe_attr_node(_val) -> _val.
+decode_pubsub_subscribe_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_subscribe_attr_node(undefined, _acc) ->
     _acc;
 encode_pubsub_subscribe_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_subscribe_attr_jid(undefined) ->
+decode_pubsub_subscribe_attr_jid(__TopXMLNS,
+                                undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"subscribe">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_subscribe_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_pubsub_subscribe_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"subscribe">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_pubsub_subscribe_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_pubsub_affiliations({xmlel, <<"affiliations">>,
-                           _attrs, _els}) ->
-    Affiliations = decode_pubsub_affiliations_els(_els, []),
+decode_pubsub_affiliations(__TopXMLNS,
+                          {xmlel, <<"affiliations">>, _attrs, _els}) ->
+    Affiliations =
+       decode_pubsub_affiliations_els(__TopXMLNS, _els, []),
     Affiliations.
 
-decode_pubsub_affiliations_els([], Affiliations) ->
+decode_pubsub_affiliations_els(__TopXMLNS, [],
+                              Affiliations) ->
     lists:reverse(Affiliations);
-decode_pubsub_affiliations_els([{xmlel,
-                                <<"affiliation">>, _attrs, _} =
-                                   _el
+decode_pubsub_affiliations_els(__TopXMLNS,
+                              [{xmlel, <<"affiliation">>, _attrs, _} = _el
                                | _els],
                               Affiliations) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_affiliations_els(_els,
-                                         [decode_pubsub_affiliation(_el)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_affiliations_els(__TopXMLNS, _els,
+                                         [decode_pubsub_affiliation(__TopXMLNS,
+                                                                    _el)
                                           | Affiliations]);
        true ->
-          decode_pubsub_affiliations_els(_els, Affiliations)
+          decode_pubsub_affiliations_els(__TopXMLNS, _els,
+                                         Affiliations)
     end;
-decode_pubsub_affiliations_els([_ | _els],
+decode_pubsub_affiliations_els(__TopXMLNS, [_ | _els],
                               Affiliations) ->
-    decode_pubsub_affiliations_els(_els, Affiliations).
+    decode_pubsub_affiliations_els(__TopXMLNS, _els,
+                                  Affiliations).
 
 encode_pubsub_affiliations(Affiliations,
                           _xmlns_attrs) ->
@@ -5148,42 +5621,47 @@ encode_pubsub_affiliations(Affiliations,
                                                                          [])
                                                | _acc]).
 
-decode_pubsub_subscriptions({xmlel, <<"subscriptions">>,
-                            _attrs, _els}) ->
-    Subscriptions = decode_pubsub_subscriptions_els(_els,
-                                                   []),
-    Node = decode_pubsub_subscriptions_attrs(_attrs,
-                                            undefined),
+decode_pubsub_subscriptions(__TopXMLNS,
+                           {xmlel, <<"subscriptions">>, _attrs, _els}) ->
+    Subscriptions =
+       decode_pubsub_subscriptions_els(__TopXMLNS, _els, []),
+    Node = decode_pubsub_subscriptions_attrs(__TopXMLNS,
+                                            _attrs, undefined),
     {Node, Subscriptions}.
 
-decode_pubsub_subscriptions_els([], Subscriptions) ->
+decode_pubsub_subscriptions_els(__TopXMLNS, [],
+                               Subscriptions) ->
     lists:reverse(Subscriptions);
-decode_pubsub_subscriptions_els([{xmlel,
-                                 <<"subscription">>, _attrs, _} =
-                                    _el
+decode_pubsub_subscriptions_els(__TopXMLNS,
+                               [{xmlel, <<"subscription">>, _attrs, _} = _el
                                 | _els],
                                Subscriptions) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_subscriptions_els(_els,
-                                          [decode_pubsub_subscription(_el)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_subscriptions_els(__TopXMLNS, _els,
+                                          [decode_pubsub_subscription(__TopXMLNS,
+                                                                      _el)
                                            | Subscriptions]);
        true ->
-          decode_pubsub_subscriptions_els(_els, Subscriptions)
+          decode_pubsub_subscriptions_els(__TopXMLNS, _els,
+                                          Subscriptions)
     end;
-decode_pubsub_subscriptions_els([_ | _els],
+decode_pubsub_subscriptions_els(__TopXMLNS, [_ | _els],
                                Subscriptions) ->
-    decode_pubsub_subscriptions_els(_els, Subscriptions).
-
-decode_pubsub_subscriptions_attrs([{<<"node">>, _val}
-                                  | _attrs],
-                                 _Node) ->
-    decode_pubsub_subscriptions_attrs(_attrs, _val);
-decode_pubsub_subscriptions_attrs([_ | _attrs], Node) ->
-    decode_pubsub_subscriptions_attrs(_attrs, Node);
-decode_pubsub_subscriptions_attrs([], Node) ->
-    decode_pubsub_subscriptions_attr_node(Node).
+    decode_pubsub_subscriptions_els(__TopXMLNS, _els,
+                                   Subscriptions).
+
+decode_pubsub_subscriptions_attrs(__TopXMLNS,
+                                 [{<<"node">>, _val} | _attrs], _Node) ->
+    decode_pubsub_subscriptions_attrs(__TopXMLNS, _attrs,
+                                     _val);
+decode_pubsub_subscriptions_attrs(__TopXMLNS,
+                                 [_ | _attrs], Node) ->
+    decode_pubsub_subscriptions_attrs(__TopXMLNS, _attrs,
+                                     Node);
+decode_pubsub_subscriptions_attrs(__TopXMLNS, [],
+                                 Node) ->
+    decode_pubsub_subscriptions_attr_node(__TopXMLNS, Node).
 
 encode_pubsub_subscriptions({Node, Subscriptions},
                            _xmlns_attrs) ->
@@ -5205,37 +5683,38 @@ encode_pubsub_subscriptions({Node, Subscriptions},
                                                                             [])
                                                  | _acc]).
 
-decode_pubsub_subscriptions_attr_node(undefined) ->
+decode_pubsub_subscriptions_attr_node(__TopXMLNS,
+                                     undefined) ->
     none;
-decode_pubsub_subscriptions_attr_node(_val) -> _val.
+decode_pubsub_subscriptions_attr_node(__TopXMLNS,
+                                     _val) ->
+    _val.
 
 encode_pubsub_subscriptions_attr_node(none, _acc) ->
     _acc;
 encode_pubsub_subscriptions_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_event({xmlel, <<"event">>, _attrs,
-                    _els}) ->
-    Items = decode_pubsub_event_els(_els, []),
+decode_pubsub_event(__TopXMLNS,
+                   {xmlel, <<"event">>, _attrs, _els}) ->
+    Items = decode_pubsub_event_els(__TopXMLNS, _els, []),
     {pubsub_event, Items}.
 
-decode_pubsub_event_els([], Items) ->
+decode_pubsub_event_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_pubsub_event_els([{xmlel, <<"items">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
+decode_pubsub_event_els(__TopXMLNS,
+                       [{xmlel, <<"items">>, _attrs, _} = _el | _els],
                        Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/pubsub#event">> ->
-          decode_pubsub_event_els(_els,
-                                  [decode_pubsub_event_items(_el) | Items]);
-       true -> decode_pubsub_event_els(_els, Items)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_event_els(__TopXMLNS, _els,
+                                  [decode_pubsub_event_items(__TopXMLNS, _el)
+                                   | Items]);
+       true -> decode_pubsub_event_els(__TopXMLNS, _els, Items)
     end;
-decode_pubsub_event_els([_ | _els], Items) ->
-    decode_pubsub_event_els(_els, Items).
+decode_pubsub_event_els(__TopXMLNS, [_ | _els],
+                       Items) ->
+    decode_pubsub_event_els(__TopXMLNS, _els, Items).
 
 encode_pubsub_event({pubsub_event, Items},
                    _xmlns_attrs) ->
@@ -5248,59 +5727,59 @@ encode_pubsub_event({pubsub_event, Items},
     'encode_pubsub_event_$items'(_els,
                                 [encode_pubsub_event_items(Items, []) | _acc]).
 
-decode_pubsub_event_items({xmlel, <<"items">>, _attrs,
-                          _els}) ->
-    {Items, Retract} = decode_pubsub_event_items_els(_els,
-                                                    [], []),
-    Node = decode_pubsub_event_items_attrs(_attrs,
-                                          undefined),
+decode_pubsub_event_items(__TopXMLNS,
+                         {xmlel, <<"items">>, _attrs, _els}) ->
+    {Items, Retract} =
+       decode_pubsub_event_items_els(__TopXMLNS, _els, [], []),
+    Node = decode_pubsub_event_items_attrs(__TopXMLNS,
+                                          _attrs, undefined),
     {pubsub_event_items, Node, Retract, Items}.
 
-decode_pubsub_event_items_els([], Items, Retract) ->
+decode_pubsub_event_items_els(__TopXMLNS, [], Items,
+                             Retract) ->
     {lists:reverse(Items), lists:reverse(Retract)};
-decode_pubsub_event_items_els([{xmlel, <<"retract">>,
-                               _attrs, _} =
-                                  _el
-                              | _els],
+decode_pubsub_event_items_els(__TopXMLNS,
+                             [{xmlel, <<"retract">>, _attrs, _} = _el | _els],
                              Items, Retract) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/pubsub#event">> ->
-          decode_pubsub_event_items_els(_els, Items,
-                                        [decode_pubsub_event_retract(_el)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_event_items_els(__TopXMLNS, _els, Items,
+                                        [decode_pubsub_event_retract(__TopXMLNS,
+                                                                     _el)
                                          | Retract]);
        true ->
-          decode_pubsub_event_items_els(_els, Items, Retract)
+          decode_pubsub_event_items_els(__TopXMLNS, _els, Items,
+                                        Retract)
     end;
-decode_pubsub_event_items_els([{xmlel, <<"item">>,
-                               _attrs, _} =
-                                  _el
-                              | _els],
+decode_pubsub_event_items_els(__TopXMLNS,
+                             [{xmlel, <<"item">>, _attrs, _} = _el | _els],
                              Items, Retract) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/pubsub#event">> ->
-          decode_pubsub_event_items_els(_els,
-                                        [decode_pubsub_event_item(_el)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_event_items_els(__TopXMLNS, _els,
+                                        [decode_pubsub_event_item(__TopXMLNS,
+                                                                  _el)
                                          | Items],
                                         Retract);
        true ->
-          decode_pubsub_event_items_els(_els, Items, Retract)
+          decode_pubsub_event_items_els(__TopXMLNS, _els, Items,
+                                        Retract)
     end;
-decode_pubsub_event_items_els([_ | _els], Items,
-                             Retract) ->
-    decode_pubsub_event_items_els(_els, Items, Retract).
+decode_pubsub_event_items_els(__TopXMLNS, [_ | _els],
+                             Items, Retract) ->
+    decode_pubsub_event_items_els(__TopXMLNS, _els, Items,
+                                 Retract).
 
-decode_pubsub_event_items_attrs([{<<"node">>, _val}
-                                | _attrs],
-                               _Node) ->
-    decode_pubsub_event_items_attrs(_attrs, _val);
-decode_pubsub_event_items_attrs([_ | _attrs], Node) ->
-    decode_pubsub_event_items_attrs(_attrs, Node);
-decode_pubsub_event_items_attrs([], Node) ->
-    decode_pubsub_event_items_attr_node(Node).
+decode_pubsub_event_items_attrs(__TopXMLNS,
+                               [{<<"node">>, _val} | _attrs], _Node) ->
+    decode_pubsub_event_items_attrs(__TopXMLNS, _attrs,
+                                   _val);
+decode_pubsub_event_items_attrs(__TopXMLNS,
+                               [_ | _attrs], Node) ->
+    decode_pubsub_event_items_attrs(__TopXMLNS, _attrs,
+                                   Node);
+decode_pubsub_event_items_attrs(__TopXMLNS, [], Node) ->
+    decode_pubsub_event_items_attr_node(__TopXMLNS, Node).
 
 encode_pubsub_event_items({pubsub_event_items, Node,
                           Retract, Items},
@@ -5327,45 +5806,48 @@ encode_pubsub_event_items({pubsub_event_items, Node,
                                                                      [])
                                          | _acc]).
 
-decode_pubsub_event_items_attr_node(undefined) ->
+decode_pubsub_event_items_attr_node(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"items">>,
-                  <<"http://jabber.org/protocol/pubsub#event">>}});
-decode_pubsub_event_items_attr_node(_val) -> _val.
+                 {missing_attr, <<"node">>, <<"items">>, __TopXMLNS}});
+decode_pubsub_event_items_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_event_items_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_event_item({xmlel, <<"item">>, _attrs,
-                         _els}) ->
+decode_pubsub_event_item(__TopXMLNS,
+                        {xmlel, <<"item">>, _attrs, _els}) ->
     {Id, Node, Publisher} =
-       decode_pubsub_event_item_attrs(_attrs, undefined,
-                                      undefined, undefined),
+       decode_pubsub_event_item_attrs(__TopXMLNS, _attrs,
+                                      undefined, undefined, undefined),
     {pubsub_event_item, Id, Node, Publisher}.
 
-decode_pubsub_event_item_attrs([{<<"id">>, _val}
-                               | _attrs],
-                              _Id, Node, Publisher) ->
-    decode_pubsub_event_item_attrs(_attrs, _val, Node,
-                                  Publisher);
-decode_pubsub_event_item_attrs([{<<"node">>, _val}
-                               | _attrs],
-                              Id, _Node, Publisher) ->
-    decode_pubsub_event_item_attrs(_attrs, Id, _val,
-                                  Publisher);
-decode_pubsub_event_item_attrs([{<<"publisher">>, _val}
-                               | _attrs],
-                              Id, Node, _Publisher) ->
-    decode_pubsub_event_item_attrs(_attrs, Id, Node, _val);
-decode_pubsub_event_item_attrs([_ | _attrs], Id, Node,
+decode_pubsub_event_item_attrs(__TopXMLNS,
+                              [{<<"id">>, _val} | _attrs], _Id, Node,
+                              Publisher) ->
+    decode_pubsub_event_item_attrs(__TopXMLNS, _attrs, _val,
+                                  Node, Publisher);
+decode_pubsub_event_item_attrs(__TopXMLNS,
+                              [{<<"node">>, _val} | _attrs], Id, _Node,
                               Publisher) ->
-    decode_pubsub_event_item_attrs(_attrs, Id, Node,
-                                  Publisher);
-decode_pubsub_event_item_attrs([], Id, Node,
+    decode_pubsub_event_item_attrs(__TopXMLNS, _attrs, Id,
+                                  _val, Publisher);
+decode_pubsub_event_item_attrs(__TopXMLNS,
+                              [{<<"publisher">>, _val} | _attrs], Id, Node,
+                              _Publisher) ->
+    decode_pubsub_event_item_attrs(__TopXMLNS, _attrs, Id,
+                                  Node, _val);
+decode_pubsub_event_item_attrs(__TopXMLNS, [_ | _attrs],
+                              Id, Node, Publisher) ->
+    decode_pubsub_event_item_attrs(__TopXMLNS, _attrs, Id,
+                                  Node, Publisher);
+decode_pubsub_event_item_attrs(__TopXMLNS, [], Id, Node,
                               Publisher) ->
-    {decode_pubsub_event_item_attr_id(Id),
-     decode_pubsub_event_item_attr_node(Node),
-     decode_pubsub_event_item_attr_publisher(Publisher)}.
+    {decode_pubsub_event_item_attr_id(__TopXMLNS, Id),
+     decode_pubsub_event_item_attr_node(__TopXMLNS, Node),
+     decode_pubsub_event_item_attr_publisher(__TopXMLNS,
+                                            Publisher)}.
 
 encode_pubsub_event_item({pubsub_event_item, Id, Node,
                          Publisher},
@@ -5378,27 +5860,34 @@ encode_pubsub_event_item({pubsub_event_item, Id, Node,
                                                                                                                    _xmlns_attrs))),
     {xmlel, <<"item">>, _attrs, _els}.
 
-decode_pubsub_event_item_attr_id(undefined) ->
+decode_pubsub_event_item_attr_id(__TopXMLNS,
+                                undefined) ->
     undefined;
-decode_pubsub_event_item_attr_id(_val) -> _val.
+decode_pubsub_event_item_attr_id(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_event_item_attr_id(undefined, _acc) ->
     _acc;
 encode_pubsub_event_item_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_pubsub_event_item_attr_node(undefined) ->
+decode_pubsub_event_item_attr_node(__TopXMLNS,
+                                  undefined) ->
     undefined;
-decode_pubsub_event_item_attr_node(_val) -> _val.
+decode_pubsub_event_item_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_event_item_attr_node(undefined, _acc) ->
     _acc;
 encode_pubsub_event_item_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_event_item_attr_publisher(undefined) ->
+decode_pubsub_event_item_attr_publisher(__TopXMLNS,
+                                       undefined) ->
     undefined;
-decode_pubsub_event_item_attr_publisher(_val) -> _val.
+decode_pubsub_event_item_attr_publisher(__TopXMLNS,
+                                       _val) ->
+    _val.
 
 encode_pubsub_event_item_attr_publisher(undefined,
                                        _acc) ->
@@ -5406,20 +5895,22 @@ encode_pubsub_event_item_attr_publisher(undefined,
 encode_pubsub_event_item_attr_publisher(_val, _acc) ->
     [{<<"publisher">>, _val} | _acc].
 
-decode_pubsub_event_retract({xmlel, <<"retract">>,
-                            _attrs, _els}) ->
-    Id = decode_pubsub_event_retract_attrs(_attrs,
-                                          undefined),
+decode_pubsub_event_retract(__TopXMLNS,
+                           {xmlel, <<"retract">>, _attrs, _els}) ->
+    Id = decode_pubsub_event_retract_attrs(__TopXMLNS,
+                                          _attrs, undefined),
     Id.
 
-decode_pubsub_event_retract_attrs([{<<"id">>, _val}
-                                  | _attrs],
-                                 _Id) ->
-    decode_pubsub_event_retract_attrs(_attrs, _val);
-decode_pubsub_event_retract_attrs([_ | _attrs], Id) ->
-    decode_pubsub_event_retract_attrs(_attrs, Id);
-decode_pubsub_event_retract_attrs([], Id) ->
-    decode_pubsub_event_retract_attr_id(Id).
+decode_pubsub_event_retract_attrs(__TopXMLNS,
+                                 [{<<"id">>, _val} | _attrs], _Id) ->
+    decode_pubsub_event_retract_attrs(__TopXMLNS, _attrs,
+                                     _val);
+decode_pubsub_event_retract_attrs(__TopXMLNS,
+                                 [_ | _attrs], Id) ->
+    decode_pubsub_event_retract_attrs(__TopXMLNS, _attrs,
+                                     Id);
+decode_pubsub_event_retract_attrs(__TopXMLNS, [], Id) ->
+    decode_pubsub_event_retract_attr_id(__TopXMLNS, Id).
 
 encode_pubsub_event_retract(Id, _xmlns_attrs) ->
     _els = [],
@@ -5427,61 +5918,64 @@ encode_pubsub_event_retract(Id, _xmlns_attrs) ->
                                                 _xmlns_attrs),
     {xmlel, <<"retract">>, _attrs, _els}.
 
-decode_pubsub_event_retract_attr_id(undefined) ->
+decode_pubsub_event_retract_attr_id(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"retract">>,
-                  <<"http://jabber.org/protocol/pubsub#event">>}});
-decode_pubsub_event_retract_attr_id(_val) -> _val.
+                 {missing_attr, <<"id">>, <<"retract">>, __TopXMLNS}});
+decode_pubsub_event_retract_attr_id(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_event_retract_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_pubsub_items({xmlel, <<"items">>, _attrs,
-                    _els}) ->
-    Items = decode_pubsub_items_els(_els, []),
+decode_pubsub_items(__TopXMLNS,
+                   {xmlel, <<"items">>, _attrs, _els}) ->
+    Items = decode_pubsub_items_els(__TopXMLNS, _els, []),
     {Max_items, Node, Subid} =
-       decode_pubsub_items_attrs(_attrs, undefined, undefined,
-                                 undefined),
+       decode_pubsub_items_attrs(__TopXMLNS, _attrs, undefined,
+                                 undefined, undefined),
     {pubsub_items, Node, Max_items, Subid, Items}.
 
-decode_pubsub_items_els([], Items) ->
+decode_pubsub_items_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_pubsub_items_els([{xmlel, <<"item">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Items) ->
+decode_pubsub_items_els(__TopXMLNS,
+                       [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
-          decode_pubsub_items_els(_els,
-                                  [decode_pubsub_item(_el) | Items]);
-       true -> decode_pubsub_items_els(_els, Items)
-    end;
-decode_pubsub_items_els([_ | _els], Items) ->
-    decode_pubsub_items_els(_els, Items).
-
-decode_pubsub_items_attrs([{<<"max_items">>, _val}
-                          | _attrs],
-                         _Max_items, Node, Subid) ->
-    decode_pubsub_items_attrs(_attrs, _val, Node, Subid);
-decode_pubsub_items_attrs([{<<"node">>, _val} | _attrs],
-                         Max_items, _Node, Subid) ->
-    decode_pubsub_items_attrs(_attrs, Max_items, _val,
-                             Subid);
-decode_pubsub_items_attrs([{<<"subid">>, _val}
-                          | _attrs],
-                         Max_items, Node, _Subid) ->
-    decode_pubsub_items_attrs(_attrs, Max_items, Node,
-                             _val);
-decode_pubsub_items_attrs([_ | _attrs], Max_items, Node,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_pubsub_items_els(__TopXMLNS, _els,
+                                  [decode_pubsub_item(__TopXMLNS, _el)
+                                   | Items]);
+       true -> decode_pubsub_items_els(__TopXMLNS, _els, Items)
+    end;
+decode_pubsub_items_els(__TopXMLNS, [_ | _els],
+                       Items) ->
+    decode_pubsub_items_els(__TopXMLNS, _els, Items).
+
+decode_pubsub_items_attrs(__TopXMLNS,
+                         [{<<"max_items">>, _val} | _attrs], _Max_items, Node,
+                         Subid) ->
+    decode_pubsub_items_attrs(__TopXMLNS, _attrs, _val,
+                             Node, Subid);
+decode_pubsub_items_attrs(__TopXMLNS,
+                         [{<<"node">>, _val} | _attrs], Max_items, _Node,
                          Subid) ->
-    decode_pubsub_items_attrs(_attrs, Max_items, Node,
-                             Subid);
-decode_pubsub_items_attrs([], Max_items, Node, Subid) ->
-    {decode_pubsub_items_attr_max_items(Max_items),
-     decode_pubsub_items_attr_node(Node),
-     decode_pubsub_items_attr_subid(Subid)}.
+    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Max_items,
+                             _val, Subid);
+decode_pubsub_items_attrs(__TopXMLNS,
+                         [{<<"subid">>, _val} | _attrs], Max_items, Node,
+                         _Subid) ->
+    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Max_items,
+                             Node, _val);
+decode_pubsub_items_attrs(__TopXMLNS, [_ | _attrs],
+                         Max_items, Node, Subid) ->
+    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Max_items,
+                             Node, Subid);
+decode_pubsub_items_attrs(__TopXMLNS, [], Max_items,
+                         Node, Subid) ->
+    {decode_pubsub_items_attr_max_items(__TopXMLNS,
+                                       Max_items),
+     decode_pubsub_items_attr_node(__TopXMLNS, Node),
+     decode_pubsub_items_attr_subid(__TopXMLNS, Subid)}.
 
 encode_pubsub_items({pubsub_items, Node, Max_items,
                     Subid, Items},
@@ -5498,14 +5992,15 @@ encode_pubsub_items({pubsub_items, Node, Max_items,
     'encode_pubsub_items_$items'(_els,
                                 [encode_pubsub_item(Items, []) | _acc]).
 
-decode_pubsub_items_attr_max_items(undefined) ->
+decode_pubsub_items_attr_max_items(__TopXMLNS,
+                                  undefined) ->
     undefined;
-decode_pubsub_items_attr_max_items(_val) ->
+decode_pubsub_items_attr_max_items(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"max_items">>, <<"items">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -5514,42 +6009,48 @@ encode_pubsub_items_attr_max_items(undefined, _acc) ->
 encode_pubsub_items_attr_max_items(_val, _acc) ->
     [{<<"max_items">>, enc_int(_val)} | _acc].
 
-decode_pubsub_items_attr_node(undefined) ->
+decode_pubsub_items_attr_node(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"items">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_items_attr_node(_val) -> _val.
+                 {missing_attr, <<"node">>, <<"items">>, __TopXMLNS}});
+decode_pubsub_items_attr_node(__TopXMLNS, _val) -> _val.
 
 encode_pubsub_items_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_items_attr_subid(undefined) -> undefined;
-decode_pubsub_items_attr_subid(_val) -> _val.
+decode_pubsub_items_attr_subid(__TopXMLNS, undefined) ->
+    undefined;
+decode_pubsub_items_attr_subid(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_items_attr_subid(undefined, _acc) -> _acc;
 encode_pubsub_items_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
-decode_pubsub_item({xmlel, <<"item">>, _attrs, _els}) ->
-    __Xmls = decode_pubsub_item_els(_els, []),
-    Id = decode_pubsub_item_attrs(_attrs, undefined),
+decode_pubsub_item(__TopXMLNS,
+                  {xmlel, <<"item">>, _attrs, _els}) ->
+    __Xmls = decode_pubsub_item_els(__TopXMLNS, _els, []),
+    Id = decode_pubsub_item_attrs(__TopXMLNS, _attrs,
+                                 undefined),
     {pubsub_item, Id, __Xmls}.
 
-decode_pubsub_item_els([], __Xmls) ->
+decode_pubsub_item_els(__TopXMLNS, [], __Xmls) ->
     lists:reverse(__Xmls);
-decode_pubsub_item_els([{xmlel, _, _, _} = _el | _els],
+decode_pubsub_item_els(__TopXMLNS,
+                      [{xmlel, _, _, _} = _el | _els], __Xmls) ->
+    decode_pubsub_item_els(__TopXMLNS, _els,
+                          [_el | __Xmls]);
+decode_pubsub_item_els(__TopXMLNS, [_ | _els],
                       __Xmls) ->
-    decode_pubsub_item_els(_els, [_el | __Xmls]);
-decode_pubsub_item_els([_ | _els], __Xmls) ->
-    decode_pubsub_item_els(_els, __Xmls).
-
-decode_pubsub_item_attrs([{<<"id">>, _val} | _attrs],
-                        _Id) ->
-    decode_pubsub_item_attrs(_attrs, _val);
-decode_pubsub_item_attrs([_ | _attrs], Id) ->
-    decode_pubsub_item_attrs(_attrs, Id);
-decode_pubsub_item_attrs([], Id) ->
-    decode_pubsub_item_attr_id(Id).
+    decode_pubsub_item_els(__TopXMLNS, _els, __Xmls).
+
+decode_pubsub_item_attrs(__TopXMLNS,
+                        [{<<"id">>, _val} | _attrs], _Id) ->
+    decode_pubsub_item_attrs(__TopXMLNS, _attrs, _val);
+decode_pubsub_item_attrs(__TopXMLNS, [_ | _attrs],
+                        Id) ->
+    decode_pubsub_item_attrs(__TopXMLNS, _attrs, Id);
+decode_pubsub_item_attrs(__TopXMLNS, [], Id) ->
+    decode_pubsub_item_attr_id(__TopXMLNS, Id).
 
 encode_pubsub_item({pubsub_item, Id, __Xmls},
                   _xmlns_attrs) ->
@@ -5557,34 +6058,39 @@ encode_pubsub_item({pubsub_item, Id, __Xmls},
     _attrs = encode_pubsub_item_attr_id(Id, _xmlns_attrs),
     {xmlel, <<"item">>, _attrs, _els}.
 
-decode_pubsub_item_attr_id(undefined) -> undefined;
-decode_pubsub_item_attr_id(_val) -> _val.
+decode_pubsub_item_attr_id(__TopXMLNS, undefined) ->
+    undefined;
+decode_pubsub_item_attr_id(__TopXMLNS, _val) -> _val.
 
 encode_pubsub_item_attr_id(undefined, _acc) -> _acc;
 encode_pubsub_item_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_pubsub_affiliation({xmlel, <<"affiliation">>,
-                          _attrs, _els}) ->
-    {Node, Type} = decode_pubsub_affiliation_attrs(_attrs,
-                                                  undefined, undefined),
+decode_pubsub_affiliation(__TopXMLNS,
+                         {xmlel, <<"affiliation">>, _attrs, _els}) ->
+    {Node, Type} =
+       decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
+                                       undefined, undefined),
     {pubsub_affiliation, Node, Type}.
 
-decode_pubsub_affiliation_attrs([{<<"node">>, _val}
-                                | _attrs],
-                               _Node, Type) ->
-    decode_pubsub_affiliation_attrs(_attrs, _val, Type);
-decode_pubsub_affiliation_attrs([{<<"affiliation">>,
-                                 _val}
-                                | _attrs],
-                               Node, _Type) ->
-    decode_pubsub_affiliation_attrs(_attrs, Node, _val);
-decode_pubsub_affiliation_attrs([_ | _attrs], Node,
+decode_pubsub_affiliation_attrs(__TopXMLNS,
+                               [{<<"node">>, _val} | _attrs], _Node, Type) ->
+    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
+                                   _val, Type);
+decode_pubsub_affiliation_attrs(__TopXMLNS,
+                               [{<<"affiliation">>, _val} | _attrs], Node,
+                               _Type) ->
+    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
+                                   Node, _val);
+decode_pubsub_affiliation_attrs(__TopXMLNS,
+                               [_ | _attrs], Node, Type) ->
+    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
+                                   Node, Type);
+decode_pubsub_affiliation_attrs(__TopXMLNS, [], Node,
                                Type) ->
-    decode_pubsub_affiliation_attrs(_attrs, Node, Type);
-decode_pubsub_affiliation_attrs([], Node, Type) ->
-    {decode_pubsub_affiliation_attr_node(Node),
-     decode_pubsub_affiliation_attr_affiliation(Type)}.
+    {decode_pubsub_affiliation_attr_node(__TopXMLNS, Node),
+     decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
+                                               Type)}.
 
 encode_pubsub_affiliation({pubsub_affiliation, Node,
                           Type},
@@ -5596,20 +6102,24 @@ encode_pubsub_affiliation({pubsub_affiliation, Node,
                                                                                       _xmlns_attrs)),
     {xmlel, <<"affiliation">>, _attrs, _els}.
 
-decode_pubsub_affiliation_attr_node(undefined) ->
+decode_pubsub_affiliation_attr_node(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"node">>, <<"affiliation">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_affiliation_attr_node(_val) -> _val.
+                  __TopXMLNS}});
+decode_pubsub_affiliation_attr_node(__TopXMLNS, _val) ->
+    _val.
 
 encode_pubsub_affiliation_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_affiliation_attr_affiliation(undefined) ->
+decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
+                                          undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"affiliation">>, <<"affiliation">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_affiliation_attr_affiliation(_val) ->
+                  __TopXMLNS}});
+decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
+                                          _val) ->
     case catch dec_enum(_val,
                        [member, none, outcast, owner, publisher,
                         'publish-only'])
@@ -5617,7 +6127,7 @@ decode_pubsub_affiliation_attr_affiliation(_val) ->
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"affiliation">>, <<"affiliation">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -5625,44 +6135,46 @@ encode_pubsub_affiliation_attr_affiliation(_val,
                                           _acc) ->
     [{<<"affiliation">>, enc_enum(_val)} | _acc].
 
-decode_pubsub_subscription({xmlel, <<"subscription">>,
-                           _attrs, _els}) ->
+decode_pubsub_subscription(__TopXMLNS,
+                          {xmlel, <<"subscription">>, _attrs, _els}) ->
     {Jid, Node, Subid, Type} =
-       decode_pubsub_subscription_attrs(_attrs, undefined,
-                                        undefined, undefined, undefined),
+       decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                        undefined, undefined, undefined,
+                                        undefined),
     {pubsub_subscription, Jid, Node, Subid, Type}.
 
-decode_pubsub_subscription_attrs([{<<"jid">>, _val}
-                                 | _attrs],
-                                _Jid, Node, Subid, Type) ->
-    decode_pubsub_subscription_attrs(_attrs, _val, Node,
-                                    Subid, Type);
-decode_pubsub_subscription_attrs([{<<"node">>, _val}
-                                 | _attrs],
-                                Jid, _Node, Subid, Type) ->
-    decode_pubsub_subscription_attrs(_attrs, Jid, _val,
-                                    Subid, Type);
-decode_pubsub_subscription_attrs([{<<"subid">>, _val}
-                                 | _attrs],
-                                Jid, Node, _Subid, Type) ->
-    decode_pubsub_subscription_attrs(_attrs, Jid, Node,
-                                    _val, Type);
-decode_pubsub_subscription_attrs([{<<"subscription">>,
-                                  _val}
-                                 | _attrs],
-                                Jid, Node, Subid, _Type) ->
-    decode_pubsub_subscription_attrs(_attrs, Jid, Node,
-                                    Subid, _val);
-decode_pubsub_subscription_attrs([_ | _attrs], Jid,
+decode_pubsub_subscription_attrs(__TopXMLNS,
+                                [{<<"jid">>, _val} | _attrs], _Jid, Node,
+                                Subid, Type) ->
+    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                    _val, Node, Subid, Type);
+decode_pubsub_subscription_attrs(__TopXMLNS,
+                                [{<<"node">>, _val} | _attrs], Jid, _Node,
+                                Subid, Type) ->
+    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                    Jid, _val, Subid, Type);
+decode_pubsub_subscription_attrs(__TopXMLNS,
+                                [{<<"subid">>, _val} | _attrs], Jid, Node,
+                                _Subid, Type) ->
+    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                    Jid, Node, _val, Type);
+decode_pubsub_subscription_attrs(__TopXMLNS,
+                                [{<<"subscription">>, _val} | _attrs], Jid,
+                                Node, Subid, _Type) ->
+    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                    Jid, Node, Subid, _val);
+decode_pubsub_subscription_attrs(__TopXMLNS,
+                                [_ | _attrs], Jid, Node, Subid, Type) ->
+    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
+                                    Jid, Node, Subid, Type);
+decode_pubsub_subscription_attrs(__TopXMLNS, [], Jid,
                                 Node, Subid, Type) ->
-    decode_pubsub_subscription_attrs(_attrs, Jid, Node,
-                                    Subid, Type);
-decode_pubsub_subscription_attrs([], Jid, Node, Subid,
-                                Type) ->
-    {decode_pubsub_subscription_attr_jid(Jid),
-     decode_pubsub_subscription_attr_node(Node),
-     decode_pubsub_subscription_attr_subid(Subid),
-     decode_pubsub_subscription_attr_subscription(Type)}.
+    {decode_pubsub_subscription_attr_jid(__TopXMLNS, Jid),
+     decode_pubsub_subscription_attr_node(__TopXMLNS, Node),
+     decode_pubsub_subscription_attr_subid(__TopXMLNS,
+                                          Subid),
+     decode_pubsub_subscription_attr_subscription(__TopXMLNS,
+                                                 Type)}.
 
 encode_pubsub_subscription({pubsub_subscription, Jid,
                            Node, Subid, Type},
@@ -5676,34 +6188,41 @@ encode_pubsub_subscription({pubsub_subscription, Jid,
                                                                                                                                                                    _xmlns_attrs)))),
     {xmlel, <<"subscription">>, _attrs, _els}.
 
-decode_pubsub_subscription_attr_jid(undefined) ->
+decode_pubsub_subscription_attr_jid(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"subscription">>,
-                  <<"http://jabber.org/protocol/pubsub">>}});
-decode_pubsub_subscription_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_pubsub_subscription_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"subscription">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_pubsub_subscription_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_pubsub_subscription_attr_node(undefined) ->
+decode_pubsub_subscription_attr_node(__TopXMLNS,
+                                    undefined) ->
     undefined;
-decode_pubsub_subscription_attr_node(_val) -> _val.
+decode_pubsub_subscription_attr_node(__TopXMLNS,
+                                    _val) ->
+    _val.
 
 encode_pubsub_subscription_attr_node(undefined, _acc) ->
     _acc;
 encode_pubsub_subscription_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_pubsub_subscription_attr_subid(undefined) ->
+decode_pubsub_subscription_attr_subid(__TopXMLNS,
+                                     undefined) ->
     undefined;
-decode_pubsub_subscription_attr_subid(_val) -> _val.
+decode_pubsub_subscription_attr_subid(__TopXMLNS,
+                                     _val) ->
+    _val.
 
 encode_pubsub_subscription_attr_subid(undefined,
                                      _acc) ->
@@ -5711,16 +6230,18 @@ encode_pubsub_subscription_attr_subid(undefined,
 encode_pubsub_subscription_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
-decode_pubsub_subscription_attr_subscription(undefined) ->
+decode_pubsub_subscription_attr_subscription(__TopXMLNS,
+                                            undefined) ->
     undefined;
-decode_pubsub_subscription_attr_subscription(_val) ->
+decode_pubsub_subscription_attr_subscription(__TopXMLNS,
+                                            _val) ->
     case catch dec_enum(_val,
                        [none, pending, subscribed, unconfigured])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"subscription">>, <<"subscription">>,
-                        <<"http://jabber.org/protocol/pubsub">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -5731,94 +6252,95 @@ encode_pubsub_subscription_attr_subscription(_val,
                                             _acc) ->
     [{<<"subscription">>, enc_enum(_val)} | _acc].
 
-decode_xdata({xmlel, <<"x">>, _attrs, _els}) ->
+decode_xdata(__TopXMLNS,
+            {xmlel, <<"x">>, _attrs, _els}) ->
     {Fields, Items, Instructions, Reported, Title} =
-       decode_xdata_els(_els, [], [], [], undefined,
-                        undefined),
-    Type = decode_xdata_attrs(_attrs, undefined),
+       decode_xdata_els(__TopXMLNS, _els, [], [], [],
+                        undefined, undefined),
+    Type = decode_xdata_attrs(__TopXMLNS, _attrs,
+                             undefined),
     {xdata, Type, Instructions, Title, Reported, Items,
      Fields}.
 
-decode_xdata_els([], Fields, Items, Instructions,
-                Reported, Title) ->
+decode_xdata_els(__TopXMLNS, [], Fields, Items,
+                Instructions, Reported, Title) ->
     {lists:reverse(Fields), lists:reverse(Items),
      lists:reverse(Instructions), Reported, Title};
-decode_xdata_els([{xmlel, <<"instructions">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_xdata_els(__TopXMLNS,
+                [{xmlel, <<"instructions">>, _attrs, _} = _el | _els],
                 Fields, Items, Instructions, Reported, Title) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_els(_els, Fields, Items,
-                           case decode_xdata_instructions(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           case decode_xdata_instructions(__TopXMLNS, _el) of
                              undefined -> Instructions;
                              _new_el -> [_new_el | Instructions]
                            end,
                            Reported, Title);
        true ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, Title)
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported, Title)
     end;
-decode_xdata_els([{xmlel, <<"title">>, _attrs, _} = _el
-                 | _els],
-                Fields, Items, Instructions, Reported, Title) ->
+decode_xdata_els(__TopXMLNS,
+                [{xmlel, <<"title">>, _attrs, _} = _el | _els], Fields,
+                Items, Instructions, Reported, Title) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, decode_xdata_title(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported,
+                           decode_xdata_title(__TopXMLNS, _el));
        true ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, Title)
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported, Title)
     end;
-decode_xdata_els([{xmlel, <<"reported">>, _attrs, _} =
-                     _el
-                 | _els],
+decode_xdata_els(__TopXMLNS,
+                [{xmlel, <<"reported">>, _attrs, _} = _el | _els],
                 Fields, Items, Instructions, Reported, Title) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           decode_xdata_reported(_el), Title);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions,
+                           decode_xdata_reported(__TopXMLNS, _el), Title);
        true ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, Title)
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported, Title)
     end;
-decode_xdata_els([{xmlel, <<"item">>, _attrs, _} = _el
-                 | _els],
-                Fields, Items, Instructions, Reported, Title) ->
+decode_xdata_els(__TopXMLNS,
+                [{xmlel, <<"item">>, _attrs, _} = _el | _els], Fields,
+                Items, Instructions, Reported, Title) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_els(_els, Fields,
-                           [decode_xdata_item(_el) | Items], Instructions,
-                           Reported, Title);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_els(__TopXMLNS, _els, Fields,
+                           [decode_xdata_item(__TopXMLNS, _el) | Items],
+                           Instructions, Reported, Title);
        true ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, Title)
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported, Title)
     end;
-decode_xdata_els([{xmlel, <<"field">>, _attrs, _} = _el
-                 | _els],
-                Fields, Items, Instructions, Reported, Title) ->
+decode_xdata_els(__TopXMLNS,
+                [{xmlel, <<"field">>, _attrs, _} = _el | _els], Fields,
+                Items, Instructions, Reported, Title) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_els(_els,
-                           [decode_xdata_field(_el) | Fields], Items,
-                           Instructions, Reported, Title);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_els(__TopXMLNS, _els,
+                           [decode_xdata_field(__TopXMLNS, _el) | Fields],
+                           Items, Instructions, Reported, Title);
        true ->
-          decode_xdata_els(_els, Fields, Items, Instructions,
-                           Reported, Title)
+          decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                           Instructions, Reported, Title)
     end;
-decode_xdata_els([_ | _els], Fields, Items,
+decode_xdata_els(__TopXMLNS, [_ | _els], Fields, Items,
                 Instructions, Reported, Title) ->
-    decode_xdata_els(_els, Fields, Items, Instructions,
-                    Reported, Title).
+    decode_xdata_els(__TopXMLNS, _els, Fields, Items,
+                    Instructions, Reported, Title).
 
-decode_xdata_attrs([{<<"type">>, _val} | _attrs],
-                  _Type) ->
-    decode_xdata_attrs(_attrs, _val);
-decode_xdata_attrs([_ | _attrs], Type) ->
-    decode_xdata_attrs(_attrs, Type);
-decode_xdata_attrs([], Type) ->
-    decode_xdata_attr_type(Type).
+decode_xdata_attrs(__TopXMLNS,
+                  [{<<"type">>, _val} | _attrs], _Type) ->
+    decode_xdata_attrs(__TopXMLNS, _attrs, _val);
+decode_xdata_attrs(__TopXMLNS, [_ | _attrs], Type) ->
+    decode_xdata_attrs(__TopXMLNS, _attrs, Type);
+decode_xdata_attrs(__TopXMLNS, [], Type) ->
+    decode_xdata_attr_type(__TopXMLNS, Type).
 
 encode_xdata({xdata, Type, Instructions, Title,
              Reported, Items, Fields},
@@ -5857,1014 +6379,1057 @@ encode_xdata({xdata, Type, Instructions, Title,
 'encode_xdata_$title'(Title, _acc) ->
     [encode_xdata_title(Title, []) | _acc].
 
-decode_xdata_attr_type(undefined) ->
+decode_xdata_attr_type(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"x">>,
-                  <<"jabber:x:data">>}});
-decode_xdata_attr_type(_val) ->
+                 {missing_attr, <<"type">>, <<"x">>, __TopXMLNS}});
+decode_xdata_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [cancel, form, result, submit])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"x">>,
-                        <<"jabber:x:data">>}});
+                       {bad_attr_value, <<"type">>, <<"x">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_xdata_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_xdata_item({xmlel, <<"item">>, _attrs, _els}) ->
-    Fields = decode_xdata_item_els(_els, []), Fields.
-
-decode_xdata_item_els([], Fields) ->
-    lists:reverse(Fields);
-decode_xdata_item_els([{xmlel, <<"field">>, _attrs, _} =
-                          _el
-                      | _els],
-                     Fields) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_item_els(_els,
-                                [decode_xdata_field(_el) | Fields]);
-       true -> decode_xdata_item_els(_els, Fields)
-    end;
-decode_xdata_item_els([_ | _els], Fields) ->
-    decode_xdata_item_els(_els, Fields).
-
-encode_xdata_item(Fields, _xmlns_attrs) ->
-    _els = 'encode_xdata_item_$fields'(Fields, []),
-    _attrs = _xmlns_attrs,
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_xdata_item_$fields'([], _acc) -> _acc;
-'encode_xdata_item_$fields'([Fields | _els], _acc) ->
-    'encode_xdata_item_$fields'(_els,
-                               [encode_xdata_field(Fields, []) | _acc]).
-
-decode_xdata_reported({xmlel, <<"reported">>, _attrs,
-                      _els}) ->
-    Fields = decode_xdata_reported_els(_els, []), Fields.
-
-decode_xdata_reported_els([], Fields) ->
-    lists:reverse(Fields);
-decode_xdata_reported_els([{xmlel, <<"field">>, _attrs,
-                           _} =
-                              _el
-                          | _els],
-                         Fields) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_reported_els(_els,
-                                    [decode_xdata_field(_el) | Fields]);
-       true -> decode_xdata_reported_els(_els, Fields)
-    end;
-decode_xdata_reported_els([_ | _els], Fields) ->
-    decode_xdata_reported_els(_els, Fields).
-
-encode_xdata_reported(Fields, _xmlns_attrs) ->
-    _els = 'encode_xdata_reported_$fields'(Fields, []),
-    _attrs = _xmlns_attrs,
-    {xmlel, <<"reported">>, _attrs, _els}.
-
-'encode_xdata_reported_$fields'([], _acc) -> _acc;
-'encode_xdata_reported_$fields'([Fields | _els],
-                               _acc) ->
-    'encode_xdata_reported_$fields'(_els,
-                                   [encode_xdata_field(Fields, []) | _acc]).
-
-decode_xdata_title({xmlel, <<"title">>, _attrs,
-                   _els}) ->
-    Cdata = decode_xdata_title_els(_els, <<>>), Cdata.
-
-decode_xdata_title_els([], Cdata) ->
-    decode_xdata_title_cdata(Cdata);
-decode_xdata_title_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_xdata_title_els(_els,
-                          <<Cdata/binary, _data/binary>>);
-decode_xdata_title_els([_ | _els], Cdata) ->
-    decode_xdata_title_els(_els, Cdata).
-
-encode_xdata_title(Cdata, _xmlns_attrs) ->
-    _els = encode_xdata_title_cdata(Cdata, []),
-    _attrs = _xmlns_attrs,
-    {xmlel, <<"title">>, _attrs, _els}.
-
-decode_xdata_title_cdata(<<>>) -> undefined;
-decode_xdata_title_cdata(_val) -> _val.
-
-encode_xdata_title_cdata(undefined, _acc) -> _acc;
-encode_xdata_title_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_instructions({xmlel, <<"instructions">>,
-                          _attrs, _els}) ->
-    Cdata = decode_xdata_instructions_els(_els, <<>>),
-    Cdata.
-
-decode_xdata_instructions_els([], Cdata) ->
-    decode_xdata_instructions_cdata(Cdata);
-decode_xdata_instructions_els([{xmlcdata, _data}
-                              | _els],
-                             Cdata) ->
-    decode_xdata_instructions_els(_els,
-                                 <<Cdata/binary, _data/binary>>);
-decode_xdata_instructions_els([_ | _els], Cdata) ->
-    decode_xdata_instructions_els(_els, Cdata).
-
-encode_xdata_instructions(Cdata, _xmlns_attrs) ->
-    _els = encode_xdata_instructions_cdata(Cdata, []),
-    _attrs = _xmlns_attrs,
-    {xmlel, <<"instructions">>, _attrs, _els}.
-
-decode_xdata_instructions_cdata(<<>>) -> undefined;
-decode_xdata_instructions_cdata(_val) -> _val.
-
-encode_xdata_instructions_cdata(undefined, _acc) ->
-    _acc;
-encode_xdata_instructions_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_field({xmlel, <<"field">>, _attrs,
-                   _els}) ->
-    {Options, Values, Desc, Required} =
-       decode_xdata_field_els(_els, [], [], undefined, false),
-    {Label, Type, Var} = decode_xdata_field_attrs(_attrs,
-                                                 undefined, undefined,
-                                                 undefined),
-    {xdata_field, Label, Type, Var, Required, Desc, Values,
-     Options}.
-
-decode_xdata_field_els([], Options, Values, Desc,
-                      Required) ->
-    {lists:reverse(Options), lists:reverse(Values), Desc,
-     Required};
-decode_xdata_field_els([{xmlel, <<"required">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Options, Values, Desc, Required) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_field_els(_els, Options, Values, Desc,
-                                 decode_xdata_field_required(_el));
-       true ->
-          decode_xdata_field_els(_els, Options, Values, Desc,
-                                 Required)
-    end;
-decode_xdata_field_els([{xmlel, <<"desc">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Options, Values, Desc, Required) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_field_els(_els, Options, Values,
-                                 decode_xdata_field_desc(_el), Required);
-       true ->
-          decode_xdata_field_els(_els, Options, Values, Desc,
-                                 Required)
-    end;
-decode_xdata_field_els([{xmlel, <<"value">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Options, Values, Desc, Required) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_field_els(_els, Options,
-                                 case decode_xdata_field_value(_el) of
-                                   undefined -> Values;
-                                   _new_el -> [_new_el | Values]
-                                 end,
-                                 Desc, Required);
-       true ->
-          decode_xdata_field_els(_els, Options, Values, Desc,
-                                 Required)
-    end;
-decode_xdata_field_els([{xmlel, <<"option">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Options, Values, Desc, Required) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_field_els(_els,
-                                 case decode_xdata_field_option(_el) of
-                                   undefined -> Options;
-                                   _new_el -> [_new_el | Options]
-                                 end,
-                                 Values, Desc, Required);
-       true ->
-          decode_xdata_field_els(_els, Options, Values, Desc,
-                                 Required)
-    end;
-decode_xdata_field_els([_ | _els], Options, Values,
-                      Desc, Required) ->
-    decode_xdata_field_els(_els, Options, Values, Desc,
-                          Required).
-
-decode_xdata_field_attrs([{<<"label">>, _val} | _attrs],
-                        _Label, Type, Var) ->
-    decode_xdata_field_attrs(_attrs, _val, Type, Var);
-decode_xdata_field_attrs([{<<"type">>, _val} | _attrs],
-                        Label, _Type, Var) ->
-    decode_xdata_field_attrs(_attrs, Label, _val, Var);
-decode_xdata_field_attrs([{<<"var">>, _val} | _attrs],
-                        Label, Type, _Var) ->
-    decode_xdata_field_attrs(_attrs, Label, Type, _val);
-decode_xdata_field_attrs([_ | _attrs], Label, Type,
-                        Var) ->
-    decode_xdata_field_attrs(_attrs, Label, Type, Var);
-decode_xdata_field_attrs([], Label, Type, Var) ->
-    {decode_xdata_field_attr_label(Label),
-     decode_xdata_field_attr_type(Type),
-     decode_xdata_field_attr_var(Var)}.
-
-encode_xdata_field({xdata_field, Label, Type, Var,
-                   Required, Desc, Values, Options},
-                  _xmlns_attrs) ->
-    _els = 'encode_xdata_field_$required'(Required,
-                                         'encode_xdata_field_$desc'(Desc,
-                                                                    'encode_xdata_field_$values'(Values,
-                                                                                                 'encode_xdata_field_$options'(Options,
-                                                                                                                               [])))),
-    _attrs = encode_xdata_field_attr_var(Var,
-                                        encode_xdata_field_attr_type(Type,
-                                                                     encode_xdata_field_attr_label(Label,
-                                                                                                   _xmlns_attrs))),
-    {xmlel, <<"field">>, _attrs, _els}.
-
-'encode_xdata_field_$options'([], _acc) -> _acc;
-'encode_xdata_field_$options'([Options | _els], _acc) ->
-    'encode_xdata_field_$options'(_els,
-                                 [encode_xdata_field_option(Options, [])
-                                  | _acc]).
-
-'encode_xdata_field_$values'([], _acc) -> _acc;
-'encode_xdata_field_$values'([Values | _els], _acc) ->
-    'encode_xdata_field_$values'(_els,
-                                [encode_xdata_field_value(Values, []) | _acc]).
-
-'encode_xdata_field_$desc'(undefined, _acc) -> _acc;
-'encode_xdata_field_$desc'(Desc, _acc) ->
-    [encode_xdata_field_desc(Desc, []) | _acc].
-
-'encode_xdata_field_$required'(false, _acc) -> _acc;
-'encode_xdata_field_$required'(Required, _acc) ->
-    [encode_xdata_field_required(Required, []) | _acc].
-
-decode_xdata_field_attr_label(undefined) -> undefined;
-decode_xdata_field_attr_label(_val) -> _val.
-
-encode_xdata_field_attr_label(undefined, _acc) -> _acc;
-encode_xdata_field_attr_label(_val, _acc) ->
-    [{<<"label">>, _val} | _acc].
-
-decode_xdata_field_attr_type(undefined) -> undefined;
-decode_xdata_field_attr_type(_val) ->
-    case catch dec_enum(_val,
-                       [boolean, fixed, hidden, 'jid-multi', 'jid-single',
-                        'list-multi', 'list-single', 'text-multi',
-                        'text-private', 'text-single'])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"field">>,
-                        <<"jabber:x:data">>}});
-      _res -> _res
-    end.
+decode_xdata_item(__TopXMLNS,
+                 {xmlel, <<"item">>, _attrs, _els}) ->
+    Fields = decode_xdata_item_els(__TopXMLNS, _els, []),
+    Fields.
 
-encode_xdata_field_attr_type(undefined, _acc) -> _acc;
-encode_xdata_field_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
+decode_xdata_item_els(__TopXMLNS, [], Fields) ->
+    lists:reverse(Fields);
+decode_xdata_item_els(__TopXMLNS,
+                     [{xmlel, <<"field">>, _attrs, _} = _el | _els],
+                     Fields) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_item_els(__TopXMLNS, _els,
+                                [decode_xdata_field(__TopXMLNS, _el)
+                                 | Fields]);
+       true -> decode_xdata_item_els(__TopXMLNS, _els, Fields)
+    end;
+decode_xdata_item_els(__TopXMLNS, [_ | _els], Fields) ->
+    decode_xdata_item_els(__TopXMLNS, _els, Fields).
 
-decode_xdata_field_attr_var(undefined) -> undefined;
-decode_xdata_field_attr_var(_val) -> _val.
+encode_xdata_item(Fields, _xmlns_attrs) ->
+    _els = 'encode_xdata_item_$fields'(Fields, []),
+    _attrs = _xmlns_attrs,
+    {xmlel, <<"item">>, _attrs, _els}.
 
-encode_xdata_field_attr_var(undefined, _acc) -> _acc;
-encode_xdata_field_attr_var(_val, _acc) ->
-    [{<<"var">>, _val} | _acc].
+'encode_xdata_item_$fields'([], _acc) -> _acc;
+'encode_xdata_item_$fields'([Fields | _els], _acc) ->
+    'encode_xdata_item_$fields'(_els,
+                               [encode_xdata_field(Fields, []) | _acc]).
 
-decode_xdata_field_option({xmlel, <<"option">>, _attrs,
-                          _els}) ->
-    Value = decode_xdata_field_option_els(_els, error),
-    Value.
+decode_xdata_reported(__TopXMLNS,
+                     {xmlel, <<"reported">>, _attrs, _els}) ->
+    Fields = decode_xdata_reported_els(__TopXMLNS, _els,
+                                      []),
+    Fields.
 
-decode_xdata_field_option_els([], Value) ->
-    case Value of
-      error ->
-         erlang:error({xmpp_codec,
-                       {missing_tag, <<"value">>, <<"jabber:x:data">>}});
-      {value, Value1} -> Value1
-    end;
-decode_xdata_field_option_els([{xmlel, <<"value">>,
-                               _attrs, _} =
-                                  _el
-                              | _els],
-                             Value) ->
+decode_xdata_reported_els(__TopXMLNS, [], Fields) ->
+    lists:reverse(Fields);
+decode_xdata_reported_els(__TopXMLNS,
+                         [{xmlel, <<"field">>, _attrs, _} = _el | _els],
+                         Fields) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
-          decode_xdata_field_option_els(_els,
-                                        {value,
-                                         decode_xdata_field_value(_el)});
-       true -> decode_xdata_field_option_els(_els, Value)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_reported_els(__TopXMLNS, _els,
+                                    [decode_xdata_field(__TopXMLNS, _el)
+                                     | Fields]);
+       true ->
+          decode_xdata_reported_els(__TopXMLNS, _els, Fields)
     end;
-decode_xdata_field_option_els([_ | _els], Value) ->
-    decode_xdata_field_option_els(_els, Value).
+decode_xdata_reported_els(__TopXMLNS, [_ | _els],
+                         Fields) ->
+    decode_xdata_reported_els(__TopXMLNS, _els, Fields).
 
-encode_xdata_field_option(Value, _xmlns_attrs) ->
-    _els = 'encode_xdata_field_option_$value'(Value, []),
+encode_xdata_reported(Fields, _xmlns_attrs) ->
+    _els = 'encode_xdata_reported_$fields'(Fields, []),
     _attrs = _xmlns_attrs,
-    {xmlel, <<"option">>, _attrs, _els}.
+    {xmlel, <<"reported">>, _attrs, _els}.
 
-'encode_xdata_field_option_$value'(Value, _acc) ->
-    [encode_xdata_field_value(Value, []) | _acc].
+'encode_xdata_reported_$fields'([], _acc) -> _acc;
+'encode_xdata_reported_$fields'([Fields | _els],
+                               _acc) ->
+    'encode_xdata_reported_$fields'(_els,
+                                   [encode_xdata_field(Fields, []) | _acc]).
 
-decode_xdata_field_value({xmlel, <<"value">>, _attrs,
-                         _els}) ->
-    Cdata = decode_xdata_field_value_els(_els, <<>>), Cdata.
+decode_xdata_title(__TopXMLNS,
+                  {xmlel, <<"title">>, _attrs, _els}) ->
+    Cdata = decode_xdata_title_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_xdata_field_value_els([], Cdata) ->
-    decode_xdata_field_value_cdata(Cdata);
-decode_xdata_field_value_els([{xmlcdata, _data} | _els],
-                            Cdata) ->
-    decode_xdata_field_value_els(_els,
-                                <<Cdata/binary, _data/binary>>);
-decode_xdata_field_value_els([_ | _els], Cdata) ->
-    decode_xdata_field_value_els(_els, Cdata).
+decode_xdata_title_els(__TopXMLNS, [], Cdata) ->
+    decode_xdata_title_cdata(__TopXMLNS, Cdata);
+decode_xdata_title_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_xdata_title_els(__TopXMLNS, _els,
+                          <<Cdata/binary, _data/binary>>);
+decode_xdata_title_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_xdata_title_els(__TopXMLNS, _els, Cdata).
 
-encode_xdata_field_value(Cdata, _xmlns_attrs) ->
-    _els = encode_xdata_field_value_cdata(Cdata, []),
+encode_xdata_title(Cdata, _xmlns_attrs) ->
+    _els = encode_xdata_title_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
-    {xmlel, <<"value">>, _attrs, _els}.
+    {xmlel, <<"title">>, _attrs, _els}.
 
-decode_xdata_field_value_cdata(<<>>) -> undefined;
-decode_xdata_field_value_cdata(_val) -> _val.
+decode_xdata_title_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_xdata_title_cdata(__TopXMLNS, _val) -> _val.
 
-encode_xdata_field_value_cdata(undefined, _acc) -> _acc;
-encode_xdata_field_value_cdata(_val, _acc) ->
+encode_xdata_title_cdata(undefined, _acc) -> _acc;
+encode_xdata_title_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_xdata_field_desc({xmlel, <<"desc">>, _attrs,
-                        _els}) ->
-    Cdata = decode_xdata_field_desc_els(_els, <<>>), Cdata.
+decode_xdata_instructions(__TopXMLNS,
+                         {xmlel, <<"instructions">>, _attrs, _els}) ->
+    Cdata = decode_xdata_instructions_els(__TopXMLNS, _els,
+                                         <<>>),
+    Cdata.
 
-decode_xdata_field_desc_els([], Cdata) ->
-    decode_xdata_field_desc_cdata(Cdata);
-decode_xdata_field_desc_els([{xmlcdata, _data} | _els],
-                           Cdata) ->
-    decode_xdata_field_desc_els(_els,
-                               <<Cdata/binary, _data/binary>>);
-decode_xdata_field_desc_els([_ | _els], Cdata) ->
-    decode_xdata_field_desc_els(_els, Cdata).
+decode_xdata_instructions_els(__TopXMLNS, [], Cdata) ->
+    decode_xdata_instructions_cdata(__TopXMLNS, Cdata);
+decode_xdata_instructions_els(__TopXMLNS,
+                             [{xmlcdata, _data} | _els], Cdata) ->
+    decode_xdata_instructions_els(__TopXMLNS, _els,
+                                 <<Cdata/binary, _data/binary>>);
+decode_xdata_instructions_els(__TopXMLNS, [_ | _els],
+                             Cdata) ->
+    decode_xdata_instructions_els(__TopXMLNS, _els, Cdata).
 
-encode_xdata_field_desc(Cdata, _xmlns_attrs) ->
-    _els = encode_xdata_field_desc_cdata(Cdata, []),
+encode_xdata_instructions(Cdata, _xmlns_attrs) ->
+    _els = encode_xdata_instructions_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
-    {xmlel, <<"desc">>, _attrs, _els}.
+    {xmlel, <<"instructions">>, _attrs, _els}.
 
-decode_xdata_field_desc_cdata(<<>>) -> undefined;
-decode_xdata_field_desc_cdata(_val) -> _val.
+decode_xdata_instructions_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_xdata_instructions_cdata(__TopXMLNS, _val) ->
+    _val.
 
-encode_xdata_field_desc_cdata(undefined, _acc) -> _acc;
-encode_xdata_field_desc_cdata(_val, _acc) ->
+encode_xdata_instructions_cdata(undefined, _acc) ->
+    _acc;
+encode_xdata_instructions_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_xdata_field_required({xmlel, <<"required">>,
-                            _attrs, _els}) ->
-    true.
-
-encode_xdata_field_required(true, _xmlns_attrs) ->
-    _els = [],
-    _attrs = _xmlns_attrs,
-    {xmlel, <<"required">>, _attrs, _els}.
-
-decode_vcard({xmlel, <<"vCard">>, _attrs, _els}) ->
-    {Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-     Fn, Version, N, Photo, Logo, Geo} =
-       decode_vcard_els(_els, undefined, [], undefined, [],
-                        undefined, undefined, undefined, undefined, undefined,
-                        undefined, undefined, undefined, undefined, undefined,
-                        undefined, undefined, undefined, undefined, undefined,
-                        undefined, [], [], [], undefined, undefined, undefined,
-                        undefined, undefined, undefined),
-    {vcard, Version, Fn, N, Nickname, Photo, Bday, Adr,
-     Label, Tel, Email, Jabberid, Mailer, Tz, Geo, Title,
-     Role, Logo, Org, Categories, Note, Prodid, Rev,
-     Sort_string, Sound, Uid, Url, Class, Key, Desc}.
+decode_xdata_field(__TopXMLNS,
+                  {xmlel, <<"field">>, _attrs, _els}) ->
+    {Options, Values, Desc, Required} =
+       decode_xdata_field_els(__TopXMLNS, _els, [], [],
+                              undefined, false),
+    {Label, Type, Var} =
+       decode_xdata_field_attrs(__TopXMLNS, _attrs, undefined,
+                                undefined, undefined),
+    {xdata_field, Label, Type, Var, Required, Desc, Values,
+     Options}.
 
-decode_vcard_els([], Mailer, Adr, Class, Categories,
-                Desc, Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-                Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                Email, Tel, Label, Fn, Version, N, Photo, Logo, Geo) ->
-    {Mailer, lists:reverse(Adr), Class, Categories, Desc,
-     Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-     Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
-     lists:reverse(Email), lists:reverse(Tel),
-     lists:reverse(Label), Fn, Version, N, Photo, Logo, Geo};
-decode_vcard_els([{xmlel, <<"N">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version,
-                           decode_vcard_N(_el), Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"ADR">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer,
-                           [decode_vcard_ADR(_el) | Adr], Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"LABEL">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel,
-                           [decode_vcard_LABEL(_el) | Label], Fn, Version, N,
-                           Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"TEL">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, [decode_vcard_TEL(_el) | Tel],
-                           Label, Fn, Version, N, Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"EMAIL">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, [decode_vcard_EMAIL(_el) | Email], Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"GEO">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, decode_vcard_GEO(_el));
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"LOGO">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           decode_vcard_LOGO(_el), Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"PHOTO">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N,
-                           decode_vcard_PHOTO(_el), Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"ORG">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string,
-                           decode_vcard_ORG(_el), Bday, Key, Tz, Url, Email,
-                           Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"SOUND">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid,
-                           decode_vcard_SOUND(_el), Note, Role, Title,
-                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                           Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"KEY">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday,
-                           decode_vcard_KEY(_el), Tz, Url, Email, Tel, Label,
-                           Fn, Version, N, Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"VERSION">>, _attrs, _} =
-                     _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
+decode_xdata_field_els(__TopXMLNS, [], Options, Values,
+                      Desc, Required) ->
+    {lists:reverse(Options), lists:reverse(Values), Desc,
+     Required};
+decode_xdata_field_els(__TopXMLNS,
+                      [{xmlel, <<"required">>, _attrs, _} = _el | _els],
+                      Options, Values, Desc, Required) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn,
-                           decode_vcard_VERSION(_el), N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values, Desc,
+                                 decode_xdata_field_required(__TopXMLNS, _el));
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"FN">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, decode_vcard_FN(_el),
-                           Version, N, Photo, Logo, Geo);
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values, Desc, Required)
+    end;
+decode_xdata_field_els(__TopXMLNS,
+                      [{xmlel, <<"desc">>, _attrs, _} = _el | _els], Options,
+                      Values, Desc, Required) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values,
+                                 decode_xdata_field_desc(__TopXMLNS, _el),
+                                 Required);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values, Desc, Required)
     end;
-decode_vcard_els([{xmlel, <<"NICKNAME">>, _attrs, _} =
-                     _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
+decode_xdata_field_els(__TopXMLNS,
+                      [{xmlel, <<"value">>, _attrs, _} = _el | _els], Options,
+                      Values, Desc, Required) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, decode_vcard_NICKNAME(_el), Rev, Sort_string,
-                           Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                           Version, N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 case decode_xdata_field_value(__TopXMLNS, _el)
+                                     of
+                                   undefined -> Values;
+                                   _new_el -> [_new_el | Values]
+                                 end,
+                                 Desc, Required);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values, Desc, Required)
     end;
-decode_vcard_els([{xmlel, <<"BDAY">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
+decode_xdata_field_els(__TopXMLNS,
+                      [{xmlel, <<"option">>, _attrs, _} = _el | _els],
+                      Options, Values, Desc, Required) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org,
-                           decode_vcard_BDAY(_el), Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_field_els(__TopXMLNS, _els,
+                                 case decode_xdata_field_option(__TopXMLNS,
+                                                                _el)
+                                     of
+                                   undefined -> Options;
+                                   _new_el -> [_new_el | Options]
+                                 end,
+                                 Values, Desc, Required);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
+          decode_xdata_field_els(__TopXMLNS, _els, Options,
+                                 Values, Desc, Required)
+    end;
+decode_xdata_field_els(__TopXMLNS, [_ | _els], Options,
+                      Values, Desc, Required) ->
+    decode_xdata_field_els(__TopXMLNS, _els, Options,
+                          Values, Desc, Required).
+
+decode_xdata_field_attrs(__TopXMLNS,
+                        [{<<"label">>, _val} | _attrs], _Label, Type, Var) ->
+    decode_xdata_field_attrs(__TopXMLNS, _attrs, _val, Type,
+                            Var);
+decode_xdata_field_attrs(__TopXMLNS,
+                        [{<<"type">>, _val} | _attrs], Label, _Type, Var) ->
+    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
+                            _val, Var);
+decode_xdata_field_attrs(__TopXMLNS,
+                        [{<<"var">>, _val} | _attrs], Label, Type, _Var) ->
+    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
+                            Type, _val);
+decode_xdata_field_attrs(__TopXMLNS, [_ | _attrs],
+                        Label, Type, Var) ->
+    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
+                            Type, Var);
+decode_xdata_field_attrs(__TopXMLNS, [], Label, Type,
+                        Var) ->
+    {decode_xdata_field_attr_label(__TopXMLNS, Label),
+     decode_xdata_field_attr_type(__TopXMLNS, Type),
+     decode_xdata_field_attr_var(__TopXMLNS, Var)}.
+
+encode_xdata_field({xdata_field, Label, Type, Var,
+                   Required, Desc, Values, Options},
+                  _xmlns_attrs) ->
+    _els = 'encode_xdata_field_$required'(Required,
+                                         'encode_xdata_field_$desc'(Desc,
+                                                                    'encode_xdata_field_$values'(Values,
+                                                                                                 'encode_xdata_field_$options'(Options,
+                                                                                                                               [])))),
+    _attrs = encode_xdata_field_attr_var(Var,
+                                        encode_xdata_field_attr_type(Type,
+                                                                     encode_xdata_field_attr_label(Label,
+                                                                                                   _xmlns_attrs))),
+    {xmlel, <<"field">>, _attrs, _els}.
+
+'encode_xdata_field_$options'([], _acc) -> _acc;
+'encode_xdata_field_$options'([Options | _els], _acc) ->
+    'encode_xdata_field_$options'(_els,
+                                 [encode_xdata_field_option(Options, [])
+                                  | _acc]).
+
+'encode_xdata_field_$values'([], _acc) -> _acc;
+'encode_xdata_field_$values'([Values | _els], _acc) ->
+    'encode_xdata_field_$values'(_els,
+                                [encode_xdata_field_value(Values, []) | _acc]).
+
+'encode_xdata_field_$desc'(undefined, _acc) -> _acc;
+'encode_xdata_field_$desc'(Desc, _acc) ->
+    [encode_xdata_field_desc(Desc, []) | _acc].
+
+'encode_xdata_field_$required'(false, _acc) -> _acc;
+'encode_xdata_field_$required'(Required, _acc) ->
+    [encode_xdata_field_required(Required, []) | _acc].
+
+decode_xdata_field_attr_label(__TopXMLNS, undefined) ->
+    undefined;
+decode_xdata_field_attr_label(__TopXMLNS, _val) -> _val.
+
+encode_xdata_field_attr_label(undefined, _acc) -> _acc;
+encode_xdata_field_attr_label(_val, _acc) ->
+    [{<<"label">>, _val} | _acc].
+
+decode_xdata_field_attr_type(__TopXMLNS, undefined) ->
+    undefined;
+decode_xdata_field_attr_type(__TopXMLNS, _val) ->
+    case catch dec_enum(_val,
+                       [boolean, fixed, hidden, 'jid-multi', 'jid-single',
+                        'list-multi', 'list-single', 'text-multi',
+                        'text-private', 'text-single'])
+       of
+      {'EXIT', _} ->
+         erlang:error({xmpp_codec,
+                       {bad_attr_value, <<"type">>, <<"field">>, __TopXMLNS}});
+      _res -> _res
+    end.
+
+encode_xdata_field_attr_type(undefined, _acc) -> _acc;
+encode_xdata_field_attr_type(_val, _acc) ->
+    [{<<"type">>, enc_enum(_val)} | _acc].
+
+decode_xdata_field_attr_var(__TopXMLNS, undefined) ->
+    undefined;
+decode_xdata_field_attr_var(__TopXMLNS, _val) -> _val.
+
+encode_xdata_field_attr_var(undefined, _acc) -> _acc;
+encode_xdata_field_attr_var(_val, _acc) ->
+    [{<<"var">>, _val} | _acc].
+
+decode_xdata_field_option(__TopXMLNS,
+                         {xmlel, <<"option">>, _attrs, _els}) ->
+    Value = decode_xdata_field_option_els(__TopXMLNS, _els,
+                                         error),
+    Value.
+
+decode_xdata_field_option_els(__TopXMLNS, [], Value) ->
+    case Value of
+      error ->
+         erlang:error({xmpp_codec,
+                       {missing_tag, <<"value">>, __TopXMLNS}});
+      {value, Value1} -> Value1
     end;
-decode_vcard_els([{xmlel, <<"JABBERID">>, _attrs, _} =
-                     _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
+decode_xdata_field_option_els(__TopXMLNS,
+                             [{xmlel, <<"value">>, _attrs, _} = _el | _els],
+                             Value) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, decode_vcard_JABBERID(_el),
-                           Sound, Note, Role, Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_xdata_field_option_els(__TopXMLNS, _els,
+                                        {value,
+                                         decode_xdata_field_value(__TopXMLNS,
+                                                                  _el)});
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
+          decode_xdata_field_option_els(__TopXMLNS, _els, Value)
     end;
-decode_vcard_els([{xmlel, <<"MAILER">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, decode_vcard_MAILER(_el), Adr,
-                           Class, Categories, Desc, Uid, Prodid, Jabberid,
-                           Sound, Note, Role, Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
+decode_xdata_field_option_els(__TopXMLNS, [_ | _els],
+                             Value) ->
+    decode_xdata_field_option_els(__TopXMLNS, _els, Value).
+
+encode_xdata_field_option(Value, _xmlns_attrs) ->
+    _els = 'encode_xdata_field_option_$value'(Value, []),
+    _attrs = _xmlns_attrs,
+    {xmlel, <<"option">>, _attrs, _els}.
+
+'encode_xdata_field_option_$value'(Value, _acc) ->
+    [encode_xdata_field_value(Value, []) | _acc].
+
+decode_xdata_field_value(__TopXMLNS,
+                        {xmlel, <<"value">>, _attrs, _els}) ->
+    Cdata = decode_xdata_field_value_els(__TopXMLNS, _els,
+                                        <<>>),
+    Cdata.
+
+decode_xdata_field_value_els(__TopXMLNS, [], Cdata) ->
+    decode_xdata_field_value_cdata(__TopXMLNS, Cdata);
+decode_xdata_field_value_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Cdata) ->
+    decode_xdata_field_value_els(__TopXMLNS, _els,
+                                <<Cdata/binary, _data/binary>>);
+decode_xdata_field_value_els(__TopXMLNS, [_ | _els],
+                            Cdata) ->
+    decode_xdata_field_value_els(__TopXMLNS, _els, Cdata).
+
+encode_xdata_field_value(Cdata, _xmlns_attrs) ->
+    _els = encode_xdata_field_value_cdata(Cdata, []),
+    _attrs = _xmlns_attrs,
+    {xmlel, <<"value">>, _attrs, _els}.
+
+decode_xdata_field_value_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_xdata_field_value_cdata(__TopXMLNS, _val) ->
+    _val.
+
+encode_xdata_field_value_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_value_cdata(_val, _acc) ->
+    [{xmlcdata, _val} | _acc].
+
+decode_xdata_field_desc(__TopXMLNS,
+                       {xmlel, <<"desc">>, _attrs, _els}) ->
+    Cdata = decode_xdata_field_desc_els(__TopXMLNS, _els,
+                                       <<>>),
+    Cdata.
+
+decode_xdata_field_desc_els(__TopXMLNS, [], Cdata) ->
+    decode_xdata_field_desc_cdata(__TopXMLNS, Cdata);
+decode_xdata_field_desc_els(__TopXMLNS,
+                           [{xmlcdata, _data} | _els], Cdata) ->
+    decode_xdata_field_desc_els(__TopXMLNS, _els,
+                               <<Cdata/binary, _data/binary>>);
+decode_xdata_field_desc_els(__TopXMLNS, [_ | _els],
+                           Cdata) ->
+    decode_xdata_field_desc_els(__TopXMLNS, _els, Cdata).
+
+encode_xdata_field_desc(Cdata, _xmlns_attrs) ->
+    _els = encode_xdata_field_desc_cdata(Cdata, []),
+    _attrs = _xmlns_attrs,
+    {xmlel, <<"desc">>, _attrs, _els}.
+
+decode_xdata_field_desc_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_xdata_field_desc_cdata(__TopXMLNS, _val) -> _val.
+
+encode_xdata_field_desc_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_desc_cdata(_val, _acc) ->
+    [{xmlcdata, _val} | _acc].
+
+decode_xdata_field_required(__TopXMLNS,
+                           {xmlel, <<"required">>, _attrs, _els}) ->
+    true.
+
+encode_xdata_field_required(true, _xmlns_attrs) ->
+    _els = [],
+    _attrs = _xmlns_attrs,
+    {xmlel, <<"required">>, _attrs, _els}.
+
+decode_vcard(__TopXMLNS,
+            {xmlel, <<"vCard">>, _attrs, _els}) ->
+    {Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
+     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
+     Fn, Version, N, Photo, Logo, Geo} =
+       decode_vcard_els(__TopXMLNS, _els, undefined, [],
+                        undefined, [], undefined, undefined, undefined,
+                        undefined, undefined, undefined, undefined, undefined,
+                        undefined, undefined, undefined, undefined, undefined,
+                        undefined, undefined, undefined, [], [], [], undefined,
+                        undefined, undefined, undefined, undefined, undefined),
+    {vcard, Version, Fn, N, Nickname, Photo, Bday, Adr,
+     Label, Tel, Email, Jabberid, Mailer, Tz, Geo, Title,
+     Role, Logo, Org, Categories, Note, Prodid, Rev,
+     Sort_string, Sound, Uid, Url, Class, Key, Desc}.
+
+decode_vcard_els(__TopXMLNS, [], Mailer, Adr, Class,
+                Categories, Desc, Uid, Prodid, Jabberid, Sound, Note,
+                Role, Title, Nickname, Rev, Sort_string, Org, Bday, Key,
+                Tz, Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                Geo) ->
+    {Mailer, lists:reverse(Adr), Class, Categories, Desc,
+     Uid, Prodid, Jabberid, Sound, Note, Role, Title,
+     Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+     lists:reverse(Email), lists:reverse(Tel),
+     lists:reverse(Label), Fn, Version, N, Photo, Logo, Geo};
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"N">>, _attrs, _} = _el | _els], Mailer, Adr,
+                Class, Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+                Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           decode_vcard_N(__TopXMLNS, _el), Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"TZ">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           decode_vcard_TZ(_el), Url, Email, Tel, Label, Fn,
-                           Version, N, Photo, Logo, Geo);
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"ADR">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer,
+                           [decode_vcard_ADR(__TopXMLNS, _el) | Adr], Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"TITLE">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           decode_vcard_TITLE(_el), Nickname, Rev, Sort_string,
-                           Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"LABEL">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel,
+                           [decode_vcard_LABEL(__TopXMLNS, _el) | Label], Fn,
                            Version, N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"ROLE">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note,
-                           decode_vcard_ROLE(_el), Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
-       true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"NOTE">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound,
-                           decode_vcard_NOTE(_el), Role, Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"TEL">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email,
+                           [decode_vcard_TEL(__TopXMLNS, _el) | Tel], Label,
+                           Fn, Version, N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"PRODID">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, decode_vcard_PRODID(_el), Jabberid,
-                           Sound, Note, Role, Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"EMAIL">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url,
+                           [decode_vcard_EMAIL(__TopXMLNS, _el) | Email], Tel,
                            Label, Fn, Version, N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"REV">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, decode_vcard_REV(_el), Sort_string,
-                           Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                           Version, N, Photo, Logo, Geo);
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"GEO">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, decode_vcard_GEO(__TopXMLNS, _el));
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"LOGO">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, decode_vcard_LOGO(__TopXMLNS, _el), Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"PHOTO">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, decode_vcard_PHOTO(__TopXMLNS, _el), Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"ORG">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string,
+                           decode_vcard_ORG(__TopXMLNS, _el), Bday, Key, Tz,
+                           Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"SOUND">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid,
+                           decode_vcard_SOUND(__TopXMLNS, _el), Note, Role,
                            Title, Nickname, Rev, Sort_string, Org, Bday, Key,
                            Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"SORT-STRING">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+                           Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"KEY">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, decode_vcard_KEY(__TopXMLNS, _el), Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"VERSION">>, _attrs, _} = _el | _els],
                 Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
                 Jabberid, Sound, Note, Role, Title, Nickname, Rev,
                 Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
                 Fn, Version, N, Photo, Logo, Geo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, decode_vcard_SORT_STRING(_el),
-                           Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                           Version, N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn,
+                           decode_vcard_VERSION(__TopXMLNS, _el), N, Photo,
+                           Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"UID">>, _attrs, _} = _el
-                 | _els],
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"FN">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label,
+                           decode_vcard_FN(__TopXMLNS, _el), Version, N, Photo,
+                           Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"NICKNAME">>, _attrs, _} = _el | _els],
                 Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
                 Jabberid, Sound, Note, Role, Title, Nickname, Rev,
                 Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
                 Fn, Version, N, Photo, Logo, Geo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, decode_vcard_UID(_el), Prodid, Jabberid,
-                           Sound, Note, Role, Title, Nickname, Rev,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title,
+                           decode_vcard_NICKNAME(__TopXMLNS, _el), Rev,
                            Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
                            Label, Fn, Version, N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"URL">>, _attrs, _} = _el
-                 | _els],
-                Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                Fn, Version, N, Photo, Logo, Geo) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, decode_vcard_URL(_el), Email, Tel, Label, Fn,
-                           Version, N, Photo, Logo, Geo);
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"BDAY">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           decode_vcard_BDAY(__TopXMLNS, _el), Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"DESC">>, _attrs, _} = _el
-                 | _els],
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"JABBERID">>, _attrs, _} = _el | _els],
                 Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
                 Jabberid, Sound, Note, Role, Title, Nickname, Rev,
                 Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
                 Fn, Version, N, Photo, Logo, Geo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           decode_vcard_DESC(_el), Uid, Prodid, Jabberid,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid,
+                           decode_vcard_JABBERID(__TopXMLNS, _el), Sound, Note,
+                           Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+                           Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+                           Photo, Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"MAILER">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els,
+                           decode_vcard_MAILER(__TopXMLNS, _el), Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"TZ">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, decode_vcard_TZ(__TopXMLNS, _el), Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"TITLE">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, decode_vcard_TITLE(__TopXMLNS, _el),
+                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"ROLE">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, decode_vcard_ROLE(__TopXMLNS, _el), Title,
+                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"NOTE">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           decode_vcard_NOTE(__TopXMLNS, _el), Role, Title,
+                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"PRODID">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid,
+                           decode_vcard_PRODID(__TopXMLNS, _el), Jabberid,
                            Sound, Note, Role, Title, Nickname, Rev,
                            Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
                            Label, Fn, Version, N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"CATEGORIES">>, _attrs, _} =
-                     _el
-                 | _els],
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"REV">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname,
+                           decode_vcard_REV(__TopXMLNS, _el), Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"SORT-STRING">>, _attrs, _} = _el | _els],
                 Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
                 Jabberid, Sound, Note, Role, Title, Nickname, Rev,
                 Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
                 Fn, Version, N, Photo, Logo, Geo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr, Class,
-                           decode_vcard_CATEGORIES(_el), Desc, Uid, Prodid,
-                           Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                           Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                           Label, Fn, Version, N, Photo, Logo, Geo);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev,
+                           decode_vcard_SORT_STRING(__TopXMLNS, _el), Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                           Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                           Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                           Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([{xmlel, <<"CLASS">>, _attrs, _} = _el
-                 | _els],
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"UID">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, decode_vcard_UID(__TopXMLNS, _el),
+                           Prodid, Jabberid, Sound, Note, Role, Title,
+                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"URL">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, decode_vcard_URL(__TopXMLNS, _el),
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"DESC">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, decode_vcard_DESC(__TopXMLNS, _el), Uid,
+                           Prodid, Jabberid, Sound, Note, Role, Title,
+                           Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+                           Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                           Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"CATEGORIES">>, _attrs, _} = _el | _els],
                 Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
                 Jabberid, Sound, Note, Role, Title, Nickname, Rev,
                 Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
                 Fn, Version, N, Photo, Logo, Geo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_els(_els, Mailer, Adr,
-                           decode_vcard_CLASS(_el), Categories, Desc, Uid,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           decode_vcard_CATEGORIES(__TopXMLNS, _el), Desc, Uid,
                            Prodid, Jabberid, Sound, Note, Role, Title,
                            Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
                            Email, Tel, Label, Fn, Version, N, Photo, Logo,
                            Geo);
        true ->
-          decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS,
+                [{xmlel, <<"CLASS">>, _attrs, _} = _el | _els], Mailer,
+                Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
+                Sound, Note, Role, Title, Nickname, Rev, Sort_string,
+                Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                N, Photo, Logo, Geo) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr,
+                           decode_vcard_CLASS(__TopXMLNS, _el), Categories,
                            Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
                            Title, Nickname, Rev, Sort_string, Org, Bday, Key,
                            Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
-                           Logo, Geo)
-    end;
-decode_vcard_els([_ | _els], Mailer, Adr, Class,
-                Categories, Desc, Uid, Prodid, Jabberid, Sound, Note,
-                Role, Title, Nickname, Rev, Sort_string, Org, Bday, Key,
-                Tz, Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                Geo) ->
-    decode_vcard_els(_els, Mailer, Adr, Class, Categories,
-                    Desc, Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-                    Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                    Email, Tel, Label, Fn, Version, N, Photo, Logo, Geo).
+                           Logo, Geo);
+       true ->
+          decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                           Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                           Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                           Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
+                           N, Photo, Logo, Geo)
+    end;
+decode_vcard_els(__TopXMLNS, [_ | _els], Mailer, Adr,
+                Class, Categories, Desc, Uid, Prodid, Jabberid, Sound,
+                Note, Role, Title, Nickname, Rev, Sort_string, Org,
+                Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+                Photo, Logo, Geo) ->
+    decode_vcard_els(__TopXMLNS, _els, Mailer, Adr, Class,
+                    Categories, Desc, Uid, Prodid, Jabberid, Sound, Note,
+                    Role, Title, Nickname, Rev, Sort_string, Org, Bday, Key,
+                    Tz, Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+                    Geo).
 
 encode_vcard({vcard, Version, Fn, N, Nickname, Photo,
              Bday, Adr, Label, Tel, Email, Jabberid, Mailer, Tz, Geo,
@@ -7024,44 +7589,42 @@ encode_vcard({vcard, Version, Fn, N, Nickname, Photo,
 'encode_vcard_$geo'(Geo, _acc) ->
     [encode_vcard_GEO(Geo, []) | _acc].
 
-decode_vcard_CLASS({xmlel, <<"CLASS">>, _attrs,
-                   _els}) ->
-    Class = decode_vcard_CLASS_els(_els, undefined), Class.
+decode_vcard_CLASS(__TopXMLNS,
+                  {xmlel, <<"CLASS">>, _attrs, _els}) ->
+    Class = decode_vcard_CLASS_els(__TopXMLNS, _els,
+                                  undefined),
+    Class.
 
-decode_vcard_CLASS_els([], Class) -> Class;
-decode_vcard_CLASS_els([{xmlel, <<"PUBLIC">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_vcard_CLASS_els(__TopXMLNS, [], Class) -> Class;
+decode_vcard_CLASS_els(__TopXMLNS,
+                      [{xmlel, <<"PUBLIC">>, _attrs, _} = _el | _els],
                       Class) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_CLASS_els(_els, decode_vcard_PUBLIC(_el));
-       true -> decode_vcard_CLASS_els(_els, Class)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_CLASS_els(__TopXMLNS, _els,
+                                 decode_vcard_PUBLIC(__TopXMLNS, _el));
+       true -> decode_vcard_CLASS_els(__TopXMLNS, _els, Class)
     end;
-decode_vcard_CLASS_els([{xmlel, <<"PRIVATE">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_vcard_CLASS_els(__TopXMLNS,
+                      [{xmlel, <<"PRIVATE">>, _attrs, _} = _el | _els],
                       Class) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_CLASS_els(_els, decode_vcard_PRIVATE(_el));
-       true -> decode_vcard_CLASS_els(_els, Class)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_CLASS_els(__TopXMLNS, _els,
+                                 decode_vcard_PRIVATE(__TopXMLNS, _el));
+       true -> decode_vcard_CLASS_els(__TopXMLNS, _els, Class)
     end;
-decode_vcard_CLASS_els([{xmlel, <<"CONFIDENTIAL">>,
-                        _attrs, _} =
-                           _el
-                       | _els],
+decode_vcard_CLASS_els(__TopXMLNS,
+                      [{xmlel, <<"CONFIDENTIAL">>, _attrs, _} = _el | _els],
                       Class) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_CLASS_els(_els,
-                                 decode_vcard_CONFIDENTIAL(_el));
-       true -> decode_vcard_CLASS_els(_els, Class)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_CLASS_els(__TopXMLNS, _els,
+                                 decode_vcard_CONFIDENTIAL(__TopXMLNS, _el));
+       true -> decode_vcard_CLASS_els(__TopXMLNS, _els, Class)
     end;
-decode_vcard_CLASS_els([_ | _els], Class) ->
-    decode_vcard_CLASS_els(_els, Class).
+decode_vcard_CLASS_els(__TopXMLNS, [_ | _els], Class) ->
+    decode_vcard_CLASS_els(__TopXMLNS, _els, Class).
 
 encode_vcard_CLASS(Class, _xmlns_attrs) ->
     _els = 'encode_vcard_CLASS_$class'(Class, []),
@@ -7077,29 +7640,32 @@ encode_vcard_CLASS(Class, _xmlns_attrs) ->
                            _acc) ->
     [encode_vcard_CONFIDENTIAL(Class, []) | _acc].
 
-decode_vcard_CATEGORIES({xmlel, <<"CATEGORIES">>,
-                        _attrs, _els}) ->
-    Keywords = decode_vcard_CATEGORIES_els(_els, []),
+decode_vcard_CATEGORIES(__TopXMLNS,
+                       {xmlel, <<"CATEGORIES">>, _attrs, _els}) ->
+    Keywords = decode_vcard_CATEGORIES_els(__TopXMLNS, _els,
+                                          []),
     Keywords.
 
-decode_vcard_CATEGORIES_els([], Keywords) ->
+decode_vcard_CATEGORIES_els(__TopXMLNS, [], Keywords) ->
     lists:reverse(Keywords);
-decode_vcard_CATEGORIES_els([{xmlel, <<"KEYWORD">>,
-                             _attrs, _} =
-                                _el
-                            | _els],
+decode_vcard_CATEGORIES_els(__TopXMLNS,
+                           [{xmlel, <<"KEYWORD">>, _attrs, _} = _el | _els],
                            Keywords) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_CATEGORIES_els(_els,
-                                      case decode_vcard_KEYWORD(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_CATEGORIES_els(__TopXMLNS, _els,
+                                      case decode_vcard_KEYWORD(__TopXMLNS,
+                                                                _el)
+                                          of
                                         undefined -> Keywords;
                                         _new_el -> [_new_el | Keywords]
                                       end);
-       true -> decode_vcard_CATEGORIES_els(_els, Keywords)
+       true ->
+          decode_vcard_CATEGORIES_els(__TopXMLNS, _els, Keywords)
     end;
-decode_vcard_CATEGORIES_els([_ | _els], Keywords) ->
-    decode_vcard_CATEGORIES_els(_els, Keywords).
+decode_vcard_CATEGORIES_els(__TopXMLNS, [_ | _els],
+                           Keywords) ->
+    decode_vcard_CATEGORIES_els(__TopXMLNS, _els, Keywords).
 
 encode_vcard_CATEGORIES(Keywords, _xmlns_attrs) ->
     _els = 'encode_vcard_CATEGORIES_$keywords'(Keywords,
@@ -7114,34 +7680,37 @@ encode_vcard_CATEGORIES(Keywords, _xmlns_attrs) ->
                                        [encode_vcard_KEYWORD(Keywords, [])
                                         | _acc]).
 
-decode_vcard_KEY({xmlel, <<"KEY">>, _attrs, _els}) ->
-    {Cred, Type} = decode_vcard_KEY_els(_els, undefined,
-                                       undefined),
+decode_vcard_KEY(__TopXMLNS,
+                {xmlel, <<"KEY">>, _attrs, _els}) ->
+    {Cred, Type} = decode_vcard_KEY_els(__TopXMLNS, _els,
+                                       undefined, undefined),
     {vcard_key, Type, Cred}.
 
-decode_vcard_KEY_els([], Cred, Type) -> {Cred, Type};
-decode_vcard_KEY_els([{xmlel, <<"TYPE">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Cred, Type) ->
+decode_vcard_KEY_els(__TopXMLNS, [], Cred, Type) ->
+    {Cred, Type};
+decode_vcard_KEY_els(__TopXMLNS,
+                    [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Cred,
+                    Type) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_KEY_els(_els, Cred,
-                               decode_vcard_TYPE(_el));
-       true -> decode_vcard_KEY_els(_els, Cred, Type)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_KEY_els(__TopXMLNS, _els, Cred,
+                               decode_vcard_TYPE(__TopXMLNS, _el));
+       true ->
+          decode_vcard_KEY_els(__TopXMLNS, _els, Cred, Type)
     end;
-decode_vcard_KEY_els([{xmlel, <<"CRED">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Cred, Type) ->
+decode_vcard_KEY_els(__TopXMLNS,
+                    [{xmlel, <<"CRED">>, _attrs, _} = _el | _els], Cred,
+                    Type) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_KEY_els(_els, decode_vcard_CRED(_el),
-                               Type);
-       true -> decode_vcard_KEY_els(_els, Cred, Type)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_KEY_els(__TopXMLNS, _els,
+                               decode_vcard_CRED(__TopXMLNS, _el), Type);
+       true ->
+          decode_vcard_KEY_els(__TopXMLNS, _els, Cred, Type)
     end;
-decode_vcard_KEY_els([_ | _els], Cred, Type) ->
-    decode_vcard_KEY_els(_els, Cred, Type).
+decode_vcard_KEY_els(__TopXMLNS, [_ | _els], Cred,
+                    Type) ->
+    decode_vcard_KEY_els(__TopXMLNS, _els, Cred, Type).
 
 encode_vcard_KEY({vcard_key, Type, Cred},
                 _xmlns_attrs) ->
@@ -7158,54 +7727,54 @@ encode_vcard_KEY({vcard_key, Type, Cred},
 'encode_vcard_KEY_$type'(Type, _acc) ->
     [encode_vcard_TYPE(Type, []) | _acc].
 
-decode_vcard_SOUND({xmlel, <<"SOUND">>, _attrs,
-                   _els}) ->
+decode_vcard_SOUND(__TopXMLNS,
+                  {xmlel, <<"SOUND">>, _attrs, _els}) ->
     {Phonetic, Extval, Binval} =
-       decode_vcard_SOUND_els(_els, undefined, undefined,
-                              undefined),
+       decode_vcard_SOUND_els(__TopXMLNS, _els, undefined,
+                              undefined, undefined),
     {vcard_sound, Phonetic, Binval, Extval}.
 
-decode_vcard_SOUND_els([], Phonetic, Extval, Binval) ->
+decode_vcard_SOUND_els(__TopXMLNS, [], Phonetic, Extval,
+                      Binval) ->
     {Phonetic, Extval, Binval};
-decode_vcard_SOUND_els([{xmlel, <<"BINVAL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_vcard_SOUND_els(__TopXMLNS,
+                      [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els],
                       Phonetic, Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_SOUND_els(_els, Phonetic, Extval,
-                                 decode_vcard_BINVAL(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                                 Extval, decode_vcard_BINVAL(__TopXMLNS, _el));
        true ->
-          decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+          decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                                 Extval, Binval)
     end;
-decode_vcard_SOUND_els([{xmlel, <<"EXTVAL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_vcard_SOUND_els(__TopXMLNS,
+                      [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els],
                       Phonetic, Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_SOUND_els(_els, Phonetic,
-                                 decode_vcard_EXTVAL(_el), Binval);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                                 decode_vcard_EXTVAL(__TopXMLNS, _el), Binval);
        true ->
-          decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+          decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                                 Extval, Binval)
     end;
-decode_vcard_SOUND_els([{xmlel, <<"PHONETIC">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_vcard_SOUND_els(__TopXMLNS,
+                      [{xmlel, <<"PHONETIC">>, _attrs, _} = _el | _els],
                       Phonetic, Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_SOUND_els(_els, decode_vcard_PHONETIC(_el),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_SOUND_els(__TopXMLNS, _els,
+                                 decode_vcard_PHONETIC(__TopXMLNS, _el),
                                  Extval, Binval);
        true ->
-          decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+          decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                                 Extval, Binval)
     end;
-decode_vcard_SOUND_els([_ | _els], Phonetic, Extval,
-                      Binval) ->
-    decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval).
+decode_vcard_SOUND_els(__TopXMLNS, [_ | _els], Phonetic,
+                      Extval, Binval) ->
+    decode_vcard_SOUND_els(__TopXMLNS, _els, Phonetic,
+                          Extval, Binval).
 
 encode_vcard_SOUND({vcard_sound, Phonetic, Binval,
                    Extval},
@@ -7229,41 +7798,41 @@ encode_vcard_SOUND({vcard_sound, Phonetic, Binval,
 'encode_vcard_SOUND_$binval'(Binval, _acc) ->
     [encode_vcard_BINVAL(Binval, []) | _acc].
 
-decode_vcard_ORG({xmlel, <<"ORG">>, _attrs, _els}) ->
-    {Units, Name} = decode_vcard_ORG_els(_els, [],
-                                        undefined),
+decode_vcard_ORG(__TopXMLNS,
+                {xmlel, <<"ORG">>, _attrs, _els}) ->
+    {Units, Name} = decode_vcard_ORG_els(__TopXMLNS, _els,
+                                        [], undefined),
     {vcard_org, Name, Units}.
 
-decode_vcard_ORG_els([], Units, Name) ->
+decode_vcard_ORG_els(__TopXMLNS, [], Units, Name) ->
     {lists:reverse(Units), Name};
-decode_vcard_ORG_els([{xmlel, <<"ORGNAME">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
-                    Units, Name) ->
+decode_vcard_ORG_els(__TopXMLNS,
+                    [{xmlel, <<"ORGNAME">>, _attrs, _} = _el | _els], Units,
+                    Name) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ORG_els(_els, Units,
-                               decode_vcard_ORGNAME(_el));
-       true -> decode_vcard_ORG_els(_els, Units, Name)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ORG_els(__TopXMLNS, _els, Units,
+                               decode_vcard_ORGNAME(__TopXMLNS, _el));
+       true ->
+          decode_vcard_ORG_els(__TopXMLNS, _els, Units, Name)
     end;
-decode_vcard_ORG_els([{xmlel, <<"ORGUNIT">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
-                    Units, Name) ->
+decode_vcard_ORG_els(__TopXMLNS,
+                    [{xmlel, <<"ORGUNIT">>, _attrs, _} = _el | _els], Units,
+                    Name) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ORG_els(_els,
-                               case decode_vcard_ORGUNIT(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ORG_els(__TopXMLNS, _els,
+                               case decode_vcard_ORGUNIT(__TopXMLNS, _el) of
                                  undefined -> Units;
                                  _new_el -> [_new_el | Units]
                                end,
                                Name);
-       true -> decode_vcard_ORG_els(_els, Units, Name)
+       true ->
+          decode_vcard_ORG_els(__TopXMLNS, _els, Units, Name)
     end;
-decode_vcard_ORG_els([_ | _els], Units, Name) ->
-    decode_vcard_ORG_els(_els, Units, Name).
+decode_vcard_ORG_els(__TopXMLNS, [_ | _els], Units,
+                    Name) ->
+    decode_vcard_ORG_els(__TopXMLNS, _els, Units, Name).
 
 encode_vcard_ORG({vcard_org, Name, Units},
                 _xmlns_attrs) ->
@@ -7281,53 +7850,54 @@ encode_vcard_ORG({vcard_org, Name, Units},
 'encode_vcard_ORG_$name'(Name, _acc) ->
     [encode_vcard_ORGNAME(Name, []) | _acc].
 
-decode_vcard_PHOTO({xmlel, <<"PHOTO">>, _attrs,
-                   _els}) ->
-    {Type, Extval, Binval} = decode_vcard_PHOTO_els(_els,
-                                                   undefined, undefined,
-                                                   undefined),
+decode_vcard_PHOTO(__TopXMLNS,
+                  {xmlel, <<"PHOTO">>, _attrs, _els}) ->
+    {Type, Extval, Binval} =
+       decode_vcard_PHOTO_els(__TopXMLNS, _els, undefined,
+                              undefined, undefined),
     {vcard_photo, Type, Binval, Extval}.
 
-decode_vcard_PHOTO_els([], Type, Extval, Binval) ->
+decode_vcard_PHOTO_els(__TopXMLNS, [], Type, Extval,
+                      Binval) ->
     {Type, Extval, Binval};
-decode_vcard_PHOTO_els([{xmlel, <<"TYPE">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Type, Extval, Binval) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_PHOTO_els(_els, decode_vcard_TYPE(_el),
-                                 Extval, Binval);
+decode_vcard_PHOTO_els(__TopXMLNS,
+                      [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Type,
+                      Extval, Binval) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_PHOTO_els(__TopXMLNS, _els,
+                                 decode_vcard_TYPE(__TopXMLNS, _el), Extval,
+                                 Binval);
        true ->
-          decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+          decode_vcard_PHOTO_els(__TopXMLNS, _els, Type, Extval,
+                                 Binval)
     end;
-decode_vcard_PHOTO_els([{xmlel, <<"BINVAL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Type, Extval, Binval) ->
+decode_vcard_PHOTO_els(__TopXMLNS,
+                      [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els], Type,
+                      Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_PHOTO_els(_els, Type, Extval,
-                                 decode_vcard_BINVAL(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_PHOTO_els(__TopXMLNS, _els, Type, Extval,
+                                 decode_vcard_BINVAL(__TopXMLNS, _el));
        true ->
-          decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+          decode_vcard_PHOTO_els(__TopXMLNS, _els, Type, Extval,
+                                 Binval)
     end;
-decode_vcard_PHOTO_els([{xmlel, <<"EXTVAL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Type, Extval, Binval) ->
+decode_vcard_PHOTO_els(__TopXMLNS,
+                      [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els], Type,
+                      Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_PHOTO_els(_els, Type,
-                                 decode_vcard_EXTVAL(_el), Binval);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_PHOTO_els(__TopXMLNS, _els, Type,
+                                 decode_vcard_EXTVAL(__TopXMLNS, _el), Binval);
        true ->
-          decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+          decode_vcard_PHOTO_els(__TopXMLNS, _els, Type, Extval,
+                                 Binval)
     end;
-decode_vcard_PHOTO_els([_ | _els], Type, Extval,
-                      Binval) ->
-    decode_vcard_PHOTO_els(_els, Type, Extval, Binval).
+decode_vcard_PHOTO_els(__TopXMLNS, [_ | _els], Type,
+                      Extval, Binval) ->
+    decode_vcard_PHOTO_els(__TopXMLNS, _els, Type, Extval,
+                          Binval).
 
 encode_vcard_PHOTO({vcard_photo, Type, Binval, Extval},
                   _xmlns_attrs) ->
@@ -7350,52 +7920,54 @@ encode_vcard_PHOTO({vcard_photo, Type, Binval, Extval},
 'encode_vcard_PHOTO_$binval'(Binval, _acc) ->
     [encode_vcard_BINVAL(Binval, []) | _acc].
 
-decode_vcard_LOGO({xmlel, <<"LOGO">>, _attrs, _els}) ->
-    {Type, Extval, Binval} = decode_vcard_LOGO_els(_els,
-                                                  undefined, undefined,
-                                                  undefined),
+decode_vcard_LOGO(__TopXMLNS,
+                 {xmlel, <<"LOGO">>, _attrs, _els}) ->
+    {Type, Extval, Binval} =
+       decode_vcard_LOGO_els(__TopXMLNS, _els, undefined,
+                             undefined, undefined),
     {vcard_logo, Type, Binval, Extval}.
 
-decode_vcard_LOGO_els([], Type, Extval, Binval) ->
+decode_vcard_LOGO_els(__TopXMLNS, [], Type, Extval,
+                     Binval) ->
     {Type, Extval, Binval};
-decode_vcard_LOGO_els([{xmlel, <<"TYPE">>, _attrs, _} =
-                          _el
-                      | _els],
-                     Type, Extval, Binval) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LOGO_els(_els, decode_vcard_TYPE(_el),
-                                Extval, Binval);
+decode_vcard_LOGO_els(__TopXMLNS,
+                     [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Type,
+                     Extval, Binval) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LOGO_els(__TopXMLNS, _els,
+                                decode_vcard_TYPE(__TopXMLNS, _el), Extval,
+                                Binval);
        true ->
-          decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+          decode_vcard_LOGO_els(__TopXMLNS, _els, Type, Extval,
+                                Binval)
     end;
-decode_vcard_LOGO_els([{xmlel, <<"BINVAL">>, _attrs,
-                       _} =
-                          _el
-                      | _els],
-                     Type, Extval, Binval) ->
+decode_vcard_LOGO_els(__TopXMLNS,
+                     [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els], Type,
+                     Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LOGO_els(_els, Type, Extval,
-                                decode_vcard_BINVAL(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LOGO_els(__TopXMLNS, _els, Type, Extval,
+                                decode_vcard_BINVAL(__TopXMLNS, _el));
        true ->
-          decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+          decode_vcard_LOGO_els(__TopXMLNS, _els, Type, Extval,
+                                Binval)
     end;
-decode_vcard_LOGO_els([{xmlel, <<"EXTVAL">>, _attrs,
-                       _} =
-                          _el
-                      | _els],
-                     Type, Extval, Binval) ->
+decode_vcard_LOGO_els(__TopXMLNS,
+                     [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els], Type,
+                     Extval, Binval) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LOGO_els(_els, Type,
-                                decode_vcard_EXTVAL(_el), Binval);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LOGO_els(__TopXMLNS, _els, Type,
+                                decode_vcard_EXTVAL(__TopXMLNS, _el), Binval);
        true ->
-          decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+          decode_vcard_LOGO_els(__TopXMLNS, _els, Type, Extval,
+                                Binval)
     end;
-decode_vcard_LOGO_els([_ | _els], Type, Extval,
-                     Binval) ->
-    decode_vcard_LOGO_els(_els, Type, Extval, Binval).
+decode_vcard_LOGO_els(__TopXMLNS, [_ | _els], Type,
+                     Extval, Binval) ->
+    decode_vcard_LOGO_els(__TopXMLNS, _els, Type, Extval,
+                         Binval).
 
 encode_vcard_LOGO({vcard_logo, Type, Binval, Extval},
                  _xmlns_attrs) ->
@@ -7418,31 +7990,33 @@ encode_vcard_LOGO({vcard_logo, Type, Binval, Extval},
 'encode_vcard_LOGO_$binval'(Binval, _acc) ->
     [encode_vcard_BINVAL(Binval, []) | _acc].
 
-decode_vcard_BINVAL({xmlel, <<"BINVAL">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_BINVAL_els(_els, <<>>), Cdata.
+decode_vcard_BINVAL(__TopXMLNS,
+                   {xmlel, <<"BINVAL">>, _attrs, _els}) ->
+    Cdata = decode_vcard_BINVAL_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_BINVAL_els([], Cdata) ->
-    decode_vcard_BINVAL_cdata(Cdata);
-decode_vcard_BINVAL_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_BINVAL_els(_els,
+decode_vcard_BINVAL_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_BINVAL_cdata(__TopXMLNS, Cdata);
+decode_vcard_BINVAL_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_BINVAL_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_BINVAL_els([_ | _els], Cdata) ->
-    decode_vcard_BINVAL_els(_els, Cdata).
+decode_vcard_BINVAL_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_BINVAL_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_BINVAL(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_BINVAL_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"BINVAL">>, _attrs, _els}.
 
-decode_vcard_BINVAL_cdata(<<>>) -> undefined;
-decode_vcard_BINVAL_cdata(_val) ->
+decode_vcard_BINVAL_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_BINVAL_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"BINVAL">>,
-                        <<"vcard-temp">>}});
+                       {bad_cdata_value, <<>>, <<"BINVAL">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -7450,32 +8024,35 @@ encode_vcard_BINVAL_cdata(undefined, _acc) -> _acc;
 encode_vcard_BINVAL_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
-decode_vcard_GEO({xmlel, <<"GEO">>, _attrs, _els}) ->
-    {Lat, Lon} = decode_vcard_GEO_els(_els, undefined,
-                                     undefined),
+decode_vcard_GEO(__TopXMLNS,
+                {xmlel, <<"GEO">>, _attrs, _els}) ->
+    {Lat, Lon} = decode_vcard_GEO_els(__TopXMLNS, _els,
+                                     undefined, undefined),
     {vcard_geo, Lat, Lon}.
 
-decode_vcard_GEO_els([], Lat, Lon) -> {Lat, Lon};
-decode_vcard_GEO_els([{xmlel, <<"LAT">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Lat, Lon) ->
+decode_vcard_GEO_els(__TopXMLNS, [], Lat, Lon) ->
+    {Lat, Lon};
+decode_vcard_GEO_els(__TopXMLNS,
+                    [{xmlel, <<"LAT">>, _attrs, _} = _el | _els], Lat,
+                    Lon) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_GEO_els(_els, decode_vcard_LAT(_el), Lon);
-       true -> decode_vcard_GEO_els(_els, Lat, Lon)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_GEO_els(__TopXMLNS, _els,
+                               decode_vcard_LAT(__TopXMLNS, _el), Lon);
+       true -> decode_vcard_GEO_els(__TopXMLNS, _els, Lat, Lon)
     end;
-decode_vcard_GEO_els([{xmlel, <<"LON">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Lat, Lon) ->
+decode_vcard_GEO_els(__TopXMLNS,
+                    [{xmlel, <<"LON">>, _attrs, _} = _el | _els], Lat,
+                    Lon) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_GEO_els(_els, Lat, decode_vcard_LON(_el));
-       true -> decode_vcard_GEO_els(_els, Lat, Lon)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_GEO_els(__TopXMLNS, _els, Lat,
+                               decode_vcard_LON(__TopXMLNS, _el));
+       true -> decode_vcard_GEO_els(__TopXMLNS, _els, Lat, Lon)
     end;
-decode_vcard_GEO_els([_ | _els], Lat, Lon) ->
-    decode_vcard_GEO_els(_els, Lat, Lon).
+decode_vcard_GEO_els(__TopXMLNS, [_ | _els], Lat,
+                    Lon) ->
+    decode_vcard_GEO_els(__TopXMLNS, _els, Lat, Lon).
 
 encode_vcard_GEO({vcard_geo, Lat, Lon}, _xmlns_attrs) ->
     _els = 'encode_vcard_GEO_$lon'(Lon,
@@ -7491,95 +8068,92 @@ encode_vcard_GEO({vcard_geo, Lat, Lon}, _xmlns_attrs) ->
 'encode_vcard_GEO_$lon'(Lon, _acc) ->
     [encode_vcard_LON(Lon, []) | _acc].
 
-decode_vcard_EMAIL({xmlel, <<"EMAIL">>, _attrs,
-                   _els}) ->
+decode_vcard_EMAIL(__TopXMLNS,
+                  {xmlel, <<"EMAIL">>, _attrs, _els}) ->
     {X400, Userid, Internet, Home, Pref, Work} =
-       decode_vcard_EMAIL_els(_els, false, undefined, false,
-                              false, false, false),
+       decode_vcard_EMAIL_els(__TopXMLNS, _els, false,
+                              undefined, false, false, false, false),
     {vcard_email, Home, Work, Internet, Pref, X400, Userid}.
 
-decode_vcard_EMAIL_els([], X400, Userid, Internet, Home,
-                      Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS, [], X400, Userid,
+                      Internet, Home, Pref, Work) ->
     {X400, Userid, Internet, Home, Pref, Work};
-decode_vcard_EMAIL_els([{xmlel, <<"HOME">>, _attrs, _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 decode_vcard_HOME(_el), Pref, Work);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, decode_vcard_HOME(__TopXMLNS, _el),
+                                 Pref, Work);
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([{xmlel, <<"WORK">>, _attrs, _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, decode_vcard_WORK(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref,
+                                 decode_vcard_WORK(__TopXMLNS, _el));
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([{xmlel, <<"INTERNET">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"INTERNET">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, X400, Userid,
-                                 decode_vcard_INTERNET(_el), Home, Pref, Work);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 decode_vcard_INTERNET(__TopXMLNS, _el), Home,
+                                 Pref, Work);
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([{xmlel, <<"PREF">>, _attrs, _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, decode_vcard_PREF(_el), Work);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home,
+                                 decode_vcard_PREF(__TopXMLNS, _el), Work);
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([{xmlel, <<"X400">>, _attrs, _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"X400">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, decode_vcard_X400(_el),
-                                 Userid, Internet, Home, Pref, Work);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els,
+                                 decode_vcard_X400(__TopXMLNS, _el), Userid,
+                                 Internet, Home, Pref, Work);
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([{xmlel, <<"USERID">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      X400, Userid, Internet, Home, Pref, Work) ->
+decode_vcard_EMAIL_els(__TopXMLNS,
+                      [{xmlel, <<"USERID">>, _attrs, _} = _el | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_EMAIL_els(_els, X400,
-                                 decode_vcard_USERID(_el), Internet, Home,
-                                 Pref, Work);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400,
+                                 decode_vcard_USERID(__TopXMLNS, _el),
+                                 Internet, Home, Pref, Work);
        true ->
-          decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                                 Home, Pref, Work)
+          decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                                 Internet, Home, Pref, Work)
     end;
-decode_vcard_EMAIL_els([_ | _els], X400, Userid,
-                      Internet, Home, Pref, Work) ->
-    decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
-                          Home, Pref, Work).
+decode_vcard_EMAIL_els(__TopXMLNS, [_ | _els], X400,
+                      Userid, Internet, Home, Pref, Work) ->
+    decode_vcard_EMAIL_els(__TopXMLNS, _els, X400, Userid,
+                          Internet, Home, Pref, Work).
 
 encode_vcard_EMAIL({vcard_email, Home, Work, Internet,
                    Pref, X400, Userid},
@@ -7618,236 +8192,237 @@ encode_vcard_EMAIL({vcard_email, Home, Work, Internet,
 'encode_vcard_EMAIL_$work'(Work, _acc) ->
     [encode_vcard_WORK(Work, []) | _acc].
 
-decode_vcard_TEL({xmlel, <<"TEL">>, _attrs, _els}) ->
+decode_vcard_TEL(__TopXMLNS,
+                {xmlel, <<"TEL">>, _attrs, _els}) ->
     {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
      Work, Cell, Modem, Isdn, Video} =
-       decode_vcard_TEL_els(_els, undefined, false, false,
+       decode_vcard_TEL_els(__TopXMLNS, _els, undefined, false,
                             false, false, false, false, false, false, false,
-                            false, false, false, false),
+                            false, false, false, false, false),
     {vcard_tel, Home, Work, Voice, Fax, Pager, Msg, Cell,
      Video, Bbs, Modem, Isdn, Pcs, Pref, Number}.
 
-decode_vcard_TEL_els([], Number, Pager, Pcs, Bbs, Voice,
-                    Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn, Video) ->
+decode_vcard_TEL_els(__TopXMLNS, [], Number, Pager, Pcs,
+                    Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+                    Isdn, Video) ->
     {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
      Work, Cell, Modem, Isdn, Video};
-decode_vcard_TEL_els([{xmlel, <<"HOME">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, decode_vcard_HOME(_el), Pref, Msg, Fax,
-                               Work, Cell, Modem, Isdn, Video);
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice,
+                               decode_vcard_HOME(__TopXMLNS, _el), Pref, Msg,
+                               Fax, Work, Cell, Modem, Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"WORK">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax,
-                               decode_vcard_WORK(_el), Cell, Modem, Isdn,
-                               Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+                               decode_vcard_WORK(__TopXMLNS, _el), Cell, Modem,
+                               Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"VOICE">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               decode_vcard_VOICE(_el), Home, Pref, Msg, Fax,
-                               Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"VOICE">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, decode_vcard_VOICE(__TopXMLNS, _el),
+                               Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"FAX">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, decode_vcard_FAX(_el),
-                               Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"FAX">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg,
+                               decode_vcard_FAX(__TopXMLNS, _el), Work, Cell,
+                               Modem, Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"PAGER">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number,
+                               decode_vcard_PAGER(__TopXMLNS, _el), Pcs, Bbs,
                                Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"PAGER">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number,
-                               decode_vcard_PAGER(_el), Pcs, Bbs, Voice, Home,
-                               Pref, Msg, Fax, Work, Cell, Modem, Isdn, Video);
+                               Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"MSG">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, decode_vcard_MSG(_el), Fax,
-                               Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"MSG">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref,
+                               decode_vcard_MSG(__TopXMLNS, _el), Fax, Work,
+                               Cell, Modem, Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"CELL">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work,
-                               decode_vcard_CELL(_el), Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"CELL">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               decode_vcard_CELL(__TopXMLNS, _el), Modem, Isdn,
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"VIDEO">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, decode_vcard_VIDEO(_el));
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"VIDEO">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn,
+                               decode_vcard_VIDEO(__TopXMLNS, _el));
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"BBS">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs,
-                               decode_vcard_BBS(_el), Voice, Home, Pref, Msg,
-                               Fax, Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"BBS">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, decode_vcard_BBS(__TopXMLNS, _el), Voice,
+                               Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"MODEM">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell,
-                               decode_vcard_MODEM(_el), Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"MODEM">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, decode_vcard_MODEM(__TopXMLNS, _el), Isdn,
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"ISDN">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               decode_vcard_ISDN(_el), Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"ISDN">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, decode_vcard_ISDN(__TopXMLNS, _el),
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"PCS">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager,
-                               decode_vcard_PCS(_el), Bbs, Voice, Home, Pref,
-                               Msg, Fax, Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"PCS">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               decode_vcard_PCS(__TopXMLNS, _el), Bbs, Voice,
+                               Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
+                               Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"PREF">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, decode_vcard_PREF(_el), Msg, Fax,
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home,
+                               decode_vcard_PREF(__TopXMLNS, _el), Msg, Fax,
                                Work, Cell, Modem, Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
-    end;
-decode_vcard_TEL_els([{xmlel, <<"NUMBER">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_TEL_els(_els, decode_vcard_NUMBER(_el),
-                               Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                               Work, Cell, Modem, Isdn, Video);
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
+    end;
+decode_vcard_TEL_els(__TopXMLNS,
+                    [{xmlel, <<"NUMBER">>, _attrs, _} = _el | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_TEL_els(__TopXMLNS, _els,
+                               decode_vcard_NUMBER(__TopXMLNS, _el), Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video);
        true ->
-          decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                               Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                               Isdn, Video)
+          decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                               Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                               Cell, Modem, Isdn, Video)
     end;
-decode_vcard_TEL_els([_ | _els], Number, Pager, Pcs,
-                    Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                    Isdn, Video) ->
-    decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
-                        Voice, Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
-                        Video).
+decode_vcard_TEL_els(__TopXMLNS, [_ | _els], Number,
+                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
+                    Cell, Modem, Isdn, Video) ->
+    decode_vcard_TEL_els(__TopXMLNS, _els, Number, Pager,
+                        Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell,
+                        Modem, Isdn, Video).
 
 encode_vcard_TEL({vcard_tel, Home, Work, Voice, Fax,
                  Pager, Msg, Cell, Video, Bbs, Modem, Isdn, Pcs, Pref,
@@ -7927,127 +8502,123 @@ encode_vcard_TEL({vcard_tel, Home, Work, Voice, Fax,
 'encode_vcard_TEL_$video'(Video, _acc) ->
     [encode_vcard_VIDEO(Video, []) | _acc].
 
-decode_vcard_LABEL({xmlel, <<"LABEL">>, _attrs,
-                   _els}) ->
+decode_vcard_LABEL(__TopXMLNS,
+                  {xmlel, <<"LABEL">>, _attrs, _els}) ->
     {Line, Home, Pref, Work, Intl, Parcel, Postal, Dom} =
-       decode_vcard_LABEL_els(_els, [], false, false, false,
-                              false, false, false, false),
+       decode_vcard_LABEL_els(__TopXMLNS, _els, [], false,
+                              false, false, false, false, false, false),
     {vcard_label, Home, Work, Postal, Parcel, Dom, Intl,
      Pref, Line}.
 
-decode_vcard_LABEL_els([], Line, Home, Pref, Work, Intl,
-                      Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS, [], Line, Home, Pref,
+                      Work, Intl, Parcel, Postal, Dom) ->
     {lists:reverse(Line), Home, Pref, Work, Intl, Parcel,
      Postal, Dom};
-decode_vcard_LABEL_els([{xmlel, <<"HOME">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line,
-                                 decode_vcard_HOME(_el), Pref, Work, Intl,
-                                 Parcel, Postal, Dom);
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line,
+                                 decode_vcard_HOME(__TopXMLNS, _el), Pref,
+                                 Work, Intl, Parcel, Postal, Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"WORK">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref,
-                                 decode_vcard_WORK(_el), Intl, Parcel, Postal,
-                                 Dom);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, decode_vcard_WORK(__TopXMLNS, _el),
+                                 Intl, Parcel, Postal, Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"POSTAL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"POSTAL">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, decode_vcard_POSTAL(_el), Dom);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel,
+                                 decode_vcard_POSTAL(__TopXMLNS, _el), Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"PARCEL">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"PARCEL">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, decode_vcard_PARCEL(_el), Postal, Dom);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl,
+                                 decode_vcard_PARCEL(__TopXMLNS, _el), Postal,
+                                 Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"DOM">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"DOM">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, decode_vcard_DOM(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal,
+                                 decode_vcard_DOM(__TopXMLNS, _el));
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"INTL">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"INTL">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 decode_vcard_INTL(_el), Parcel, Postal, Dom);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work,
+                                 decode_vcard_INTL(__TopXMLNS, _el), Parcel,
+                                 Postal, Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"PREF">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els, Line, Home,
-                                 decode_vcard_PREF(_el), Work, Intl, Parcel,
-                                 Postal, Dom);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 decode_vcard_PREF(__TopXMLNS, _el), Work,
+                                 Intl, Parcel, Postal, Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([{xmlel, <<"LINE">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+decode_vcard_LABEL_els(__TopXMLNS,
+                      [{xmlel, <<"LINE">>, _attrs, _} = _el | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_LABEL_els(_els,
-                                 case decode_vcard_LINE(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_LABEL_els(__TopXMLNS, _els,
+                                 case decode_vcard_LINE(__TopXMLNS, _el) of
                                    undefined -> Line;
                                    _new_el -> [_new_el | Line]
                                  end,
                                  Home, Pref, Work, Intl, Parcel, Postal, Dom);
        true ->
-          decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                                 Intl, Parcel, Postal, Dom)
+          decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                                 Pref, Work, Intl, Parcel, Postal, Dom)
     end;
-decode_vcard_LABEL_els([_ | _els], Line, Home, Pref,
-                      Work, Intl, Parcel, Postal, Dom) ->
-    decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
-                          Intl, Parcel, Postal, Dom).
+decode_vcard_LABEL_els(__TopXMLNS, [_ | _els], Line,
+                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+    decode_vcard_LABEL_els(__TopXMLNS, _els, Line, Home,
+                          Pref, Work, Intl, Parcel, Postal, Dom).
 
 encode_vcard_LABEL({vcard_label, Home, Work, Postal,
                    Parcel, Dom, Intl, Pref, Line},
@@ -8097,244 +8668,240 @@ encode_vcard_LABEL({vcard_label, Home, Work, Postal,
 'encode_vcard_LABEL_$dom'(Dom, _acc) ->
     [encode_vcard_DOM(Dom, []) | _acc].
 
-decode_vcard_ADR({xmlel, <<"ADR">>, _attrs, _els}) ->
+decode_vcard_ADR(__TopXMLNS,
+                {xmlel, <<"ADR">>, _attrs, _els}) ->
     {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
      Locality, Work, Intl, Parcel, Postal, Dom, Region} =
-       decode_vcard_ADR_els(_els, undefined, undefined,
-                            undefined, false, false, undefined, undefined,
-                            undefined, false, false, false, false, false,
-                            undefined),
+       decode_vcard_ADR_els(__TopXMLNS, _els, undefined,
+                            undefined, undefined, false, false, undefined,
+                            undefined, undefined, false, false, false, false,
+                            false, undefined),
     {vcard_adr, Home, Work, Postal, Parcel, Dom, Intl, Pref,
      Pobox, Extadd, Street, Locality, Region, Pcode, Ctry}.
 
-decode_vcard_ADR_els([], Street, Extadd, Pcode, Home,
-                    Pref, Pobox, Ctry, Locality, Work, Intl, Parcel, Postal,
-                    Dom, Region) ->
+decode_vcard_ADR_els(__TopXMLNS, [], Street, Extadd,
+                    Pcode, Home, Pref, Pobox, Ctry, Locality, Work, Intl,
+                    Parcel, Postal, Dom, Region) ->
     {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
      Locality, Work, Intl, Parcel, Postal, Dom, Region};
-decode_vcard_ADR_els([{xmlel, <<"HOME">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode,
-                               decode_vcard_HOME(_el), Pref, Pobox, Ctry,
-                               Locality, Work, Intl, Parcel, Postal, Dom,
-                               Region);
-       true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"WORK">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality,
-                               decode_vcard_WORK(_el), Intl, Parcel, Postal,
-                               Dom, Region);
-       true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"POSTAL">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               decode_vcard_POSTAL(_el), Dom, Region);
-       true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"PARCEL">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl,
-                               decode_vcard_PARCEL(_el), Postal, Dom, Region);
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, decode_vcard_HOME(__TopXMLNS, _el), Pref,
+                               Pobox, Ctry, Locality, Work, Intl, Parcel,
+                               Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"DOM">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, decode_vcard_DOM(_el), Region);
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality,
+                               decode_vcard_WORK(__TopXMLNS, _el), Intl,
+                               Parcel, Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"INTL">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work,
-                               decode_vcard_INTL(_el), Parcel, Postal, Dom,
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"POSTAL">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel,
+                               decode_vcard_POSTAL(__TopXMLNS, _el), Dom,
                                Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"PREF">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               decode_vcard_PREF(_el), Pobox, Ctry, Locality,
-                               Work, Intl, Parcel, Postal, Dom, Region);
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"PARCEL">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, decode_vcard_PARCEL(__TopXMLNS, _el),
+                               Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"POBOX">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, decode_vcard_POBOX(_el), Ctry, Locality,
-                               Work, Intl, Parcel, Postal, Dom, Region);
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"DOM">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal,
+                               decode_vcard_DOM(__TopXMLNS, _el), Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"EXTADD">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street,
-                               decode_vcard_EXTADD(_el), Pcode, Home, Pref,
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"INTL">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               decode_vcard_INTL(__TopXMLNS, _el), Parcel,
+                               Postal, Dom, Region);
+       true ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, decode_vcard_PREF(__TopXMLNS, _el),
                                Pobox, Ctry, Locality, Work, Intl, Parcel,
                                Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"STREET">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, decode_vcard_STREET(_el),
-                               Extadd, Pcode, Home, Pref, Pobox, Ctry,
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"POBOX">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref,
+                               decode_vcard_POBOX(__TopXMLNS, _el), Ctry,
                                Locality, Work, Intl, Parcel, Postal, Dom,
                                Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"LOCALITY">>, _attrs,
-                      _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, decode_vcard_LOCALITY(_el),
-                               Work, Intl, Parcel, Postal, Dom, Region);
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"EXTADD">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street,
+                               decode_vcard_EXTADD(__TopXMLNS, _el), Pcode,
+                               Home, Pref, Pobox, Ctry, Locality, Work, Intl,
+                               Parcel, Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"REGION">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, decode_vcard_REGION(_el));
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"STREET">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els,
+                               decode_vcard_STREET(__TopXMLNS, _el), Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
     end;
-decode_vcard_ADR_els([{xmlel, <<"PCODE">>, _attrs, _} =
-                         _el
-                     | _els],
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"LOCALITY">>, _attrs, _} = _el | _els],
                     Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
                     Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd,
-                               decode_vcard_PCODE(_el), Home, Pref, Pobox,
-                               Ctry, Locality, Work, Intl, Parcel, Postal, Dom,
-                               Region);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry,
+                               decode_vcard_LOCALITY(__TopXMLNS, _el), Work,
+                               Intl, Parcel, Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
-    end;
-decode_vcard_ADR_els([{xmlel, <<"CTRY">>, _attrs, _} =
-                         _el
-                     | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, decode_vcard_CTRY(_el), Locality,
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"REGION">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom,
+                               decode_vcard_REGION(__TopXMLNS, _el));
+       true ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"PCODE">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               decode_vcard_PCODE(__TopXMLNS, _el), Home, Pref,
+                               Pobox, Ctry, Locality, Work, Intl, Parcel,
+                               Postal, Dom, Region);
+       true ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
+    end;
+decode_vcard_ADR_els(__TopXMLNS,
+                    [{xmlel, <<"CTRY">>, _attrs, _} = _el | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox,
+                               decode_vcard_CTRY(__TopXMLNS, _el), Locality,
                                Work, Intl, Parcel, Postal, Dom, Region);
        true ->
-          decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                               Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                               Postal, Dom, Region)
+          decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                               Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                               Intl, Parcel, Postal, Dom, Region)
     end;
-decode_vcard_ADR_els([_ | _els], Street, Extadd, Pcode,
-                    Home, Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                    Postal, Dom, Region) ->
-    decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
-                        Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                        Postal, Dom, Region).
+decode_vcard_ADR_els(__TopXMLNS, [_ | _els], Street,
+                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
+                    Intl, Parcel, Postal, Dom, Region) ->
+    decode_vcard_ADR_els(__TopXMLNS, _els, Street, Extadd,
+                        Pcode, Home, Pref, Pobox, Ctry, Locality, Work, Intl,
+                        Parcel, Postal, Dom, Region).
 
 encode_vcard_ADR({vcard_adr, Home, Work, Postal, Parcel,
                  Dom, Intl, Pref, Pobox, Extadd, Street, Locality,
@@ -8414,79 +8981,80 @@ encode_vcard_ADR({vcard_adr, Home, Work, Postal, Parcel,
 'encode_vcard_ADR_$region'(Region, _acc) ->
     [encode_vcard_REGION(Region, []) | _acc].
 
-decode_vcard_N({xmlel, <<"N">>, _attrs, _els}) ->
+decode_vcard_N(__TopXMLNS,
+              {xmlel, <<"N">>, _attrs, _els}) ->
     {Middle, Suffix, Prefix, Family, Given} =
-       decode_vcard_N_els(_els, undefined, undefined,
-                          undefined, undefined, undefined),
+       decode_vcard_N_els(__TopXMLNS, _els, undefined,
+                          undefined, undefined, undefined, undefined),
     {vcard_name, Family, Given, Middle, Prefix, Suffix}.
 
-decode_vcard_N_els([], Middle, Suffix, Prefix, Family,
-                  Given) ->
+decode_vcard_N_els(__TopXMLNS, [], Middle, Suffix,
+                  Prefix, Family, Given) ->
     {Middle, Suffix, Prefix, Family, Given};
-decode_vcard_N_els([{xmlel, <<"FAMILY">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix,
-                             decode_vcard_FAMILY(_el), Given);
+decode_vcard_N_els(__TopXMLNS,
+                  [{xmlel, <<"FAMILY">>, _attrs, _} = _el | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, decode_vcard_FAMILY(__TopXMLNS, _el),
+                             Given);
        true ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             Given)
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family, Given)
     end;
-decode_vcard_N_els([{xmlel, <<"GIVEN">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
+decode_vcard_N_els(__TopXMLNS,
+                  [{xmlel, <<"GIVEN">>, _attrs, _} = _el | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             decode_vcard_GIVEN(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family,
+                             decode_vcard_GIVEN(__TopXMLNS, _el));
        true ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             Given)
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family, Given)
     end;
-decode_vcard_N_els([{xmlel, <<"MIDDLE">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
+decode_vcard_N_els(__TopXMLNS,
+                  [{xmlel, <<"MIDDLE">>, _attrs, _} = _el | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_N_els(_els, decode_vcard_MIDDLE(_el),
-                             Suffix, Prefix, Family, Given);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_N_els(__TopXMLNS, _els,
+                             decode_vcard_MIDDLE(__TopXMLNS, _el), Suffix,
+                             Prefix, Family, Given);
        true ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             Given)
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family, Given)
     end;
-decode_vcard_N_els([{xmlel, <<"PREFIX">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
+decode_vcard_N_els(__TopXMLNS,
+                  [{xmlel, <<"PREFIX">>, _attrs, _} = _el | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_N_els(_els, Middle, Suffix,
-                             decode_vcard_PREFIX(_el), Family, Given);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             decode_vcard_PREFIX(__TopXMLNS, _el), Family,
+                             Given);
        true ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             Given)
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family, Given)
     end;
-decode_vcard_N_els([{xmlel, <<"SUFFIX">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
+decode_vcard_N_els(__TopXMLNS,
+                  [{xmlel, <<"SUFFIX">>, _attrs, _} = _el | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
-          decode_vcard_N_els(_els, Middle,
-                             decode_vcard_SUFFIX(_el), Prefix, Family, Given);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_vcard_N_els(__TopXMLNS, _els, Middle,
+                             decode_vcard_SUFFIX(__TopXMLNS, _el), Prefix,
+                             Family, Given);
        true ->
-          decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                             Given)
+          decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                             Prefix, Family, Given)
     end;
-decode_vcard_N_els([_ | _els], Middle, Suffix, Prefix,
-                  Family, Given) ->
-    decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
-                      Given).
+decode_vcard_N_els(__TopXMLNS, [_ | _els], Middle,
+                  Suffix, Prefix, Family, Given) ->
+    decode_vcard_N_els(__TopXMLNS, _els, Middle, Suffix,
+                      Prefix, Family, Given).
 
 encode_vcard_N({vcard_name, Family, Given, Middle,
                Prefix, Suffix},
@@ -8520,8 +9088,8 @@ encode_vcard_N({vcard_name, Family, Given, Middle,
 'encode_vcard_N_$given'(Given, _acc) ->
     [encode_vcard_GIVEN(Given, []) | _acc].
 
-decode_vcard_CONFIDENTIAL({xmlel, <<"CONFIDENTIAL">>,
-                          _attrs, _els}) ->
+decode_vcard_CONFIDENTIAL(__TopXMLNS,
+                         {xmlel, <<"CONFIDENTIAL">>, _attrs, _els}) ->
     confidential.
 
 encode_vcard_CONFIDENTIAL(confidential, _xmlns_attrs) ->
@@ -8529,8 +9097,8 @@ encode_vcard_CONFIDENTIAL(confidential, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"CONFIDENTIAL">>, _attrs, _els}.
 
-decode_vcard_PRIVATE({xmlel, <<"PRIVATE">>, _attrs,
-                     _els}) ->
+decode_vcard_PRIVATE(__TopXMLNS,
+                    {xmlel, <<"PRIVATE">>, _attrs, _els}) ->
     private.
 
 encode_vcard_PRIVATE(private, _xmlns_attrs) ->
@@ -8538,8 +9106,8 @@ encode_vcard_PRIVATE(private, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PRIVATE">>, _attrs, _els}.
 
-decode_vcard_PUBLIC({xmlel, <<"PUBLIC">>, _attrs,
-                    _els}) ->
+decode_vcard_PUBLIC(__TopXMLNS,
+                   {xmlel, <<"PUBLIC">>, _attrs, _els}) ->
     public.
 
 encode_vcard_PUBLIC(public, _xmlns_attrs) ->
@@ -8547,992 +9115,1100 @@ encode_vcard_PUBLIC(public, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PUBLIC">>, _attrs, _els}.
 
-decode_vcard_EXTVAL({xmlel, <<"EXTVAL">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_EXTVAL_els(_els, <<>>), Cdata.
+decode_vcard_EXTVAL(__TopXMLNS,
+                   {xmlel, <<"EXTVAL">>, _attrs, _els}) ->
+    Cdata = decode_vcard_EXTVAL_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_EXTVAL_els([], Cdata) ->
-    decode_vcard_EXTVAL_cdata(Cdata);
-decode_vcard_EXTVAL_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_EXTVAL_els(_els,
+decode_vcard_EXTVAL_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_EXTVAL_cdata(__TopXMLNS, Cdata);
+decode_vcard_EXTVAL_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_EXTVAL_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_EXTVAL_els([_ | _els], Cdata) ->
-    decode_vcard_EXTVAL_els(_els, Cdata).
+decode_vcard_EXTVAL_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_EXTVAL_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_EXTVAL(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_EXTVAL_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"EXTVAL">>, _attrs, _els}.
 
-decode_vcard_EXTVAL_cdata(<<>>) -> undefined;
-decode_vcard_EXTVAL_cdata(_val) -> _val.
+decode_vcard_EXTVAL_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_EXTVAL_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_EXTVAL_cdata(undefined, _acc) -> _acc;
 encode_vcard_EXTVAL_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_TYPE({xmlel, <<"TYPE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_TYPE_els(_els, <<>>), Cdata.
+decode_vcard_TYPE(__TopXMLNS,
+                 {xmlel, <<"TYPE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_TYPE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_TYPE_els([], Cdata) ->
-    decode_vcard_TYPE_cdata(Cdata);
-decode_vcard_TYPE_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_TYPE_els(_els,
+decode_vcard_TYPE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_TYPE_cdata(__TopXMLNS, Cdata);
+decode_vcard_TYPE_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_TYPE_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_TYPE_els([_ | _els], Cdata) ->
-    decode_vcard_TYPE_els(_els, Cdata).
+decode_vcard_TYPE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_TYPE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_TYPE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_TYPE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"TYPE">>, _attrs, _els}.
 
-decode_vcard_TYPE_cdata(<<>>) -> undefined;
-decode_vcard_TYPE_cdata(_val) -> _val.
+decode_vcard_TYPE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TYPE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_TYPE_cdata(undefined, _acc) -> _acc;
 encode_vcard_TYPE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_DESC({xmlel, <<"DESC">>, _attrs, _els}) ->
-    Cdata = decode_vcard_DESC_els(_els, <<>>), Cdata.
+decode_vcard_DESC(__TopXMLNS,
+                 {xmlel, <<"DESC">>, _attrs, _els}) ->
+    Cdata = decode_vcard_DESC_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_DESC_els([], Cdata) ->
-    decode_vcard_DESC_cdata(Cdata);
-decode_vcard_DESC_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_DESC_els(_els,
+decode_vcard_DESC_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_DESC_cdata(__TopXMLNS, Cdata);
+decode_vcard_DESC_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_DESC_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_DESC_els([_ | _els], Cdata) ->
-    decode_vcard_DESC_els(_els, Cdata).
+decode_vcard_DESC_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_DESC_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_DESC(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_DESC_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"DESC">>, _attrs, _els}.
 
-decode_vcard_DESC_cdata(<<>>) -> undefined;
-decode_vcard_DESC_cdata(_val) -> _val.
+decode_vcard_DESC_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_DESC_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_DESC_cdata(undefined, _acc) -> _acc;
 encode_vcard_DESC_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_URL({xmlel, <<"URL">>, _attrs, _els}) ->
-    Cdata = decode_vcard_URL_els(_els, <<>>), Cdata.
+decode_vcard_URL(__TopXMLNS,
+                {xmlel, <<"URL">>, _attrs, _els}) ->
+    Cdata = decode_vcard_URL_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_URL_els([], Cdata) ->
-    decode_vcard_URL_cdata(Cdata);
-decode_vcard_URL_els([{xmlcdata, _data} | _els],
-                    Cdata) ->
-    decode_vcard_URL_els(_els,
+decode_vcard_URL_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_URL_cdata(__TopXMLNS, Cdata);
+decode_vcard_URL_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_URL_els(__TopXMLNS, _els,
                         <<Cdata/binary, _data/binary>>);
-decode_vcard_URL_els([_ | _els], Cdata) ->
-    decode_vcard_URL_els(_els, Cdata).
+decode_vcard_URL_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_URL_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_URL(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_URL_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"URL">>, _attrs, _els}.
 
-decode_vcard_URL_cdata(<<>>) -> undefined;
-decode_vcard_URL_cdata(_val) -> _val.
+decode_vcard_URL_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_URL_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_URL_cdata(undefined, _acc) -> _acc;
 encode_vcard_URL_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_UID({xmlel, <<"UID">>, _attrs, _els}) ->
-    Cdata = decode_vcard_UID_els(_els, <<>>), Cdata.
+decode_vcard_UID(__TopXMLNS,
+                {xmlel, <<"UID">>, _attrs, _els}) ->
+    Cdata = decode_vcard_UID_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_UID_els([], Cdata) ->
-    decode_vcard_UID_cdata(Cdata);
-decode_vcard_UID_els([{xmlcdata, _data} | _els],
-                    Cdata) ->
-    decode_vcard_UID_els(_els,
+decode_vcard_UID_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_UID_cdata(__TopXMLNS, Cdata);
+decode_vcard_UID_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_UID_els(__TopXMLNS, _els,
                         <<Cdata/binary, _data/binary>>);
-decode_vcard_UID_els([_ | _els], Cdata) ->
-    decode_vcard_UID_els(_els, Cdata).
+decode_vcard_UID_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_UID_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_UID(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_UID_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"UID">>, _attrs, _els}.
 
-decode_vcard_UID_cdata(<<>>) -> undefined;
-decode_vcard_UID_cdata(_val) -> _val.
+decode_vcard_UID_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_UID_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_UID_cdata(undefined, _acc) -> _acc;
 encode_vcard_UID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_SORT_STRING({xmlel, <<"SORT-STRING">>,
-                         _attrs, _els}) ->
-    Cdata = decode_vcard_SORT_STRING_els(_els, <<>>), Cdata.
+decode_vcard_SORT_STRING(__TopXMLNS,
+                        {xmlel, <<"SORT-STRING">>, _attrs, _els}) ->
+    Cdata = decode_vcard_SORT_STRING_els(__TopXMLNS, _els,
+                                        <<>>),
+    Cdata.
 
-decode_vcard_SORT_STRING_els([], Cdata) ->
-    decode_vcard_SORT_STRING_cdata(Cdata);
-decode_vcard_SORT_STRING_els([{xmlcdata, _data} | _els],
-                            Cdata) ->
-    decode_vcard_SORT_STRING_els(_els,
+decode_vcard_SORT_STRING_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_SORT_STRING_cdata(__TopXMLNS, Cdata);
+decode_vcard_SORT_STRING_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_SORT_STRING_els(__TopXMLNS, _els,
                                 <<Cdata/binary, _data/binary>>);
-decode_vcard_SORT_STRING_els([_ | _els], Cdata) ->
-    decode_vcard_SORT_STRING_els(_els, Cdata).
+decode_vcard_SORT_STRING_els(__TopXMLNS, [_ | _els],
+                            Cdata) ->
+    decode_vcard_SORT_STRING_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_SORT_STRING(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_SORT_STRING_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"SORT-STRING">>, _attrs, _els}.
 
-decode_vcard_SORT_STRING_cdata(<<>>) -> undefined;
-decode_vcard_SORT_STRING_cdata(_val) -> _val.
+decode_vcard_SORT_STRING_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_SORT_STRING_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_vcard_SORT_STRING_cdata(undefined, _acc) -> _acc;
 encode_vcard_SORT_STRING_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_REV({xmlel, <<"REV">>, _attrs, _els}) ->
-    Cdata = decode_vcard_REV_els(_els, <<>>), Cdata.
+decode_vcard_REV(__TopXMLNS,
+                {xmlel, <<"REV">>, _attrs, _els}) ->
+    Cdata = decode_vcard_REV_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_REV_els([], Cdata) ->
-    decode_vcard_REV_cdata(Cdata);
-decode_vcard_REV_els([{xmlcdata, _data} | _els],
-                    Cdata) ->
-    decode_vcard_REV_els(_els,
+decode_vcard_REV_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_REV_cdata(__TopXMLNS, Cdata);
+decode_vcard_REV_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_REV_els(__TopXMLNS, _els,
                         <<Cdata/binary, _data/binary>>);
-decode_vcard_REV_els([_ | _els], Cdata) ->
-    decode_vcard_REV_els(_els, Cdata).
+decode_vcard_REV_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_REV_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_REV(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_REV_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"REV">>, _attrs, _els}.
 
-decode_vcard_REV_cdata(<<>>) -> undefined;
-decode_vcard_REV_cdata(_val) -> _val.
+decode_vcard_REV_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_REV_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_REV_cdata(undefined, _acc) -> _acc;
 encode_vcard_REV_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_PRODID({xmlel, <<"PRODID">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_PRODID_els(_els, <<>>), Cdata.
+decode_vcard_PRODID(__TopXMLNS,
+                   {xmlel, <<"PRODID">>, _attrs, _els}) ->
+    Cdata = decode_vcard_PRODID_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_PRODID_els([], Cdata) ->
-    decode_vcard_PRODID_cdata(Cdata);
-decode_vcard_PRODID_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_PRODID_els(_els,
+decode_vcard_PRODID_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_PRODID_cdata(__TopXMLNS, Cdata);
+decode_vcard_PRODID_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_PRODID_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_PRODID_els([_ | _els], Cdata) ->
-    decode_vcard_PRODID_els(_els, Cdata).
+decode_vcard_PRODID_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_PRODID_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_PRODID(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_PRODID_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"PRODID">>, _attrs, _els}.
 
-decode_vcard_PRODID_cdata(<<>>) -> undefined;
-decode_vcard_PRODID_cdata(_val) -> _val.
+decode_vcard_PRODID_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_PRODID_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_PRODID_cdata(undefined, _acc) -> _acc;
 encode_vcard_PRODID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_NOTE({xmlel, <<"NOTE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_NOTE_els(_els, <<>>), Cdata.
+decode_vcard_NOTE(__TopXMLNS,
+                 {xmlel, <<"NOTE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_NOTE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_NOTE_els([], Cdata) ->
-    decode_vcard_NOTE_cdata(Cdata);
-decode_vcard_NOTE_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_NOTE_els(_els,
+decode_vcard_NOTE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_NOTE_cdata(__TopXMLNS, Cdata);
+decode_vcard_NOTE_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_NOTE_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_NOTE_els([_ | _els], Cdata) ->
-    decode_vcard_NOTE_els(_els, Cdata).
+decode_vcard_NOTE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_NOTE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_NOTE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_NOTE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"NOTE">>, _attrs, _els}.
 
-decode_vcard_NOTE_cdata(<<>>) -> undefined;
-decode_vcard_NOTE_cdata(_val) -> _val.
+decode_vcard_NOTE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_NOTE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_NOTE_cdata(undefined, _acc) -> _acc;
 encode_vcard_NOTE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_KEYWORD({xmlel, <<"KEYWORD">>, _attrs,
-                     _els}) ->
-    Cdata = decode_vcard_KEYWORD_els(_els, <<>>), Cdata.
+decode_vcard_KEYWORD(__TopXMLNS,
+                    {xmlel, <<"KEYWORD">>, _attrs, _els}) ->
+    Cdata = decode_vcard_KEYWORD_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_vcard_KEYWORD_els([], Cdata) ->
-    decode_vcard_KEYWORD_cdata(Cdata);
-decode_vcard_KEYWORD_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_vcard_KEYWORD_els(_els,
+decode_vcard_KEYWORD_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_KEYWORD_cdata(__TopXMLNS, Cdata);
+decode_vcard_KEYWORD_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_KEYWORD_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_vcard_KEYWORD_els([_ | _els], Cdata) ->
-    decode_vcard_KEYWORD_els(_els, Cdata).
+decode_vcard_KEYWORD_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_vcard_KEYWORD_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_KEYWORD(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_KEYWORD_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"KEYWORD">>, _attrs, _els}.
 
-decode_vcard_KEYWORD_cdata(<<>>) -> undefined;
-decode_vcard_KEYWORD_cdata(_val) -> _val.
+decode_vcard_KEYWORD_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_KEYWORD_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_KEYWORD_cdata(undefined, _acc) -> _acc;
 encode_vcard_KEYWORD_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_ROLE({xmlel, <<"ROLE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_ROLE_els(_els, <<>>), Cdata.
+decode_vcard_ROLE(__TopXMLNS,
+                 {xmlel, <<"ROLE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_ROLE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_ROLE_els([], Cdata) ->
-    decode_vcard_ROLE_cdata(Cdata);
-decode_vcard_ROLE_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_ROLE_els(_els,
+decode_vcard_ROLE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_ROLE_cdata(__TopXMLNS, Cdata);
+decode_vcard_ROLE_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_ROLE_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_ROLE_els([_ | _els], Cdata) ->
-    decode_vcard_ROLE_els(_els, Cdata).
+decode_vcard_ROLE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_ROLE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_ROLE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_ROLE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"ROLE">>, _attrs, _els}.
 
-decode_vcard_ROLE_cdata(<<>>) -> undefined;
-decode_vcard_ROLE_cdata(_val) -> _val.
+decode_vcard_ROLE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_ROLE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_ROLE_cdata(undefined, _acc) -> _acc;
 encode_vcard_ROLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_TITLE({xmlel, <<"TITLE">>, _attrs,
-                   _els}) ->
-    Cdata = decode_vcard_TITLE_els(_els, <<>>), Cdata.
+decode_vcard_TITLE(__TopXMLNS,
+                  {xmlel, <<"TITLE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_TITLE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_TITLE_els([], Cdata) ->
-    decode_vcard_TITLE_cdata(Cdata);
-decode_vcard_TITLE_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_vcard_TITLE_els(_els,
+decode_vcard_TITLE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_TITLE_cdata(__TopXMLNS, Cdata);
+decode_vcard_TITLE_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_TITLE_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_vcard_TITLE_els([_ | _els], Cdata) ->
-    decode_vcard_TITLE_els(_els, Cdata).
+decode_vcard_TITLE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_TITLE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_TITLE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_TITLE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"TITLE">>, _attrs, _els}.
 
-decode_vcard_TITLE_cdata(<<>>) -> undefined;
-decode_vcard_TITLE_cdata(_val) -> _val.
+decode_vcard_TITLE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TITLE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_TITLE_cdata(undefined, _acc) -> _acc;
 encode_vcard_TITLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_TZ({xmlel, <<"TZ">>, _attrs, _els}) ->
-    Cdata = decode_vcard_TZ_els(_els, <<>>), Cdata.
+decode_vcard_TZ(__TopXMLNS,
+               {xmlel, <<"TZ">>, _attrs, _els}) ->
+    Cdata = decode_vcard_TZ_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_TZ_els([], Cdata) ->
-    decode_vcard_TZ_cdata(Cdata);
-decode_vcard_TZ_els([{xmlcdata, _data} | _els],
-                   Cdata) ->
-    decode_vcard_TZ_els(_els,
+decode_vcard_TZ_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_TZ_cdata(__TopXMLNS, Cdata);
+decode_vcard_TZ_els(__TopXMLNS,
+                   [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_TZ_els(__TopXMLNS, _els,
                        <<Cdata/binary, _data/binary>>);
-decode_vcard_TZ_els([_ | _els], Cdata) ->
-    decode_vcard_TZ_els(_els, Cdata).
+decode_vcard_TZ_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_TZ_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_TZ(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_TZ_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"TZ">>, _attrs, _els}.
 
-decode_vcard_TZ_cdata(<<>>) -> undefined;
-decode_vcard_TZ_cdata(_val) -> _val.
+decode_vcard_TZ_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TZ_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_TZ_cdata(undefined, _acc) -> _acc;
 encode_vcard_TZ_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_MAILER({xmlel, <<"MAILER">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_MAILER_els(_els, <<>>), Cdata.
+decode_vcard_MAILER(__TopXMLNS,
+                   {xmlel, <<"MAILER">>, _attrs, _els}) ->
+    Cdata = decode_vcard_MAILER_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_MAILER_els([], Cdata) ->
-    decode_vcard_MAILER_cdata(Cdata);
-decode_vcard_MAILER_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_MAILER_els(_els,
+decode_vcard_MAILER_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_MAILER_cdata(__TopXMLNS, Cdata);
+decode_vcard_MAILER_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_MAILER_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_MAILER_els([_ | _els], Cdata) ->
-    decode_vcard_MAILER_els(_els, Cdata).
+decode_vcard_MAILER_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_MAILER_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_MAILER(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_MAILER_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"MAILER">>, _attrs, _els}.
 
-decode_vcard_MAILER_cdata(<<>>) -> undefined;
-decode_vcard_MAILER_cdata(_val) -> _val.
+decode_vcard_MAILER_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_MAILER_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_MAILER_cdata(undefined, _acc) -> _acc;
 encode_vcard_MAILER_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_JABBERID({xmlel, <<"JABBERID">>, _attrs,
-                      _els}) ->
-    Cdata = decode_vcard_JABBERID_els(_els, <<>>), Cdata.
+decode_vcard_JABBERID(__TopXMLNS,
+                     {xmlel, <<"JABBERID">>, _attrs, _els}) ->
+    Cdata = decode_vcard_JABBERID_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_vcard_JABBERID_els([], Cdata) ->
-    decode_vcard_JABBERID_cdata(Cdata);
-decode_vcard_JABBERID_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_vcard_JABBERID_els(_els,
+decode_vcard_JABBERID_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_JABBERID_cdata(__TopXMLNS, Cdata);
+decode_vcard_JABBERID_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_JABBERID_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_vcard_JABBERID_els([_ | _els], Cdata) ->
-    decode_vcard_JABBERID_els(_els, Cdata).
+decode_vcard_JABBERID_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_vcard_JABBERID_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_JABBERID(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_JABBERID_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"JABBERID">>, _attrs, _els}.
 
-decode_vcard_JABBERID_cdata(<<>>) -> undefined;
-decode_vcard_JABBERID_cdata(_val) -> _val.
+decode_vcard_JABBERID_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_JABBERID_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_JABBERID_cdata(undefined, _acc) -> _acc;
 encode_vcard_JABBERID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_BDAY({xmlel, <<"BDAY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_BDAY_els(_els, <<>>), Cdata.
+decode_vcard_BDAY(__TopXMLNS,
+                 {xmlel, <<"BDAY">>, _attrs, _els}) ->
+    Cdata = decode_vcard_BDAY_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_BDAY_els([], Cdata) ->
-    decode_vcard_BDAY_cdata(Cdata);
-decode_vcard_BDAY_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_BDAY_els(_els,
+decode_vcard_BDAY_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_BDAY_cdata(__TopXMLNS, Cdata);
+decode_vcard_BDAY_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_BDAY_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_BDAY_els([_ | _els], Cdata) ->
-    decode_vcard_BDAY_els(_els, Cdata).
+decode_vcard_BDAY_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_BDAY_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_BDAY(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_BDAY_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"BDAY">>, _attrs, _els}.
 
-decode_vcard_BDAY_cdata(<<>>) -> undefined;
-decode_vcard_BDAY_cdata(_val) -> _val.
+decode_vcard_BDAY_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_BDAY_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_BDAY_cdata(undefined, _acc) -> _acc;
 encode_vcard_BDAY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_NICKNAME({xmlel, <<"NICKNAME">>, _attrs,
-                      _els}) ->
-    Cdata = decode_vcard_NICKNAME_els(_els, <<>>), Cdata.
+decode_vcard_NICKNAME(__TopXMLNS,
+                     {xmlel, <<"NICKNAME">>, _attrs, _els}) ->
+    Cdata = decode_vcard_NICKNAME_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_vcard_NICKNAME_els([], Cdata) ->
-    decode_vcard_NICKNAME_cdata(Cdata);
-decode_vcard_NICKNAME_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_vcard_NICKNAME_els(_els,
+decode_vcard_NICKNAME_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_NICKNAME_cdata(__TopXMLNS, Cdata);
+decode_vcard_NICKNAME_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_NICKNAME_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_vcard_NICKNAME_els([_ | _els], Cdata) ->
-    decode_vcard_NICKNAME_els(_els, Cdata).
+decode_vcard_NICKNAME_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_vcard_NICKNAME_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_NICKNAME(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_NICKNAME_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"NICKNAME">>, _attrs, _els}.
 
-decode_vcard_NICKNAME_cdata(<<>>) -> undefined;
-decode_vcard_NICKNAME_cdata(_val) -> _val.
+decode_vcard_NICKNAME_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_NICKNAME_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_NICKNAME_cdata(undefined, _acc) -> _acc;
 encode_vcard_NICKNAME_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_FN({xmlel, <<"FN">>, _attrs, _els}) ->
-    Cdata = decode_vcard_FN_els(_els, <<>>), Cdata.
+decode_vcard_FN(__TopXMLNS,
+               {xmlel, <<"FN">>, _attrs, _els}) ->
+    Cdata = decode_vcard_FN_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_FN_els([], Cdata) ->
-    decode_vcard_FN_cdata(Cdata);
-decode_vcard_FN_els([{xmlcdata, _data} | _els],
-                   Cdata) ->
-    decode_vcard_FN_els(_els,
+decode_vcard_FN_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_FN_cdata(__TopXMLNS, Cdata);
+decode_vcard_FN_els(__TopXMLNS,
+                   [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_FN_els(__TopXMLNS, _els,
                        <<Cdata/binary, _data/binary>>);
-decode_vcard_FN_els([_ | _els], Cdata) ->
-    decode_vcard_FN_els(_els, Cdata).
+decode_vcard_FN_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_FN_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_FN(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_FN_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"FN">>, _attrs, _els}.
 
-decode_vcard_FN_cdata(<<>>) -> undefined;
-decode_vcard_FN_cdata(_val) -> _val.
+decode_vcard_FN_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_FN_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_FN_cdata(undefined, _acc) -> _acc;
 encode_vcard_FN_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_VERSION({xmlel, <<"VERSION">>, _attrs,
-                     _els}) ->
-    Cdata = decode_vcard_VERSION_els(_els, <<>>), Cdata.
+decode_vcard_VERSION(__TopXMLNS,
+                    {xmlel, <<"VERSION">>, _attrs, _els}) ->
+    Cdata = decode_vcard_VERSION_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_vcard_VERSION_els([], Cdata) ->
-    decode_vcard_VERSION_cdata(Cdata);
-decode_vcard_VERSION_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_vcard_VERSION_els(_els,
+decode_vcard_VERSION_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_VERSION_cdata(__TopXMLNS, Cdata);
+decode_vcard_VERSION_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_VERSION_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_vcard_VERSION_els([_ | _els], Cdata) ->
-    decode_vcard_VERSION_els(_els, Cdata).
+decode_vcard_VERSION_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_vcard_VERSION_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_VERSION(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_VERSION_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"VERSION">>, _attrs, _els}.
 
-decode_vcard_VERSION_cdata(<<>>) -> undefined;
-decode_vcard_VERSION_cdata(_val) -> _val.
+decode_vcard_VERSION_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_VERSION_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_VERSION_cdata(undefined, _acc) -> _acc;
 encode_vcard_VERSION_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_CRED({xmlel, <<"CRED">>, _attrs, _els}) ->
-    Cdata = decode_vcard_CRED_els(_els, <<>>), Cdata.
+decode_vcard_CRED(__TopXMLNS,
+                 {xmlel, <<"CRED">>, _attrs, _els}) ->
+    Cdata = decode_vcard_CRED_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_CRED_els([], Cdata) ->
-    decode_vcard_CRED_cdata(Cdata);
-decode_vcard_CRED_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_CRED_els(_els,
+decode_vcard_CRED_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_CRED_cdata(__TopXMLNS, Cdata);
+decode_vcard_CRED_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_CRED_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_CRED_els([_ | _els], Cdata) ->
-    decode_vcard_CRED_els(_els, Cdata).
+decode_vcard_CRED_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_CRED_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_CRED(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_CRED_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"CRED">>, _attrs, _els}.
 
-decode_vcard_CRED_cdata(<<>>) -> undefined;
-decode_vcard_CRED_cdata(_val) -> _val.
+decode_vcard_CRED_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_CRED_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_CRED_cdata(undefined, _acc) -> _acc;
 encode_vcard_CRED_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_PHONETIC({xmlel, <<"PHONETIC">>, _attrs,
-                      _els}) ->
-    Cdata = decode_vcard_PHONETIC_els(_els, <<>>), Cdata.
+decode_vcard_PHONETIC(__TopXMLNS,
+                     {xmlel, <<"PHONETIC">>, _attrs, _els}) ->
+    Cdata = decode_vcard_PHONETIC_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_vcard_PHONETIC_els([], Cdata) ->
-    decode_vcard_PHONETIC_cdata(Cdata);
-decode_vcard_PHONETIC_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_vcard_PHONETIC_els(_els,
+decode_vcard_PHONETIC_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_PHONETIC_cdata(__TopXMLNS, Cdata);
+decode_vcard_PHONETIC_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_PHONETIC_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_vcard_PHONETIC_els([_ | _els], Cdata) ->
-    decode_vcard_PHONETIC_els(_els, Cdata).
+decode_vcard_PHONETIC_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_vcard_PHONETIC_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_PHONETIC(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_PHONETIC_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"PHONETIC">>, _attrs, _els}.
 
-decode_vcard_PHONETIC_cdata(<<>>) -> undefined;
-decode_vcard_PHONETIC_cdata(_val) -> _val.
+decode_vcard_PHONETIC_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_PHONETIC_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_PHONETIC_cdata(undefined, _acc) -> _acc;
 encode_vcard_PHONETIC_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_ORGUNIT({xmlel, <<"ORGUNIT">>, _attrs,
-                     _els}) ->
-    Cdata = decode_vcard_ORGUNIT_els(_els, <<>>), Cdata.
+decode_vcard_ORGUNIT(__TopXMLNS,
+                    {xmlel, <<"ORGUNIT">>, _attrs, _els}) ->
+    Cdata = decode_vcard_ORGUNIT_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_vcard_ORGUNIT_els([], Cdata) ->
-    decode_vcard_ORGUNIT_cdata(Cdata);
-decode_vcard_ORGUNIT_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_vcard_ORGUNIT_els(_els,
+decode_vcard_ORGUNIT_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_ORGUNIT_cdata(__TopXMLNS, Cdata);
+decode_vcard_ORGUNIT_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_ORGUNIT_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_vcard_ORGUNIT_els([_ | _els], Cdata) ->
-    decode_vcard_ORGUNIT_els(_els, Cdata).
+decode_vcard_ORGUNIT_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_vcard_ORGUNIT_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_ORGUNIT(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_ORGUNIT_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"ORGUNIT">>, _attrs, _els}.
 
-decode_vcard_ORGUNIT_cdata(<<>>) -> undefined;
-decode_vcard_ORGUNIT_cdata(_val) -> _val.
+decode_vcard_ORGUNIT_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_ORGUNIT_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_ORGUNIT_cdata(undefined, _acc) -> _acc;
 encode_vcard_ORGUNIT_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_ORGNAME({xmlel, <<"ORGNAME">>, _attrs,
-                     _els}) ->
-    Cdata = decode_vcard_ORGNAME_els(_els, <<>>), Cdata.
+decode_vcard_ORGNAME(__TopXMLNS,
+                    {xmlel, <<"ORGNAME">>, _attrs, _els}) ->
+    Cdata = decode_vcard_ORGNAME_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_vcard_ORGNAME_els([], Cdata) ->
-    decode_vcard_ORGNAME_cdata(Cdata);
-decode_vcard_ORGNAME_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_vcard_ORGNAME_els(_els,
+decode_vcard_ORGNAME_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_ORGNAME_cdata(__TopXMLNS, Cdata);
+decode_vcard_ORGNAME_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_ORGNAME_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_vcard_ORGNAME_els([_ | _els], Cdata) ->
-    decode_vcard_ORGNAME_els(_els, Cdata).
+decode_vcard_ORGNAME_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_vcard_ORGNAME_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_ORGNAME(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_ORGNAME_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"ORGNAME">>, _attrs, _els}.
 
-decode_vcard_ORGNAME_cdata(<<>>) -> undefined;
-decode_vcard_ORGNAME_cdata(_val) -> _val.
+decode_vcard_ORGNAME_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_ORGNAME_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_ORGNAME_cdata(undefined, _acc) -> _acc;
 encode_vcard_ORGNAME_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_LON({xmlel, <<"LON">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LON_els(_els, <<>>), Cdata.
+decode_vcard_LON(__TopXMLNS,
+                {xmlel, <<"LON">>, _attrs, _els}) ->
+    Cdata = decode_vcard_LON_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_LON_els([], Cdata) ->
-    decode_vcard_LON_cdata(Cdata);
-decode_vcard_LON_els([{xmlcdata, _data} | _els],
-                    Cdata) ->
-    decode_vcard_LON_els(_els,
+decode_vcard_LON_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_LON_cdata(__TopXMLNS, Cdata);
+decode_vcard_LON_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_LON_els(__TopXMLNS, _els,
                         <<Cdata/binary, _data/binary>>);
-decode_vcard_LON_els([_ | _els], Cdata) ->
-    decode_vcard_LON_els(_els, Cdata).
+decode_vcard_LON_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_LON_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_LON(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_LON_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"LON">>, _attrs, _els}.
 
-decode_vcard_LON_cdata(<<>>) -> undefined;
-decode_vcard_LON_cdata(_val) -> _val.
+decode_vcard_LON_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LON_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_LON_cdata(undefined, _acc) -> _acc;
 encode_vcard_LON_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_LAT({xmlel, <<"LAT">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LAT_els(_els, <<>>), Cdata.
+decode_vcard_LAT(__TopXMLNS,
+                {xmlel, <<"LAT">>, _attrs, _els}) ->
+    Cdata = decode_vcard_LAT_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_LAT_els([], Cdata) ->
-    decode_vcard_LAT_cdata(Cdata);
-decode_vcard_LAT_els([{xmlcdata, _data} | _els],
-                    Cdata) ->
-    decode_vcard_LAT_els(_els,
+decode_vcard_LAT_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_LAT_cdata(__TopXMLNS, Cdata);
+decode_vcard_LAT_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_LAT_els(__TopXMLNS, _els,
                         <<Cdata/binary, _data/binary>>);
-decode_vcard_LAT_els([_ | _els], Cdata) ->
-    decode_vcard_LAT_els(_els, Cdata).
+decode_vcard_LAT_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_LAT_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_LAT(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_LAT_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"LAT">>, _attrs, _els}.
 
-decode_vcard_LAT_cdata(<<>>) -> undefined;
-decode_vcard_LAT_cdata(_val) -> _val.
+decode_vcard_LAT_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LAT_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_LAT_cdata(undefined, _acc) -> _acc;
 encode_vcard_LAT_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_USERID({xmlel, <<"USERID">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_USERID_els(_els, <<>>), Cdata.
+decode_vcard_USERID(__TopXMLNS,
+                   {xmlel, <<"USERID">>, _attrs, _els}) ->
+    Cdata = decode_vcard_USERID_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_USERID_els([], Cdata) ->
-    decode_vcard_USERID_cdata(Cdata);
-decode_vcard_USERID_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_USERID_els(_els,
+decode_vcard_USERID_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_USERID_cdata(__TopXMLNS, Cdata);
+decode_vcard_USERID_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_USERID_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_USERID_els([_ | _els], Cdata) ->
-    decode_vcard_USERID_els(_els, Cdata).
+decode_vcard_USERID_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_USERID_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_USERID(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_USERID_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"USERID">>, _attrs, _els}.
 
-decode_vcard_USERID_cdata(<<>>) -> undefined;
-decode_vcard_USERID_cdata(_val) -> _val.
+decode_vcard_USERID_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_USERID_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_USERID_cdata(undefined, _acc) -> _acc;
 encode_vcard_USERID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_NUMBER({xmlel, <<"NUMBER">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_NUMBER_els(_els, <<>>), Cdata.
+decode_vcard_NUMBER(__TopXMLNS,
+                   {xmlel, <<"NUMBER">>, _attrs, _els}) ->
+    Cdata = decode_vcard_NUMBER_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_NUMBER_els([], Cdata) ->
-    decode_vcard_NUMBER_cdata(Cdata);
-decode_vcard_NUMBER_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_NUMBER_els(_els,
+decode_vcard_NUMBER_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_NUMBER_cdata(__TopXMLNS, Cdata);
+decode_vcard_NUMBER_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_NUMBER_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_NUMBER_els([_ | _els], Cdata) ->
-    decode_vcard_NUMBER_els(_els, Cdata).
+decode_vcard_NUMBER_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_NUMBER_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_NUMBER(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_NUMBER_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"NUMBER">>, _attrs, _els}.
 
-decode_vcard_NUMBER_cdata(<<>>) -> undefined;
-decode_vcard_NUMBER_cdata(_val) -> _val.
+decode_vcard_NUMBER_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_NUMBER_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_NUMBER_cdata(undefined, _acc) -> _acc;
 encode_vcard_NUMBER_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_LINE({xmlel, <<"LINE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LINE_els(_els, <<>>), Cdata.
+decode_vcard_LINE(__TopXMLNS,
+                 {xmlel, <<"LINE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_LINE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_LINE_els([], Cdata) ->
-    decode_vcard_LINE_cdata(Cdata);
-decode_vcard_LINE_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_LINE_els(_els,
+decode_vcard_LINE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_LINE_cdata(__TopXMLNS, Cdata);
+decode_vcard_LINE_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_LINE_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_LINE_els([_ | _els], Cdata) ->
-    decode_vcard_LINE_els(_els, Cdata).
+decode_vcard_LINE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_LINE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_LINE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_LINE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"LINE">>, _attrs, _els}.
 
-decode_vcard_LINE_cdata(<<>>) -> undefined;
-decode_vcard_LINE_cdata(_val) -> _val.
+decode_vcard_LINE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LINE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_LINE_cdata(undefined, _acc) -> _acc;
 encode_vcard_LINE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_CTRY({xmlel, <<"CTRY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_CTRY_els(_els, <<>>), Cdata.
+decode_vcard_CTRY(__TopXMLNS,
+                 {xmlel, <<"CTRY">>, _attrs, _els}) ->
+    Cdata = decode_vcard_CTRY_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_CTRY_els([], Cdata) ->
-    decode_vcard_CTRY_cdata(Cdata);
-decode_vcard_CTRY_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_vcard_CTRY_els(_els,
+decode_vcard_CTRY_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_CTRY_cdata(__TopXMLNS, Cdata);
+decode_vcard_CTRY_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_CTRY_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_vcard_CTRY_els([_ | _els], Cdata) ->
-    decode_vcard_CTRY_els(_els, Cdata).
+decode_vcard_CTRY_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_CTRY_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_CTRY(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_CTRY_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"CTRY">>, _attrs, _els}.
 
-decode_vcard_CTRY_cdata(<<>>) -> undefined;
-decode_vcard_CTRY_cdata(_val) -> _val.
+decode_vcard_CTRY_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_CTRY_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_CTRY_cdata(undefined, _acc) -> _acc;
 encode_vcard_CTRY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_PCODE({xmlel, <<"PCODE">>, _attrs,
-                   _els}) ->
-    Cdata = decode_vcard_PCODE_els(_els, <<>>), Cdata.
+decode_vcard_PCODE(__TopXMLNS,
+                  {xmlel, <<"PCODE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_PCODE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_PCODE_els([], Cdata) ->
-    decode_vcard_PCODE_cdata(Cdata);
-decode_vcard_PCODE_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_vcard_PCODE_els(_els,
+decode_vcard_PCODE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_PCODE_cdata(__TopXMLNS, Cdata);
+decode_vcard_PCODE_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_PCODE_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_vcard_PCODE_els([_ | _els], Cdata) ->
-    decode_vcard_PCODE_els(_els, Cdata).
+decode_vcard_PCODE_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_PCODE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_PCODE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_PCODE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"PCODE">>, _attrs, _els}.
 
-decode_vcard_PCODE_cdata(<<>>) -> undefined;
-decode_vcard_PCODE_cdata(_val) -> _val.
+decode_vcard_PCODE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_PCODE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_PCODE_cdata(undefined, _acc) -> _acc;
 encode_vcard_PCODE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_REGION({xmlel, <<"REGION">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_REGION_els(_els, <<>>), Cdata.
+decode_vcard_REGION(__TopXMLNS,
+                   {xmlel, <<"REGION">>, _attrs, _els}) ->
+    Cdata = decode_vcard_REGION_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_REGION_els([], Cdata) ->
-    decode_vcard_REGION_cdata(Cdata);
-decode_vcard_REGION_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_REGION_els(_els,
+decode_vcard_REGION_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_REGION_cdata(__TopXMLNS, Cdata);
+decode_vcard_REGION_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_REGION_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_REGION_els([_ | _els], Cdata) ->
-    decode_vcard_REGION_els(_els, Cdata).
+decode_vcard_REGION_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_REGION_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_REGION(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_REGION_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"REGION">>, _attrs, _els}.
 
-decode_vcard_REGION_cdata(<<>>) -> undefined;
-decode_vcard_REGION_cdata(_val) -> _val.
+decode_vcard_REGION_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_REGION_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_REGION_cdata(undefined, _acc) -> _acc;
 encode_vcard_REGION_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_LOCALITY({xmlel, <<"LOCALITY">>, _attrs,
-                      _els}) ->
-    Cdata = decode_vcard_LOCALITY_els(_els, <<>>), Cdata.
+decode_vcard_LOCALITY(__TopXMLNS,
+                     {xmlel, <<"LOCALITY">>, _attrs, _els}) ->
+    Cdata = decode_vcard_LOCALITY_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_vcard_LOCALITY_els([], Cdata) ->
-    decode_vcard_LOCALITY_cdata(Cdata);
-decode_vcard_LOCALITY_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_vcard_LOCALITY_els(_els,
+decode_vcard_LOCALITY_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_LOCALITY_cdata(__TopXMLNS, Cdata);
+decode_vcard_LOCALITY_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_LOCALITY_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_vcard_LOCALITY_els([_ | _els], Cdata) ->
-    decode_vcard_LOCALITY_els(_els, Cdata).
+decode_vcard_LOCALITY_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_vcard_LOCALITY_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_LOCALITY(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_LOCALITY_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"LOCALITY">>, _attrs, _els}.
 
-decode_vcard_LOCALITY_cdata(<<>>) -> undefined;
-decode_vcard_LOCALITY_cdata(_val) -> _val.
+decode_vcard_LOCALITY_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_LOCALITY_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_LOCALITY_cdata(undefined, _acc) -> _acc;
 encode_vcard_LOCALITY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_STREET({xmlel, <<"STREET">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_STREET_els(_els, <<>>), Cdata.
+decode_vcard_STREET(__TopXMLNS,
+                   {xmlel, <<"STREET">>, _attrs, _els}) ->
+    Cdata = decode_vcard_STREET_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_STREET_els([], Cdata) ->
-    decode_vcard_STREET_cdata(Cdata);
-decode_vcard_STREET_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_STREET_els(_els,
+decode_vcard_STREET_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_STREET_cdata(__TopXMLNS, Cdata);
+decode_vcard_STREET_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_STREET_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_STREET_els([_ | _els], Cdata) ->
-    decode_vcard_STREET_els(_els, Cdata).
+decode_vcard_STREET_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_STREET_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_STREET(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_STREET_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"STREET">>, _attrs, _els}.
 
-decode_vcard_STREET_cdata(<<>>) -> undefined;
-decode_vcard_STREET_cdata(_val) -> _val.
+decode_vcard_STREET_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_STREET_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_STREET_cdata(undefined, _acc) -> _acc;
 encode_vcard_STREET_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_EXTADD({xmlel, <<"EXTADD">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_EXTADD_els(_els, <<>>), Cdata.
+decode_vcard_EXTADD(__TopXMLNS,
+                   {xmlel, <<"EXTADD">>, _attrs, _els}) ->
+    Cdata = decode_vcard_EXTADD_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_EXTADD_els([], Cdata) ->
-    decode_vcard_EXTADD_cdata(Cdata);
-decode_vcard_EXTADD_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_EXTADD_els(_els,
+decode_vcard_EXTADD_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_EXTADD_cdata(__TopXMLNS, Cdata);
+decode_vcard_EXTADD_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_EXTADD_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_EXTADD_els([_ | _els], Cdata) ->
-    decode_vcard_EXTADD_els(_els, Cdata).
+decode_vcard_EXTADD_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_EXTADD_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_EXTADD(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_EXTADD_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"EXTADD">>, _attrs, _els}.
 
-decode_vcard_EXTADD_cdata(<<>>) -> undefined;
-decode_vcard_EXTADD_cdata(_val) -> _val.
+decode_vcard_EXTADD_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_EXTADD_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_EXTADD_cdata(undefined, _acc) -> _acc;
 encode_vcard_EXTADD_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_POBOX({xmlel, <<"POBOX">>, _attrs,
-                   _els}) ->
-    Cdata = decode_vcard_POBOX_els(_els, <<>>), Cdata.
+decode_vcard_POBOX(__TopXMLNS,
+                  {xmlel, <<"POBOX">>, _attrs, _els}) ->
+    Cdata = decode_vcard_POBOX_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_POBOX_els([], Cdata) ->
-    decode_vcard_POBOX_cdata(Cdata);
-decode_vcard_POBOX_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_vcard_POBOX_els(_els,
+decode_vcard_POBOX_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_POBOX_cdata(__TopXMLNS, Cdata);
+decode_vcard_POBOX_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_POBOX_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_vcard_POBOX_els([_ | _els], Cdata) ->
-    decode_vcard_POBOX_els(_els, Cdata).
+decode_vcard_POBOX_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_POBOX_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_POBOX(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_POBOX_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"POBOX">>, _attrs, _els}.
 
-decode_vcard_POBOX_cdata(<<>>) -> undefined;
-decode_vcard_POBOX_cdata(_val) -> _val.
+decode_vcard_POBOX_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_POBOX_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_POBOX_cdata(undefined, _acc) -> _acc;
 encode_vcard_POBOX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_SUFFIX({xmlel, <<"SUFFIX">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_SUFFIX_els(_els, <<>>), Cdata.
+decode_vcard_SUFFIX(__TopXMLNS,
+                   {xmlel, <<"SUFFIX">>, _attrs, _els}) ->
+    Cdata = decode_vcard_SUFFIX_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_SUFFIX_els([], Cdata) ->
-    decode_vcard_SUFFIX_cdata(Cdata);
-decode_vcard_SUFFIX_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_SUFFIX_els(_els,
+decode_vcard_SUFFIX_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_SUFFIX_cdata(__TopXMLNS, Cdata);
+decode_vcard_SUFFIX_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_SUFFIX_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_SUFFIX_els([_ | _els], Cdata) ->
-    decode_vcard_SUFFIX_els(_els, Cdata).
+decode_vcard_SUFFIX_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_SUFFIX_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_SUFFIX(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_SUFFIX_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"SUFFIX">>, _attrs, _els}.
 
-decode_vcard_SUFFIX_cdata(<<>>) -> undefined;
-decode_vcard_SUFFIX_cdata(_val) -> _val.
+decode_vcard_SUFFIX_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_SUFFIX_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_SUFFIX_cdata(undefined, _acc) -> _acc;
 encode_vcard_SUFFIX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_PREFIX({xmlel, <<"PREFIX">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_PREFIX_els(_els, <<>>), Cdata.
+decode_vcard_PREFIX(__TopXMLNS,
+                   {xmlel, <<"PREFIX">>, _attrs, _els}) ->
+    Cdata = decode_vcard_PREFIX_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_PREFIX_els([], Cdata) ->
-    decode_vcard_PREFIX_cdata(Cdata);
-decode_vcard_PREFIX_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_PREFIX_els(_els,
+decode_vcard_PREFIX_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_PREFIX_cdata(__TopXMLNS, Cdata);
+decode_vcard_PREFIX_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_PREFIX_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_PREFIX_els([_ | _els], Cdata) ->
-    decode_vcard_PREFIX_els(_els, Cdata).
+decode_vcard_PREFIX_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_PREFIX_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_PREFIX(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_PREFIX_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"PREFIX">>, _attrs, _els}.
 
-decode_vcard_PREFIX_cdata(<<>>) -> undefined;
-decode_vcard_PREFIX_cdata(_val) -> _val.
+decode_vcard_PREFIX_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_PREFIX_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_PREFIX_cdata(undefined, _acc) -> _acc;
 encode_vcard_PREFIX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_MIDDLE({xmlel, <<"MIDDLE">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_MIDDLE_els(_els, <<>>), Cdata.
+decode_vcard_MIDDLE(__TopXMLNS,
+                   {xmlel, <<"MIDDLE">>, _attrs, _els}) ->
+    Cdata = decode_vcard_MIDDLE_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_MIDDLE_els([], Cdata) ->
-    decode_vcard_MIDDLE_cdata(Cdata);
-decode_vcard_MIDDLE_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_MIDDLE_els(_els,
+decode_vcard_MIDDLE_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_MIDDLE_cdata(__TopXMLNS, Cdata);
+decode_vcard_MIDDLE_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_MIDDLE_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_MIDDLE_els([_ | _els], Cdata) ->
-    decode_vcard_MIDDLE_els(_els, Cdata).
+decode_vcard_MIDDLE_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_MIDDLE_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_MIDDLE(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_MIDDLE_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"MIDDLE">>, _attrs, _els}.
 
-decode_vcard_MIDDLE_cdata(<<>>) -> undefined;
-decode_vcard_MIDDLE_cdata(_val) -> _val.
+decode_vcard_MIDDLE_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_MIDDLE_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_MIDDLE_cdata(undefined, _acc) -> _acc;
 encode_vcard_MIDDLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_GIVEN({xmlel, <<"GIVEN">>, _attrs,
-                   _els}) ->
-    Cdata = decode_vcard_GIVEN_els(_els, <<>>), Cdata.
+decode_vcard_GIVEN(__TopXMLNS,
+                  {xmlel, <<"GIVEN">>, _attrs, _els}) ->
+    Cdata = decode_vcard_GIVEN_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_GIVEN_els([], Cdata) ->
-    decode_vcard_GIVEN_cdata(Cdata);
-decode_vcard_GIVEN_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_vcard_GIVEN_els(_els,
+decode_vcard_GIVEN_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_GIVEN_cdata(__TopXMLNS, Cdata);
+decode_vcard_GIVEN_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_GIVEN_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_vcard_GIVEN_els([_ | _els], Cdata) ->
-    decode_vcard_GIVEN_els(_els, Cdata).
+decode_vcard_GIVEN_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_vcard_GIVEN_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_GIVEN(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_GIVEN_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"GIVEN">>, _attrs, _els}.
 
-decode_vcard_GIVEN_cdata(<<>>) -> undefined;
-decode_vcard_GIVEN_cdata(_val) -> _val.
+decode_vcard_GIVEN_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_GIVEN_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_GIVEN_cdata(undefined, _acc) -> _acc;
 encode_vcard_GIVEN_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_FAMILY({xmlel, <<"FAMILY">>, _attrs,
-                    _els}) ->
-    Cdata = decode_vcard_FAMILY_els(_els, <<>>), Cdata.
+decode_vcard_FAMILY(__TopXMLNS,
+                   {xmlel, <<"FAMILY">>, _attrs, _els}) ->
+    Cdata = decode_vcard_FAMILY_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_vcard_FAMILY_els([], Cdata) ->
-    decode_vcard_FAMILY_cdata(Cdata);
-decode_vcard_FAMILY_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_vcard_FAMILY_els(_els,
+decode_vcard_FAMILY_els(__TopXMLNS, [], Cdata) ->
+    decode_vcard_FAMILY_cdata(__TopXMLNS, Cdata);
+decode_vcard_FAMILY_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_vcard_FAMILY_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_vcard_FAMILY_els([_ | _els], Cdata) ->
-    decode_vcard_FAMILY_els(_els, Cdata).
+decode_vcard_FAMILY_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_vcard_FAMILY_els(__TopXMLNS, _els, Cdata).
 
 encode_vcard_FAMILY(Cdata, _xmlns_attrs) ->
     _els = encode_vcard_FAMILY_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"FAMILY">>, _attrs, _els}.
 
-decode_vcard_FAMILY_cdata(<<>>) -> undefined;
-decode_vcard_FAMILY_cdata(_val) -> _val.
+decode_vcard_FAMILY_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_vcard_FAMILY_cdata(__TopXMLNS, _val) -> _val.
 
 encode_vcard_FAMILY_cdata(undefined, _acc) -> _acc;
 encode_vcard_FAMILY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_vcard_X400({xmlel, <<"X400">>, _attrs, _els}) ->
+decode_vcard_X400(__TopXMLNS,
+                 {xmlel, <<"X400">>, _attrs, _els}) ->
     true.
 
 encode_vcard_X400(true, _xmlns_attrs) ->
@@ -9540,8 +10216,8 @@ encode_vcard_X400(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"X400">>, _attrs, _els}.
 
-decode_vcard_INTERNET({xmlel, <<"INTERNET">>, _attrs,
-                      _els}) ->
+decode_vcard_INTERNET(__TopXMLNS,
+                     {xmlel, <<"INTERNET">>, _attrs, _els}) ->
     true.
 
 encode_vcard_INTERNET(true, _xmlns_attrs) ->
@@ -9549,7 +10225,8 @@ encode_vcard_INTERNET(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"INTERNET">>, _attrs, _els}.
 
-decode_vcard_PREF({xmlel, <<"PREF">>, _attrs, _els}) ->
+decode_vcard_PREF(__TopXMLNS,
+                 {xmlel, <<"PREF">>, _attrs, _els}) ->
     true.
 
 encode_vcard_PREF(true, _xmlns_attrs) ->
@@ -9557,7 +10234,8 @@ encode_vcard_PREF(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PREF">>, _attrs, _els}.
 
-decode_vcard_INTL({xmlel, <<"INTL">>, _attrs, _els}) ->
+decode_vcard_INTL(__TopXMLNS,
+                 {xmlel, <<"INTL">>, _attrs, _els}) ->
     true.
 
 encode_vcard_INTL(true, _xmlns_attrs) ->
@@ -9565,7 +10243,8 @@ encode_vcard_INTL(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"INTL">>, _attrs, _els}.
 
-decode_vcard_DOM({xmlel, <<"DOM">>, _attrs, _els}) ->
+decode_vcard_DOM(__TopXMLNS,
+                {xmlel, <<"DOM">>, _attrs, _els}) ->
     true.
 
 encode_vcard_DOM(true, _xmlns_attrs) ->
@@ -9573,8 +10252,8 @@ encode_vcard_DOM(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"DOM">>, _attrs, _els}.
 
-decode_vcard_PARCEL({xmlel, <<"PARCEL">>, _attrs,
-                    _els}) ->
+decode_vcard_PARCEL(__TopXMLNS,
+                   {xmlel, <<"PARCEL">>, _attrs, _els}) ->
     true.
 
 encode_vcard_PARCEL(true, _xmlns_attrs) ->
@@ -9582,8 +10261,8 @@ encode_vcard_PARCEL(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PARCEL">>, _attrs, _els}.
 
-decode_vcard_POSTAL({xmlel, <<"POSTAL">>, _attrs,
-                    _els}) ->
+decode_vcard_POSTAL(__TopXMLNS,
+                   {xmlel, <<"POSTAL">>, _attrs, _els}) ->
     true.
 
 encode_vcard_POSTAL(true, _xmlns_attrs) ->
@@ -9591,7 +10270,8 @@ encode_vcard_POSTAL(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"POSTAL">>, _attrs, _els}.
 
-decode_vcard_PCS({xmlel, <<"PCS">>, _attrs, _els}) ->
+decode_vcard_PCS(__TopXMLNS,
+                {xmlel, <<"PCS">>, _attrs, _els}) ->
     true.
 
 encode_vcard_PCS(true, _xmlns_attrs) ->
@@ -9599,7 +10279,8 @@ encode_vcard_PCS(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PCS">>, _attrs, _els}.
 
-decode_vcard_ISDN({xmlel, <<"ISDN">>, _attrs, _els}) ->
+decode_vcard_ISDN(__TopXMLNS,
+                 {xmlel, <<"ISDN">>, _attrs, _els}) ->
     true.
 
 encode_vcard_ISDN(true, _xmlns_attrs) ->
@@ -9607,8 +10288,8 @@ encode_vcard_ISDN(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ISDN">>, _attrs, _els}.
 
-decode_vcard_MODEM({xmlel, <<"MODEM">>, _attrs,
-                   _els}) ->
+decode_vcard_MODEM(__TopXMLNS,
+                  {xmlel, <<"MODEM">>, _attrs, _els}) ->
     true.
 
 encode_vcard_MODEM(true, _xmlns_attrs) ->
@@ -9616,7 +10297,8 @@ encode_vcard_MODEM(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"MODEM">>, _attrs, _els}.
 
-decode_vcard_BBS({xmlel, <<"BBS">>, _attrs, _els}) ->
+decode_vcard_BBS(__TopXMLNS,
+                {xmlel, <<"BBS">>, _attrs, _els}) ->
     true.
 
 encode_vcard_BBS(true, _xmlns_attrs) ->
@@ -9624,8 +10306,8 @@ encode_vcard_BBS(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"BBS">>, _attrs, _els}.
 
-decode_vcard_VIDEO({xmlel, <<"VIDEO">>, _attrs,
-                   _els}) ->
+decode_vcard_VIDEO(__TopXMLNS,
+                  {xmlel, <<"VIDEO">>, _attrs, _els}) ->
     true.
 
 encode_vcard_VIDEO(true, _xmlns_attrs) ->
@@ -9633,7 +10315,8 @@ encode_vcard_VIDEO(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"VIDEO">>, _attrs, _els}.
 
-decode_vcard_CELL({xmlel, <<"CELL">>, _attrs, _els}) ->
+decode_vcard_CELL(__TopXMLNS,
+                 {xmlel, <<"CELL">>, _attrs, _els}) ->
     true.
 
 encode_vcard_CELL(true, _xmlns_attrs) ->
@@ -9641,7 +10324,8 @@ encode_vcard_CELL(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"CELL">>, _attrs, _els}.
 
-decode_vcard_MSG({xmlel, <<"MSG">>, _attrs, _els}) ->
+decode_vcard_MSG(__TopXMLNS,
+                {xmlel, <<"MSG">>, _attrs, _els}) ->
     true.
 
 encode_vcard_MSG(true, _xmlns_attrs) ->
@@ -9649,8 +10333,8 @@ encode_vcard_MSG(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"MSG">>, _attrs, _els}.
 
-decode_vcard_PAGER({xmlel, <<"PAGER">>, _attrs,
-                   _els}) ->
+decode_vcard_PAGER(__TopXMLNS,
+                  {xmlel, <<"PAGER">>, _attrs, _els}) ->
     true.
 
 encode_vcard_PAGER(true, _xmlns_attrs) ->
@@ -9658,7 +10342,8 @@ encode_vcard_PAGER(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PAGER">>, _attrs, _els}.
 
-decode_vcard_FAX({xmlel, <<"FAX">>, _attrs, _els}) ->
+decode_vcard_FAX(__TopXMLNS,
+                {xmlel, <<"FAX">>, _attrs, _els}) ->
     true.
 
 encode_vcard_FAX(true, _xmlns_attrs) ->
@@ -9666,8 +10351,8 @@ encode_vcard_FAX(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"FAX">>, _attrs, _els}.
 
-decode_vcard_VOICE({xmlel, <<"VOICE">>, _attrs,
-                   _els}) ->
+decode_vcard_VOICE(__TopXMLNS,
+                  {xmlel, <<"VOICE">>, _attrs, _els}) ->
     true.
 
 encode_vcard_VOICE(true, _xmlns_attrs) ->
@@ -9675,7 +10360,8 @@ encode_vcard_VOICE(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"VOICE">>, _attrs, _els}.
 
-decode_vcard_WORK({xmlel, <<"WORK">>, _attrs, _els}) ->
+decode_vcard_WORK(__TopXMLNS,
+                 {xmlel, <<"WORK">>, _attrs, _els}) ->
     true.
 
 encode_vcard_WORK(true, _xmlns_attrs) ->
@@ -9683,7 +10369,8 @@ encode_vcard_WORK(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"WORK">>, _attrs, _els}.
 
-decode_vcard_HOME({xmlel, <<"HOME">>, _attrs, _els}) ->
+decode_vcard_HOME(__TopXMLNS,
+                 {xmlel, <<"HOME">>, _attrs, _els}) ->
     true.
 
 encode_vcard_HOME(true, _xmlns_attrs) ->
@@ -9691,328 +10378,339 @@ encode_vcard_HOME(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"HOME">>, _attrs, _els}.
 
-decode_stream_error({xmlel, <<"stream:error">>, _attrs,
-                    _els}) ->
-    {Text, Reason} = decode_stream_error_els(_els,
-                                            undefined, undefined),
+decode_stream_error(__TopXMLNS,
+                   {xmlel, <<"stream:error">>, _attrs, _els}) ->
+    {Text, Reason} = decode_stream_error_els(__TopXMLNS,
+                                            _els, undefined, undefined),
     {stream_error, Reason, Text}.
 
-decode_stream_error_els([], Text, Reason) ->
+decode_stream_error_els(__TopXMLNS, [], Text, Reason) ->
     {Text, Reason};
-decode_stream_error_els([{xmlel, <<"text">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
+                       Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els,
-                                  decode_stream_error_text(_el), Reason);
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els,
+                                  decode_stream_error_text(_xmlns, _el),
+                                  Reason);
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"bad-format">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"bad-format">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_bad_format(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_bad_format(_xmlns, _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"bad-namespace-prefix">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"bad-namespace-prefix">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_bad_namespace_prefix(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_bad_namespace_prefix(_xmlns,
+                                                                           _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"conflict">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"conflict">>, _attrs, _} = _el | _els], Text,
+                       Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_conflict(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_conflict(_xmlns, _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"connection-timeout">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"connection-timeout">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_connection_timeout(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_connection_timeout(_xmlns,
+                                                                         _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"host-gone">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"host-gone">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_host_gone(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_host_gone(_xmlns, _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"host-unknown">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"host-unknown">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_host_unknown(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_host_unknown(_xmlns,
+                                                                   _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"improper-addressing">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"improper-addressing">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_improper_addressing(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_improper_addressing(_xmlns,
+                                                                          _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"internal-server-error">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_internal_server_error(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_internal_server_error(_xmlns,
+                                                                            _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"invalid-from">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-from">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_invalid_from(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_invalid_from(_xmlns,
+                                                                   _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"invalid-id">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-id">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_invalid_id(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_invalid_id(_xmlns, _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"invalid-namespace">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-namespace">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_invalid_namespace(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_invalid_namespace(_xmlns,
+                                                                        _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"invalid-xml">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-xml">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_invalid_xml(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_invalid_xml(_xmlns,
+                                                                  _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"not-authorized">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_not_authorized(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_not_authorized(_xmlns,
+                                                                     _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"not-well-formed">>,
-                         _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"not-well-formed">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_not_well_formed(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_not_well_formed(_xmlns,
+                                                                      _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"policy-violation">>,
-                         _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"policy-violation">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_policy_violation(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_policy_violation(_xmlns,
+                                                                       _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"remote-connection-failed">>, _attrs, _} =
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"remote-connection-failed">>, _attrs, _} =
                             _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_remote_connection_failed(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_remote_connection_failed(_xmlns,
+                                                                               _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"reset">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"reset">>, _attrs, _} = _el | _els], Text,
+                       Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_reset(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_reset(_xmlns, _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"resource-constraint">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_resource_constraint(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_resource_constraint(_xmlns,
+                                                                          _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"restricted-xml">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"restricted-xml">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_restricted_xml(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_restricted_xml(_xmlns,
+                                                                     _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"see-other-host">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"see-other-host">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_see_other_host(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_see_other_host(_xmlns,
+                                                                     _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel, <<"system-shutdown">>,
-                         _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"system-shutdown">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_system_shutdown(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_system_shutdown(_xmlns,
+                                                                      _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"undefined-condition">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_undefined_condition(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_undefined_condition(_xmlns,
+                                                                          _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"unsupported-encoding">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"unsupported-encoding">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_unsupported_encoding(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_unsupported_encoding(_xmlns,
+                                                                           _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"unsupported-stanza-type">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"unsupported-stanza-type">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_unsupported_stanza_type(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_unsupported_stanza_type(_xmlns,
+                                                                              _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([{xmlel,
-                         <<"unsupported-version">>, _attrs, _} =
-                            _el
+decode_stream_error_els(__TopXMLNS,
+                       [{xmlel, <<"unsupported-version">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-          decode_stream_error_els(_els, Text,
-                                  decode_stream_error_unsupported_version(_el));
-       true -> decode_stream_error_els(_els, Text, Reason)
+          decode_stream_error_els(__TopXMLNS, _els, Text,
+                                  decode_stream_error_unsupported_version(_xmlns,
+                                                                          _el));
+       true ->
+          decode_stream_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_stream_error_els([_ | _els], Text, Reason) ->
-    decode_stream_error_els(_els, Text, Reason).
+decode_stream_error_els(__TopXMLNS, [_ | _els], Text,
+                       Reason) ->
+    decode_stream_error_els(__TopXMLNS, _els, Text, Reason).
 
 encode_stream_error({stream_error, Reason, Text},
                    _xmlns_attrs) ->
@@ -10194,9 +10892,9 @@ encode_stream_error({stream_error, Reason, Text},
                                               <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
      | _acc].
 
-decode_stream_error_unsupported_version({xmlel,
-                                        <<"unsupported-version">>, _attrs,
-                                        _els}) ->
+decode_stream_error_unsupported_version(__TopXMLNS,
+                                       {xmlel, <<"unsupported-version">>,
+                                        _attrs, _els}) ->
     'unsupported-version'.
 
 encode_stream_error_unsupported_version('unsupported-version',
@@ -10205,7 +10903,8 @@ encode_stream_error_unsupported_version('unsupported-version',
     _attrs = _xmlns_attrs,
     {xmlel, <<"unsupported-version">>, _attrs, _els}.
 
-decode_stream_error_unsupported_stanza_type({xmlel,
+decode_stream_error_unsupported_stanza_type(__TopXMLNS,
+                                           {xmlel,
                                             <<"unsupported-stanza-type">>,
                                             _attrs, _els}) ->
     'unsupported-stanza-type'.
@@ -10216,9 +10915,9 @@ encode_stream_error_unsupported_stanza_type('unsupported-stanza-type',
     _attrs = _xmlns_attrs,
     {xmlel, <<"unsupported-stanza-type">>, _attrs, _els}.
 
-decode_stream_error_unsupported_encoding({xmlel,
-                                         <<"unsupported-encoding">>, _attrs,
-                                         _els}) ->
+decode_stream_error_unsupported_encoding(__TopXMLNS,
+                                        {xmlel, <<"unsupported-encoding">>,
+                                         _attrs, _els}) ->
     'unsupported-encoding'.
 
 encode_stream_error_unsupported_encoding('unsupported-encoding',
@@ -10227,9 +10926,9 @@ encode_stream_error_unsupported_encoding('unsupported-encoding',
     _attrs = _xmlns_attrs,
     {xmlel, <<"unsupported-encoding">>, _attrs, _els}.
 
-decode_stream_error_undefined_condition({xmlel,
-                                        <<"undefined-condition">>, _attrs,
-                                        _els}) ->
+decode_stream_error_undefined_condition(__TopXMLNS,
+                                       {xmlel, <<"undefined-condition">>,
+                                        _attrs, _els}) ->
     'undefined-condition'.
 
 encode_stream_error_undefined_condition('undefined-condition',
@@ -10238,8 +10937,9 @@ encode_stream_error_undefined_condition('undefined-condition',
     _attrs = _xmlns_attrs,
     {xmlel, <<"undefined-condition">>, _attrs, _els}.
 
-decode_stream_error_system_shutdown({xmlel,
-                                    <<"system-shutdown">>, _attrs, _els}) ->
+decode_stream_error_system_shutdown(__TopXMLNS,
+                                   {xmlel, <<"system-shutdown">>, _attrs,
+                                    _els}) ->
     'system-shutdown'.
 
 encode_stream_error_system_shutdown('system-shutdown',
@@ -10248,23 +10948,26 @@ encode_stream_error_system_shutdown('system-shutdown',
     _attrs = _xmlns_attrs,
     {xmlel, <<"system-shutdown">>, _attrs, _els}.
 
-decode_stream_error_see_other_host({xmlel,
-                                   <<"see-other-host">>, _attrs, _els}) ->
-    Host = decode_stream_error_see_other_host_els(_els,
-                                                 <<>>),
+decode_stream_error_see_other_host(__TopXMLNS,
+                                  {xmlel, <<"see-other-host">>, _attrs,
+                                   _els}) ->
+    Host =
+       decode_stream_error_see_other_host_els(__TopXMLNS, _els,
+                                              <<>>),
     {'see-other-host', Host}.
 
-decode_stream_error_see_other_host_els([], Host) ->
-    decode_stream_error_see_other_host_cdata(Host);
-decode_stream_error_see_other_host_els([{xmlcdata,
-                                        _data}
-                                       | _els],
+decode_stream_error_see_other_host_els(__TopXMLNS, [],
                                       Host) ->
-    decode_stream_error_see_other_host_els(_els,
+    decode_stream_error_see_other_host_cdata(__TopXMLNS,
+                                            Host);
+decode_stream_error_see_other_host_els(__TopXMLNS,
+                                      [{xmlcdata, _data} | _els], Host) ->
+    decode_stream_error_see_other_host_els(__TopXMLNS, _els,
                                           <<Host/binary, _data/binary>>);
-decode_stream_error_see_other_host_els([_ | _els],
-                                      Host) ->
-    decode_stream_error_see_other_host_els(_els, Host).
+decode_stream_error_see_other_host_els(__TopXMLNS,
+                                      [_ | _els], Host) ->
+    decode_stream_error_see_other_host_els(__TopXMLNS, _els,
+                                          Host).
 
 encode_stream_error_see_other_host({'see-other-host',
                                    Host},
@@ -10274,17 +10977,21 @@ encode_stream_error_see_other_host({'see-other-host',
     _attrs = _xmlns_attrs,
     {xmlel, <<"see-other-host">>, _attrs, _els}.
 
-decode_stream_error_see_other_host_cdata(<<>>) ->
+decode_stream_error_see_other_host_cdata(__TopXMLNS,
+                                        <<>>) ->
     erlang:error({xmpp_codec,
                  {missing_cdata, <<>>, <<"see-other-host">>,
-                  <<"urn:ietf:params:xml:ns:xmpp-streams">>}});
-decode_stream_error_see_other_host_cdata(_val) -> _val.
+                  __TopXMLNS}});
+decode_stream_error_see_other_host_cdata(__TopXMLNS,
+                                        _val) ->
+    _val.
 
 encode_stream_error_see_other_host_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_stream_error_restricted_xml({xmlel,
-                                   <<"restricted-xml">>, _attrs, _els}) ->
+decode_stream_error_restricted_xml(__TopXMLNS,
+                                  {xmlel, <<"restricted-xml">>, _attrs,
+                                   _els}) ->
     'restricted-xml'.
 
 encode_stream_error_restricted_xml('restricted-xml',
@@ -10293,9 +11000,9 @@ encode_stream_error_restricted_xml('restricted-xml',
     _attrs = _xmlns_attrs,
     {xmlel, <<"restricted-xml">>, _attrs, _els}.
 
-decode_stream_error_resource_constraint({xmlel,
-                                        <<"resource-constraint">>, _attrs,
-                                        _els}) ->
+decode_stream_error_resource_constraint(__TopXMLNS,
+                                       {xmlel, <<"resource-constraint">>,
+                                        _attrs, _els}) ->
     'resource-constraint'.
 
 encode_stream_error_resource_constraint('resource-constraint',
@@ -10304,8 +11011,8 @@ encode_stream_error_resource_constraint('resource-constraint',
     _attrs = _xmlns_attrs,
     {xmlel, <<"resource-constraint">>, _attrs, _els}.
 
-decode_stream_error_reset({xmlel, <<"reset">>, _attrs,
-                          _els}) ->
+decode_stream_error_reset(__TopXMLNS,
+                         {xmlel, <<"reset">>, _attrs, _els}) ->
     reset.
 
 encode_stream_error_reset(reset, _xmlns_attrs) ->
@@ -10313,7 +11020,8 @@ encode_stream_error_reset(reset, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"reset">>, _attrs, _els}.
 
-decode_stream_error_remote_connection_failed({xmlel,
+decode_stream_error_remote_connection_failed(__TopXMLNS,
+                                            {xmlel,
                                              <<"remote-connection-failed">>,
                                              _attrs, _els}) ->
     'remote-connection-failed'.
@@ -10324,8 +11032,9 @@ encode_stream_error_remote_connection_failed('remote-connection-failed',
     _attrs = _xmlns_attrs,
     {xmlel, <<"remote-connection-failed">>, _attrs, _els}.
 
-decode_stream_error_policy_violation({xmlel,
-                                     <<"policy-violation">>, _attrs, _els}) ->
+decode_stream_error_policy_violation(__TopXMLNS,
+                                    {xmlel, <<"policy-violation">>, _attrs,
+                                     _els}) ->
     'policy-violation'.
 
 encode_stream_error_policy_violation('policy-violation',
@@ -10334,8 +11043,9 @@ encode_stream_error_policy_violation('policy-violation',
     _attrs = _xmlns_attrs,
     {xmlel, <<"policy-violation">>, _attrs, _els}.
 
-decode_stream_error_not_well_formed({xmlel,
-                                    <<"not-well-formed">>, _attrs, _els}) ->
+decode_stream_error_not_well_formed(__TopXMLNS,
+                                   {xmlel, <<"not-well-formed">>, _attrs,
+                                    _els}) ->
     'not-well-formed'.
 
 encode_stream_error_not_well_formed('not-well-formed',
@@ -10344,8 +11054,9 @@ encode_stream_error_not_well_formed('not-well-formed',
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-well-formed">>, _attrs, _els}.
 
-decode_stream_error_not_authorized({xmlel,
-                                   <<"not-authorized">>, _attrs, _els}) ->
+decode_stream_error_not_authorized(__TopXMLNS,
+                                  {xmlel, <<"not-authorized">>, _attrs,
+                                   _els}) ->
     'not-authorized'.
 
 encode_stream_error_not_authorized('not-authorized',
@@ -10354,8 +11065,8 @@ encode_stream_error_not_authorized('not-authorized',
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-authorized">>, _attrs, _els}.
 
-decode_stream_error_invalid_xml({xmlel,
-                                <<"invalid-xml">>, _attrs, _els}) ->
+decode_stream_error_invalid_xml(__TopXMLNS,
+                               {xmlel, <<"invalid-xml">>, _attrs, _els}) ->
     'invalid-xml'.
 
 encode_stream_error_invalid_xml('invalid-xml',
@@ -10364,8 +11075,8 @@ encode_stream_error_invalid_xml('invalid-xml',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-xml">>, _attrs, _els}.
 
-decode_stream_error_invalid_namespace({xmlel,
-                                      <<"invalid-namespace">>, _attrs,
+decode_stream_error_invalid_namespace(__TopXMLNS,
+                                     {xmlel, <<"invalid-namespace">>, _attrs,
                                       _els}) ->
     'invalid-namespace'.
 
@@ -10375,8 +11086,8 @@ encode_stream_error_invalid_namespace('invalid-namespace',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-namespace">>, _attrs, _els}.
 
-decode_stream_error_invalid_id({xmlel, <<"invalid-id">>,
-                               _attrs, _els}) ->
+decode_stream_error_invalid_id(__TopXMLNS,
+                              {xmlel, <<"invalid-id">>, _attrs, _els}) ->
     'invalid-id'.
 
 encode_stream_error_invalid_id('invalid-id',
@@ -10385,8 +11096,8 @@ encode_stream_error_invalid_id('invalid-id',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-id">>, _attrs, _els}.
 
-decode_stream_error_invalid_from({xmlel,
-                                 <<"invalid-from">>, _attrs, _els}) ->
+decode_stream_error_invalid_from(__TopXMLNS,
+                                {xmlel, <<"invalid-from">>, _attrs, _els}) ->
     'invalid-from'.
 
 encode_stream_error_invalid_from('invalid-from',
@@ -10395,9 +11106,9 @@ encode_stream_error_invalid_from('invalid-from',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-from">>, _attrs, _els}.
 
-decode_stream_error_internal_server_error({xmlel,
-                                          <<"internal-server-error">>, _attrs,
-                                          _els}) ->
+decode_stream_error_internal_server_error(__TopXMLNS,
+                                         {xmlel, <<"internal-server-error">>,
+                                          _attrs, _els}) ->
     'internal-server-error'.
 
 encode_stream_error_internal_server_error('internal-server-error',
@@ -10406,9 +11117,9 @@ encode_stream_error_internal_server_error('internal-server-error',
     _attrs = _xmlns_attrs,
     {xmlel, <<"internal-server-error">>, _attrs, _els}.
 
-decode_stream_error_improper_addressing({xmlel,
-                                        <<"improper-addressing">>, _attrs,
-                                        _els}) ->
+decode_stream_error_improper_addressing(__TopXMLNS,
+                                       {xmlel, <<"improper-addressing">>,
+                                        _attrs, _els}) ->
     'improper-addressing'.
 
 encode_stream_error_improper_addressing('improper-addressing',
@@ -10417,8 +11128,8 @@ encode_stream_error_improper_addressing('improper-addressing',
     _attrs = _xmlns_attrs,
     {xmlel, <<"improper-addressing">>, _attrs, _els}.
 
-decode_stream_error_host_unknown({xmlel,
-                                 <<"host-unknown">>, _attrs, _els}) ->
+decode_stream_error_host_unknown(__TopXMLNS,
+                                {xmlel, <<"host-unknown">>, _attrs, _els}) ->
     'host-unknown'.
 
 encode_stream_error_host_unknown('host-unknown',
@@ -10427,8 +11138,8 @@ encode_stream_error_host_unknown('host-unknown',
     _attrs = _xmlns_attrs,
     {xmlel, <<"host-unknown">>, _attrs, _els}.
 
-decode_stream_error_host_gone({xmlel, <<"host-gone">>,
-                              _attrs, _els}) ->
+decode_stream_error_host_gone(__TopXMLNS,
+                             {xmlel, <<"host-gone">>, _attrs, _els}) ->
     'host-gone'.
 
 encode_stream_error_host_gone('host-gone',
@@ -10437,8 +11148,8 @@ encode_stream_error_host_gone('host-gone',
     _attrs = _xmlns_attrs,
     {xmlel, <<"host-gone">>, _attrs, _els}.
 
-decode_stream_error_connection_timeout({xmlel,
-                                       <<"connection-timeout">>, _attrs,
+decode_stream_error_connection_timeout(__TopXMLNS,
+                                      {xmlel, <<"connection-timeout">>, _attrs,
                                        _els}) ->
     'connection-timeout'.
 
@@ -10448,8 +11159,8 @@ encode_stream_error_connection_timeout('connection-timeout',
     _attrs = _xmlns_attrs,
     {xmlel, <<"connection-timeout">>, _attrs, _els}.
 
-decode_stream_error_conflict({xmlel, <<"conflict">>,
-                             _attrs, _els}) ->
+decode_stream_error_conflict(__TopXMLNS,
+                            {xmlel, <<"conflict">>, _attrs, _els}) ->
     conflict.
 
 encode_stream_error_conflict(conflict, _xmlns_attrs) ->
@@ -10457,9 +11168,9 @@ encode_stream_error_conflict(conflict, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"conflict">>, _attrs, _els}.
 
-decode_stream_error_bad_namespace_prefix({xmlel,
-                                         <<"bad-namespace-prefix">>, _attrs,
-                                         _els}) ->
+decode_stream_error_bad_namespace_prefix(__TopXMLNS,
+                                        {xmlel, <<"bad-namespace-prefix">>,
+                                         _attrs, _els}) ->
     'bad-namespace-prefix'.
 
 encode_stream_error_bad_namespace_prefix('bad-namespace-prefix',
@@ -10468,8 +11179,8 @@ encode_stream_error_bad_namespace_prefix('bad-namespace-prefix',
     _attrs = _xmlns_attrs,
     {xmlel, <<"bad-namespace-prefix">>, _attrs, _els}.
 
-decode_stream_error_bad_format({xmlel, <<"bad-format">>,
-                               _attrs, _els}) ->
+decode_stream_error_bad_format(__TopXMLNS,
+                              {xmlel, <<"bad-format">>, _attrs, _els}) ->
     'bad-format'.
 
 encode_stream_error_bad_format('bad-format',
@@ -10478,30 +11189,35 @@ encode_stream_error_bad_format('bad-format',
     _attrs = _xmlns_attrs,
     {xmlel, <<"bad-format">>, _attrs, _els}.
 
-decode_stream_error_text({xmlel, <<"text">>, _attrs,
-                         _els}) ->
-    Data = decode_stream_error_text_els(_els, <<>>),
-    Lang = decode_stream_error_text_attrs(_attrs,
-                                         undefined),
+decode_stream_error_text(__TopXMLNS,
+                        {xmlel, <<"text">>, _attrs, _els}) ->
+    Data = decode_stream_error_text_els(__TopXMLNS, _els,
+                                       <<>>),
+    Lang = decode_stream_error_text_attrs(__TopXMLNS,
+                                         _attrs, undefined),
     {text, Lang, Data}.
 
-decode_stream_error_text_els([], Data) ->
-    decode_stream_error_text_cdata(Data);
-decode_stream_error_text_els([{xmlcdata, _data} | _els],
-                            Data) ->
-    decode_stream_error_text_els(_els,
+decode_stream_error_text_els(__TopXMLNS, [], Data) ->
+    decode_stream_error_text_cdata(__TopXMLNS, Data);
+decode_stream_error_text_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Data) ->
+    decode_stream_error_text_els(__TopXMLNS, _els,
                                 <<Data/binary, _data/binary>>);
-decode_stream_error_text_els([_ | _els], Data) ->
-    decode_stream_error_text_els(_els, Data).
-
-decode_stream_error_text_attrs([{<<"xml:lang">>, _val}
-                               | _attrs],
-                              _Lang) ->
-    decode_stream_error_text_attrs(_attrs, _val);
-decode_stream_error_text_attrs([_ | _attrs], Lang) ->
-    decode_stream_error_text_attrs(_attrs, Lang);
-decode_stream_error_text_attrs([], Lang) ->
-    'decode_stream_error_text_attr_xml:lang'(Lang).
+decode_stream_error_text_els(__TopXMLNS, [_ | _els],
+                            Data) ->
+    decode_stream_error_text_els(__TopXMLNS, _els, Data).
+
+decode_stream_error_text_attrs(__TopXMLNS,
+                              [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_stream_error_text_attrs(__TopXMLNS, _attrs,
+                                  _val);
+decode_stream_error_text_attrs(__TopXMLNS, [_ | _attrs],
+                              Lang) ->
+    decode_stream_error_text_attrs(__TopXMLNS, _attrs,
+                                  Lang);
+decode_stream_error_text_attrs(__TopXMLNS, [], Lang) ->
+    'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
+                                            Lang).
 
 encode_stream_error_text({text, Lang, Data},
                         _xmlns_attrs) ->
@@ -10510,9 +11226,12 @@ encode_stream_error_text({text, Lang, Data},
                                                      _xmlns_attrs),
     {xmlel, <<"text">>, _attrs, _els}.
 
-'decode_stream_error_text_attr_xml:lang'(undefined) ->
+'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
+                                        undefined) ->
     undefined;
-'decode_stream_error_text_attr_xml:lang'(_val) -> _val.
+'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
+                                        _val) ->
+    _val.
 
 'encode_stream_error_text_attr_xml:lang'(undefined,
                                         _acc) ->
@@ -10520,37 +11239,42 @@ encode_stream_error_text({text, Lang, Data},
 'encode_stream_error_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_stream_error_text_cdata(<<>>) -> undefined;
-decode_stream_error_text_cdata(_val) -> _val.
+decode_stream_error_text_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_stream_error_text_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_stream_error_text_cdata(undefined, _acc) -> _acc;
 encode_stream_error_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_time({xmlel, <<"time">>, _attrs, _els}) ->
-    {Utc, Tzo} = decode_time_els(_els, undefined,
-                                undefined),
+decode_time(__TopXMLNS,
+           {xmlel, <<"time">>, _attrs, _els}) ->
+    {Utc, Tzo} = decode_time_els(__TopXMLNS, _els,
+                                undefined, undefined),
     {time, Tzo, Utc}.
 
-decode_time_els([], Utc, Tzo) -> {Utc, Tzo};
-decode_time_els([{xmlel, <<"tzo">>, _attrs, _} = _el
-                | _els],
-               Utc, Tzo) ->
+decode_time_els(__TopXMLNS, [], Utc, Tzo) -> {Utc, Tzo};
+decode_time_els(__TopXMLNS,
+               [{xmlel, <<"tzo">>, _attrs, _} = _el | _els], Utc,
+               Tzo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"urn:xmpp:time">> ->
-          decode_time_els(_els, Utc, decode_time_tzo(_el));
-       true -> decode_time_els(_els, Utc, Tzo)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_time_els(__TopXMLNS, _els, Utc,
+                          decode_time_tzo(__TopXMLNS, _el));
+       true -> decode_time_els(__TopXMLNS, _els, Utc, Tzo)
     end;
-decode_time_els([{xmlel, <<"utc">>, _attrs, _} = _el
-                | _els],
-               Utc, Tzo) ->
+decode_time_els(__TopXMLNS,
+               [{xmlel, <<"utc">>, _attrs, _} = _el | _els], Utc,
+               Tzo) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"urn:xmpp:time">> ->
-          decode_time_els(_els, decode_time_utc(_el), Tzo);
-       true -> decode_time_els(_els, Utc, Tzo)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_time_els(__TopXMLNS, _els,
+                          decode_time_utc(__TopXMLNS, _el), Tzo);
+       true -> decode_time_els(__TopXMLNS, _els, Utc, Tzo)
     end;
-decode_time_els([_ | _els], Utc, Tzo) ->
-    decode_time_els(_els, Utc, Tzo).
+decode_time_els(__TopXMLNS, [_ | _els], Utc, Tzo) ->
+    decode_time_els(__TopXMLNS, _els, Utc, Tzo).
 
 encode_time({time, Tzo, Utc}, _xmlns_attrs) ->
     _els = 'encode_time_$tzo'(Tzo,
@@ -10566,30 +11290,31 @@ encode_time({time, Tzo, Utc}, _xmlns_attrs) ->
 'encode_time_$tzo'(Tzo, _acc) ->
     [encode_time_tzo(Tzo, []) | _acc].
 
-decode_time_tzo({xmlel, <<"tzo">>, _attrs, _els}) ->
-    Cdata = decode_time_tzo_els(_els, <<>>), Cdata.
+decode_time_tzo(__TopXMLNS,
+               {xmlel, <<"tzo">>, _attrs, _els}) ->
+    Cdata = decode_time_tzo_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_time_tzo_els([], Cdata) ->
-    decode_time_tzo_cdata(Cdata);
-decode_time_tzo_els([{xmlcdata, _data} | _els],
-                   Cdata) ->
-    decode_time_tzo_els(_els,
+decode_time_tzo_els(__TopXMLNS, [], Cdata) ->
+    decode_time_tzo_cdata(__TopXMLNS, Cdata);
+decode_time_tzo_els(__TopXMLNS,
+                   [{xmlcdata, _data} | _els], Cdata) ->
+    decode_time_tzo_els(__TopXMLNS, _els,
                        <<Cdata/binary, _data/binary>>);
-decode_time_tzo_els([_ | _els], Cdata) ->
-    decode_time_tzo_els(_els, Cdata).
+decode_time_tzo_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_time_tzo_els(__TopXMLNS, _els, Cdata).
 
 encode_time_tzo(Cdata, _xmlns_attrs) ->
     _els = encode_time_tzo_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"tzo">>, _attrs, _els}.
 
-decode_time_tzo_cdata(<<>>) -> undefined;
-decode_time_tzo_cdata(_val) ->
+decode_time_tzo_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_time_tzo_cdata(__TopXMLNS, _val) ->
     case catch dec_tzo(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"tzo">>,
-                        <<"urn:xmpp:time">>}});
+                       {bad_cdata_value, <<>>, <<"tzo">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -10597,30 +11322,31 @@ encode_time_tzo_cdata(undefined, _acc) -> _acc;
 encode_time_tzo_cdata(_val, _acc) ->
     [{xmlcdata, enc_tzo(_val)} | _acc].
 
-decode_time_utc({xmlel, <<"utc">>, _attrs, _els}) ->
-    Cdata = decode_time_utc_els(_els, <<>>), Cdata.
+decode_time_utc(__TopXMLNS,
+               {xmlel, <<"utc">>, _attrs, _els}) ->
+    Cdata = decode_time_utc_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_time_utc_els([], Cdata) ->
-    decode_time_utc_cdata(Cdata);
-decode_time_utc_els([{xmlcdata, _data} | _els],
-                   Cdata) ->
-    decode_time_utc_els(_els,
+decode_time_utc_els(__TopXMLNS, [], Cdata) ->
+    decode_time_utc_cdata(__TopXMLNS, Cdata);
+decode_time_utc_els(__TopXMLNS,
+                   [{xmlcdata, _data} | _els], Cdata) ->
+    decode_time_utc_els(__TopXMLNS, _els,
                        <<Cdata/binary, _data/binary>>);
-decode_time_utc_els([_ | _els], Cdata) ->
-    decode_time_utc_els(_els, Cdata).
+decode_time_utc_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_time_utc_els(__TopXMLNS, _els, Cdata).
 
 encode_time_utc(Cdata, _xmlns_attrs) ->
     _els = encode_time_utc_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"utc">>, _attrs, _els}.
 
-decode_time_utc_cdata(<<>>) -> undefined;
-decode_time_utc_cdata(_val) ->
+decode_time_utc_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_time_utc_cdata(__TopXMLNS, _val) ->
     case catch dec_utc(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"utc">>,
-                        <<"urn:xmpp:time">>}});
+                       {bad_cdata_value, <<>>, <<"utc">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -10628,7 +11354,8 @@ encode_time_utc_cdata(undefined, _acc) -> _acc;
 encode_time_utc_cdata(_val, _acc) ->
     [{xmlcdata, enc_utc(_val)} | _acc].
 
-decode_ping({xmlel, <<"ping">>, _attrs, _els}) ->
+decode_ping(__TopXMLNS,
+           {xmlel, <<"ping">>, _attrs, _els}) ->
     {ping}.
 
 encode_ping({ping}, _xmlns_attrs) ->
@@ -10636,7 +11363,8 @@ encode_ping({ping}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ping">>, _attrs, _els}.
 
-decode_session({xmlel, <<"session">>, _attrs, _els}) ->
+decode_session(__TopXMLNS,
+              {xmlel, <<"session">>, _attrs, _els}) ->
     {session}.
 
 encode_session({session}, _xmlns_attrs) ->
@@ -10644,414 +11372,405 @@ encode_session({session}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"session">>, _attrs, _els}.
 
-decode_register({xmlel, <<"query">>, _attrs, _els}) ->
+decode_register(__TopXMLNS,
+               {xmlel, <<"query">>, _attrs, _els}) ->
     {Zip, Misc, Address, Instructions, Text, Last, First,
      Password, Registered, Date, Phone, State, Name,
      Username, Remove, Key, City, Nick, Url, Email} =
-       decode_register_els(_els, undefined, undefined,
+       decode_register_els(__TopXMLNS, _els, undefined,
                            undefined, undefined, undefined, undefined,
-                           undefined, undefined, false, undefined, undefined,
                            undefined, undefined, undefined, false, undefined,
-                           undefined, undefined, undefined, undefined),
+                           undefined, undefined, undefined, undefined, false,
+                           undefined, undefined, undefined, undefined,
+                           undefined),
     {register, Registered, Remove, Instructions, Username,
      Nick, Password, Name, First, Last, Email, Address, City,
      State, Zip, Phone, Url, Date, Misc, Text, Key}.
 
-decode_register_els([], Zip, Misc, Address,
+decode_register_els(__TopXMLNS, [], Zip, Misc, Address,
                    Instructions, Text, Last, First, Password, Registered,
                    Date, Phone, State, Name, Username, Remove, Key, City,
                    Nick, Url, Email) ->
     {Zip, Misc, Address, Instructions, Text, Last, First,
      Password, Registered, Date, Phone, State, Name,
      Username, Remove, Key, City, Nick, Url, Email};
-decode_register_els([{xmlel, <<"registered">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"registered">>, _attrs, _} = _el | _els],
                    Zip, Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              decode_register_registered(_el), Date, Phone,
-                              State, Name, Username, Remove, Key, City, Nick,
-                              Url, Email);
-       true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
-    end;
-decode_register_els([{xmlel, <<"remove">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              decode_register_remove(_el), Key, City, Nick,
-                              Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password,
+                              decode_register_registered(__TopXMLNS, _el),
+                              Date, Phone, State, Name, Username, Remove, Key,
+                              City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"instructions">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"remove">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              decode_register_instructions(_el), Text, Last,
-                              First, Password, Registered, Date, Phone, State,
-                              Name, Username, Remove, Key, City, Nick, Url,
-                              Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username,
+                              decode_register_remove(__TopXMLNS, _el), Key,
+                              City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"username">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"instructions">>, _attrs, _} = _el | _els],
                    Zip, Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name,
-                              decode_register_username(_el), Remove, Key, City,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address,
+                              decode_register_instructions(__TopXMLNS, _el),
+                              Text, Last, First, Password, Registered, Date,
+                              Phone, State, Name, Username, Remove, Key, City,
                               Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"nick">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"username">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, decode_register_nick(_el),
-                              Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              decode_register_username(__TopXMLNS, _el),
+                              Remove, Key, City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"password">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"nick">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First,
-                              decode_register_password(_el), Registered, Date,
-                              Phone, State, Name, Username, Remove, Key, City,
-                              Nick, Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City,
+                              decode_register_nick(__TopXMLNS, _el), Url,
+                              Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"name">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"password">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State,
-                              decode_register_name(_el), Username, Remove, Key,
-                              City, Nick, Url, Email);
-       true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              decode_register_password(__TopXMLNS, _el),
                               Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+                              Remove, Key, City, Nick, Url, Email);
+       true ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"first">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"name">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last,
-                              decode_register_first(_el), Password, Registered,
-                              Date, Phone, State, Name, Username, Remove, Key,
-                              City, Nick, Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State,
+                              decode_register_name(__TopXMLNS, _el), Username,
+                              Remove, Key, City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"last">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"first">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, decode_register_last(_el),
-                              First, Password, Registered, Date, Phone, State,
-                              Name, Username, Remove, Key, City, Nick, Url,
-                              Email);
-       true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last,
+                              decode_register_first(__TopXMLNS, _el), Password,
                               Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+                              Remove, Key, City, Nick, Url, Email);
+       true ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"email">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"last">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url,
-                              decode_register_email(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text,
+                              decode_register_last(__TopXMLNS, _el), First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"address">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"email">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc,
-                              decode_register_address(_el), Instructions, Text,
-                              Last, First, Password, Registered, Date, Phone,
-                              State, Name, Username, Remove, Key, City, Nick,
-                              Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url,
+                              decode_register_email(__TopXMLNS, _el));
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"city">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"address">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              decode_register_address(__TopXMLNS, _el),
                               Instructions, Text, Last, First, Password,
                               Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, decode_register_city(_el), Nick,
-                              Url, Email);
+                              Remove, Key, City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"state">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"city">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone,
-                              decode_register_state(_el), Name, Username,
-                              Remove, Key, City, Nick, Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key,
+                              decode_register_city(__TopXMLNS, _el), Nick, Url,
+                              Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"zip">>, _attrs, _} = _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"state">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, decode_register_zip(_el),
-                              Misc, Address, Instructions, Text, Last, First,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone,
+                              decode_register_state(__TopXMLNS, _el), Name,
+                              Username, Remove, Key, City, Nick, Url, Email);
+       true ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
+    end;
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"zip">>, _attrs, _} = _el | _els], Zip, Misc,
+                   Address, Instructions, Text, Last, First, Password,
+                   Registered, Date, Phone, State, Name, Username, Remove,
+                   Key, City, Nick, Url, Email) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els,
+                              decode_register_zip(__TopXMLNS, _el), Misc,
+                              Address, Instructions, Text, Last, First,
                               Password, Registered, Date, Phone, State, Name,
                               Username, Remove, Key, City, Nick, Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"phone">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"phone">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, decode_register_phone(_el),
-                              State, Name, Username, Remove, Key, City, Nick,
-                              Url, Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date,
+                              decode_register_phone(__TopXMLNS, _el), State,
+                              Name, Username, Remove, Key, City, Nick, Url,
+                              Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"url">>, _attrs, _} = _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email) ->
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"url">>, _attrs, _} = _el | _els], Zip, Misc,
+                   Address, Instructions, Text, Last, First, Password,
+                   Registered, Date, Phone, State, Name, Username, Remove,
+                   Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick,
-                              decode_register_url(_el), Email);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick,
+                              decode_register_url(__TopXMLNS, _el), Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"date">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"date">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, decode_register_date(_el), Phone,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered,
+                              decode_register_date(__TopXMLNS, _el), Phone,
                               State, Name, Username, Remove, Key, City, Nick,
                               Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"misc">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"misc">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip,
-                              decode_register_misc(_el), Address, Instructions,
-                              Text, Last, First, Password, Registered, Date,
-                              Phone, State, Name, Username, Remove, Key, City,
-                              Nick, Url, Email);
-       true ->
-          decode_register_els(_els, Zip, Misc, Address,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip,
+                              decode_register_misc(__TopXMLNS, _el), Address,
                               Instructions, Text, Last, First, Password,
                               Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+                              Remove, Key, City, Nick, Url, Email);
+       true ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"text">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"text">>, _attrs, _} = _el | _els], Zip,
+                   Misc, Address, Instructions, Text, Last, First,
                    Password, Registered, Date, Phone, State, Name,
                    Username, Remove, Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, decode_register_text(_el), Last,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions,
+                              decode_register_text(__TopXMLNS, _el), Last,
                               First, Password, Registered, Date, Phone, State,
                               Name, Username, Remove, Key, City, Nick, Url,
                               Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([{xmlel, <<"key">>, _attrs, _} = _el
-                    | _els],
-                   Zip, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email) ->
+decode_register_els(__TopXMLNS,
+                   [{xmlel, <<"key">>, _attrs, _} = _el | _els], Zip, Misc,
+                   Address, Instructions, Text, Last, First, Password,
+                   Registered, Date, Phone, State, Name, Username, Remove,
+                   Key, City, Nick, Url, Email) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:register">> ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, decode_register_key(_el), City, Nick,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove,
+                              decode_register_key(__TopXMLNS, _el), City, Nick,
                               Url, Email);
        true ->
-          decode_register_els(_els, Zip, Misc, Address,
-                              Instructions, Text, Last, First, Password,
-                              Registered, Date, Phone, State, Name, Username,
-                              Remove, Key, City, Nick, Url, Email)
+          decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                              Address, Instructions, Text, Last, First,
+                              Password, Registered, Date, Phone, State, Name,
+                              Username, Remove, Key, City, Nick, Url, Email)
     end;
-decode_register_els([_ | _els], Zip, Misc, Address,
-                   Instructions, Text, Last, First, Password, Registered,
-                   Date, Phone, State, Name, Username, Remove, Key, City,
-                   Nick, Url, Email) ->
-    decode_register_els(_els, Zip, Misc, Address,
-                       Instructions, Text, Last, First, Password, Registered,
-                       Date, Phone, State, Name, Username, Remove, Key, City,
-                       Nick, Url, Email).
+decode_register_els(__TopXMLNS, [_ | _els], Zip, Misc,
+                   Address, Instructions, Text, Last, First, Password,
+                   Registered, Date, Phone, State, Name, Username, Remove,
+                   Key, City, Nick, Url, Email) ->
+    decode_register_els(__TopXMLNS, _els, Zip, Misc,
+                       Address, Instructions, Text, Last, First, Password,
+                       Registered, Date, Phone, State, Name, Username, Remove,
+                       Key, City, Nick, Url, Email).
 
 encode_register({register, Registered, Remove,
                 Instructions, Username, Nick, Password, Name, First,
@@ -11163,458 +11882,518 @@ encode_register({register, Registered, Remove,
 'encode_register_$email'(Email, _acc) ->
     [encode_register_email(Email, []) | _acc].
 
-decode_register_key({xmlel, <<"key">>, _attrs, _els}) ->
-    Cdata = decode_register_key_els(_els, <<>>), Cdata.
+decode_register_key(__TopXMLNS,
+                   {xmlel, <<"key">>, _attrs, _els}) ->
+    Cdata = decode_register_key_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_register_key_els([], Cdata) ->
-    decode_register_key_cdata(Cdata);
-decode_register_key_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_register_key_els(_els,
+decode_register_key_els(__TopXMLNS, [], Cdata) ->
+    decode_register_key_cdata(__TopXMLNS, Cdata);
+decode_register_key_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_key_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_register_key_els([_ | _els], Cdata) ->
-    decode_register_key_els(_els, Cdata).
+decode_register_key_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_register_key_els(__TopXMLNS, _els, Cdata).
 
 encode_register_key(Cdata, _xmlns_attrs) ->
     _els = encode_register_key_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"key">>, _attrs, _els}.
 
-decode_register_key_cdata(<<>>) -> none;
-decode_register_key_cdata(_val) -> _val.
+decode_register_key_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_key_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_key_cdata(none, _acc) -> _acc;
 encode_register_key_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_text({xmlel, <<"text">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_text_els(_els, <<>>), Cdata.
+decode_register_text(__TopXMLNS,
+                    {xmlel, <<"text">>, _attrs, _els}) ->
+    Cdata = decode_register_text_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_text_els([], Cdata) ->
-    decode_register_text_cdata(Cdata);
-decode_register_text_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_text_els(_els,
+decode_register_text_els(__TopXMLNS, [], Cdata) ->
+    decode_register_text_cdata(__TopXMLNS, Cdata);
+decode_register_text_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_text_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_text_els([_ | _els], Cdata) ->
-    decode_register_text_els(_els, Cdata).
+decode_register_text_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_text_els(__TopXMLNS, _els, Cdata).
 
 encode_register_text(Cdata, _xmlns_attrs) ->
     _els = encode_register_text_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"text">>, _attrs, _els}.
 
-decode_register_text_cdata(<<>>) -> none;
-decode_register_text_cdata(_val) -> _val.
+decode_register_text_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_text_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_text_cdata(none, _acc) -> _acc;
 encode_register_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_misc({xmlel, <<"misc">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_misc_els(_els, <<>>), Cdata.
+decode_register_misc(__TopXMLNS,
+                    {xmlel, <<"misc">>, _attrs, _els}) ->
+    Cdata = decode_register_misc_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_misc_els([], Cdata) ->
-    decode_register_misc_cdata(Cdata);
-decode_register_misc_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_misc_els(_els,
+decode_register_misc_els(__TopXMLNS, [], Cdata) ->
+    decode_register_misc_cdata(__TopXMLNS, Cdata);
+decode_register_misc_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_misc_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_misc_els([_ | _els], Cdata) ->
-    decode_register_misc_els(_els, Cdata).
+decode_register_misc_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_misc_els(__TopXMLNS, _els, Cdata).
 
 encode_register_misc(Cdata, _xmlns_attrs) ->
     _els = encode_register_misc_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"misc">>, _attrs, _els}.
 
-decode_register_misc_cdata(<<>>) -> none;
-decode_register_misc_cdata(_val) -> _val.
+decode_register_misc_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_misc_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_misc_cdata(none, _acc) -> _acc;
 encode_register_misc_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_date({xmlel, <<"date">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_date_els(_els, <<>>), Cdata.
+decode_register_date(__TopXMLNS,
+                    {xmlel, <<"date">>, _attrs, _els}) ->
+    Cdata = decode_register_date_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_date_els([], Cdata) ->
-    decode_register_date_cdata(Cdata);
-decode_register_date_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_date_els(_els,
+decode_register_date_els(__TopXMLNS, [], Cdata) ->
+    decode_register_date_cdata(__TopXMLNS, Cdata);
+decode_register_date_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_date_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_date_els([_ | _els], Cdata) ->
-    decode_register_date_els(_els, Cdata).
+decode_register_date_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_date_els(__TopXMLNS, _els, Cdata).
 
 encode_register_date(Cdata, _xmlns_attrs) ->
     _els = encode_register_date_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"date">>, _attrs, _els}.
 
-decode_register_date_cdata(<<>>) -> none;
-decode_register_date_cdata(_val) -> _val.
+decode_register_date_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_date_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_date_cdata(none, _acc) -> _acc;
 encode_register_date_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_url({xmlel, <<"url">>, _attrs, _els}) ->
-    Cdata = decode_register_url_els(_els, <<>>), Cdata.
+decode_register_url(__TopXMLNS,
+                   {xmlel, <<"url">>, _attrs, _els}) ->
+    Cdata = decode_register_url_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_register_url_els([], Cdata) ->
-    decode_register_url_cdata(Cdata);
-decode_register_url_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_register_url_els(_els,
+decode_register_url_els(__TopXMLNS, [], Cdata) ->
+    decode_register_url_cdata(__TopXMLNS, Cdata);
+decode_register_url_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_url_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_register_url_els([_ | _els], Cdata) ->
-    decode_register_url_els(_els, Cdata).
+decode_register_url_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_register_url_els(__TopXMLNS, _els, Cdata).
 
 encode_register_url(Cdata, _xmlns_attrs) ->
     _els = encode_register_url_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"url">>, _attrs, _els}.
 
-decode_register_url_cdata(<<>>) -> none;
-decode_register_url_cdata(_val) -> _val.
+decode_register_url_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_url_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_url_cdata(none, _acc) -> _acc;
 encode_register_url_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_phone({xmlel, <<"phone">>, _attrs,
-                      _els}) ->
-    Cdata = decode_register_phone_els(_els, <<>>), Cdata.
+decode_register_phone(__TopXMLNS,
+                     {xmlel, <<"phone">>, _attrs, _els}) ->
+    Cdata = decode_register_phone_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_register_phone_els([], Cdata) ->
-    decode_register_phone_cdata(Cdata);
-decode_register_phone_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_register_phone_els(_els,
+decode_register_phone_els(__TopXMLNS, [], Cdata) ->
+    decode_register_phone_cdata(__TopXMLNS, Cdata);
+decode_register_phone_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_phone_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_register_phone_els([_ | _els], Cdata) ->
-    decode_register_phone_els(_els, Cdata).
+decode_register_phone_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_register_phone_els(__TopXMLNS, _els, Cdata).
 
 encode_register_phone(Cdata, _xmlns_attrs) ->
     _els = encode_register_phone_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"phone">>, _attrs, _els}.
 
-decode_register_phone_cdata(<<>>) -> none;
-decode_register_phone_cdata(_val) -> _val.
+decode_register_phone_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_phone_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_phone_cdata(none, _acc) -> _acc;
 encode_register_phone_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_zip({xmlel, <<"zip">>, _attrs, _els}) ->
-    Cdata = decode_register_zip_els(_els, <<>>), Cdata.
+decode_register_zip(__TopXMLNS,
+                   {xmlel, <<"zip">>, _attrs, _els}) ->
+    Cdata = decode_register_zip_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_register_zip_els([], Cdata) ->
-    decode_register_zip_cdata(Cdata);
-decode_register_zip_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_register_zip_els(_els,
+decode_register_zip_els(__TopXMLNS, [], Cdata) ->
+    decode_register_zip_cdata(__TopXMLNS, Cdata);
+decode_register_zip_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_zip_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_register_zip_els([_ | _els], Cdata) ->
-    decode_register_zip_els(_els, Cdata).
+decode_register_zip_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_register_zip_els(__TopXMLNS, _els, Cdata).
 
 encode_register_zip(Cdata, _xmlns_attrs) ->
     _els = encode_register_zip_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"zip">>, _attrs, _els}.
 
-decode_register_zip_cdata(<<>>) -> none;
-decode_register_zip_cdata(_val) -> _val.
+decode_register_zip_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_zip_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_zip_cdata(none, _acc) -> _acc;
 encode_register_zip_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_state({xmlel, <<"state">>, _attrs,
-                      _els}) ->
-    Cdata = decode_register_state_els(_els, <<>>), Cdata.
+decode_register_state(__TopXMLNS,
+                     {xmlel, <<"state">>, _attrs, _els}) ->
+    Cdata = decode_register_state_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_register_state_els([], Cdata) ->
-    decode_register_state_cdata(Cdata);
-decode_register_state_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_register_state_els(_els,
+decode_register_state_els(__TopXMLNS, [], Cdata) ->
+    decode_register_state_cdata(__TopXMLNS, Cdata);
+decode_register_state_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_state_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_register_state_els([_ | _els], Cdata) ->
-    decode_register_state_els(_els, Cdata).
+decode_register_state_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_register_state_els(__TopXMLNS, _els, Cdata).
 
 encode_register_state(Cdata, _xmlns_attrs) ->
     _els = encode_register_state_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"state">>, _attrs, _els}.
 
-decode_register_state_cdata(<<>>) -> none;
-decode_register_state_cdata(_val) -> _val.
+decode_register_state_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_state_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_state_cdata(none, _acc) -> _acc;
 encode_register_state_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_city({xmlel, <<"city">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_city_els(_els, <<>>), Cdata.
+decode_register_city(__TopXMLNS,
+                    {xmlel, <<"city">>, _attrs, _els}) ->
+    Cdata = decode_register_city_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_city_els([], Cdata) ->
-    decode_register_city_cdata(Cdata);
-decode_register_city_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_city_els(_els,
+decode_register_city_els(__TopXMLNS, [], Cdata) ->
+    decode_register_city_cdata(__TopXMLNS, Cdata);
+decode_register_city_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_city_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_city_els([_ | _els], Cdata) ->
-    decode_register_city_els(_els, Cdata).
+decode_register_city_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_city_els(__TopXMLNS, _els, Cdata).
 
 encode_register_city(Cdata, _xmlns_attrs) ->
     _els = encode_register_city_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"city">>, _attrs, _els}.
 
-decode_register_city_cdata(<<>>) -> none;
-decode_register_city_cdata(_val) -> _val.
+decode_register_city_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_city_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_city_cdata(none, _acc) -> _acc;
 encode_register_city_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_address({xmlel, <<"address">>, _attrs,
-                        _els}) ->
-    Cdata = decode_register_address_els(_els, <<>>), Cdata.
+decode_register_address(__TopXMLNS,
+                       {xmlel, <<"address">>, _attrs, _els}) ->
+    Cdata = decode_register_address_els(__TopXMLNS, _els,
+                                       <<>>),
+    Cdata.
 
-decode_register_address_els([], Cdata) ->
-    decode_register_address_cdata(Cdata);
-decode_register_address_els([{xmlcdata, _data} | _els],
-                           Cdata) ->
-    decode_register_address_els(_els,
+decode_register_address_els(__TopXMLNS, [], Cdata) ->
+    decode_register_address_cdata(__TopXMLNS, Cdata);
+decode_register_address_els(__TopXMLNS,
+                           [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_address_els(__TopXMLNS, _els,
                                <<Cdata/binary, _data/binary>>);
-decode_register_address_els([_ | _els], Cdata) ->
-    decode_register_address_els(_els, Cdata).
+decode_register_address_els(__TopXMLNS, [_ | _els],
+                           Cdata) ->
+    decode_register_address_els(__TopXMLNS, _els, Cdata).
 
 encode_register_address(Cdata, _xmlns_attrs) ->
     _els = encode_register_address_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"address">>, _attrs, _els}.
 
-decode_register_address_cdata(<<>>) -> none;
-decode_register_address_cdata(_val) -> _val.
+decode_register_address_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_address_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_address_cdata(none, _acc) -> _acc;
 encode_register_address_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_email({xmlel, <<"email">>, _attrs,
-                      _els}) ->
-    Cdata = decode_register_email_els(_els, <<>>), Cdata.
+decode_register_email(__TopXMLNS,
+                     {xmlel, <<"email">>, _attrs, _els}) ->
+    Cdata = decode_register_email_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_register_email_els([], Cdata) ->
-    decode_register_email_cdata(Cdata);
-decode_register_email_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_register_email_els(_els,
+decode_register_email_els(__TopXMLNS, [], Cdata) ->
+    decode_register_email_cdata(__TopXMLNS, Cdata);
+decode_register_email_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_email_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_register_email_els([_ | _els], Cdata) ->
-    decode_register_email_els(_els, Cdata).
+decode_register_email_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_register_email_els(__TopXMLNS, _els, Cdata).
 
 encode_register_email(Cdata, _xmlns_attrs) ->
     _els = encode_register_email_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"email">>, _attrs, _els}.
 
-decode_register_email_cdata(<<>>) -> none;
-decode_register_email_cdata(_val) -> _val.
+decode_register_email_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_email_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_email_cdata(none, _acc) -> _acc;
 encode_register_email_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_last({xmlel, <<"last">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_last_els(_els, <<>>), Cdata.
+decode_register_last(__TopXMLNS,
+                    {xmlel, <<"last">>, _attrs, _els}) ->
+    Cdata = decode_register_last_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_last_els([], Cdata) ->
-    decode_register_last_cdata(Cdata);
-decode_register_last_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_last_els(_els,
+decode_register_last_els(__TopXMLNS, [], Cdata) ->
+    decode_register_last_cdata(__TopXMLNS, Cdata);
+decode_register_last_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_last_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_last_els([_ | _els], Cdata) ->
-    decode_register_last_els(_els, Cdata).
+decode_register_last_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_last_els(__TopXMLNS, _els, Cdata).
 
 encode_register_last(Cdata, _xmlns_attrs) ->
     _els = encode_register_last_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"last">>, _attrs, _els}.
 
-decode_register_last_cdata(<<>>) -> none;
-decode_register_last_cdata(_val) -> _val.
+decode_register_last_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_last_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_last_cdata(none, _acc) -> _acc;
 encode_register_last_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_first({xmlel, <<"first">>, _attrs,
-                      _els}) ->
-    Cdata = decode_register_first_els(_els, <<>>), Cdata.
+decode_register_first(__TopXMLNS,
+                     {xmlel, <<"first">>, _attrs, _els}) ->
+    Cdata = decode_register_first_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_register_first_els([], Cdata) ->
-    decode_register_first_cdata(Cdata);
-decode_register_first_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_register_first_els(_els,
+decode_register_first_els(__TopXMLNS, [], Cdata) ->
+    decode_register_first_cdata(__TopXMLNS, Cdata);
+decode_register_first_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_first_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_register_first_els([_ | _els], Cdata) ->
-    decode_register_first_els(_els, Cdata).
+decode_register_first_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_register_first_els(__TopXMLNS, _els, Cdata).
 
 encode_register_first(Cdata, _xmlns_attrs) ->
     _els = encode_register_first_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"first">>, _attrs, _els}.
 
-decode_register_first_cdata(<<>>) -> none;
-decode_register_first_cdata(_val) -> _val.
+decode_register_first_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_first_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_first_cdata(none, _acc) -> _acc;
 encode_register_first_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_name({xmlel, <<"name">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_name_els(_els, <<>>), Cdata.
+decode_register_name(__TopXMLNS,
+                    {xmlel, <<"name">>, _attrs, _els}) ->
+    Cdata = decode_register_name_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_name_els([], Cdata) ->
-    decode_register_name_cdata(Cdata);
-decode_register_name_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_name_els(_els,
+decode_register_name_els(__TopXMLNS, [], Cdata) ->
+    decode_register_name_cdata(__TopXMLNS, Cdata);
+decode_register_name_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_name_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_name_els([_ | _els], Cdata) ->
-    decode_register_name_els(_els, Cdata).
+decode_register_name_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_name_els(__TopXMLNS, _els, Cdata).
 
 encode_register_name(Cdata, _xmlns_attrs) ->
     _els = encode_register_name_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"name">>, _attrs, _els}.
 
-decode_register_name_cdata(<<>>) -> none;
-decode_register_name_cdata(_val) -> _val.
+decode_register_name_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_name_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_name_cdata(none, _acc) -> _acc;
 encode_register_name_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_password({xmlel, <<"password">>, _attrs,
-                         _els}) ->
-    Cdata = decode_register_password_els(_els, <<>>), Cdata.
+decode_register_password(__TopXMLNS,
+                        {xmlel, <<"password">>, _attrs, _els}) ->
+    Cdata = decode_register_password_els(__TopXMLNS, _els,
+                                        <<>>),
+    Cdata.
 
-decode_register_password_els([], Cdata) ->
-    decode_register_password_cdata(Cdata);
-decode_register_password_els([{xmlcdata, _data} | _els],
-                            Cdata) ->
-    decode_register_password_els(_els,
+decode_register_password_els(__TopXMLNS, [], Cdata) ->
+    decode_register_password_cdata(__TopXMLNS, Cdata);
+decode_register_password_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_password_els(__TopXMLNS, _els,
                                 <<Cdata/binary, _data/binary>>);
-decode_register_password_els([_ | _els], Cdata) ->
-    decode_register_password_els(_els, Cdata).
+decode_register_password_els(__TopXMLNS, [_ | _els],
+                            Cdata) ->
+    decode_register_password_els(__TopXMLNS, _els, Cdata).
 
 encode_register_password(Cdata, _xmlns_attrs) ->
     _els = encode_register_password_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"password">>, _attrs, _els}.
 
-decode_register_password_cdata(<<>>) -> none;
-decode_register_password_cdata(_val) -> _val.
+decode_register_password_cdata(__TopXMLNS, <<>>) ->
+    none;
+decode_register_password_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_register_password_cdata(none, _acc) -> _acc;
 encode_register_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_nick({xmlel, <<"nick">>, _attrs,
-                     _els}) ->
-    Cdata = decode_register_nick_els(_els, <<>>), Cdata.
+decode_register_nick(__TopXMLNS,
+                    {xmlel, <<"nick">>, _attrs, _els}) ->
+    Cdata = decode_register_nick_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_register_nick_els([], Cdata) ->
-    decode_register_nick_cdata(Cdata);
-decode_register_nick_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_register_nick_els(_els,
+decode_register_nick_els(__TopXMLNS, [], Cdata) ->
+    decode_register_nick_cdata(__TopXMLNS, Cdata);
+decode_register_nick_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_nick_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_register_nick_els([_ | _els], Cdata) ->
-    decode_register_nick_els(_els, Cdata).
+decode_register_nick_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_register_nick_els(__TopXMLNS, _els, Cdata).
 
 encode_register_nick(Cdata, _xmlns_attrs) ->
     _els = encode_register_nick_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"nick">>, _attrs, _els}.
 
-decode_register_nick_cdata(<<>>) -> none;
-decode_register_nick_cdata(_val) -> _val.
+decode_register_nick_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_nick_cdata(__TopXMLNS, _val) -> _val.
 
 encode_register_nick_cdata(none, _acc) -> _acc;
 encode_register_nick_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_username({xmlel, <<"username">>, _attrs,
-                         _els}) ->
-    Cdata = decode_register_username_els(_els, <<>>), Cdata.
+decode_register_username(__TopXMLNS,
+                        {xmlel, <<"username">>, _attrs, _els}) ->
+    Cdata = decode_register_username_els(__TopXMLNS, _els,
+                                        <<>>),
+    Cdata.
 
-decode_register_username_els([], Cdata) ->
-    decode_register_username_cdata(Cdata);
-decode_register_username_els([{xmlcdata, _data} | _els],
-                            Cdata) ->
-    decode_register_username_els(_els,
+decode_register_username_els(__TopXMLNS, [], Cdata) ->
+    decode_register_username_cdata(__TopXMLNS, Cdata);
+decode_register_username_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_username_els(__TopXMLNS, _els,
                                 <<Cdata/binary, _data/binary>>);
-decode_register_username_els([_ | _els], Cdata) ->
-    decode_register_username_els(_els, Cdata).
+decode_register_username_els(__TopXMLNS, [_ | _els],
+                            Cdata) ->
+    decode_register_username_els(__TopXMLNS, _els, Cdata).
 
 encode_register_username(Cdata, _xmlns_attrs) ->
     _els = encode_register_username_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"username">>, _attrs, _els}.
 
-decode_register_username_cdata(<<>>) -> none;
-decode_register_username_cdata(_val) -> _val.
+decode_register_username_cdata(__TopXMLNS, <<>>) ->
+    none;
+decode_register_username_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_register_username_cdata(none, _acc) -> _acc;
 encode_register_username_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_instructions({xmlel, <<"instructions">>,
-                             _attrs, _els}) ->
-    Cdata = decode_register_instructions_els(_els, <<>>),
+decode_register_instructions(__TopXMLNS,
+                            {xmlel, <<"instructions">>, _attrs, _els}) ->
+    Cdata = decode_register_instructions_els(__TopXMLNS,
+                                            _els, <<>>),
     Cdata.
 
-decode_register_instructions_els([], Cdata) ->
-    decode_register_instructions_cdata(Cdata);
-decode_register_instructions_els([{xmlcdata, _data}
-                                 | _els],
+decode_register_instructions_els(__TopXMLNS, [],
                                 Cdata) ->
-    decode_register_instructions_els(_els,
+    decode_register_instructions_cdata(__TopXMLNS, Cdata);
+decode_register_instructions_els(__TopXMLNS,
+                                [{xmlcdata, _data} | _els], Cdata) ->
+    decode_register_instructions_els(__TopXMLNS, _els,
                                     <<Cdata/binary, _data/binary>>);
-decode_register_instructions_els([_ | _els], Cdata) ->
-    decode_register_instructions_els(_els, Cdata).
+decode_register_instructions_els(__TopXMLNS, [_ | _els],
+                                Cdata) ->
+    decode_register_instructions_els(__TopXMLNS, _els,
+                                    Cdata).
 
 encode_register_instructions(Cdata, _xmlns_attrs) ->
     _els = encode_register_instructions_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"instructions">>, _attrs, _els}.
 
-decode_register_instructions_cdata(<<>>) -> undefined;
-decode_register_instructions_cdata(_val) -> _val.
+decode_register_instructions_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_register_instructions_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_register_instructions_cdata(undefined, _acc) ->
     _acc;
 encode_register_instructions_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_register_remove({xmlel, <<"remove">>, _attrs,
-                       _els}) ->
+decode_register_remove(__TopXMLNS,
+                      {xmlel, <<"remove">>, _attrs, _els}) ->
     true.
 
 encode_register_remove(true, _xmlns_attrs) ->
@@ -11622,8 +12401,8 @@ encode_register_remove(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"remove">>, _attrs, _els}.
 
-decode_register_registered({xmlel, <<"registered">>,
-                           _attrs, _els}) ->
+decode_register_registered(__TopXMLNS,
+                          {xmlel, <<"registered">>, _attrs, _els}) ->
     true.
 
 encode_register_registered(true, _xmlns_attrs) ->
@@ -11631,8 +12410,8 @@ encode_register_registered(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"registered">>, _attrs, _els}.
 
-decode_feature_register({xmlel, <<"register">>, _attrs,
-                        _els}) ->
+decode_feature_register(__TopXMLNS,
+                       {xmlel, <<"register">>, _attrs, _els}) ->
     {feature_register}.
 
 encode_feature_register({feature_register},
@@ -11641,25 +12420,29 @@ encode_feature_register({feature_register},
     _attrs = _xmlns_attrs,
     {xmlel, <<"register">>, _attrs, _els}.
 
-decode_caps({xmlel, <<"c">>, _attrs, _els}) ->
-    {Hash, Node, Ver} = decode_caps_attrs(_attrs, undefined,
-                                         undefined, undefined),
+decode_caps(__TopXMLNS,
+           {xmlel, <<"c">>, _attrs, _els}) ->
+    {Hash, Node, Ver} = decode_caps_attrs(__TopXMLNS,
+                                         _attrs, undefined, undefined,
+                                         undefined),
     {caps, Hash, Node, Ver}.
 
-decode_caps_attrs([{<<"hash">>, _val} | _attrs], _Hash,
-                 Node, Ver) ->
-    decode_caps_attrs(_attrs, _val, Node, Ver);
-decode_caps_attrs([{<<"node">>, _val} | _attrs], Hash,
-                 _Node, Ver) ->
-    decode_caps_attrs(_attrs, Hash, _val, Ver);
-decode_caps_attrs([{<<"ver">>, _val} | _attrs], Hash,
-                 Node, _Ver) ->
-    decode_caps_attrs(_attrs, Hash, Node, _val);
-decode_caps_attrs([_ | _attrs], Hash, Node, Ver) ->
-    decode_caps_attrs(_attrs, Hash, Node, Ver);
-decode_caps_attrs([], Hash, Node, Ver) ->
-    {decode_caps_attr_hash(Hash),
-     decode_caps_attr_node(Node), decode_caps_attr_ver(Ver)}.
+decode_caps_attrs(__TopXMLNS,
+                 [{<<"hash">>, _val} | _attrs], _Hash, Node, Ver) ->
+    decode_caps_attrs(__TopXMLNS, _attrs, _val, Node, Ver);
+decode_caps_attrs(__TopXMLNS,
+                 [{<<"node">>, _val} | _attrs], Hash, _Node, Ver) ->
+    decode_caps_attrs(__TopXMLNS, _attrs, Hash, _val, Ver);
+decode_caps_attrs(__TopXMLNS,
+                 [{<<"ver">>, _val} | _attrs], Hash, Node, _Ver) ->
+    decode_caps_attrs(__TopXMLNS, _attrs, Hash, Node, _val);
+decode_caps_attrs(__TopXMLNS, [_ | _attrs], Hash, Node,
+                 Ver) ->
+    decode_caps_attrs(__TopXMLNS, _attrs, Hash, Node, Ver);
+decode_caps_attrs(__TopXMLNS, [], Hash, Node, Ver) ->
+    {decode_caps_attr_hash(__TopXMLNS, Hash),
+     decode_caps_attr_node(__TopXMLNS, Node),
+     decode_caps_attr_ver(__TopXMLNS, Ver)}.
 
 encode_caps({caps, Hash, Node, Ver}, _xmlns_attrs) ->
     _els = [],
@@ -11669,27 +12452,29 @@ encode_caps({caps, Hash, Node, Ver}, _xmlns_attrs) ->
                                                                              _xmlns_attrs))),
     {xmlel, <<"c">>, _attrs, _els}.
 
-decode_caps_attr_hash(undefined) -> undefined;
-decode_caps_attr_hash(_val) -> _val.
+decode_caps_attr_hash(__TopXMLNS, undefined) ->
+    undefined;
+decode_caps_attr_hash(__TopXMLNS, _val) -> _val.
 
 encode_caps_attr_hash(undefined, _acc) -> _acc;
 encode_caps_attr_hash(_val, _acc) ->
     [{<<"hash">>, _val} | _acc].
 
-decode_caps_attr_node(undefined) -> undefined;
-decode_caps_attr_node(_val) -> _val.
+decode_caps_attr_node(__TopXMLNS, undefined) ->
+    undefined;
+decode_caps_attr_node(__TopXMLNS, _val) -> _val.
 
 encode_caps_attr_node(undefined, _acc) -> _acc;
 encode_caps_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_caps_attr_ver(undefined) -> undefined;
-decode_caps_attr_ver(_val) ->
+decode_caps_attr_ver(__TopXMLNS, undefined) ->
+    undefined;
+decode_caps_attr_ver(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"ver">>, <<"c">>,
-                        <<"http://jabber.org/protocol/caps">>}});
+                       {bad_attr_value, <<"ver">>, <<"c">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -11697,7 +12482,8 @@ encode_caps_attr_ver(undefined, _acc) -> _acc;
 encode_caps_attr_ver(_val, _acc) ->
     [{<<"ver">>, base64:encode(_val)} | _acc].
 
-decode_p1_ack({xmlel, <<"ack">>, _attrs, _els}) ->
+decode_p1_ack(__TopXMLNS,
+             {xmlel, <<"ack">>, _attrs, _els}) ->
     {p1_ack}.
 
 encode_p1_ack({p1_ack}, _xmlns_attrs) ->
@@ -11705,7 +12491,8 @@ encode_p1_ack({p1_ack}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ack">>, _attrs, _els}.
 
-decode_p1_rebind({xmlel, <<"rebind">>, _attrs, _els}) ->
+decode_p1_rebind(__TopXMLNS,
+                {xmlel, <<"rebind">>, _attrs, _els}) ->
     {p1_rebind}.
 
 encode_p1_rebind({p1_rebind}, _xmlns_attrs) ->
@@ -11713,7 +12500,8 @@ encode_p1_rebind({p1_rebind}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"rebind">>, _attrs, _els}.
 
-decode_p1_push({xmlel, <<"push">>, _attrs, _els}) ->
+decode_p1_push(__TopXMLNS,
+              {xmlel, <<"push">>, _attrs, _els}) ->
     {p1_push}.
 
 encode_p1_push({p1_push}, _xmlns_attrs) ->
@@ -11721,23 +12509,26 @@ encode_p1_push({p1_push}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"push">>, _attrs, _els}.
 
-decode_stream_features({xmlel, <<"stream:features">>,
-                       _attrs, _els}) ->
-    __Els = decode_stream_features_els(_els, []),
+decode_stream_features(__TopXMLNS,
+                      {xmlel, <<"stream:features">>, _attrs, _els}) ->
+    __Els = decode_stream_features_els(__TopXMLNS, _els,
+                                      []),
     {stream_features, __Els}.
 
-decode_stream_features_els([], __Els) ->
+decode_stream_features_els(__TopXMLNS, [], __Els) ->
     lists:reverse(__Els);
-decode_stream_features_els([{xmlel, _, _, _} = _el
-                           | _els],
-                          __Els) ->
+decode_stream_features_els(__TopXMLNS,
+                          [{xmlel, _, _, _} = _el | _els], __Els) ->
     case is_known_tag(_el) of
       true ->
-         decode_stream_features_els(_els, [decode(_el) | __Els]);
-      false -> decode_stream_features_els(_els, __Els)
+         decode_stream_features_els(__TopXMLNS, _els,
+                                    [decode(_el) | __Els]);
+      false ->
+         decode_stream_features_els(__TopXMLNS, _els, __Els)
     end;
-decode_stream_features_els([_ | _els], __Els) ->
-    decode_stream_features_els(_els, __Els).
+decode_stream_features_els(__TopXMLNS, [_ | _els],
+                          __Els) ->
+    decode_stream_features_els(__TopXMLNS, _els, __Els).
 
 encode_stream_features({stream_features, __Els},
                       _xmlns_attrs) ->
@@ -11745,30 +12536,31 @@ encode_stream_features({stream_features, __Els},
     _attrs = _xmlns_attrs,
     {xmlel, <<"stream:features">>, _attrs, _els}.
 
-decode_compression({xmlel, <<"compression">>, _attrs,
-                   _els}) ->
-    Methods = decode_compression_els(_els, []),
+decode_compression(__TopXMLNS,
+                  {xmlel, <<"compression">>, _attrs, _els}) ->
+    Methods = decode_compression_els(__TopXMLNS, _els, []),
     {compression, Methods}.
 
-decode_compression_els([], Methods) ->
+decode_compression_els(__TopXMLNS, [], Methods) ->
     lists:reverse(Methods);
-decode_compression_els([{xmlel, <<"method">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_compression_els(__TopXMLNS,
+                      [{xmlel, <<"method">>, _attrs, _} = _el | _els],
                       Methods) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/features/compress">> ->
-          decode_compression_els(_els,
-                                 case decode_compression_method(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_compression_els(__TopXMLNS, _els,
+                                 case decode_compression_method(__TopXMLNS,
+                                                                _el)
+                                     of
                                    undefined -> Methods;
                                    _new_el -> [_new_el | Methods]
                                  end);
-       true -> decode_compression_els(_els, Methods)
+       true ->
+          decode_compression_els(__TopXMLNS, _els, Methods)
     end;
-decode_compression_els([_ | _els], Methods) ->
-    decode_compression_els(_els, Methods).
+decode_compression_els(__TopXMLNS, [_ | _els],
+                      Methods) ->
+    decode_compression_els(__TopXMLNS, _els, Methods).
 
 encode_compression({compression, Methods},
                   _xmlns_attrs) ->
@@ -11782,36 +12574,39 @@ encode_compression({compression, Methods},
                                  [encode_compression_method(Methods, [])
                                   | _acc]).
 
-decode_compression_method({xmlel, <<"method">>, _attrs,
-                          _els}) ->
-    Cdata = decode_compression_method_els(_els, <<>>),
+decode_compression_method(__TopXMLNS,
+                         {xmlel, <<"method">>, _attrs, _els}) ->
+    Cdata = decode_compression_method_els(__TopXMLNS, _els,
+                                         <<>>),
     Cdata.
 
-decode_compression_method_els([], Cdata) ->
-    decode_compression_method_cdata(Cdata);
-decode_compression_method_els([{xmlcdata, _data}
-                              | _els],
-                             Cdata) ->
-    decode_compression_method_els(_els,
+decode_compression_method_els(__TopXMLNS, [], Cdata) ->
+    decode_compression_method_cdata(__TopXMLNS, Cdata);
+decode_compression_method_els(__TopXMLNS,
+                             [{xmlcdata, _data} | _els], Cdata) ->
+    decode_compression_method_els(__TopXMLNS, _els,
                                  <<Cdata/binary, _data/binary>>);
-decode_compression_method_els([_ | _els], Cdata) ->
-    decode_compression_method_els(_els, Cdata).
+decode_compression_method_els(__TopXMLNS, [_ | _els],
+                             Cdata) ->
+    decode_compression_method_els(__TopXMLNS, _els, Cdata).
 
 encode_compression_method(Cdata, _xmlns_attrs) ->
     _els = encode_compression_method_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"method">>, _attrs, _els}.
 
-decode_compression_method_cdata(<<>>) -> undefined;
-decode_compression_method_cdata(_val) -> _val.
+decode_compression_method_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_compression_method_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_compression_method_cdata(undefined, _acc) ->
     _acc;
 encode_compression_method_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_compressed({xmlel, <<"compressed">>, _attrs,
-                  _els}) ->
+decode_compressed(__TopXMLNS,
+                 {xmlel, <<"compressed">>, _attrs, _els}) ->
     {compressed}.
 
 encode_compressed({compressed}, _xmlns_attrs) ->
@@ -11819,29 +12614,27 @@ encode_compressed({compressed}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"compressed">>, _attrs, _els}.
 
-decode_compress({xmlel, <<"compress">>, _attrs,
-                _els}) ->
-    Methods = decode_compress_els(_els, []),
+decode_compress(__TopXMLNS,
+               {xmlel, <<"compress">>, _attrs, _els}) ->
+    Methods = decode_compress_els(__TopXMLNS, _els, []),
     {compress, Methods}.
 
-decode_compress_els([], Methods) ->
+decode_compress_els(__TopXMLNS, [], Methods) ->
     lists:reverse(Methods);
-decode_compress_els([{xmlel, <<"method">>, _attrs, _} =
-                        _el
-                    | _els],
+decode_compress_els(__TopXMLNS,
+                   [{xmlel, <<"method">>, _attrs, _} = _el | _els],
                    Methods) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/compress">> ->
-          decode_compress_els(_els,
-                              case decode_compress_method(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_compress_els(__TopXMLNS, _els,
+                              case decode_compress_method(__TopXMLNS, _el) of
                                 undefined -> Methods;
                                 _new_el -> [_new_el | Methods]
                               end);
-       true -> decode_compress_els(_els, Methods)
+       true -> decode_compress_els(__TopXMLNS, _els, Methods)
     end;
-decode_compress_els([_ | _els], Methods) ->
-    decode_compress_els(_els, Methods).
+decode_compress_els(__TopXMLNS, [_ | _els], Methods) ->
+    decode_compress_els(__TopXMLNS, _els, Methods).
 
 encode_compress({compress, Methods}, _xmlns_attrs) ->
     _els = 'encode_compress_$methods'(Methods, []),
@@ -11853,75 +12646,82 @@ encode_compress({compress, Methods}, _xmlns_attrs) ->
     'encode_compress_$methods'(_els,
                               [encode_compress_method(Methods, []) | _acc]).
 
-decode_compress_method({xmlel, <<"method">>, _attrs,
-                       _els}) ->
-    Cdata = decode_compress_method_els(_els, <<>>), Cdata.
+decode_compress_method(__TopXMLNS,
+                      {xmlel, <<"method">>, _attrs, _els}) ->
+    Cdata = decode_compress_method_els(__TopXMLNS, _els,
+                                      <<>>),
+    Cdata.
 
-decode_compress_method_els([], Cdata) ->
-    decode_compress_method_cdata(Cdata);
-decode_compress_method_els([{xmlcdata, _data} | _els],
-                          Cdata) ->
-    decode_compress_method_els(_els,
+decode_compress_method_els(__TopXMLNS, [], Cdata) ->
+    decode_compress_method_cdata(__TopXMLNS, Cdata);
+decode_compress_method_els(__TopXMLNS,
+                          [{xmlcdata, _data} | _els], Cdata) ->
+    decode_compress_method_els(__TopXMLNS, _els,
                               <<Cdata/binary, _data/binary>>);
-decode_compress_method_els([_ | _els], Cdata) ->
-    decode_compress_method_els(_els, Cdata).
+decode_compress_method_els(__TopXMLNS, [_ | _els],
+                          Cdata) ->
+    decode_compress_method_els(__TopXMLNS, _els, Cdata).
 
 encode_compress_method(Cdata, _xmlns_attrs) ->
     _els = encode_compress_method_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"method">>, _attrs, _els}.
 
-decode_compress_method_cdata(<<>>) -> undefined;
-decode_compress_method_cdata(_val) -> _val.
+decode_compress_method_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_compress_method_cdata(__TopXMLNS, _val) -> _val.
 
 encode_compress_method_cdata(undefined, _acc) -> _acc;
 encode_compress_method_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_compress_failure({xmlel, <<"failure">>, _attrs,
-                        _els}) ->
-    Reason = decode_compress_failure_els(_els, undefined),
+decode_compress_failure(__TopXMLNS,
+                       {xmlel, <<"failure">>, _attrs, _els}) ->
+    Reason = decode_compress_failure_els(__TopXMLNS, _els,
+                                        undefined),
     {compress_failure, Reason}.
 
-decode_compress_failure_els([], Reason) -> Reason;
-decode_compress_failure_els([{xmlel, <<"setup-failed">>,
-                             _attrs, _} =
-                                _el
+decode_compress_failure_els(__TopXMLNS, [], Reason) ->
+    Reason;
+decode_compress_failure_els(__TopXMLNS,
+                           [{xmlel, <<"setup-failed">>, _attrs, _} = _el
                             | _els],
                            Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/compress">> ->
-          decode_compress_failure_els(_els,
-                                      decode_compress_failure_setup_failed(_el));
-       true -> decode_compress_failure_els(_els, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_compress_failure_els(__TopXMLNS, _els,
+                                      decode_compress_failure_setup_failed(__TopXMLNS,
+                                                                           _el));
+       true ->
+          decode_compress_failure_els(__TopXMLNS, _els, Reason)
     end;
-decode_compress_failure_els([{xmlel,
-                             <<"processing-failed">>, _attrs, _} =
-                                _el
+decode_compress_failure_els(__TopXMLNS,
+                           [{xmlel, <<"processing-failed">>, _attrs, _} = _el
                             | _els],
                            Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/compress">> ->
-          decode_compress_failure_els(_els,
-                                      decode_compress_failure_processing_failed(_el));
-       true -> decode_compress_failure_els(_els, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_compress_failure_els(__TopXMLNS, _els,
+                                      decode_compress_failure_processing_failed(__TopXMLNS,
+                                                                                _el));
+       true ->
+          decode_compress_failure_els(__TopXMLNS, _els, Reason)
     end;
-decode_compress_failure_els([{xmlel,
-                             <<"unsupported-method">>, _attrs, _} =
-                                _el
+decode_compress_failure_els(__TopXMLNS,
+                           [{xmlel, <<"unsupported-method">>, _attrs, _} = _el
                             | _els],
                            Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/compress">> ->
-          decode_compress_failure_els(_els,
-                                      decode_compress_failure_unsupported_method(_el));
-       true -> decode_compress_failure_els(_els, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_compress_failure_els(__TopXMLNS, _els,
+                                      decode_compress_failure_unsupported_method(__TopXMLNS,
+                                                                                 _el));
+       true ->
+          decode_compress_failure_els(__TopXMLNS, _els, Reason)
     end;
-decode_compress_failure_els([_ | _els], Reason) ->
-    decode_compress_failure_els(_els, Reason).
+decode_compress_failure_els(__TopXMLNS, [_ | _els],
+                           Reason) ->
+    decode_compress_failure_els(__TopXMLNS, _els, Reason).
 
 encode_compress_failure({compress_failure, Reason},
                        _xmlns_attrs) ->
@@ -11947,9 +12747,9 @@ encode_compress_failure({compress_failure, Reason},
     [encode_compress_failure_unsupported_method(Reason, [])
      | _acc].
 
-decode_compress_failure_unsupported_method({xmlel,
-                                           <<"unsupported-method">>, _attrs,
-                                           _els}) ->
+decode_compress_failure_unsupported_method(__TopXMLNS,
+                                          {xmlel, <<"unsupported-method">>,
+                                           _attrs, _els}) ->
     'unsupported-method'.
 
 encode_compress_failure_unsupported_method('unsupported-method',
@@ -11958,9 +12758,9 @@ encode_compress_failure_unsupported_method('unsupported-method',
     _attrs = _xmlns_attrs,
     {xmlel, <<"unsupported-method">>, _attrs, _els}.
 
-decode_compress_failure_processing_failed({xmlel,
-                                          <<"processing-failed">>, _attrs,
-                                          _els}) ->
+decode_compress_failure_processing_failed(__TopXMLNS,
+                                         {xmlel, <<"processing-failed">>,
+                                          _attrs, _els}) ->
     'processing-failed'.
 
 encode_compress_failure_processing_failed('processing-failed',
@@ -11969,8 +12769,9 @@ encode_compress_failure_processing_failed('processing-failed',
     _attrs = _xmlns_attrs,
     {xmlel, <<"processing-failed">>, _attrs, _els}.
 
-decode_compress_failure_setup_failed({xmlel,
-                                     <<"setup-failed">>, _attrs, _els}) ->
+decode_compress_failure_setup_failed(__TopXMLNS,
+                                    {xmlel, <<"setup-failed">>, _attrs,
+                                     _els}) ->
     'setup-failed'.
 
 encode_compress_failure_setup_failed('setup-failed',
@@ -11979,8 +12780,8 @@ encode_compress_failure_setup_failed('setup-failed',
     _attrs = _xmlns_attrs,
     {xmlel, <<"setup-failed">>, _attrs, _els}.
 
-decode_starttls_failure({xmlel, <<"failure">>, _attrs,
-                        _els}) ->
+decode_starttls_failure(__TopXMLNS,
+                       {xmlel, <<"failure">>, _attrs, _els}) ->
     {starttls_failure}.
 
 encode_starttls_failure({starttls_failure},
@@ -11989,8 +12790,8 @@ encode_starttls_failure({starttls_failure},
     _attrs = _xmlns_attrs,
     {xmlel, <<"failure">>, _attrs, _els}.
 
-decode_starttls_proceed({xmlel, <<"proceed">>, _attrs,
-                        _els}) ->
+decode_starttls_proceed(__TopXMLNS,
+                       {xmlel, <<"proceed">>, _attrs, _els}) ->
     {starttls_proceed}.
 
 encode_starttls_proceed({starttls_proceed},
@@ -11999,26 +12800,24 @@ encode_starttls_proceed({starttls_proceed},
     _attrs = _xmlns_attrs,
     {xmlel, <<"proceed">>, _attrs, _els}.
 
-decode_starttls({xmlel, <<"starttls">>, _attrs,
-                _els}) ->
-    Required = decode_starttls_els(_els, false),
+decode_starttls(__TopXMLNS,
+               {xmlel, <<"starttls">>, _attrs, _els}) ->
+    Required = decode_starttls_els(__TopXMLNS, _els, false),
     {starttls, Required}.
 
-decode_starttls_els([], Required) -> Required;
-decode_starttls_els([{xmlel, <<"required">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
+decode_starttls_els(__TopXMLNS, [], Required) ->
+    Required;
+decode_starttls_els(__TopXMLNS,
+                   [{xmlel, <<"required">>, _attrs, _} = _el | _els],
                    Required) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-tls">> ->
-          decode_starttls_els(_els,
-                              decode_starttls_required(_el));
-       true -> decode_starttls_els(_els, Required)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_starttls_els(__TopXMLNS, _els,
+                              decode_starttls_required(__TopXMLNS, _el));
+       true -> decode_starttls_els(__TopXMLNS, _els, Required)
     end;
-decode_starttls_els([_ | _els], Required) ->
-    decode_starttls_els(_els, Required).
+decode_starttls_els(__TopXMLNS, [_ | _els], Required) ->
+    decode_starttls_els(__TopXMLNS, _els, Required).
 
 encode_starttls({starttls, Required}, _xmlns_attrs) ->
     _els = 'encode_starttls_$required'(Required, []),
@@ -12029,8 +12828,8 @@ encode_starttls({starttls, Required}, _xmlns_attrs) ->
 'encode_starttls_$required'(Required, _acc) ->
     [encode_starttls_required(Required, []) | _acc].
 
-decode_starttls_required({xmlel, <<"required">>, _attrs,
-                         _els}) ->
+decode_starttls_required(__TopXMLNS,
+                        {xmlel, <<"required">>, _attrs, _els}) ->
     true.
 
 encode_starttls_required(true, _xmlns_attrs) ->
@@ -12038,30 +12837,31 @@ encode_starttls_required(true, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"required">>, _attrs, _els}.
 
-decode_sasl_mechanisms({xmlel, <<"mechanisms">>, _attrs,
-                       _els}) ->
-    List = decode_sasl_mechanisms_els(_els, []),
+decode_sasl_mechanisms(__TopXMLNS,
+                      {xmlel, <<"mechanisms">>, _attrs, _els}) ->
+    List = decode_sasl_mechanisms_els(__TopXMLNS, _els, []),
     {sasl_mechanisms, List}.
 
-decode_sasl_mechanisms_els([], List) ->
+decode_sasl_mechanisms_els(__TopXMLNS, [], List) ->
     lists:reverse(List);
-decode_sasl_mechanisms_els([{xmlel, <<"mechanism">>,
-                            _attrs, _} =
-                               _el
-                           | _els],
+decode_sasl_mechanisms_els(__TopXMLNS,
+                          [{xmlel, <<"mechanism">>, _attrs, _} = _el | _els],
                           List) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_mechanisms_els(_els,
-                                     case decode_sasl_mechanism(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_mechanisms_els(__TopXMLNS, _els,
+                                     case decode_sasl_mechanism(__TopXMLNS,
+                                                                _el)
+                                         of
                                        undefined -> List;
                                        _new_el -> [_new_el | List]
                                      end);
-       true -> decode_sasl_mechanisms_els(_els, List)
+       true ->
+          decode_sasl_mechanisms_els(__TopXMLNS, _els, List)
     end;
-decode_sasl_mechanisms_els([_ | _els], List) ->
-    decode_sasl_mechanisms_els(_els, List).
+decode_sasl_mechanisms_els(__TopXMLNS, [_ | _els],
+                          List) ->
+    decode_sasl_mechanisms_els(__TopXMLNS, _els, List).
 
 encode_sasl_mechanisms({sasl_mechanisms, List},
                       _xmlns_attrs) ->
@@ -12074,186 +12874,188 @@ encode_sasl_mechanisms({sasl_mechanisms, List},
     'encode_sasl_mechanisms_$list'(_els,
                                   [encode_sasl_mechanism(List, []) | _acc]).
 
-decode_sasl_mechanism({xmlel, <<"mechanism">>, _attrs,
-                      _els}) ->
-    Cdata = decode_sasl_mechanism_els(_els, <<>>), Cdata.
+decode_sasl_mechanism(__TopXMLNS,
+                     {xmlel, <<"mechanism">>, _attrs, _els}) ->
+    Cdata = decode_sasl_mechanism_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_sasl_mechanism_els([], Cdata) ->
-    decode_sasl_mechanism_cdata(Cdata);
-decode_sasl_mechanism_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_sasl_mechanism_els(_els,
+decode_sasl_mechanism_els(__TopXMLNS, [], Cdata) ->
+    decode_sasl_mechanism_cdata(__TopXMLNS, Cdata);
+decode_sasl_mechanism_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_sasl_mechanism_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_sasl_mechanism_els([_ | _els], Cdata) ->
-    decode_sasl_mechanism_els(_els, Cdata).
+decode_sasl_mechanism_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_sasl_mechanism_els(__TopXMLNS, _els, Cdata).
 
 encode_sasl_mechanism(Cdata, _xmlns_attrs) ->
     _els = encode_sasl_mechanism_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"mechanism">>, _attrs, _els}.
 
-decode_sasl_mechanism_cdata(<<>>) -> undefined;
-decode_sasl_mechanism_cdata(_val) -> _val.
+decode_sasl_mechanism_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_sasl_mechanism_cdata(__TopXMLNS, _val) -> _val.
 
 encode_sasl_mechanism_cdata(undefined, _acc) -> _acc;
 encode_sasl_mechanism_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_sasl_failure({xmlel, <<"failure">>, _attrs,
-                    _els}) ->
-    {Text, Reason} = decode_sasl_failure_els(_els, [],
-                                            undefined),
+decode_sasl_failure(__TopXMLNS,
+                   {xmlel, <<"failure">>, _attrs, _els}) ->
+    {Text, Reason} = decode_sasl_failure_els(__TopXMLNS,
+                                            _els, [], undefined),
     {sasl_failure, Reason, Text}.
 
-decode_sasl_failure_els([], Text, Reason) ->
+decode_sasl_failure_els(__TopXMLNS, [], Text, Reason) ->
     {lists:reverse(Text), Reason};
-decode_sasl_failure_els([{xmlel, <<"text">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els,
-                                  [decode_sasl_failure_text(_el) | Text],
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
+                       Reason) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els,
+                                  [decode_sasl_failure_text(__TopXMLNS, _el)
+                                   | Text],
                                   Reason);
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel, <<"aborted">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"aborted">>, _attrs, _} = _el | _els], Text,
+                       Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_aborted(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_aborted(__TopXMLNS,
+                                                              _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel, <<"account-disabled">>,
-                         _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"account-disabled">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_account_disabled(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_account_disabled(__TopXMLNS,
+                                                                       _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"credentials-expired">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"credentials-expired">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_credentials_expired(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_credentials_expired(__TopXMLNS,
+                                                                          _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"encryption-required">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"encryption-required">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_encryption_required(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_encryption_required(__TopXMLNS,
+                                                                          _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"incorrect-encoding">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"incorrect-encoding">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_incorrect_encoding(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_incorrect_encoding(__TopXMLNS,
+                                                                         _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel, <<"invalid-authzid">>,
-                         _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-authzid">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_invalid_authzid(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_invalid_authzid(__TopXMLNS,
+                                                                      _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"invalid-mechanism">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"invalid-mechanism">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_invalid_mechanism(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_invalid_mechanism(__TopXMLNS,
+                                                                        _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"malformed-request">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"malformed-request">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_malformed_request(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_malformed_request(__TopXMLNS,
+                                                                        _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"mechanism-too-weak">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"mechanism-too-weak">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_mechanism_too_weak(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_mechanism_too_weak(__TopXMLNS,
+                                                                         _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel, <<"not-authorized">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_not_authorized(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_not_authorized(__TopXMLNS,
+                                                                     _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([{xmlel,
-                         <<"temporary-auth-failure">>, _attrs, _} =
-                            _el
+decode_sasl_failure_els(__TopXMLNS,
+                       [{xmlel, <<"temporary-auth-failure">>, _attrs, _} = _el
                         | _els],
                        Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-          decode_sasl_failure_els(_els, Text,
-                                  decode_sasl_failure_temporary_auth_failure(_el));
-       true -> decode_sasl_failure_els(_els, Text, Reason)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text,
+                                  decode_sasl_failure_temporary_auth_failure(__TopXMLNS,
+                                                                             _el));
+       true ->
+          decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_sasl_failure_els([_ | _els], Text, Reason) ->
-    decode_sasl_failure_els(_els, Text, Reason).
+decode_sasl_failure_els(__TopXMLNS, [_ | _els], Text,
+                       Reason) ->
+    decode_sasl_failure_els(__TopXMLNS, _els, Text, Reason).
 
 encode_sasl_failure({sasl_failure, Reason, Text},
                    _xmlns_attrs) ->
@@ -12319,8 +13121,8 @@ encode_sasl_failure({sasl_failure, Reason, Text},
     [encode_sasl_failure_temporary_auth_failure(Reason, [])
      | _acc].
 
-decode_sasl_failure_temporary_auth_failure({xmlel,
-                                           <<"temporary-auth-failure">>,
+decode_sasl_failure_temporary_auth_failure(__TopXMLNS,
+                                          {xmlel, <<"temporary-auth-failure">>,
                                            _attrs, _els}) ->
     'temporary-auth-failure'.
 
@@ -12330,8 +13132,9 @@ encode_sasl_failure_temporary_auth_failure('temporary-auth-failure',
     _attrs = _xmlns_attrs,
     {xmlel, <<"temporary-auth-failure">>, _attrs, _els}.
 
-decode_sasl_failure_not_authorized({xmlel,
-                                   <<"not-authorized">>, _attrs, _els}) ->
+decode_sasl_failure_not_authorized(__TopXMLNS,
+                                  {xmlel, <<"not-authorized">>, _attrs,
+                                   _els}) ->
     'not-authorized'.
 
 encode_sasl_failure_not_authorized('not-authorized',
@@ -12340,8 +13143,8 @@ encode_sasl_failure_not_authorized('not-authorized',
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-authorized">>, _attrs, _els}.
 
-decode_sasl_failure_mechanism_too_weak({xmlel,
-                                       <<"mechanism-too-weak">>, _attrs,
+decode_sasl_failure_mechanism_too_weak(__TopXMLNS,
+                                      {xmlel, <<"mechanism-too-weak">>, _attrs,
                                        _els}) ->
     'mechanism-too-weak'.
 
@@ -12351,8 +13154,8 @@ encode_sasl_failure_mechanism_too_weak('mechanism-too-weak',
     _attrs = _xmlns_attrs,
     {xmlel, <<"mechanism-too-weak">>, _attrs, _els}.
 
-decode_sasl_failure_malformed_request({xmlel,
-                                      <<"malformed-request">>, _attrs,
+decode_sasl_failure_malformed_request(__TopXMLNS,
+                                     {xmlel, <<"malformed-request">>, _attrs,
                                       _els}) ->
     'malformed-request'.
 
@@ -12362,8 +13165,8 @@ encode_sasl_failure_malformed_request('malformed-request',
     _attrs = _xmlns_attrs,
     {xmlel, <<"malformed-request">>, _attrs, _els}.
 
-decode_sasl_failure_invalid_mechanism({xmlel,
-                                      <<"invalid-mechanism">>, _attrs,
+decode_sasl_failure_invalid_mechanism(__TopXMLNS,
+                                     {xmlel, <<"invalid-mechanism">>, _attrs,
                                       _els}) ->
     'invalid-mechanism'.
 
@@ -12373,8 +13176,9 @@ encode_sasl_failure_invalid_mechanism('invalid-mechanism',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-mechanism">>, _attrs, _els}.
 
-decode_sasl_failure_invalid_authzid({xmlel,
-                                    <<"invalid-authzid">>, _attrs, _els}) ->
+decode_sasl_failure_invalid_authzid(__TopXMLNS,
+                                   {xmlel, <<"invalid-authzid">>, _attrs,
+                                    _els}) ->
     'invalid-authzid'.
 
 encode_sasl_failure_invalid_authzid('invalid-authzid',
@@ -12383,8 +13187,8 @@ encode_sasl_failure_invalid_authzid('invalid-authzid',
     _attrs = _xmlns_attrs,
     {xmlel, <<"invalid-authzid">>, _attrs, _els}.
 
-decode_sasl_failure_incorrect_encoding({xmlel,
-                                       <<"incorrect-encoding">>, _attrs,
+decode_sasl_failure_incorrect_encoding(__TopXMLNS,
+                                      {xmlel, <<"incorrect-encoding">>, _attrs,
                                        _els}) ->
     'incorrect-encoding'.
 
@@ -12394,9 +13198,9 @@ encode_sasl_failure_incorrect_encoding('incorrect-encoding',
     _attrs = _xmlns_attrs,
     {xmlel, <<"incorrect-encoding">>, _attrs, _els}.
 
-decode_sasl_failure_encryption_required({xmlel,
-                                        <<"encryption-required">>, _attrs,
-                                        _els}) ->
+decode_sasl_failure_encryption_required(__TopXMLNS,
+                                       {xmlel, <<"encryption-required">>,
+                                        _attrs, _els}) ->
     'encryption-required'.
 
 encode_sasl_failure_encryption_required('encryption-required',
@@ -12405,9 +13209,9 @@ encode_sasl_failure_encryption_required('encryption-required',
     _attrs = _xmlns_attrs,
     {xmlel, <<"encryption-required">>, _attrs, _els}.
 
-decode_sasl_failure_credentials_expired({xmlel,
-                                        <<"credentials-expired">>, _attrs,
-                                        _els}) ->
+decode_sasl_failure_credentials_expired(__TopXMLNS,
+                                       {xmlel, <<"credentials-expired">>,
+                                        _attrs, _els}) ->
     'credentials-expired'.
 
 encode_sasl_failure_credentials_expired('credentials-expired',
@@ -12416,8 +13220,9 @@ encode_sasl_failure_credentials_expired('credentials-expired',
     _attrs = _xmlns_attrs,
     {xmlel, <<"credentials-expired">>, _attrs, _els}.
 
-decode_sasl_failure_account_disabled({xmlel,
-                                     <<"account-disabled">>, _attrs, _els}) ->
+decode_sasl_failure_account_disabled(__TopXMLNS,
+                                    {xmlel, <<"account-disabled">>, _attrs,
+                                     _els}) ->
     'account-disabled'.
 
 encode_sasl_failure_account_disabled('account-disabled',
@@ -12426,8 +13231,8 @@ encode_sasl_failure_account_disabled('account-disabled',
     _attrs = _xmlns_attrs,
     {xmlel, <<"account-disabled">>, _attrs, _els}.
 
-decode_sasl_failure_aborted({xmlel, <<"aborted">>,
-                            _attrs, _els}) ->
+decode_sasl_failure_aborted(__TopXMLNS,
+                           {xmlel, <<"aborted">>, _attrs, _els}) ->
     aborted.
 
 encode_sasl_failure_aborted(aborted, _xmlns_attrs) ->
@@ -12435,30 +13240,35 @@ encode_sasl_failure_aborted(aborted, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"aborted">>, _attrs, _els}.
 
-decode_sasl_failure_text({xmlel, <<"text">>, _attrs,
-                         _els}) ->
-    Data = decode_sasl_failure_text_els(_els, <<>>),
-    Lang = decode_sasl_failure_text_attrs(_attrs,
-                                         undefined),
+decode_sasl_failure_text(__TopXMLNS,
+                        {xmlel, <<"text">>, _attrs, _els}) ->
+    Data = decode_sasl_failure_text_els(__TopXMLNS, _els,
+                                       <<>>),
+    Lang = decode_sasl_failure_text_attrs(__TopXMLNS,
+                                         _attrs, undefined),
     {text, Lang, Data}.
 
-decode_sasl_failure_text_els([], Data) ->
-    decode_sasl_failure_text_cdata(Data);
-decode_sasl_failure_text_els([{xmlcdata, _data} | _els],
-                            Data) ->
-    decode_sasl_failure_text_els(_els,
+decode_sasl_failure_text_els(__TopXMLNS, [], Data) ->
+    decode_sasl_failure_text_cdata(__TopXMLNS, Data);
+decode_sasl_failure_text_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Data) ->
+    decode_sasl_failure_text_els(__TopXMLNS, _els,
                                 <<Data/binary, _data/binary>>);
-decode_sasl_failure_text_els([_ | _els], Data) ->
-    decode_sasl_failure_text_els(_els, Data).
-
-decode_sasl_failure_text_attrs([{<<"xml:lang">>, _val}
-                               | _attrs],
-                              _Lang) ->
-    decode_sasl_failure_text_attrs(_attrs, _val);
-decode_sasl_failure_text_attrs([_ | _attrs], Lang) ->
-    decode_sasl_failure_text_attrs(_attrs, Lang);
-decode_sasl_failure_text_attrs([], Lang) ->
-    'decode_sasl_failure_text_attr_xml:lang'(Lang).
+decode_sasl_failure_text_els(__TopXMLNS, [_ | _els],
+                            Data) ->
+    decode_sasl_failure_text_els(__TopXMLNS, _els, Data).
+
+decode_sasl_failure_text_attrs(__TopXMLNS,
+                              [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_sasl_failure_text_attrs(__TopXMLNS, _attrs,
+                                  _val);
+decode_sasl_failure_text_attrs(__TopXMLNS, [_ | _attrs],
+                              Lang) ->
+    decode_sasl_failure_text_attrs(__TopXMLNS, _attrs,
+                                  Lang);
+decode_sasl_failure_text_attrs(__TopXMLNS, [], Lang) ->
+    'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
+                                            Lang).
 
 encode_sasl_failure_text({text, Lang, Data},
                         _xmlns_attrs) ->
@@ -12467,9 +13277,12 @@ encode_sasl_failure_text({text, Lang, Data},
                                                      _xmlns_attrs),
     {xmlel, <<"text">>, _attrs, _els}.
 
-'decode_sasl_failure_text_attr_xml:lang'(undefined) ->
+'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
+                                        undefined) ->
     undefined;
-'decode_sasl_failure_text_attr_xml:lang'(_val) -> _val.
+'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
+                                        _val) ->
+    _val.
 
 'encode_sasl_failure_text_attr_xml:lang'(undefined,
                                         _acc) ->
@@ -12477,26 +13290,28 @@ encode_sasl_failure_text({text, Lang, Data},
 'encode_sasl_failure_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_sasl_failure_text_cdata(<<>>) -> undefined;
-decode_sasl_failure_text_cdata(_val) -> _val.
+decode_sasl_failure_text_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_sasl_failure_text_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_sasl_failure_text_cdata(undefined, _acc) -> _acc;
 encode_sasl_failure_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_sasl_success({xmlel, <<"success">>, _attrs,
-                    _els}) ->
-    Text = decode_sasl_success_els(_els, <<>>),
+decode_sasl_success(__TopXMLNS,
+                   {xmlel, <<"success">>, _attrs, _els}) ->
+    Text = decode_sasl_success_els(__TopXMLNS, _els, <<>>),
     {sasl_success, Text}.
 
-decode_sasl_success_els([], Text) ->
-    decode_sasl_success_cdata(Text);
-decode_sasl_success_els([{xmlcdata, _data} | _els],
-                       Text) ->
-    decode_sasl_success_els(_els,
+decode_sasl_success_els(__TopXMLNS, [], Text) ->
+    decode_sasl_success_cdata(__TopXMLNS, Text);
+decode_sasl_success_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Text) ->
+    decode_sasl_success_els(__TopXMLNS, _els,
                            <<Text/binary, _data/binary>>);
-decode_sasl_success_els([_ | _els], Text) ->
-    decode_sasl_success_els(_els, Text).
+decode_sasl_success_els(__TopXMLNS, [_ | _els], Text) ->
+    decode_sasl_success_els(__TopXMLNS, _els, Text).
 
 encode_sasl_success({sasl_success, Text},
                    _xmlns_attrs) ->
@@ -12504,13 +13319,13 @@ encode_sasl_success({sasl_success, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"success">>, _attrs, _els}.
 
-decode_sasl_success_cdata(<<>>) -> undefined;
-decode_sasl_success_cdata(_val) ->
+decode_sasl_success_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_sasl_success_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"success">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-sasl">>}});
+                       {bad_cdata_value, <<>>, <<"success">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12518,19 +13333,20 @@ encode_sasl_success_cdata(undefined, _acc) -> _acc;
 encode_sasl_success_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
-decode_sasl_response({xmlel, <<"response">>, _attrs,
-                     _els}) ->
-    Text = decode_sasl_response_els(_els, <<>>),
+decode_sasl_response(__TopXMLNS,
+                    {xmlel, <<"response">>, _attrs, _els}) ->
+    Text = decode_sasl_response_els(__TopXMLNS, _els, <<>>),
     {sasl_response, Text}.
 
-decode_sasl_response_els([], Text) ->
-    decode_sasl_response_cdata(Text);
-decode_sasl_response_els([{xmlcdata, _data} | _els],
-                        Text) ->
-    decode_sasl_response_els(_els,
+decode_sasl_response_els(__TopXMLNS, [], Text) ->
+    decode_sasl_response_cdata(__TopXMLNS, Text);
+decode_sasl_response_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Text) ->
+    decode_sasl_response_els(__TopXMLNS, _els,
                             <<Text/binary, _data/binary>>);
-decode_sasl_response_els([_ | _els], Text) ->
-    decode_sasl_response_els(_els, Text).
+decode_sasl_response_els(__TopXMLNS, [_ | _els],
+                        Text) ->
+    decode_sasl_response_els(__TopXMLNS, _els, Text).
 
 encode_sasl_response({sasl_response, Text},
                     _xmlns_attrs) ->
@@ -12538,13 +13354,13 @@ encode_sasl_response({sasl_response, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"response">>, _attrs, _els}.
 
-decode_sasl_response_cdata(<<>>) -> undefined;
-decode_sasl_response_cdata(_val) ->
+decode_sasl_response_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_sasl_response_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"response">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-sasl">>}});
+                       {bad_cdata_value, <<>>, <<"response">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12552,19 +13368,21 @@ encode_sasl_response_cdata(undefined, _acc) -> _acc;
 encode_sasl_response_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
-decode_sasl_challenge({xmlel, <<"challenge">>, _attrs,
-                      _els}) ->
-    Text = decode_sasl_challenge_els(_els, <<>>),
+decode_sasl_challenge(__TopXMLNS,
+                     {xmlel, <<"challenge">>, _attrs, _els}) ->
+    Text = decode_sasl_challenge_els(__TopXMLNS, _els,
+                                    <<>>),
     {sasl_challenge, Text}.
 
-decode_sasl_challenge_els([], Text) ->
-    decode_sasl_challenge_cdata(Text);
-decode_sasl_challenge_els([{xmlcdata, _data} | _els],
-                         Text) ->
-    decode_sasl_challenge_els(_els,
+decode_sasl_challenge_els(__TopXMLNS, [], Text) ->
+    decode_sasl_challenge_cdata(__TopXMLNS, Text);
+decode_sasl_challenge_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Text) ->
+    decode_sasl_challenge_els(__TopXMLNS, _els,
                              <<Text/binary, _data/binary>>);
-decode_sasl_challenge_els([_ | _els], Text) ->
-    decode_sasl_challenge_els(_els, Text).
+decode_sasl_challenge_els(__TopXMLNS, [_ | _els],
+                         Text) ->
+    decode_sasl_challenge_els(__TopXMLNS, _els, Text).
 
 encode_sasl_challenge({sasl_challenge, Text},
                      _xmlns_attrs) ->
@@ -12572,13 +13390,13 @@ encode_sasl_challenge({sasl_challenge, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"challenge">>, _attrs, _els}.
 
-decode_sasl_challenge_cdata(<<>>) -> undefined;
-decode_sasl_challenge_cdata(_val) ->
+decode_sasl_challenge_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_sasl_challenge_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"challenge">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-sasl">>}});
+                       {bad_cdata_value, <<>>, <<"challenge">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12586,7 +13404,8 @@ encode_sasl_challenge_cdata(undefined, _acc) -> _acc;
 encode_sasl_challenge_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
-decode_sasl_abort({xmlel, <<"abort">>, _attrs, _els}) ->
+decode_sasl_abort(__TopXMLNS,
+                 {xmlel, <<"abort">>, _attrs, _els}) ->
     {sasl_abort}.
 
 encode_sasl_abort({sasl_abort}, _xmlns_attrs) ->
@@ -12594,28 +13413,30 @@ encode_sasl_abort({sasl_abort}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"abort">>, _attrs, _els}.
 
-decode_sasl_auth({xmlel, <<"auth">>, _attrs, _els}) ->
-    Text = decode_sasl_auth_els(_els, <<>>),
-    Mechanism = decode_sasl_auth_attrs(_attrs, undefined),
+decode_sasl_auth(__TopXMLNS,
+                {xmlel, <<"auth">>, _attrs, _els}) ->
+    Text = decode_sasl_auth_els(__TopXMLNS, _els, <<>>),
+    Mechanism = decode_sasl_auth_attrs(__TopXMLNS, _attrs,
+                                      undefined),
     {sasl_auth, Mechanism, Text}.
 
-decode_sasl_auth_els([], Text) ->
-    decode_sasl_auth_cdata(Text);
-decode_sasl_auth_els([{xmlcdata, _data} | _els],
-                    Text) ->
-    decode_sasl_auth_els(_els,
+decode_sasl_auth_els(__TopXMLNS, [], Text) ->
+    decode_sasl_auth_cdata(__TopXMLNS, Text);
+decode_sasl_auth_els(__TopXMLNS,
+                    [{xmlcdata, _data} | _els], Text) ->
+    decode_sasl_auth_els(__TopXMLNS, _els,
                         <<Text/binary, _data/binary>>);
-decode_sasl_auth_els([_ | _els], Text) ->
-    decode_sasl_auth_els(_els, Text).
-
-decode_sasl_auth_attrs([{<<"mechanism">>, _val}
-                       | _attrs],
-                      _Mechanism) ->
-    decode_sasl_auth_attrs(_attrs, _val);
-decode_sasl_auth_attrs([_ | _attrs], Mechanism) ->
-    decode_sasl_auth_attrs(_attrs, Mechanism);
-decode_sasl_auth_attrs([], Mechanism) ->
-    decode_sasl_auth_attr_mechanism(Mechanism).
+decode_sasl_auth_els(__TopXMLNS, [_ | _els], Text) ->
+    decode_sasl_auth_els(__TopXMLNS, _els, Text).
+
+decode_sasl_auth_attrs(__TopXMLNS,
+                      [{<<"mechanism">>, _val} | _attrs], _Mechanism) ->
+    decode_sasl_auth_attrs(__TopXMLNS, _attrs, _val);
+decode_sasl_auth_attrs(__TopXMLNS, [_ | _attrs],
+                      Mechanism) ->
+    decode_sasl_auth_attrs(__TopXMLNS, _attrs, Mechanism);
+decode_sasl_auth_attrs(__TopXMLNS, [], Mechanism) ->
+    decode_sasl_auth_attr_mechanism(__TopXMLNS, Mechanism).
 
 encode_sasl_auth({sasl_auth, Mechanism, Text},
                 _xmlns_attrs) ->
@@ -12624,22 +13445,23 @@ encode_sasl_auth({sasl_auth, Mechanism, Text},
                                             _xmlns_attrs),
     {xmlel, <<"auth">>, _attrs, _els}.
 
-decode_sasl_auth_attr_mechanism(undefined) ->
+decode_sasl_auth_attr_mechanism(__TopXMLNS,
+                               undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"mechanism">>, <<"auth">>,
-                  <<"urn:ietf:params:xml:ns:xmpp-sasl">>}});
-decode_sasl_auth_attr_mechanism(_val) -> _val.
+                  __TopXMLNS}});
+decode_sasl_auth_attr_mechanism(__TopXMLNS, _val) ->
+    _val.
 
 encode_sasl_auth_attr_mechanism(_val, _acc) ->
     [{<<"mechanism">>, _val} | _acc].
 
-decode_sasl_auth_cdata(<<>>) -> undefined;
-decode_sasl_auth_cdata(_val) ->
+decode_sasl_auth_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_sasl_auth_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"auth">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-sasl">>}});
+                       {bad_cdata_value, <<>>, <<"auth">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12647,33 +13469,35 @@ encode_sasl_auth_cdata(undefined, _acc) -> _acc;
 encode_sasl_auth_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
-decode_bind({xmlel, <<"bind">>, _attrs, _els}) ->
-    {Jid, Resource} = decode_bind_els(_els, undefined,
-                                     undefined),
+decode_bind(__TopXMLNS,
+           {xmlel, <<"bind">>, _attrs, _els}) ->
+    {Jid, Resource} = decode_bind_els(__TopXMLNS, _els,
+                                     undefined, undefined),
     {bind, Jid, Resource}.
 
-decode_bind_els([], Jid, Resource) -> {Jid, Resource};
-decode_bind_els([{xmlel, <<"jid">>, _attrs, _} = _el
-                | _els],
-               Jid, Resource) ->
+decode_bind_els(__TopXMLNS, [], Jid, Resource) ->
+    {Jid, Resource};
+decode_bind_els(__TopXMLNS,
+               [{xmlel, <<"jid">>, _attrs, _} = _el | _els], Jid,
+               Resource) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-          decode_bind_els(_els, decode_bind_jid(_el), Resource);
-       true -> decode_bind_els(_els, Jid, Resource)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bind_els(__TopXMLNS, _els,
+                          decode_bind_jid(__TopXMLNS, _el), Resource);
+       true -> decode_bind_els(__TopXMLNS, _els, Jid, Resource)
     end;
-decode_bind_els([{xmlel, <<"resource">>, _attrs, _} =
-                    _el
-                | _els],
-               Jid, Resource) ->
+decode_bind_els(__TopXMLNS,
+               [{xmlel, <<"resource">>, _attrs, _} = _el | _els], Jid,
+               Resource) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-          decode_bind_els(_els, Jid, decode_bind_resource(_el));
-       true -> decode_bind_els(_els, Jid, Resource)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bind_els(__TopXMLNS, _els, Jid,
+                          decode_bind_resource(__TopXMLNS, _el));
+       true -> decode_bind_els(__TopXMLNS, _els, Jid, Resource)
     end;
-decode_bind_els([_ | _els], Jid, Resource) ->
-    decode_bind_els(_els, Jid, Resource).
+decode_bind_els(__TopXMLNS, [_ | _els], Jid,
+               Resource) ->
+    decode_bind_els(__TopXMLNS, _els, Jid, Resource).
 
 encode_bind({bind, Jid, Resource}, _xmlns_attrs) ->
     _els = 'encode_bind_$resource'(Resource,
@@ -12689,31 +13513,34 @@ encode_bind({bind, Jid, Resource}, _xmlns_attrs) ->
 'encode_bind_$resource'(Resource, _acc) ->
     [encode_bind_resource(Resource, []) | _acc].
 
-decode_bind_resource({xmlel, <<"resource">>, _attrs,
-                     _els}) ->
-    Cdata = decode_bind_resource_els(_els, <<>>), Cdata.
+decode_bind_resource(__TopXMLNS,
+                    {xmlel, <<"resource">>, _attrs, _els}) ->
+    Cdata = decode_bind_resource_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_bind_resource_els([], Cdata) ->
-    decode_bind_resource_cdata(Cdata);
-decode_bind_resource_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_bind_resource_els(_els,
+decode_bind_resource_els(__TopXMLNS, [], Cdata) ->
+    decode_bind_resource_cdata(__TopXMLNS, Cdata);
+decode_bind_resource_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_bind_resource_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_bind_resource_els([_ | _els], Cdata) ->
-    decode_bind_resource_els(_els, Cdata).
+decode_bind_resource_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_bind_resource_els(__TopXMLNS, _els, Cdata).
 
 encode_bind_resource(Cdata, _xmlns_attrs) ->
     _els = encode_bind_resource_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"resource">>, _attrs, _els}.
 
-decode_bind_resource_cdata(<<>>) -> undefined;
-decode_bind_resource_cdata(_val) ->
+decode_bind_resource_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_bind_resource_cdata(__TopXMLNS, _val) ->
     case catch resourceprep(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"resource">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-bind">>}});
+                       {bad_cdata_value, <<>>, <<"resource">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12721,30 +13548,31 @@ encode_bind_resource_cdata(undefined, _acc) -> _acc;
 encode_bind_resource_cdata(_val, _acc) ->
     [{xmlcdata, resourceprep(_val)} | _acc].
 
-decode_bind_jid({xmlel, <<"jid">>, _attrs, _els}) ->
-    Cdata = decode_bind_jid_els(_els, <<>>), Cdata.
+decode_bind_jid(__TopXMLNS,
+               {xmlel, <<"jid">>, _attrs, _els}) ->
+    Cdata = decode_bind_jid_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_bind_jid_els([], Cdata) ->
-    decode_bind_jid_cdata(Cdata);
-decode_bind_jid_els([{xmlcdata, _data} | _els],
-                   Cdata) ->
-    decode_bind_jid_els(_els,
+decode_bind_jid_els(__TopXMLNS, [], Cdata) ->
+    decode_bind_jid_cdata(__TopXMLNS, Cdata);
+decode_bind_jid_els(__TopXMLNS,
+                   [{xmlcdata, _data} | _els], Cdata) ->
+    decode_bind_jid_els(__TopXMLNS, _els,
                        <<Cdata/binary, _data/binary>>);
-decode_bind_jid_els([_ | _els], Cdata) ->
-    decode_bind_jid_els(_els, Cdata).
+decode_bind_jid_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_bind_jid_els(__TopXMLNS, _els, Cdata).
 
 encode_bind_jid(Cdata, _xmlns_attrs) ->
     _els = encode_bind_jid_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"jid">>, _attrs, _els}.
 
-decode_bind_jid_cdata(<<>>) -> undefined;
-decode_bind_jid_cdata(_val) ->
+decode_bind_jid_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_bind_jid_cdata(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"jid">>,
-                        <<"urn:ietf:params:xml:ns:xmpp-bind">>}});
+                       {bad_cdata_value, <<>>, <<"jid">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -12752,295 +13580,274 @@ encode_bind_jid_cdata(undefined, _acc) -> _acc;
 encode_bind_jid_cdata(_val, _acc) ->
     [{xmlcdata, enc_jid(_val)} | _acc].
 
-decode_error({xmlel, <<"error">>, _attrs, _els}) ->
-    {Text, Reason} = decode_error_els(_els, undefined,
-                                     undefined),
-    {Type, By} = decode_error_attrs(_attrs, undefined,
-                                   undefined),
+decode_error(__TopXMLNS,
+            {xmlel, <<"error">>, _attrs, _els}) ->
+    {Text, Reason} = decode_error_els(__TopXMLNS, _els,
+                                     undefined, undefined),
+    {Type, By} = decode_error_attrs(__TopXMLNS, _attrs,
+                                   undefined, undefined),
     {error, Type, By, Reason, Text}.
 
-decode_error_els([], Text, Reason) -> {Text, Reason};
-decode_error_els([{xmlel, <<"text">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason) ->
+decode_error_els(__TopXMLNS, [], Text, Reason) ->
+    {Text, Reason};
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
+                Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, decode_error_text(_el), Reason);
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els,
+                           decode_error_text(_xmlns, _el), Reason);
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"bad-request">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"bad-request">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_bad_request(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_bad_request(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"conflict">>, _attrs, _} =
-                     _el
-                 | _els],
-                Text, Reason) ->
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"conflict">>, _attrs, _} = _el | _els], Text,
+                Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_conflict(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_conflict(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"feature-not-implemented">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"feature-not-implemented">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_feature_not_implemented(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_feature_not_implemented(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"forbidden">>, _attrs, _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"forbidden">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_forbidden(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_forbidden(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"gone">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason) ->
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"gone">>, _attrs, _} = _el | _els], Text,
+                Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text, decode_error_gone(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_gone(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"internal-server-error">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_internal_server_error(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_internal_server_error(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"item-not-found">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"item-not-found">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_item_not_found(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_item_not_found(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"jid-malformed">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"jid-malformed">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_jid_malformed(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_jid_malformed(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"not-acceptable">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"not-acceptable">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_not_acceptable(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_not_acceptable(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"not-allowed">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"not-allowed">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_not_allowed(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_not_allowed(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"not-authorized">>, _attrs,
-                  _} =
-                     _el
-                 | _els],
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_not_authorized(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_not_authorized(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"policy-violation">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"policy-violation">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_policy_violation(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_policy_violation(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"recipient-unavailable">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"recipient-unavailable">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_recipient_unavailable(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_recipient_unavailable(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"redirect">>, _attrs, _} =
-                     _el
-                 | _els],
-                Text, Reason) ->
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"redirect">>, _attrs, _} = _el | _els], Text,
+                Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_redirect(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_redirect(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"registration-required">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"registration-required">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_registration_required(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_registration_required(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"remote-server-not-found">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"remote-server-not-found">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_remote_server_not_found(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_remote_server_not_found(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"remote-server-timeout">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"remote-server-timeout">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_remote_server_timeout(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_remote_server_timeout(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"resource-constraint">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_resource_constraint(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_resource_constraint(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"service-unavailable">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"service-unavailable">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_service_unavailable(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_service_unavailable(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"subscription-required">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"subscription-required">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_subscription_required(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_subscription_required(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"undefined-condition">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_undefined_condition(_el));
-       true -> decode_error_els(_els, Text, Reason)
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_undefined_condition(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
     end;
-decode_error_els([{xmlel, <<"unexpected-request">>,
-                  _attrs, _} =
-                     _el
+decode_error_els(__TopXMLNS,
+                [{xmlel, <<"unexpected-request">>, _attrs, _} = _el
                  | _els],
                 Text, Reason) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns ==
         <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-          decode_error_els(_els, Text,
-                           decode_error_unexpected_request(_el));
-       true -> decode_error_els(_els, Text, Reason)
-    end;
-decode_error_els([_ | _els], Text, Reason) ->
-    decode_error_els(_els, Text, Reason).
-
-decode_error_attrs([{<<"type">>, _val} | _attrs], _Type,
+          decode_error_els(__TopXMLNS, _els, Text,
+                           decode_error_unexpected_request(_xmlns, _el));
+       true -> decode_error_els(__TopXMLNS, _els, Text, Reason)
+    end;
+decode_error_els(__TopXMLNS, [_ | _els], Text,
+                Reason) ->
+    decode_error_els(__TopXMLNS, _els, Text, Reason).
+
+decode_error_attrs(__TopXMLNS,
+                  [{<<"type">>, _val} | _attrs], _Type, By) ->
+    decode_error_attrs(__TopXMLNS, _attrs, _val, By);
+decode_error_attrs(__TopXMLNS,
+                  [{<<"by">>, _val} | _attrs], Type, _By) ->
+    decode_error_attrs(__TopXMLNS, _attrs, Type, _val);
+decode_error_attrs(__TopXMLNS, [_ | _attrs], Type,
                   By) ->
-    decode_error_attrs(_attrs, _val, By);
-decode_error_attrs([{<<"by">>, _val} | _attrs], Type,
-                  _By) ->
-    decode_error_attrs(_attrs, Type, _val);
-decode_error_attrs([_ | _attrs], Type, By) ->
-    decode_error_attrs(_attrs, Type, By);
-decode_error_attrs([], Type, By) ->
-    {decode_error_attr_type(Type),
-     decode_error_attr_by(By)}.
+    decode_error_attrs(__TopXMLNS, _attrs, Type, By);
+decode_error_attrs(__TopXMLNS, [], Type, By) ->
+    {decode_error_attr_type(__TopXMLNS, Type),
+     decode_error_attr_by(__TopXMLNS, By)}.
 
 encode_error({error, Type, By, Reason, Text},
             _xmlns_attrs) ->
@@ -13187,53 +13994,54 @@ encode_error({error, Type, By, Reason, Text},
                                       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
      | _acc].
 
-decode_error_attr_type(undefined) ->
+decode_error_attr_type(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"error">>,
-                  <<"jabber:client">>}});
-decode_error_attr_type(_val) ->
+                 {missing_attr, <<"type">>, <<"error">>, __TopXMLNS}});
+decode_error_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [auth, cancel, continue, modify, wait])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"error">>,
-                        <<"jabber:client">>}});
+                       {bad_attr_value, <<"type">>, <<"error">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_error_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_error_attr_by(undefined) -> undefined;
-decode_error_attr_by(_val) -> _val.
+decode_error_attr_by(__TopXMLNS, undefined) ->
+    undefined;
+decode_error_attr_by(__TopXMLNS, _val) -> _val.
 
 encode_error_attr_by(undefined, _acc) -> _acc;
 encode_error_attr_by(_val, _acc) ->
     [{<<"by">>, _val} | _acc].
 
-decode_error_text({xmlel, <<"text">>, _attrs, _els}) ->
-    Data = decode_error_text_els(_els, <<>>),
-    Lang = decode_error_text_attrs(_attrs, undefined),
+decode_error_text(__TopXMLNS,
+                 {xmlel, <<"text">>, _attrs, _els}) ->
+    Data = decode_error_text_els(__TopXMLNS, _els, <<>>),
+    Lang = decode_error_text_attrs(__TopXMLNS, _attrs,
+                                  undefined),
     {text, Lang, Data}.
 
-decode_error_text_els([], Data) ->
-    decode_error_text_cdata(Data);
-decode_error_text_els([{xmlcdata, _data} | _els],
-                     Data) ->
-    decode_error_text_els(_els,
+decode_error_text_els(__TopXMLNS, [], Data) ->
+    decode_error_text_cdata(__TopXMLNS, Data);
+decode_error_text_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Data) ->
+    decode_error_text_els(__TopXMLNS, _els,
                          <<Data/binary, _data/binary>>);
-decode_error_text_els([_ | _els], Data) ->
-    decode_error_text_els(_els, Data).
-
-decode_error_text_attrs([{<<"xml:lang">>, _val}
-                        | _attrs],
-                       _Lang) ->
-    decode_error_text_attrs(_attrs, _val);
-decode_error_text_attrs([_ | _attrs], Lang) ->
-    decode_error_text_attrs(_attrs, Lang);
-decode_error_text_attrs([], Lang) ->
-    'decode_error_text_attr_xml:lang'(Lang).
+decode_error_text_els(__TopXMLNS, [_ | _els], Data) ->
+    decode_error_text_els(__TopXMLNS, _els, Data).
+
+decode_error_text_attrs(__TopXMLNS,
+                       [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_error_text_attrs(__TopXMLNS, _attrs, _val);
+decode_error_text_attrs(__TopXMLNS, [_ | _attrs],
+                       Lang) ->
+    decode_error_text_attrs(__TopXMLNS, _attrs, Lang);
+decode_error_text_attrs(__TopXMLNS, [], Lang) ->
+    'decode_error_text_attr_xml:lang'(__TopXMLNS, Lang).
 
 encode_error_text({text, Lang, Data}, _xmlns_attrs) ->
     _els = encode_error_text_cdata(Data, []),
@@ -13241,24 +14049,27 @@ encode_error_text({text, Lang, Data}, _xmlns_attrs) ->
                                               _xmlns_attrs),
     {xmlel, <<"text">>, _attrs, _els}.
 
-'decode_error_text_attr_xml:lang'(undefined) ->
+'decode_error_text_attr_xml:lang'(__TopXMLNS,
+                                 undefined) ->
     undefined;
-'decode_error_text_attr_xml:lang'(_val) -> _val.
+'decode_error_text_attr_xml:lang'(__TopXMLNS, _val) ->
+    _val.
 
 'encode_error_text_attr_xml:lang'(undefined, _acc) ->
     _acc;
 'encode_error_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_error_text_cdata(<<>>) -> undefined;
-decode_error_text_cdata(_val) -> _val.
+decode_error_text_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_error_text_cdata(__TopXMLNS, _val) -> _val.
 
 encode_error_text_cdata(undefined, _acc) -> _acc;
 encode_error_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_error_unexpected_request({xmlel,
-                                <<"unexpected-request">>, _attrs, _els}) ->
+decode_error_unexpected_request(__TopXMLNS,
+                               {xmlel, <<"unexpected-request">>, _attrs,
+                                _els}) ->
     'unexpected-request'.
 
 encode_error_unexpected_request('unexpected-request',
@@ -13267,8 +14078,9 @@ encode_error_unexpected_request('unexpected-request',
     _attrs = _xmlns_attrs,
     {xmlel, <<"unexpected-request">>, _attrs, _els}.
 
-decode_error_undefined_condition({xmlel,
-                                 <<"undefined-condition">>, _attrs, _els}) ->
+decode_error_undefined_condition(__TopXMLNS,
+                                {xmlel, <<"undefined-condition">>, _attrs,
+                                 _els}) ->
     'undefined-condition'.
 
 encode_error_undefined_condition('undefined-condition',
@@ -13277,8 +14089,8 @@ encode_error_undefined_condition('undefined-condition',
     _attrs = _xmlns_attrs,
     {xmlel, <<"undefined-condition">>, _attrs, _els}.
 
-decode_error_subscription_required({xmlel,
-                                   <<"subscription-required">>, _attrs,
+decode_error_subscription_required(__TopXMLNS,
+                                  {xmlel, <<"subscription-required">>, _attrs,
                                    _els}) ->
     'subscription-required'.
 
@@ -13288,8 +14100,9 @@ encode_error_subscription_required('subscription-required',
     _attrs = _xmlns_attrs,
     {xmlel, <<"subscription-required">>, _attrs, _els}.
 
-decode_error_service_unavailable({xmlel,
-                                 <<"service-unavailable">>, _attrs, _els}) ->
+decode_error_service_unavailable(__TopXMLNS,
+                                {xmlel, <<"service-unavailable">>, _attrs,
+                                 _els}) ->
     'service-unavailable'.
 
 encode_error_service_unavailable('service-unavailable',
@@ -13298,8 +14111,9 @@ encode_error_service_unavailable('service-unavailable',
     _attrs = _xmlns_attrs,
     {xmlel, <<"service-unavailable">>, _attrs, _els}.
 
-decode_error_resource_constraint({xmlel,
-                                 <<"resource-constraint">>, _attrs, _els}) ->
+decode_error_resource_constraint(__TopXMLNS,
+                                {xmlel, <<"resource-constraint">>, _attrs,
+                                 _els}) ->
     'resource-constraint'.
 
 encode_error_resource_constraint('resource-constraint',
@@ -13308,8 +14122,8 @@ encode_error_resource_constraint('resource-constraint',
     _attrs = _xmlns_attrs,
     {xmlel, <<"resource-constraint">>, _attrs, _els}.
 
-decode_error_remote_server_timeout({xmlel,
-                                   <<"remote-server-timeout">>, _attrs,
+decode_error_remote_server_timeout(__TopXMLNS,
+                                  {xmlel, <<"remote-server-timeout">>, _attrs,
                                    _els}) ->
     'remote-server-timeout'.
 
@@ -13319,9 +14133,9 @@ encode_error_remote_server_timeout('remote-server-timeout',
     _attrs = _xmlns_attrs,
     {xmlel, <<"remote-server-timeout">>, _attrs, _els}.
 
-decode_error_remote_server_not_found({xmlel,
-                                     <<"remote-server-not-found">>, _attrs,
-                                     _els}) ->
+decode_error_remote_server_not_found(__TopXMLNS,
+                                    {xmlel, <<"remote-server-not-found">>,
+                                     _attrs, _els}) ->
     'remote-server-not-found'.
 
 encode_error_remote_server_not_found('remote-server-not-found',
@@ -13330,8 +14144,8 @@ encode_error_remote_server_not_found('remote-server-not-found',
     _attrs = _xmlns_attrs,
     {xmlel, <<"remote-server-not-found">>, _attrs, _els}.
 
-decode_error_registration_required({xmlel,
-                                   <<"registration-required">>, _attrs,
+decode_error_registration_required(__TopXMLNS,
+                                  {xmlel, <<"registration-required">>, _attrs,
                                    _els}) ->
     'registration-required'.
 
@@ -13341,34 +14155,36 @@ encode_error_registration_required('registration-required',
     _attrs = _xmlns_attrs,
     {xmlel, <<"registration-required">>, _attrs, _els}.
 
-decode_error_redirect({xmlel, <<"redirect">>, _attrs,
-                      _els}) ->
-    Uri = decode_error_redirect_els(_els, <<>>),
+decode_error_redirect(__TopXMLNS,
+                     {xmlel, <<"redirect">>, _attrs, _els}) ->
+    Uri = decode_error_redirect_els(__TopXMLNS, _els, <<>>),
     {redirect, Uri}.
 
-decode_error_redirect_els([], Uri) ->
-    decode_error_redirect_cdata(Uri);
-decode_error_redirect_els([{xmlcdata, _data} | _els],
-                         Uri) ->
-    decode_error_redirect_els(_els,
+decode_error_redirect_els(__TopXMLNS, [], Uri) ->
+    decode_error_redirect_cdata(__TopXMLNS, Uri);
+decode_error_redirect_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Uri) ->
+    decode_error_redirect_els(__TopXMLNS, _els,
                              <<Uri/binary, _data/binary>>);
-decode_error_redirect_els([_ | _els], Uri) ->
-    decode_error_redirect_els(_els, Uri).
+decode_error_redirect_els(__TopXMLNS, [_ | _els],
+                         Uri) ->
+    decode_error_redirect_els(__TopXMLNS, _els, Uri).
 
 encode_error_redirect({redirect, Uri}, _xmlns_attrs) ->
     _els = encode_error_redirect_cdata(Uri, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"redirect">>, _attrs, _els}.
 
-decode_error_redirect_cdata(<<>>) -> undefined;
-decode_error_redirect_cdata(_val) -> _val.
+decode_error_redirect_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_error_redirect_cdata(__TopXMLNS, _val) -> _val.
 
 encode_error_redirect_cdata(undefined, _acc) -> _acc;
 encode_error_redirect_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_error_recipient_unavailable({xmlel,
-                                   <<"recipient-unavailable">>, _attrs,
+decode_error_recipient_unavailable(__TopXMLNS,
+                                  {xmlel, <<"recipient-unavailable">>, _attrs,
                                    _els}) ->
     'recipient-unavailable'.
 
@@ -13378,8 +14194,8 @@ encode_error_recipient_unavailable('recipient-unavailable',
     _attrs = _xmlns_attrs,
     {xmlel, <<"recipient-unavailable">>, _attrs, _els}.
 
-decode_error_policy_violation({xmlel,
-                              <<"policy-violation">>, _attrs, _els}) ->
+decode_error_policy_violation(__TopXMLNS,
+                             {xmlel, <<"policy-violation">>, _attrs, _els}) ->
     'policy-violation'.
 
 encode_error_policy_violation('policy-violation',
@@ -13388,8 +14204,8 @@ encode_error_policy_violation('policy-violation',
     _attrs = _xmlns_attrs,
     {xmlel, <<"policy-violation">>, _attrs, _els}.
 
-decode_error_not_authorized({xmlel,
-                            <<"not-authorized">>, _attrs, _els}) ->
+decode_error_not_authorized(__TopXMLNS,
+                           {xmlel, <<"not-authorized">>, _attrs, _els}) ->
     'not-authorized'.
 
 encode_error_not_authorized('not-authorized',
@@ -13398,8 +14214,8 @@ encode_error_not_authorized('not-authorized',
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-authorized">>, _attrs, _els}.
 
-decode_error_not_allowed({xmlel, <<"not-allowed">>,
-                         _attrs, _els}) ->
+decode_error_not_allowed(__TopXMLNS,
+                        {xmlel, <<"not-allowed">>, _attrs, _els}) ->
     'not-allowed'.
 
 encode_error_not_allowed('not-allowed', _xmlns_attrs) ->
@@ -13407,8 +14223,8 @@ encode_error_not_allowed('not-allowed', _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-allowed">>, _attrs, _els}.
 
-decode_error_not_acceptable({xmlel,
-                            <<"not-acceptable">>, _attrs, _els}) ->
+decode_error_not_acceptable(__TopXMLNS,
+                           {xmlel, <<"not-acceptable">>, _attrs, _els}) ->
     'not-acceptable'.
 
 encode_error_not_acceptable('not-acceptable',
@@ -13417,8 +14233,8 @@ encode_error_not_acceptable('not-acceptable',
     _attrs = _xmlns_attrs,
     {xmlel, <<"not-acceptable">>, _attrs, _els}.
 
-decode_error_jid_malformed({xmlel, <<"jid-malformed">>,
-                           _attrs, _els}) ->
+decode_error_jid_malformed(__TopXMLNS,
+                          {xmlel, <<"jid-malformed">>, _attrs, _els}) ->
     'jid-malformed'.
 
 encode_error_jid_malformed('jid-malformed',
@@ -13427,8 +14243,8 @@ encode_error_jid_malformed('jid-malformed',
     _attrs = _xmlns_attrs,
     {xmlel, <<"jid-malformed">>, _attrs, _els}.
 
-decode_error_item_not_found({xmlel,
-                            <<"item-not-found">>, _attrs, _els}) ->
+decode_error_item_not_found(__TopXMLNS,
+                           {xmlel, <<"item-not-found">>, _attrs, _els}) ->
     'item-not-found'.
 
 encode_error_item_not_found('item-not-found',
@@ -13437,8 +14253,8 @@ encode_error_item_not_found('item-not-found',
     _attrs = _xmlns_attrs,
     {xmlel, <<"item-not-found">>, _attrs, _els}.
 
-decode_error_internal_server_error({xmlel,
-                                   <<"internal-server-error">>, _attrs,
+decode_error_internal_server_error(__TopXMLNS,
+                                  {xmlel, <<"internal-server-error">>, _attrs,
                                    _els}) ->
     'internal-server-error'.
 
@@ -13448,32 +14264,34 @@ encode_error_internal_server_error('internal-server-error',
     _attrs = _xmlns_attrs,
     {xmlel, <<"internal-server-error">>, _attrs, _els}.
 
-decode_error_gone({xmlel, <<"gone">>, _attrs, _els}) ->
-    Uri = decode_error_gone_els(_els, <<>>), {gone, Uri}.
+decode_error_gone(__TopXMLNS,
+                 {xmlel, <<"gone">>, _attrs, _els}) ->
+    Uri = decode_error_gone_els(__TopXMLNS, _els, <<>>),
+    {gone, Uri}.
 
-decode_error_gone_els([], Uri) ->
-    decode_error_gone_cdata(Uri);
-decode_error_gone_els([{xmlcdata, _data} | _els],
-                     Uri) ->
-    decode_error_gone_els(_els,
+decode_error_gone_els(__TopXMLNS, [], Uri) ->
+    decode_error_gone_cdata(__TopXMLNS, Uri);
+decode_error_gone_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Uri) ->
+    decode_error_gone_els(__TopXMLNS, _els,
                          <<Uri/binary, _data/binary>>);
-decode_error_gone_els([_ | _els], Uri) ->
-    decode_error_gone_els(_els, Uri).
+decode_error_gone_els(__TopXMLNS, [_ | _els], Uri) ->
+    decode_error_gone_els(__TopXMLNS, _els, Uri).
 
 encode_error_gone({gone, Uri}, _xmlns_attrs) ->
     _els = encode_error_gone_cdata(Uri, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"gone">>, _attrs, _els}.
 
-decode_error_gone_cdata(<<>>) -> undefined;
-decode_error_gone_cdata(_val) -> _val.
+decode_error_gone_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_error_gone_cdata(__TopXMLNS, _val) -> _val.
 
 encode_error_gone_cdata(undefined, _acc) -> _acc;
 encode_error_gone_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_error_forbidden({xmlel, <<"forbidden">>, _attrs,
-                       _els}) ->
+decode_error_forbidden(__TopXMLNS,
+                      {xmlel, <<"forbidden">>, _attrs, _els}) ->
     forbidden.
 
 encode_error_forbidden(forbidden, _xmlns_attrs) ->
@@ -13481,9 +14299,9 @@ encode_error_forbidden(forbidden, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"forbidden">>, _attrs, _els}.
 
-decode_error_feature_not_implemented({xmlel,
-                                     <<"feature-not-implemented">>, _attrs,
-                                     _els}) ->
+decode_error_feature_not_implemented(__TopXMLNS,
+                                    {xmlel, <<"feature-not-implemented">>,
+                                     _attrs, _els}) ->
     'feature-not-implemented'.
 
 encode_error_feature_not_implemented('feature-not-implemented',
@@ -13492,8 +14310,8 @@ encode_error_feature_not_implemented('feature-not-implemented',
     _attrs = _xmlns_attrs,
     {xmlel, <<"feature-not-implemented">>, _attrs, _els}.
 
-decode_error_conflict({xmlel, <<"conflict">>, _attrs,
-                      _els}) ->
+decode_error_conflict(__TopXMLNS,
+                     {xmlel, <<"conflict">>, _attrs, _els}) ->
     conflict.
 
 encode_error_conflict(conflict, _xmlns_attrs) ->
@@ -13501,8 +14319,8 @@ encode_error_conflict(conflict, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"conflict">>, _attrs, _els}.
 
-decode_error_bad_request({xmlel, <<"bad-request">>,
-                         _attrs, _els}) ->
+decode_error_bad_request(__TopXMLNS,
+                        {xmlel, <<"bad-request">>, _attrs, _els}) ->
     'bad-request'.
 
 encode_error_bad_request('bad-request', _xmlns_attrs) ->
@@ -13510,112 +14328,122 @@ encode_error_bad_request('bad-request', _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"bad-request">>, _attrs, _els}.
 
-decode_presence({xmlel, <<"presence">>, _attrs,
-                _els}) ->
+decode_presence(__TopXMLNS,
+               {xmlel, <<"presence">>, _attrs, _els}) ->
     {Error, Status, Show, Priority, __Els} =
-       decode_presence_els(_els, undefined, [], undefined,
-                           undefined, []),
+       decode_presence_els(__TopXMLNS, _els, undefined, [],
+                           undefined, undefined, []),
     {Id, Type, From, To, Lang} =
-       decode_presence_attrs(_attrs, undefined, undefined,
-                             undefined, undefined, undefined),
+       decode_presence_attrs(__TopXMLNS, _attrs, undefined,
+                             undefined, undefined, undefined, undefined),
     {presence, Id, Type, Lang, From, To, Show, Status,
      Priority, Error, __Els}.
 
-decode_presence_els([], Error, Status, Show, Priority,
-                   __Els) ->
+decode_presence_els(__TopXMLNS, [], Error, Status, Show,
+                   Priority, __Els) ->
     {Error, lists:reverse(Status), Show, Priority,
      lists:reverse(__Els)};
-decode_presence_els([{xmlel, <<"error">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Error, Status, Show, Priority, __Els) ->
+decode_presence_els(__TopXMLNS,
+                   [{xmlel, <<"error">>, _attrs, _} = _el | _els], Error,
+                   Status, Show, Priority, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_presence_els(_els, decode_error(_el), Status,
-                              Show, Priority, __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_presence_els(__TopXMLNS, _els,
+                              decode_error(__TopXMLNS, _el), Status, Show,
+                              Priority, __Els);
        true ->
-          decode_presence_els(_els, Error, Status, Show, Priority,
-                              __Els)
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              Show, Priority, __Els)
     end;
-decode_presence_els([{xmlel, <<"show">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Error, Status, Show, Priority, __Els) ->
+decode_presence_els(__TopXMLNS,
+                   [{xmlel, <<"show">>, _attrs, _} = _el | _els], Error,
+                   Status, Show, Priority, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_presence_els(_els, Error, Status,
-                              decode_presence_show(_el), Priority, __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              decode_presence_show(__TopXMLNS, _el), Priority,
+                              __Els);
        true ->
-          decode_presence_els(_els, Error, Status, Show, Priority,
-                              __Els)
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              Show, Priority, __Els)
     end;
-decode_presence_els([{xmlel, <<"status">>, _attrs, _} =
-                        _el
-                    | _els],
-                   Error, Status, Show, Priority, __Els) ->
+decode_presence_els(__TopXMLNS,
+                   [{xmlel, <<"status">>, _attrs, _} = _el | _els], Error,
+                   Status, Show, Priority, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_presence_els(_els, Error,
-                              [decode_presence_status(_el) | Status], Show,
-                              Priority, __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_presence_els(__TopXMLNS, _els, Error,
+                              [decode_presence_status(__TopXMLNS, _el)
+                               | Status],
+                              Show, Priority, __Els);
        true ->
-          decode_presence_els(_els, Error, Status, Show, Priority,
-                              __Els)
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              Show, Priority, __Els)
     end;
-decode_presence_els([{xmlel, <<"priority">>, _attrs,
-                     _} =
-                        _el
-                    | _els],
+decode_presence_els(__TopXMLNS,
+                   [{xmlel, <<"priority">>, _attrs, _} = _el | _els],
                    Error, Status, Show, Priority, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_presence_els(_els, Error, Status, Show,
-                              decode_presence_priority(_el), __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              Show, decode_presence_priority(__TopXMLNS, _el),
+                              __Els);
        true ->
-          decode_presence_els(_els, Error, Status, Show, Priority,
-                              __Els)
+          decode_presence_els(__TopXMLNS, _els, Error, Status,
+                              Show, Priority, __Els)
     end;
-decode_presence_els([{xmlel, _, _, _} = _el | _els],
-                   Error, Status, Show, Priority, __Els) ->
+decode_presence_els(__TopXMLNS,
+                   [{xmlel, _, _, _} = _el | _els], Error, Status, Show,
+                   Priority, __Els) ->
     case is_known_tag(_el) of
       true ->
-         decode_presence_els(_els, Error, Status, Show, Priority,
-                             [decode(_el) | __Els]);
+         decode_presence_els(__TopXMLNS, _els, Error, Status,
+                             Show, Priority, [decode(_el) | __Els]);
       false ->
-         decode_presence_els(_els, Error, Status, Show, Priority,
-                             __Els)
+         decode_presence_els(__TopXMLNS, _els, Error, Status,
+                             Show, Priority, __Els)
     end;
-decode_presence_els([_ | _els], Error, Status, Show,
-                   Priority, __Els) ->
-    decode_presence_els(_els, Error, Status, Show, Priority,
-                       __Els).
+decode_presence_els(__TopXMLNS, [_ | _els], Error,
+                   Status, Show, Priority, __Els) ->
+    decode_presence_els(__TopXMLNS, _els, Error, Status,
+                       Show, Priority, __Els).
 
-decode_presence_attrs([{<<"id">>, _val} | _attrs], _Id,
-                     Type, From, To, Lang) ->
-    decode_presence_attrs(_attrs, _val, Type, From, To,
-                         Lang);
-decode_presence_attrs([{<<"type">>, _val} | _attrs], Id,
-                     _Type, From, To, Lang) ->
-    decode_presence_attrs(_attrs, Id, _val, From, To, Lang);
-decode_presence_attrs([{<<"from">>, _val} | _attrs], Id,
-                     Type, _From, To, Lang) ->
-    decode_presence_attrs(_attrs, Id, Type, _val, To, Lang);
-decode_presence_attrs([{<<"to">>, _val} | _attrs], Id,
-                     Type, From, _To, Lang) ->
-    decode_presence_attrs(_attrs, Id, Type, From, _val,
-                         Lang);
-decode_presence_attrs([{<<"xml:lang">>, _val} | _attrs],
-                     Id, Type, From, To, _Lang) ->
-    decode_presence_attrs(_attrs, Id, Type, From, To, _val);
-decode_presence_attrs([_ | _attrs], Id, Type, From, To,
+decode_presence_attrs(__TopXMLNS,
+                     [{<<"id">>, _val} | _attrs], _Id, Type, From, To,
                      Lang) ->
-    decode_presence_attrs(_attrs, Id, Type, From, To, Lang);
-decode_presence_attrs([], Id, Type, From, To, Lang) ->
-    {decode_presence_attr_id(Id),
-     decode_presence_attr_type(Type),
-     decode_presence_attr_from(From),
-     decode_presence_attr_to(To),
-     'decode_presence_attr_xml:lang'(Lang)}.
+    decode_presence_attrs(__TopXMLNS, _attrs, _val, Type,
+                         From, To, Lang);
+decode_presence_attrs(__TopXMLNS,
+                     [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
+                     Lang) ->
+    decode_presence_attrs(__TopXMLNS, _attrs, Id, _val,
+                         From, To, Lang);
+decode_presence_attrs(__TopXMLNS,
+                     [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
+                     Lang) ->
+    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
+                         _val, To, Lang);
+decode_presence_attrs(__TopXMLNS,
+                     [{<<"to">>, _val} | _attrs], Id, Type, From, _To,
+                     Lang) ->
+    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
+                         From, _val, Lang);
+decode_presence_attrs(__TopXMLNS,
+                     [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
+                     _Lang) ->
+    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
+                         From, To, _val);
+decode_presence_attrs(__TopXMLNS, [_ | _attrs], Id,
+                     Type, From, To, Lang) ->
+    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
+                         From, To, Lang);
+decode_presence_attrs(__TopXMLNS, [], Id, Type, From,
+                     To, Lang) ->
+    {decode_presence_attr_id(__TopXMLNS, Id),
+     decode_presence_attr_type(__TopXMLNS, Type),
+     decode_presence_attr_from(__TopXMLNS, From),
+     decode_presence_attr_to(__TopXMLNS, To),
+     'decode_presence_attr_xml:lang'(__TopXMLNS, Lang)}.
 
 encode_presence({presence, Id, Type, Lang, From, To,
                 Show, Status, Priority, Error, __Els},
@@ -13652,15 +14480,17 @@ encode_presence({presence, Id, Type, Lang, From, To,
 'encode_presence_$priority'(Priority, _acc) ->
     [encode_presence_priority(Priority, []) | _acc].
 
-decode_presence_attr_id(undefined) -> undefined;
-decode_presence_attr_id(_val) -> _val.
+decode_presence_attr_id(__TopXMLNS, undefined) ->
+    undefined;
+decode_presence_attr_id(__TopXMLNS, _val) -> _val.
 
 encode_presence_attr_id(undefined, _acc) -> _acc;
 encode_presence_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_presence_attr_type(undefined) -> undefined;
-decode_presence_attr_type(_val) ->
+decode_presence_attr_type(__TopXMLNS, undefined) ->
+    undefined;
+decode_presence_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [unavailable, subscribe, subscribed, unsubscribe,
                         unsubscribed, probe, error])
@@ -13668,7 +14498,7 @@ decode_presence_attr_type(_val) ->
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"type">>, <<"presence">>,
-                        <<"jabber:client">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13676,13 +14506,14 @@ encode_presence_attr_type(undefined, _acc) -> _acc;
 encode_presence_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_presence_attr_from(undefined) -> undefined;
-decode_presence_attr_from(_val) ->
+decode_presence_attr_from(__TopXMLNS, undefined) ->
+    undefined;
+decode_presence_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"from">>, <<"presence">>,
-                        <<"jabber:client">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13690,13 +14521,14 @@ encode_presence_attr_from(undefined, _acc) -> _acc;
 encode_presence_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_presence_attr_to(undefined) -> undefined;
-decode_presence_attr_to(_val) ->
+decode_presence_attr_to(__TopXMLNS, undefined) ->
+    undefined;
+decode_presence_attr_to(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"to">>, <<"presence">>,
-                        <<"jabber:client">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13704,39 +14536,45 @@ encode_presence_attr_to(undefined, _acc) -> _acc;
 encode_presence_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
-'decode_presence_attr_xml:lang'(undefined) -> undefined;
-'decode_presence_attr_xml:lang'(_val) -> _val.
+'decode_presence_attr_xml:lang'(__TopXMLNS,
+                               undefined) ->
+    undefined;
+'decode_presence_attr_xml:lang'(__TopXMLNS, _val) ->
+    _val.
 
 'encode_presence_attr_xml:lang'(undefined, _acc) ->
     _acc;
 'encode_presence_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_presence_priority({xmlel, <<"priority">>, _attrs,
-                         _els}) ->
-    Cdata = decode_presence_priority_els(_els, <<>>), Cdata.
+decode_presence_priority(__TopXMLNS,
+                        {xmlel, <<"priority">>, _attrs, _els}) ->
+    Cdata = decode_presence_priority_els(__TopXMLNS, _els,
+                                        <<>>),
+    Cdata.
 
-decode_presence_priority_els([], Cdata) ->
-    decode_presence_priority_cdata(Cdata);
-decode_presence_priority_els([{xmlcdata, _data} | _els],
-                            Cdata) ->
-    decode_presence_priority_els(_els,
+decode_presence_priority_els(__TopXMLNS, [], Cdata) ->
+    decode_presence_priority_cdata(__TopXMLNS, Cdata);
+decode_presence_priority_els(__TopXMLNS,
+                            [{xmlcdata, _data} | _els], Cdata) ->
+    decode_presence_priority_els(__TopXMLNS, _els,
                                 <<Cdata/binary, _data/binary>>);
-decode_presence_priority_els([_ | _els], Cdata) ->
-    decode_presence_priority_els(_els, Cdata).
+decode_presence_priority_els(__TopXMLNS, [_ | _els],
+                            Cdata) ->
+    decode_presence_priority_els(__TopXMLNS, _els, Cdata).
 
 encode_presence_priority(Cdata, _xmlns_attrs) ->
     _els = encode_presence_priority_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"priority">>, _attrs, _els}.
 
-decode_presence_priority_cdata(<<>>) -> undefined;
-decode_presence_priority_cdata(_val) ->
+decode_presence_priority_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_presence_priority_cdata(__TopXMLNS, _val) ->
     case catch dec_int(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"priority">>,
-                        <<"jabber:client">>}});
+                       {bad_cdata_value, <<>>, <<"priority">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13744,29 +14582,33 @@ encode_presence_priority_cdata(undefined, _acc) -> _acc;
 encode_presence_priority_cdata(_val, _acc) ->
     [{xmlcdata, enc_int(_val)} | _acc].
 
-decode_presence_status({xmlel, <<"status">>, _attrs,
-                       _els}) ->
-    Data = decode_presence_status_els(_els, <<>>),
-    Lang = decode_presence_status_attrs(_attrs, undefined),
+decode_presence_status(__TopXMLNS,
+                      {xmlel, <<"status">>, _attrs, _els}) ->
+    Data = decode_presence_status_els(__TopXMLNS, _els,
+                                     <<>>),
+    Lang = decode_presence_status_attrs(__TopXMLNS, _attrs,
+                                       undefined),
     {text, Lang, Data}.
 
-decode_presence_status_els([], Data) ->
-    decode_presence_status_cdata(Data);
-decode_presence_status_els([{xmlcdata, _data} | _els],
-                          Data) ->
-    decode_presence_status_els(_els,
+decode_presence_status_els(__TopXMLNS, [], Data) ->
+    decode_presence_status_cdata(__TopXMLNS, Data);
+decode_presence_status_els(__TopXMLNS,
+                          [{xmlcdata, _data} | _els], Data) ->
+    decode_presence_status_els(__TopXMLNS, _els,
                               <<Data/binary, _data/binary>>);
-decode_presence_status_els([_ | _els], Data) ->
-    decode_presence_status_els(_els, Data).
-
-decode_presence_status_attrs([{<<"xml:lang">>, _val}
-                             | _attrs],
-                            _Lang) ->
-    decode_presence_status_attrs(_attrs, _val);
-decode_presence_status_attrs([_ | _attrs], Lang) ->
-    decode_presence_status_attrs(_attrs, Lang);
-decode_presence_status_attrs([], Lang) ->
-    'decode_presence_status_attr_xml:lang'(Lang).
+decode_presence_status_els(__TopXMLNS, [_ | _els],
+                          Data) ->
+    decode_presence_status_els(__TopXMLNS, _els, Data).
+
+decode_presence_status_attrs(__TopXMLNS,
+                            [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_presence_status_attrs(__TopXMLNS, _attrs, _val);
+decode_presence_status_attrs(__TopXMLNS, [_ | _attrs],
+                            Lang) ->
+    decode_presence_status_attrs(__TopXMLNS, _attrs, Lang);
+decode_presence_status_attrs(__TopXMLNS, [], Lang) ->
+    'decode_presence_status_attr_xml:lang'(__TopXMLNS,
+                                          Lang).
 
 encode_presence_status({text, Lang, Data},
                       _xmlns_attrs) ->
@@ -13775,9 +14617,12 @@ encode_presence_status({text, Lang, Data},
                                                    _xmlns_attrs),
     {xmlel, <<"status">>, _attrs, _els}.
 
-'decode_presence_status_attr_xml:lang'(undefined) ->
+'decode_presence_status_attr_xml:lang'(__TopXMLNS,
+                                      undefined) ->
     undefined;
-'decode_presence_status_attr_xml:lang'(_val) -> _val.
+'decode_presence_status_attr_xml:lang'(__TopXMLNS,
+                                      _val) ->
+    _val.
 
 'encode_presence_status_attr_xml:lang'(undefined,
                                       _acc) ->
@@ -13785,38 +14630,42 @@ encode_presence_status({text, Lang, Data},
 'encode_presence_status_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_presence_status_cdata(<<>>) -> undefined;
-decode_presence_status_cdata(_val) -> _val.
+decode_presence_status_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_presence_status_cdata(__TopXMLNS, _val) -> _val.
 
 encode_presence_status_cdata(undefined, _acc) -> _acc;
 encode_presence_status_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_presence_show({xmlel, <<"show">>, _attrs,
-                     _els}) ->
-    Cdata = decode_presence_show_els(_els, <<>>), Cdata.
+decode_presence_show(__TopXMLNS,
+                    {xmlel, <<"show">>, _attrs, _els}) ->
+    Cdata = decode_presence_show_els(__TopXMLNS, _els,
+                                    <<>>),
+    Cdata.
 
-decode_presence_show_els([], Cdata) ->
-    decode_presence_show_cdata(Cdata);
-decode_presence_show_els([{xmlcdata, _data} | _els],
-                        Cdata) ->
-    decode_presence_show_els(_els,
+decode_presence_show_els(__TopXMLNS, [], Cdata) ->
+    decode_presence_show_cdata(__TopXMLNS, Cdata);
+decode_presence_show_els(__TopXMLNS,
+                        [{xmlcdata, _data} | _els], Cdata) ->
+    decode_presence_show_els(__TopXMLNS, _els,
                             <<Cdata/binary, _data/binary>>);
-decode_presence_show_els([_ | _els], Cdata) ->
-    decode_presence_show_els(_els, Cdata).
+decode_presence_show_els(__TopXMLNS, [_ | _els],
+                        Cdata) ->
+    decode_presence_show_els(__TopXMLNS, _els, Cdata).
 
 encode_presence_show(Cdata, _xmlns_attrs) ->
     _els = encode_presence_show_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"show">>, _attrs, _els}.
 
-decode_presence_show_cdata(<<>>) -> undefined;
-decode_presence_show_cdata(_val) ->
+decode_presence_show_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_presence_show_cdata(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [away, chat, dnd, xa]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"show">>,
-                        <<"jabber:client">>}});
+                       {bad_cdata_value, <<>>, <<"show">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13824,109 +14673,123 @@ encode_presence_show_cdata(undefined, _acc) -> _acc;
 encode_presence_show_cdata(_val, _acc) ->
     [{xmlcdata, enc_enum(_val)} | _acc].
 
-decode_message({xmlel, <<"message">>, _attrs, _els}) ->
+decode_message(__TopXMLNS,
+              {xmlel, <<"message">>, _attrs, _els}) ->
     {Error, Thread, Subject, Body, __Els} =
-       decode_message_els(_els, undefined, undefined, [], [],
-                          []),
+       decode_message_els(__TopXMLNS, _els, undefined,
+                          undefined, [], [], []),
     {Id, Type, From, To, Lang} =
-       decode_message_attrs(_attrs, undefined, undefined,
-                            undefined, undefined, undefined),
+       decode_message_attrs(__TopXMLNS, _attrs, undefined,
+                            undefined, undefined, undefined, undefined),
     {message, Id, Type, Lang, From, To, Subject, Body,
      Thread, Error, __Els}.
 
-decode_message_els([], Error, Thread, Subject, Body,
-                  __Els) ->
+decode_message_els(__TopXMLNS, [], Error, Thread,
+                  Subject, Body, __Els) ->
     {Error, Thread, lists:reverse(Subject),
      lists:reverse(Body), lists:reverse(__Els)};
-decode_message_els([{xmlel, <<"error">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Error, Thread, Subject, Body, __Els) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_message_els(_els, decode_error(_el), Thread,
-                             Subject, Body, __Els);
-       true ->
-          decode_message_els(_els, Error, Thread, Subject, Body,
-                             __Els)
-    end;
-decode_message_els([{xmlel, <<"subject">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Error, Thread, Subject, Body, __Els) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_message_els(_els, Error, Thread,
-                             [decode_message_subject(_el) | Subject], Body,
-                             __Els);
+decode_message_els(__TopXMLNS,
+                  [{xmlel, <<"error">>, _attrs, _} = _el | _els], Error,
+                  Thread, Subject, Body, __Els) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_message_els(__TopXMLNS, _els,
+                             decode_error(__TopXMLNS, _el), Thread, Subject,
+                             Body, __Els);
        true ->
-          decode_message_els(_els, Error, Thread, Subject, Body,
-                             __Els)
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             Subject, Body, __Els)
+    end;
+decode_message_els(__TopXMLNS,
+                  [{xmlel, <<"subject">>, _attrs, _} = _el | _els], Error,
+                  Thread, Subject, Body, __Els) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             [decode_message_subject(__TopXMLNS, _el)
+                              | Subject],
+                             Body, __Els);
+       true ->
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             Subject, Body, __Els)
     end;
-decode_message_els([{xmlel, <<"thread">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Error, Thread, Subject, Body, __Els) ->
+decode_message_els(__TopXMLNS,
+                  [{xmlel, <<"thread">>, _attrs, _} = _el | _els], Error,
+                  Thread, Subject, Body, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_message_els(_els, Error,
-                             decode_message_thread(_el), Subject, Body, __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_message_els(__TopXMLNS, _els, Error,
+                             decode_message_thread(__TopXMLNS, _el), Subject,
+                             Body, __Els);
        true ->
-          decode_message_els(_els, Error, Thread, Subject, Body,
-                             __Els)
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             Subject, Body, __Els)
     end;
-decode_message_els([{xmlel, <<"body">>, _attrs, _} = _el
-                   | _els],
-                  Error, Thread, Subject, Body, __Els) ->
+decode_message_els(__TopXMLNS,
+                  [{xmlel, <<"body">>, _attrs, _} = _el | _els], Error,
+                  Thread, Subject, Body, __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_message_els(_els, Error, Thread, Subject,
-                             [decode_message_body(_el) | Body], __Els);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             Subject,
+                             [decode_message_body(__TopXMLNS, _el) | Body],
+                             __Els);
        true ->
-          decode_message_els(_els, Error, Thread, Subject, Body,
-                             __Els)
+          decode_message_els(__TopXMLNS, _els, Error, Thread,
+                             Subject, Body, __Els)
     end;
-decode_message_els([{xmlel, _, _, _} = _el | _els],
-                  Error, Thread, Subject, Body, __Els) ->
+decode_message_els(__TopXMLNS,
+                  [{xmlel, _, _, _} = _el | _els], Error, Thread, Subject,
+                  Body, __Els) ->
     case is_known_tag(_el) of
       true ->
-         decode_message_els(_els, Error, Thread, Subject, Body,
-                            [decode(_el) | __Els]);
+         decode_message_els(__TopXMLNS, _els, Error, Thread,
+                            Subject, Body, [decode(_el) | __Els]);
       false ->
-         decode_message_els(_els, Error, Thread, Subject, Body,
-                            __Els)
+         decode_message_els(__TopXMLNS, _els, Error, Thread,
+                            Subject, Body, __Els)
     end;
-decode_message_els([_ | _els], Error, Thread, Subject,
-                  Body, __Els) ->
-    decode_message_els(_els, Error, Thread, Subject, Body,
-                      __Els).
-
-decode_message_attrs([{<<"id">>, _val} | _attrs], _Id,
-                    Type, From, To, Lang) ->
-    decode_message_attrs(_attrs, _val, Type, From, To,
-                        Lang);
-decode_message_attrs([{<<"type">>, _val} | _attrs], Id,
-                    _Type, From, To, Lang) ->
-    decode_message_attrs(_attrs, Id, _val, From, To, Lang);
-decode_message_attrs([{<<"from">>, _val} | _attrs], Id,
-                    Type, _From, To, Lang) ->
-    decode_message_attrs(_attrs, Id, Type, _val, To, Lang);
-decode_message_attrs([{<<"to">>, _val} | _attrs], Id,
-                    Type, From, _To, Lang) ->
-    decode_message_attrs(_attrs, Id, Type, From, _val,
-                        Lang);
-decode_message_attrs([{<<"xml:lang">>, _val} | _attrs],
-                    Id, Type, From, To, _Lang) ->
-    decode_message_attrs(_attrs, Id, Type, From, To, _val);
-decode_message_attrs([_ | _attrs], Id, Type, From, To,
+decode_message_els(__TopXMLNS, [_ | _els], Error,
+                  Thread, Subject, Body, __Els) ->
+    decode_message_els(__TopXMLNS, _els, Error, Thread,
+                      Subject, Body, __Els).
+
+decode_message_attrs(__TopXMLNS,
+                    [{<<"id">>, _val} | _attrs], _Id, Type, From, To,
+                    Lang) ->
+    decode_message_attrs(__TopXMLNS, _attrs, _val, Type,
+                        From, To, Lang);
+decode_message_attrs(__TopXMLNS,
+                    [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
                     Lang) ->
-    decode_message_attrs(_attrs, Id, Type, From, To, Lang);
-decode_message_attrs([], Id, Type, From, To, Lang) ->
-    {decode_message_attr_id(Id),
-     decode_message_attr_type(Type),
-     decode_message_attr_from(From),
-     decode_message_attr_to(To),
-     'decode_message_attr_xml:lang'(Lang)}.
+    decode_message_attrs(__TopXMLNS, _attrs, Id, _val, From,
+                        To, Lang);
+decode_message_attrs(__TopXMLNS,
+                    [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
+                    Lang) ->
+    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, _val,
+                        To, Lang);
+decode_message_attrs(__TopXMLNS,
+                    [{<<"to">>, _val} | _attrs], Id, Type, From, _To,
+                    Lang) ->
+    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
+                        _val, Lang);
+decode_message_attrs(__TopXMLNS,
+                    [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
+                    _Lang) ->
+    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
+                        To, _val);
+decode_message_attrs(__TopXMLNS, [_ | _attrs], Id, Type,
+                    From, To, Lang) ->
+    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
+                        To, Lang);
+decode_message_attrs(__TopXMLNS, [], Id, Type, From, To,
+                    Lang) ->
+    {decode_message_attr_id(__TopXMLNS, Id),
+     decode_message_attr_type(__TopXMLNS, Type),
+     decode_message_attr_from(__TopXMLNS, From),
+     decode_message_attr_to(__TopXMLNS, To),
+     'decode_message_attr_xml:lang'(__TopXMLNS, Lang)}.
 
 encode_message({message, Id, Type, Lang, From, To,
                Subject, Body, Thread, Error, __Els},
@@ -13964,22 +14827,24 @@ encode_message({message, Id, Type, Lang, From, To,
     'encode_message_$body'(_els,
                           [encode_message_body(Body, []) | _acc]).
 
-decode_message_attr_id(undefined) -> undefined;
-decode_message_attr_id(_val) -> _val.
+decode_message_attr_id(__TopXMLNS, undefined) ->
+    undefined;
+decode_message_attr_id(__TopXMLNS, _val) -> _val.
 
 encode_message_attr_id(undefined, _acc) -> _acc;
 encode_message_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_message_attr_type(undefined) -> normal;
-decode_message_attr_type(_val) ->
+decode_message_attr_type(__TopXMLNS, undefined) ->
+    normal;
+decode_message_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val,
                        [chat, normal, groupchat, headline, error])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"type">>, <<"message">>,
-                        <<"jabber:client">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -13987,13 +14852,14 @@ encode_message_attr_type(normal, _acc) -> _acc;
 encode_message_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_message_attr_from(undefined) -> undefined;
-decode_message_attr_from(_val) ->
+decode_message_attr_from(__TopXMLNS, undefined) ->
+    undefined;
+decode_message_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"from">>, <<"message">>,
-                        <<"jabber:client">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -14001,13 +14867,13 @@ encode_message_attr_from(undefined, _acc) -> _acc;
 encode_message_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_message_attr_to(undefined) -> undefined;
-decode_message_attr_to(_val) ->
+decode_message_attr_to(__TopXMLNS, undefined) ->
+    undefined;
+decode_message_attr_to(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"message">>,
-                        <<"jabber:client">>}});
+                       {bad_attr_value, <<"to">>, <<"message">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -14015,61 +14881,68 @@ encode_message_attr_to(undefined, _acc) -> _acc;
 encode_message_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
-'decode_message_attr_xml:lang'(undefined) -> undefined;
-'decode_message_attr_xml:lang'(_val) -> _val.
+'decode_message_attr_xml:lang'(__TopXMLNS, undefined) ->
+    undefined;
+'decode_message_attr_xml:lang'(__TopXMLNS, _val) ->
+    _val.
 
 'encode_message_attr_xml:lang'(undefined, _acc) -> _acc;
 'encode_message_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_message_thread({xmlel, <<"thread">>, _attrs,
-                      _els}) ->
-    Cdata = decode_message_thread_els(_els, <<>>), Cdata.
+decode_message_thread(__TopXMLNS,
+                     {xmlel, <<"thread">>, _attrs, _els}) ->
+    Cdata = decode_message_thread_els(__TopXMLNS, _els,
+                                     <<>>),
+    Cdata.
 
-decode_message_thread_els([], Cdata) ->
-    decode_message_thread_cdata(Cdata);
-decode_message_thread_els([{xmlcdata, _data} | _els],
-                         Cdata) ->
-    decode_message_thread_els(_els,
+decode_message_thread_els(__TopXMLNS, [], Cdata) ->
+    decode_message_thread_cdata(__TopXMLNS, Cdata);
+decode_message_thread_els(__TopXMLNS,
+                         [{xmlcdata, _data} | _els], Cdata) ->
+    decode_message_thread_els(__TopXMLNS, _els,
                              <<Cdata/binary, _data/binary>>);
-decode_message_thread_els([_ | _els], Cdata) ->
-    decode_message_thread_els(_els, Cdata).
+decode_message_thread_els(__TopXMLNS, [_ | _els],
+                         Cdata) ->
+    decode_message_thread_els(__TopXMLNS, _els, Cdata).
 
 encode_message_thread(Cdata, _xmlns_attrs) ->
     _els = encode_message_thread_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"thread">>, _attrs, _els}.
 
-decode_message_thread_cdata(<<>>) -> undefined;
-decode_message_thread_cdata(_val) -> _val.
+decode_message_thread_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_message_thread_cdata(__TopXMLNS, _val) -> _val.
 
 encode_message_thread_cdata(undefined, _acc) -> _acc;
 encode_message_thread_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_message_body({xmlel, <<"body">>, _attrs,
-                    _els}) ->
-    Data = decode_message_body_els(_els, <<>>),
-    Lang = decode_message_body_attrs(_attrs, undefined),
+decode_message_body(__TopXMLNS,
+                   {xmlel, <<"body">>, _attrs, _els}) ->
+    Data = decode_message_body_els(__TopXMLNS, _els, <<>>),
+    Lang = decode_message_body_attrs(__TopXMLNS, _attrs,
+                                    undefined),
     {text, Lang, Data}.
 
-decode_message_body_els([], Data) ->
-    decode_message_body_cdata(Data);
-decode_message_body_els([{xmlcdata, _data} | _els],
-                       Data) ->
-    decode_message_body_els(_els,
+decode_message_body_els(__TopXMLNS, [], Data) ->
+    decode_message_body_cdata(__TopXMLNS, Data);
+decode_message_body_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Data) ->
+    decode_message_body_els(__TopXMLNS, _els,
                            <<Data/binary, _data/binary>>);
-decode_message_body_els([_ | _els], Data) ->
-    decode_message_body_els(_els, Data).
-
-decode_message_body_attrs([{<<"xml:lang">>, _val}
-                          | _attrs],
-                         _Lang) ->
-    decode_message_body_attrs(_attrs, _val);
-decode_message_body_attrs([_ | _attrs], Lang) ->
-    decode_message_body_attrs(_attrs, Lang);
-decode_message_body_attrs([], Lang) ->
-    'decode_message_body_attr_xml:lang'(Lang).
+decode_message_body_els(__TopXMLNS, [_ | _els], Data) ->
+    decode_message_body_els(__TopXMLNS, _els, Data).
+
+decode_message_body_attrs(__TopXMLNS,
+                         [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_message_body_attrs(__TopXMLNS, _attrs, _val);
+decode_message_body_attrs(__TopXMLNS, [_ | _attrs],
+                         Lang) ->
+    decode_message_body_attrs(__TopXMLNS, _attrs, Lang);
+decode_message_body_attrs(__TopXMLNS, [], Lang) ->
+    'decode_message_body_attr_xml:lang'(__TopXMLNS, Lang).
 
 encode_message_body({text, Lang, Data}, _xmlns_attrs) ->
     _els = encode_message_body_cdata(Data, []),
@@ -14077,45 +14950,52 @@ encode_message_body({text, Lang, Data}, _xmlns_attrs) ->
                                                 _xmlns_attrs),
     {xmlel, <<"body">>, _attrs, _els}.
 
-'decode_message_body_attr_xml:lang'(undefined) ->
+'decode_message_body_attr_xml:lang'(__TopXMLNS,
+                                   undefined) ->
     undefined;
-'decode_message_body_attr_xml:lang'(_val) -> _val.
+'decode_message_body_attr_xml:lang'(__TopXMLNS, _val) ->
+    _val.
 
 'encode_message_body_attr_xml:lang'(undefined, _acc) ->
     _acc;
 'encode_message_body_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_message_body_cdata(<<>>) -> undefined;
-decode_message_body_cdata(_val) -> _val.
+decode_message_body_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_message_body_cdata(__TopXMLNS, _val) -> _val.
 
 encode_message_body_cdata(undefined, _acc) -> _acc;
 encode_message_body_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_message_subject({xmlel, <<"subject">>, _attrs,
-                       _els}) ->
-    Data = decode_message_subject_els(_els, <<>>),
-    Lang = decode_message_subject_attrs(_attrs, undefined),
+decode_message_subject(__TopXMLNS,
+                      {xmlel, <<"subject">>, _attrs, _els}) ->
+    Data = decode_message_subject_els(__TopXMLNS, _els,
+                                     <<>>),
+    Lang = decode_message_subject_attrs(__TopXMLNS, _attrs,
+                                       undefined),
     {text, Lang, Data}.
 
-decode_message_subject_els([], Data) ->
-    decode_message_subject_cdata(Data);
-decode_message_subject_els([{xmlcdata, _data} | _els],
-                          Data) ->
-    decode_message_subject_els(_els,
+decode_message_subject_els(__TopXMLNS, [], Data) ->
+    decode_message_subject_cdata(__TopXMLNS, Data);
+decode_message_subject_els(__TopXMLNS,
+                          [{xmlcdata, _data} | _els], Data) ->
+    decode_message_subject_els(__TopXMLNS, _els,
                               <<Data/binary, _data/binary>>);
-decode_message_subject_els([_ | _els], Data) ->
-    decode_message_subject_els(_els, Data).
-
-decode_message_subject_attrs([{<<"xml:lang">>, _val}
-                             | _attrs],
-                            _Lang) ->
-    decode_message_subject_attrs(_attrs, _val);
-decode_message_subject_attrs([_ | _attrs], Lang) ->
-    decode_message_subject_attrs(_attrs, Lang);
-decode_message_subject_attrs([], Lang) ->
-    'decode_message_subject_attr_xml:lang'(Lang).
+decode_message_subject_els(__TopXMLNS, [_ | _els],
+                          Data) ->
+    decode_message_subject_els(__TopXMLNS, _els, Data).
+
+decode_message_subject_attrs(__TopXMLNS,
+                            [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
+    decode_message_subject_attrs(__TopXMLNS, _attrs, _val);
+decode_message_subject_attrs(__TopXMLNS, [_ | _attrs],
+                            Lang) ->
+    decode_message_subject_attrs(__TopXMLNS, _attrs, Lang);
+decode_message_subject_attrs(__TopXMLNS, [], Lang) ->
+    'decode_message_subject_attr_xml:lang'(__TopXMLNS,
+                                          Lang).
 
 encode_message_subject({text, Lang, Data},
                       _xmlns_attrs) ->
@@ -14124,9 +15004,12 @@ encode_message_subject({text, Lang, Data},
                                                    _xmlns_attrs),
     {xmlel, <<"subject">>, _attrs, _els}.
 
-'decode_message_subject_attr_xml:lang'(undefined) ->
+'decode_message_subject_attr_xml:lang'(__TopXMLNS,
+                                      undefined) ->
     undefined;
-'decode_message_subject_attr_xml:lang'(_val) -> _val.
+'decode_message_subject_attr_xml:lang'(__TopXMLNS,
+                                      _val) ->
+    _val.
 
 'encode_message_subject_attr_xml:lang'(undefined,
                                       _acc) ->
@@ -14134,63 +15017,80 @@ encode_message_subject({text, Lang, Data},
 'encode_message_subject_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_message_subject_cdata(<<>>) -> undefined;
-decode_message_subject_cdata(_val) -> _val.
+decode_message_subject_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_message_subject_cdata(__TopXMLNS, _val) -> _val.
 
 encode_message_subject_cdata(undefined, _acc) -> _acc;
 encode_message_subject_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_iq({xmlel, <<"iq">>, _attrs, _els}) ->
-    {Error, __Els} = decode_iq_els(_els, undefined, []),
-    {Id, Type, From, To, Lang} = decode_iq_attrs(_attrs,
-                                                undefined, undefined,
+decode_iq(__TopXMLNS,
+         {xmlel, <<"iq">>, _attrs, _els}) ->
+    {Error, __Els} = decode_iq_els(__TopXMLNS, _els,
+                                  undefined, []),
+    {Id, Type, From, To, Lang} = decode_iq_attrs(__TopXMLNS,
+                                                _attrs, undefined, undefined,
                                                 undefined, undefined,
                                                 undefined),
     {iq, Id, Type, Lang, From, To, Error, __Els}.
 
-decode_iq_els([], Error, __Els) ->
+decode_iq_els(__TopXMLNS, [], Error, __Els) ->
     {Error, lists:reverse(__Els)};
-decode_iq_els([{xmlel, <<"error">>, _attrs, _} = _el
-              | _els],
-             Error, __Els) ->
+decode_iq_els(__TopXMLNS,
+             [{xmlel, <<"error">>, _attrs, _} = _el | _els], Error,
+             __Els) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
-          decode_iq_els(_els, decode_error(_el), __Els);
-       true -> decode_iq_els(_els, Error, __Els)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_iq_els(__TopXMLNS, _els,
+                        decode_error(__TopXMLNS, _el), __Els);
+       true -> decode_iq_els(__TopXMLNS, _els, Error, __Els)
     end;
-decode_iq_els([{xmlel, _, _, _} = _el | _els], Error,
-             __Els) ->
+decode_iq_els(__TopXMLNS,
+             [{xmlel, _, _, _} = _el | _els], Error, __Els) ->
     case is_known_tag(_el) of
       true ->
-         decode_iq_els(_els, Error, [decode(_el) | __Els]);
-      false -> decode_iq_els(_els, Error, __Els)
-    end;
-decode_iq_els([_ | _els], Error, __Els) ->
-    decode_iq_els(_els, Error, __Els).
-
-decode_iq_attrs([{<<"id">>, _val} | _attrs], _Id, Type,
+         decode_iq_els(__TopXMLNS, _els, Error,
+                       [decode(_el) | __Els]);
+      false -> decode_iq_els(__TopXMLNS, _els, Error, __Els)
+    end;
+decode_iq_els(__TopXMLNS, [_ | _els], Error, __Els) ->
+    decode_iq_els(__TopXMLNS, _els, Error, __Els).
+
+decode_iq_attrs(__TopXMLNS, [{<<"id">>, _val} | _attrs],
+               _Id, Type, From, To, Lang) ->
+    decode_iq_attrs(__TopXMLNS, _attrs, _val, Type, From,
+                   To, Lang);
+decode_iq_attrs(__TopXMLNS,
+               [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
+               Lang) ->
+    decode_iq_attrs(__TopXMLNS, _attrs, Id, _val, From, To,
+                   Lang);
+decode_iq_attrs(__TopXMLNS,
+               [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
+               Lang) ->
+    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, _val, To,
+                   Lang);
+decode_iq_attrs(__TopXMLNS, [{<<"to">>, _val} | _attrs],
+               Id, Type, From, _To, Lang) ->
+    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From,
+                   _val, Lang);
+decode_iq_attrs(__TopXMLNS,
+               [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
+               _Lang) ->
+    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From, To,
+                   _val);
+decode_iq_attrs(__TopXMLNS, [_ | _attrs], Id, Type,
                From, To, Lang) ->
-    decode_iq_attrs(_attrs, _val, Type, From, To, Lang);
-decode_iq_attrs([{<<"type">>, _val} | _attrs], Id,
-               _Type, From, To, Lang) ->
-    decode_iq_attrs(_attrs, Id, _val, From, To, Lang);
-decode_iq_attrs([{<<"from">>, _val} | _attrs], Id, Type,
-               _From, To, Lang) ->
-    decode_iq_attrs(_attrs, Id, Type, _val, To, Lang);
-decode_iq_attrs([{<<"to">>, _val} | _attrs], Id, Type,
-               From, _To, Lang) ->
-    decode_iq_attrs(_attrs, Id, Type, From, _val, Lang);
-decode_iq_attrs([{<<"xml:lang">>, _val} | _attrs], Id,
-               Type, From, To, _Lang) ->
-    decode_iq_attrs(_attrs, Id, Type, From, To, _val);
-decode_iq_attrs([_ | _attrs], Id, Type, From, To,
+    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From, To,
+                   Lang);
+decode_iq_attrs(__TopXMLNS, [], Id, Type, From, To,
                Lang) ->
-    decode_iq_attrs(_attrs, Id, Type, From, To, Lang);
-decode_iq_attrs([], Id, Type, From, To, Lang) ->
-    {decode_iq_attr_id(Id), decode_iq_attr_type(Type),
-     decode_iq_attr_from(From), decode_iq_attr_to(To),
-     'decode_iq_attr_xml:lang'(Lang)}.
+    {decode_iq_attr_id(__TopXMLNS, Id),
+     decode_iq_attr_type(__TopXMLNS, Type),
+     decode_iq_attr_from(__TopXMLNS, From),
+     decode_iq_attr_to(__TopXMLNS, To),
+     'decode_iq_attr_xml:lang'(__TopXMLNS, Lang)}.
 
 encode_iq({iq, Id, Type, Lang, From, To, Error, __Els},
          _xmlns_attrs) ->
@@ -14208,38 +15108,34 @@ encode_iq({iq, Id, Type, Lang, From, To, Error, __Els},
 'encode_iq_$error'(Error, _acc) ->
     [encode_error(Error, []) | _acc].
 
-decode_iq_attr_id(undefined) ->
+decode_iq_attr_id(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"iq">>,
-                  <<"jabber:client">>}});
-decode_iq_attr_id(_val) -> _val.
+                 {missing_attr, <<"id">>, <<"iq">>, __TopXMLNS}});
+decode_iq_attr_id(__TopXMLNS, _val) -> _val.
 
 encode_iq_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
-decode_iq_attr_type(undefined) ->
+decode_iq_attr_type(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"iq">>,
-                  <<"jabber:client">>}});
-decode_iq_attr_type(_val) ->
+                 {missing_attr, <<"type">>, <<"iq">>, __TopXMLNS}});
+decode_iq_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [get, set, result, error]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"iq">>,
-                        <<"jabber:client">>}});
+                       {bad_attr_value, <<"type">>, <<"iq">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_iq_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_iq_attr_from(undefined) -> undefined;
-decode_iq_attr_from(_val) ->
+decode_iq_attr_from(__TopXMLNS, undefined) -> undefined;
+decode_iq_attr_from(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"iq">>,
-                        <<"jabber:client">>}});
+                       {bad_attr_value, <<"from">>, <<"iq">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -14247,13 +15143,12 @@ encode_iq_attr_from(undefined, _acc) -> _acc;
 encode_iq_attr_from(_val, _acc) ->
     [{<<"from">>, enc_jid(_val)} | _acc].
 
-decode_iq_attr_to(undefined) -> undefined;
-decode_iq_attr_to(_val) ->
+decode_iq_attr_to(__TopXMLNS, undefined) -> undefined;
+decode_iq_attr_to(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"iq">>,
-                        <<"jabber:client">>}});
+                       {bad_attr_value, <<"to">>, <<"iq">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -14261,28 +15156,31 @@ encode_iq_attr_to(undefined, _acc) -> _acc;
 encode_iq_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
-'decode_iq_attr_xml:lang'(undefined) -> undefined;
-'decode_iq_attr_xml:lang'(_val) -> _val.
+'decode_iq_attr_xml:lang'(__TopXMLNS, undefined) ->
+    undefined;
+'decode_iq_attr_xml:lang'(__TopXMLNS, _val) -> _val.
 
 'encode_iq_attr_xml:lang'(undefined, _acc) -> _acc;
 'encode_iq_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_stats({xmlel, <<"query">>, _attrs, _els}) ->
-    Stat = decode_stats_els(_els, []), {stats, Stat}.
+decode_stats(__TopXMLNS,
+            {xmlel, <<"query">>, _attrs, _els}) ->
+    Stat = decode_stats_els(__TopXMLNS, _els, []),
+    {stats, Stat}.
 
-decode_stats_els([], Stat) -> lists:reverse(Stat);
-decode_stats_els([{xmlel, <<"stat">>, _attrs, _} = _el
-                 | _els],
-                Stat) ->
+decode_stats_els(__TopXMLNS, [], Stat) ->
+    lists:reverse(Stat);
+decode_stats_els(__TopXMLNS,
+                [{xmlel, <<"stat">>, _attrs, _} = _el | _els], Stat) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/stats">> ->
-          decode_stats_els(_els, [decode_stat(_el) | Stat]);
-       true -> decode_stats_els(_els, Stat)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_stats_els(__TopXMLNS, _els,
+                           [decode_stat(__TopXMLNS, _el) | Stat]);
+       true -> decode_stats_els(__TopXMLNS, _els, Stat)
     end;
-decode_stats_els([_ | _els], Stat) ->
-    decode_stats_els(_els, Stat).
+decode_stats_els(__TopXMLNS, [_ | _els], Stat) ->
+    decode_stats_els(__TopXMLNS, _els, Stat).
 
 encode_stats({stats, Stat}, _xmlns_attrs) ->
     _els = 'encode_stats_$stat'(Stat, []),
@@ -14294,40 +15192,48 @@ encode_stats({stats, Stat}, _xmlns_attrs) ->
     'encode_stats_$stat'(_els,
                         [encode_stat(Stat, []) | _acc]).
 
-decode_stat({xmlel, <<"stat">>, _attrs, _els}) ->
-    Error = decode_stat_els(_els, []),
-    {Name, Units, Value} = decode_stat_attrs(_attrs,
-                                            undefined, undefined, undefined),
+decode_stat(__TopXMLNS,
+           {xmlel, <<"stat">>, _attrs, _els}) ->
+    Error = decode_stat_els(__TopXMLNS, _els, []),
+    {Name, Units, Value} = decode_stat_attrs(__TopXMLNS,
+                                            _attrs, undefined, undefined,
+                                            undefined),
     {stat, Name, Units, Value, Error}.
 
-decode_stat_els([], Error) -> lists:reverse(Error);
-decode_stat_els([{xmlel, <<"error">>, _attrs, _} = _el
-                | _els],
+decode_stat_els(__TopXMLNS, [], Error) ->
+    lists:reverse(Error);
+decode_stat_els(__TopXMLNS,
+               [{xmlel, <<"error">>, _attrs, _} = _el | _els],
                Error) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/stats">> ->
-          decode_stat_els(_els, [decode_stat_error(_el) | Error]);
-       true -> decode_stat_els(_els, Error)
-    end;
-decode_stat_els([_ | _els], Error) ->
-    decode_stat_els(_els, Error).
-
-decode_stat_attrs([{<<"name">>, _val} | _attrs], _Name,
-                 Units, Value) ->
-    decode_stat_attrs(_attrs, _val, Units, Value);
-decode_stat_attrs([{<<"units">>, _val} | _attrs], Name,
-                 _Units, Value) ->
-    decode_stat_attrs(_attrs, Name, _val, Value);
-decode_stat_attrs([{<<"value">>, _val} | _attrs], Name,
-                 Units, _Value) ->
-    decode_stat_attrs(_attrs, Name, Units, _val);
-decode_stat_attrs([_ | _attrs], Name, Units, Value) ->
-    decode_stat_attrs(_attrs, Name, Units, Value);
-decode_stat_attrs([], Name, Units, Value) ->
-    {decode_stat_attr_name(Name),
-     decode_stat_attr_units(Units),
-     decode_stat_attr_value(Value)}.
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_stat_els(__TopXMLNS, _els,
+                          [decode_stat_error(__TopXMLNS, _el) | Error]);
+       true -> decode_stat_els(__TopXMLNS, _els, Error)
+    end;
+decode_stat_els(__TopXMLNS, [_ | _els], Error) ->
+    decode_stat_els(__TopXMLNS, _els, Error).
+
+decode_stat_attrs(__TopXMLNS,
+                 [{<<"name">>, _val} | _attrs], _Name, Units, Value) ->
+    decode_stat_attrs(__TopXMLNS, _attrs, _val, Units,
+                     Value);
+decode_stat_attrs(__TopXMLNS,
+                 [{<<"units">>, _val} | _attrs], Name, _Units, Value) ->
+    decode_stat_attrs(__TopXMLNS, _attrs, Name, _val,
+                     Value);
+decode_stat_attrs(__TopXMLNS,
+                 [{<<"value">>, _val} | _attrs], Name, Units, _Value) ->
+    decode_stat_attrs(__TopXMLNS, _attrs, Name, Units,
+                     _val);
+decode_stat_attrs(__TopXMLNS, [_ | _attrs], Name, Units,
+                 Value) ->
+    decode_stat_attrs(__TopXMLNS, _attrs, Name, Units,
+                     Value);
+decode_stat_attrs(__TopXMLNS, [], Name, Units, Value) ->
+    {decode_stat_attr_name(__TopXMLNS, Name),
+     decode_stat_attr_units(__TopXMLNS, Units),
+     decode_stat_attr_value(__TopXMLNS, Value)}.
 
 encode_stat({stat, Name, Units, Value, Error},
            _xmlns_attrs) ->
@@ -14343,50 +15249,54 @@ encode_stat({stat, Name, Units, Value, Error},
     'encode_stat_$error'(_els,
                         [encode_stat_error(Error, []) | _acc]).
 
-decode_stat_attr_name(undefined) ->
+decode_stat_attr_name(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"stat">>,
-                  <<"http://jabber.org/protocol/stats">>}});
-decode_stat_attr_name(_val) -> _val.
+                 {missing_attr, <<"name">>, <<"stat">>, __TopXMLNS}});
+decode_stat_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_stat_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_stat_attr_units(undefined) -> undefined;
-decode_stat_attr_units(_val) -> _val.
+decode_stat_attr_units(__TopXMLNS, undefined) ->
+    undefined;
+decode_stat_attr_units(__TopXMLNS, _val) -> _val.
 
 encode_stat_attr_units(undefined, _acc) -> _acc;
 encode_stat_attr_units(_val, _acc) ->
     [{<<"units">>, _val} | _acc].
 
-decode_stat_attr_value(undefined) -> undefined;
-decode_stat_attr_value(_val) -> _val.
+decode_stat_attr_value(__TopXMLNS, undefined) ->
+    undefined;
+decode_stat_attr_value(__TopXMLNS, _val) -> _val.
 
 encode_stat_attr_value(undefined, _acc) -> _acc;
 encode_stat_attr_value(_val, _acc) ->
     [{<<"value">>, _val} | _acc].
 
-decode_stat_error({xmlel, <<"error">>, _attrs, _els}) ->
-    Cdata = decode_stat_error_els(_els, <<>>),
-    Code = decode_stat_error_attrs(_attrs, undefined),
+decode_stat_error(__TopXMLNS,
+                 {xmlel, <<"error">>, _attrs, _els}) ->
+    Cdata = decode_stat_error_els(__TopXMLNS, _els, <<>>),
+    Code = decode_stat_error_attrs(__TopXMLNS, _attrs,
+                                  undefined),
     {Code, Cdata}.
 
-decode_stat_error_els([], Cdata) ->
-    decode_stat_error_cdata(Cdata);
-decode_stat_error_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_stat_error_els(_els,
+decode_stat_error_els(__TopXMLNS, [], Cdata) ->
+    decode_stat_error_cdata(__TopXMLNS, Cdata);
+decode_stat_error_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_stat_error_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_stat_error_els([_ | _els], Cdata) ->
-    decode_stat_error_els(_els, Cdata).
-
-decode_stat_error_attrs([{<<"code">>, _val} | _attrs],
-                       _Code) ->
-    decode_stat_error_attrs(_attrs, _val);
-decode_stat_error_attrs([_ | _attrs], Code) ->
-    decode_stat_error_attrs(_attrs, Code);
-decode_stat_error_attrs([], Code) ->
-    decode_stat_error_attr_code(Code).
+decode_stat_error_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_stat_error_els(__TopXMLNS, _els, Cdata).
+
+decode_stat_error_attrs(__TopXMLNS,
+                       [{<<"code">>, _val} | _attrs], _Code) ->
+    decode_stat_error_attrs(__TopXMLNS, _attrs, _val);
+decode_stat_error_attrs(__TopXMLNS, [_ | _attrs],
+                       Code) ->
+    decode_stat_error_attrs(__TopXMLNS, _attrs, Code);
+decode_stat_error_attrs(__TopXMLNS, [], Code) ->
+    decode_stat_error_attr_code(__TopXMLNS, Code).
 
 encode_stat_error({Code, Cdata}, _xmlns_attrs) ->
     _els = encode_stat_error_cdata(Cdata, []),
@@ -14394,66 +15304,68 @@ encode_stat_error({Code, Cdata}, _xmlns_attrs) ->
                                         _xmlns_attrs),
     {xmlel, <<"error">>, _attrs, _els}.
 
-decode_stat_error_attr_code(undefined) ->
+decode_stat_error_attr_code(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"code">>, <<"error">>,
-                  <<"http://jabber.org/protocol/stats">>}});
-decode_stat_error_attr_code(_val) ->
+                 {missing_attr, <<"code">>, <<"error">>, __TopXMLNS}});
+decode_stat_error_attr_code(__TopXMLNS, _val) ->
     case catch dec_int(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"code">>, <<"error">>,
-                        <<"http://jabber.org/protocol/stats">>}});
+                       {bad_attr_value, <<"code">>, <<"error">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_stat_error_attr_code(_val, _acc) ->
     [{<<"code">>, enc_int(_val)} | _acc].
 
-decode_stat_error_cdata(<<>>) -> undefined;
-decode_stat_error_cdata(_val) -> _val.
+decode_stat_error_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_stat_error_cdata(__TopXMLNS, _val) -> _val.
 
 encode_stat_error_cdata(undefined, _acc) -> _acc;
 encode_stat_error_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_bookmarks_storage({xmlel, <<"storage">>, _attrs,
-                         _els}) ->
-    {Conference, Url} = decode_bookmarks_storage_els(_els,
-                                                    [], []),
+decode_bookmarks_storage(__TopXMLNS,
+                        {xmlel, <<"storage">>, _attrs, _els}) ->
+    {Conference, Url} =
+       decode_bookmarks_storage_els(__TopXMLNS, _els, [], []),
     {bookmark_storage, Conference, Url}.
 
-decode_bookmarks_storage_els([], Conference, Url) ->
+decode_bookmarks_storage_els(__TopXMLNS, [], Conference,
+                            Url) ->
     {lists:reverse(Conference), lists:reverse(Url)};
-decode_bookmarks_storage_els([{xmlel, <<"conference">>,
-                              _attrs, _} =
-                                 _el
+decode_bookmarks_storage_els(__TopXMLNS,
+                            [{xmlel, <<"conference">>, _attrs, _} = _el
                              | _els],
                             Conference, Url) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
-          decode_bookmarks_storage_els(_els,
-                                       [decode_bookmark_conference(_el)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bookmarks_storage_els(__TopXMLNS, _els,
+                                       [decode_bookmark_conference(__TopXMLNS,
+                                                                   _el)
                                         | Conference],
                                        Url);
        true ->
-          decode_bookmarks_storage_els(_els, Conference, Url)
+          decode_bookmarks_storage_els(__TopXMLNS, _els,
+                                       Conference, Url)
     end;
-decode_bookmarks_storage_els([{xmlel, <<"url">>, _attrs,
-                              _} =
-                                 _el
-                             | _els],
+decode_bookmarks_storage_els(__TopXMLNS,
+                            [{xmlel, <<"url">>, _attrs, _} = _el | _els],
                             Conference, Url) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
-          decode_bookmarks_storage_els(_els, Conference,
-                                       [decode_bookmark_url(_el) | Url]);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bookmarks_storage_els(__TopXMLNS, _els,
+                                       Conference,
+                                       [decode_bookmark_url(__TopXMLNS, _el)
+                                        | Url]);
        true ->
-          decode_bookmarks_storage_els(_els, Conference, Url)
+          decode_bookmarks_storage_els(__TopXMLNS, _els,
+                                       Conference, Url)
     end;
-decode_bookmarks_storage_els([_ | _els], Conference,
-                            Url) ->
-    decode_bookmarks_storage_els(_els, Conference, Url).
+decode_bookmarks_storage_els(__TopXMLNS, [_ | _els],
+                            Conference, Url) ->
+    decode_bookmarks_storage_els(__TopXMLNS, _els,
+                                Conference, Url).
 
 encode_bookmarks_storage({bookmark_storage, Conference,
                          Url},
@@ -14479,22 +15391,27 @@ encode_bookmarks_storage({bookmark_storage, Conference,
     'encode_bookmarks_storage_$url'(_els,
                                    [encode_bookmark_url(Url, []) | _acc]).
 
-decode_bookmark_url({xmlel, <<"url">>, _attrs, _els}) ->
-    {Name, Url} = decode_bookmark_url_attrs(_attrs,
-                                           undefined, undefined),
+decode_bookmark_url(__TopXMLNS,
+                   {xmlel, <<"url">>, _attrs, _els}) ->
+    {Name, Url} = decode_bookmark_url_attrs(__TopXMLNS,
+                                           _attrs, undefined, undefined),
     {bookmark_url, Name, Url}.
 
-decode_bookmark_url_attrs([{<<"name">>, _val} | _attrs],
-                         _Name, Url) ->
-    decode_bookmark_url_attrs(_attrs, _val, Url);
-decode_bookmark_url_attrs([{<<"url">>, _val} | _attrs],
-                         Name, _Url) ->
-    decode_bookmark_url_attrs(_attrs, Name, _val);
-decode_bookmark_url_attrs([_ | _attrs], Name, Url) ->
-    decode_bookmark_url_attrs(_attrs, Name, Url);
-decode_bookmark_url_attrs([], Name, Url) ->
-    {decode_bookmark_url_attr_name(Name),
-     decode_bookmark_url_attr_url(Url)}.
+decode_bookmark_url_attrs(__TopXMLNS,
+                         [{<<"name">>, _val} | _attrs], _Name, Url) ->
+    decode_bookmark_url_attrs(__TopXMLNS, _attrs, _val,
+                             Url);
+decode_bookmark_url_attrs(__TopXMLNS,
+                         [{<<"url">>, _val} | _attrs], Name, _Url) ->
+    decode_bookmark_url_attrs(__TopXMLNS, _attrs, Name,
+                             _val);
+decode_bookmark_url_attrs(__TopXMLNS, [_ | _attrs],
+                         Name, Url) ->
+    decode_bookmark_url_attrs(__TopXMLNS, _attrs, Name,
+                             Url);
+decode_bookmark_url_attrs(__TopXMLNS, [], Name, Url) ->
+    {decode_bookmark_url_attr_name(__TopXMLNS, Name),
+     decode_bookmark_url_attr_url(__TopXMLNS, Url)}.
 
 encode_bookmark_url({bookmark_url, Name, Url},
                    _xmlns_attrs) ->
@@ -14504,89 +15421,93 @@ encode_bookmark_url({bookmark_url, Name, Url},
                                                                        _xmlns_attrs)),
     {xmlel, <<"url">>, _attrs, _els}.
 
-decode_bookmark_url_attr_name(undefined) ->
+decode_bookmark_url_attr_name(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"url">>,
-                  <<"storage:bookmarks">>}});
-decode_bookmark_url_attr_name(_val) -> _val.
+                 {missing_attr, <<"name">>, <<"url">>, __TopXMLNS}});
+decode_bookmark_url_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_bookmark_url_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_bookmark_url_attr_url(undefined) ->
+decode_bookmark_url_attr_url(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"url">>, <<"url">>,
-                  <<"storage:bookmarks">>}});
-decode_bookmark_url_attr_url(_val) -> _val.
+                 {missing_attr, <<"url">>, <<"url">>, __TopXMLNS}});
+decode_bookmark_url_attr_url(__TopXMLNS, _val) -> _val.
 
 encode_bookmark_url_attr_url(_val, _acc) ->
     [{<<"url">>, _val} | _acc].
 
-decode_bookmark_conference({xmlel, <<"conference">>,
-                           _attrs, _els}) ->
-    {Password, Nick} = decode_bookmark_conference_els(_els,
-                                                     undefined, undefined),
+decode_bookmark_conference(__TopXMLNS,
+                          {xmlel, <<"conference">>, _attrs, _els}) ->
+    {Password, Nick} =
+       decode_bookmark_conference_els(__TopXMLNS, _els,
+                                      undefined, undefined),
     {Name, Jid, Autojoin} =
-       decode_bookmark_conference_attrs(_attrs, undefined,
-                                        undefined, undefined),
+       decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
+                                        undefined, undefined, undefined),
     {bookmark_conference, Name, Jid, Autojoin, Nick,
      Password}.
 
-decode_bookmark_conference_els([], Password, Nick) ->
+decode_bookmark_conference_els(__TopXMLNS, [], Password,
+                              Nick) ->
     {Password, Nick};
-decode_bookmark_conference_els([{xmlel, <<"nick">>,
-                                _attrs, _} =
-                                   _el
-                               | _els],
+decode_bookmark_conference_els(__TopXMLNS,
+                              [{xmlel, <<"nick">>, _attrs, _} = _el | _els],
                               Password, Nick) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
-          decode_bookmark_conference_els(_els, Password,
-                                         decode_conference_nick(_el));
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bookmark_conference_els(__TopXMLNS, _els,
+                                         Password,
+                                         decode_conference_nick(__TopXMLNS,
+                                                                _el));
        true ->
-          decode_bookmark_conference_els(_els, Password, Nick)
+          decode_bookmark_conference_els(__TopXMLNS, _els,
+                                         Password, Nick)
     end;
-decode_bookmark_conference_els([{xmlel, <<"password">>,
-                                _attrs, _} =
-                                   _el
+decode_bookmark_conference_els(__TopXMLNS,
+                              [{xmlel, <<"password">>, _attrs, _} = _el
                                | _els],
                               Password, Nick) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
-          decode_bookmark_conference_els(_els,
-                                         decode_conference_password(_el),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_bookmark_conference_els(__TopXMLNS, _els,
+                                         decode_conference_password(__TopXMLNS,
+                                                                    _el),
                                          Nick);
        true ->
-          decode_bookmark_conference_els(_els, Password, Nick)
+          decode_bookmark_conference_els(__TopXMLNS, _els,
+                                         Password, Nick)
     end;
-decode_bookmark_conference_els([_ | _els], Password,
-                              Nick) ->
-    decode_bookmark_conference_els(_els, Password, Nick).
-
-decode_bookmark_conference_attrs([{<<"name">>, _val}
-                                 | _attrs],
-                                _Name, Jid, Autojoin) ->
-    decode_bookmark_conference_attrs(_attrs, _val, Jid,
-                                    Autojoin);
-decode_bookmark_conference_attrs([{<<"jid">>, _val}
-                                 | _attrs],
-                                Name, _Jid, Autojoin) ->
-    decode_bookmark_conference_attrs(_attrs, Name, _val,
-                                    Autojoin);
-decode_bookmark_conference_attrs([{<<"autojoin">>, _val}
-                                 | _attrs],
-                                Name, Jid, _Autojoin) ->
-    decode_bookmark_conference_attrs(_attrs, Name, Jid,
-                                    _val);
-decode_bookmark_conference_attrs([_ | _attrs], Name,
-                                Jid, Autojoin) ->
-    decode_bookmark_conference_attrs(_attrs, Name, Jid,
-                                    Autojoin);
-decode_bookmark_conference_attrs([], Name, Jid,
+decode_bookmark_conference_els(__TopXMLNS, [_ | _els],
+                              Password, Nick) ->
+    decode_bookmark_conference_els(__TopXMLNS, _els,
+                                  Password, Nick).
+
+decode_bookmark_conference_attrs(__TopXMLNS,
+                                [{<<"name">>, _val} | _attrs], _Name, Jid,
+                                Autojoin) ->
+    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
+                                    _val, Jid, Autojoin);
+decode_bookmark_conference_attrs(__TopXMLNS,
+                                [{<<"jid">>, _val} | _attrs], Name, _Jid,
                                 Autojoin) ->
-    {decode_bookmark_conference_attr_name(Name),
-     decode_bookmark_conference_attr_jid(Jid),
-     decode_bookmark_conference_attr_autojoin(Autojoin)}.
+    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
+                                    Name, _val, Autojoin);
+decode_bookmark_conference_attrs(__TopXMLNS,
+                                [{<<"autojoin">>, _val} | _attrs], Name, Jid,
+                                _Autojoin) ->
+    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
+                                    Name, Jid, _val);
+decode_bookmark_conference_attrs(__TopXMLNS,
+                                [_ | _attrs], Name, Jid, Autojoin) ->
+    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
+                                    Name, Jid, Autojoin);
+decode_bookmark_conference_attrs(__TopXMLNS, [], Name,
+                                Jid, Autojoin) ->
+    {decode_bookmark_conference_attr_name(__TopXMLNS, Name),
+     decode_bookmark_conference_attr_jid(__TopXMLNS, Jid),
+     decode_bookmark_conference_attr_autojoin(__TopXMLNS,
+                                             Autojoin)}.
 
 encode_bookmark_conference({bookmark_conference, Name,
                            Jid, Autojoin, Nick, Password},
@@ -14613,39 +15534,45 @@ encode_bookmark_conference({bookmark_conference, Name,
 'encode_bookmark_conference_$nick'(Nick, _acc) ->
     [encode_conference_nick(Nick, []) | _acc].
 
-decode_bookmark_conference_attr_name(undefined) ->
+decode_bookmark_conference_attr_name(__TopXMLNS,
+                                    undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"name">>, <<"conference">>,
-                  <<"storage:bookmarks">>}});
-decode_bookmark_conference_attr_name(_val) -> _val.
+                  __TopXMLNS}});
+decode_bookmark_conference_attr_name(__TopXMLNS,
+                                    _val) ->
+    _val.
 
 encode_bookmark_conference_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_bookmark_conference_attr_jid(undefined) ->
+decode_bookmark_conference_attr_jid(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"jid">>, <<"conference">>,
-                  <<"storage:bookmarks">>}});
-decode_bookmark_conference_attr_jid(_val) ->
+                  __TopXMLNS}});
+decode_bookmark_conference_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"jid">>, <<"conference">>,
-                        <<"storage:bookmarks">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_bookmark_conference_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_bookmark_conference_attr_autojoin(undefined) ->
+decode_bookmark_conference_attr_autojoin(__TopXMLNS,
+                                        undefined) ->
     false;
-decode_bookmark_conference_attr_autojoin(_val) ->
+decode_bookmark_conference_attr_autojoin(__TopXMLNS,
+                                        _val) ->
     case catch dec_bool(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"autojoin">>, <<"conference">>,
-                        <<"storage:bookmarks">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -14654,105 +15581,112 @@ encode_bookmark_conference_attr_autojoin(false, _acc) ->
 encode_bookmark_conference_attr_autojoin(_val, _acc) ->
     [{<<"autojoin">>, enc_bool(_val)} | _acc].
 
-decode_conference_password({xmlel, <<"password">>,
-                           _attrs, _els}) ->
-    Cdata = decode_conference_password_els(_els, <<>>),
+decode_conference_password(__TopXMLNS,
+                          {xmlel, <<"password">>, _attrs, _els}) ->
+    Cdata = decode_conference_password_els(__TopXMLNS, _els,
+                                          <<>>),
     Cdata.
 
-decode_conference_password_els([], Cdata) ->
-    decode_conference_password_cdata(Cdata);
-decode_conference_password_els([{xmlcdata, _data}
-                               | _els],
-                              Cdata) ->
-    decode_conference_password_els(_els,
+decode_conference_password_els(__TopXMLNS, [], Cdata) ->
+    decode_conference_password_cdata(__TopXMLNS, Cdata);
+decode_conference_password_els(__TopXMLNS,
+                              [{xmlcdata, _data} | _els], Cdata) ->
+    decode_conference_password_els(__TopXMLNS, _els,
                                   <<Cdata/binary, _data/binary>>);
-decode_conference_password_els([_ | _els], Cdata) ->
-    decode_conference_password_els(_els, Cdata).
+decode_conference_password_els(__TopXMLNS, [_ | _els],
+                              Cdata) ->
+    decode_conference_password_els(__TopXMLNS, _els, Cdata).
 
 encode_conference_password(Cdata, _xmlns_attrs) ->
     _els = encode_conference_password_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"password">>, _attrs, _els}.
 
-decode_conference_password_cdata(<<>>) -> undefined;
-decode_conference_password_cdata(_val) -> _val.
+decode_conference_password_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_conference_password_cdata(__TopXMLNS, _val) ->
+    _val.
 
 encode_conference_password_cdata(undefined, _acc) ->
     _acc;
 encode_conference_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_conference_nick({xmlel, <<"nick">>, _attrs,
-                       _els}) ->
-    Cdata = decode_conference_nick_els(_els, <<>>), Cdata.
+decode_conference_nick(__TopXMLNS,
+                      {xmlel, <<"nick">>, _attrs, _els}) ->
+    Cdata = decode_conference_nick_els(__TopXMLNS, _els,
+                                      <<>>),
+    Cdata.
 
-decode_conference_nick_els([], Cdata) ->
-    decode_conference_nick_cdata(Cdata);
-decode_conference_nick_els([{xmlcdata, _data} | _els],
-                          Cdata) ->
-    decode_conference_nick_els(_els,
+decode_conference_nick_els(__TopXMLNS, [], Cdata) ->
+    decode_conference_nick_cdata(__TopXMLNS, Cdata);
+decode_conference_nick_els(__TopXMLNS,
+                          [{xmlcdata, _data} | _els], Cdata) ->
+    decode_conference_nick_els(__TopXMLNS, _els,
                               <<Cdata/binary, _data/binary>>);
-decode_conference_nick_els([_ | _els], Cdata) ->
-    decode_conference_nick_els(_els, Cdata).
+decode_conference_nick_els(__TopXMLNS, [_ | _els],
+                          Cdata) ->
+    decode_conference_nick_els(__TopXMLNS, _els, Cdata).
 
 encode_conference_nick(Cdata, _xmlns_attrs) ->
     _els = encode_conference_nick_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"nick">>, _attrs, _els}.
 
-decode_conference_nick_cdata(<<>>) -> undefined;
-decode_conference_nick_cdata(_val) -> _val.
+decode_conference_nick_cdata(__TopXMLNS, <<>>) ->
+    undefined;
+decode_conference_nick_cdata(__TopXMLNS, _val) -> _val.
 
 encode_conference_nick_cdata(undefined, _acc) -> _acc;
 encode_conference_nick_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_private({xmlel, <<"query">>, _attrs, _els}) ->
-    __Xmls = decode_private_els(_els, []),
+decode_private(__TopXMLNS,
+              {xmlel, <<"query">>, _attrs, _els}) ->
+    __Xmls = decode_private_els(__TopXMLNS, _els, []),
     {private, __Xmls}.
 
-decode_private_els([], __Xmls) -> lists:reverse(__Xmls);
-decode_private_els([{xmlel, _, _, _} = _el | _els],
-                  __Xmls) ->
-    decode_private_els(_els, [_el | __Xmls]);
-decode_private_els([_ | _els], __Xmls) ->
-    decode_private_els(_els, __Xmls).
+decode_private_els(__TopXMLNS, [], __Xmls) ->
+    lists:reverse(__Xmls);
+decode_private_els(__TopXMLNS,
+                  [{xmlel, _, _, _} = _el | _els], __Xmls) ->
+    decode_private_els(__TopXMLNS, _els, [_el | __Xmls]);
+decode_private_els(__TopXMLNS, [_ | _els], __Xmls) ->
+    decode_private_els(__TopXMLNS, _els, __Xmls).
 
 encode_private({private, __Xmls}, _xmlns_attrs) ->
     _els = __Xmls,
     _attrs = _xmlns_attrs,
     {xmlel, <<"query">>, _attrs, _els}.
 
-decode_disco_items({xmlel, <<"query">>, _attrs,
-                   _els}) ->
-    Items = decode_disco_items_els(_els, []),
-    Node = decode_disco_items_attrs(_attrs, undefined),
+decode_disco_items(__TopXMLNS,
+                  {xmlel, <<"query">>, _attrs, _els}) ->
+    Items = decode_disco_items_els(__TopXMLNS, _els, []),
+    Node = decode_disco_items_attrs(__TopXMLNS, _attrs,
+                                   undefined),
     {disco_items, Node, Items}.
 
-decode_disco_items_els([], Items) ->
+decode_disco_items_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_disco_items_els([{xmlel, <<"item">>, _attrs, _} =
-                           _el
-                       | _els],
-                      Items) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns ==
-        <<"http://jabber.org/protocol/disco#items">> ->
-          decode_disco_items_els(_els,
-                                 [decode_disco_item(_el) | Items]);
-       true -> decode_disco_items_els(_els, Items)
-    end;
-decode_disco_items_els([_ | _els], Items) ->
-    decode_disco_items_els(_els, Items).
-
-decode_disco_items_attrs([{<<"node">>, _val} | _attrs],
-                        _Node) ->
-    decode_disco_items_attrs(_attrs, _val);
-decode_disco_items_attrs([_ | _attrs], Node) ->
-    decode_disco_items_attrs(_attrs, Node);
-decode_disco_items_attrs([], Node) ->
-    decode_disco_items_attr_node(Node).
+decode_disco_items_els(__TopXMLNS,
+                      [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_disco_items_els(__TopXMLNS, _els,
+                                 [decode_disco_item(__TopXMLNS, _el) | Items]);
+       true -> decode_disco_items_els(__TopXMLNS, _els, Items)
+    end;
+decode_disco_items_els(__TopXMLNS, [_ | _els], Items) ->
+    decode_disco_items_els(__TopXMLNS, _els, Items).
+
+decode_disco_items_attrs(__TopXMLNS,
+                        [{<<"node">>, _val} | _attrs], _Node) ->
+    decode_disco_items_attrs(__TopXMLNS, _attrs, _val);
+decode_disco_items_attrs(__TopXMLNS, [_ | _attrs],
+                        Node) ->
+    decode_disco_items_attrs(__TopXMLNS, _attrs, Node);
+decode_disco_items_attrs(__TopXMLNS, [], Node) ->
+    decode_disco_items_attr_node(__TopXMLNS, Node).
 
 encode_disco_items({disco_items, Node, Items},
                   _xmlns_attrs) ->
@@ -14766,35 +15700,42 @@ encode_disco_items({disco_items, Node, Items},
     'encode_disco_items_$items'(_els,
                                [encode_disco_item(Items, []) | _acc]).
 
-decode_disco_items_attr_node(undefined) -> undefined;
-decode_disco_items_attr_node(_val) -> _val.
+decode_disco_items_attr_node(__TopXMLNS, undefined) ->
+    undefined;
+decode_disco_items_attr_node(__TopXMLNS, _val) -> _val.
 
 encode_disco_items_attr_node(undefined, _acc) -> _acc;
 encode_disco_items_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_disco_item({xmlel, <<"item">>, _attrs, _els}) ->
-    {Jid, Name, Node} = decode_disco_item_attrs(_attrs,
-                                               undefined, undefined,
+decode_disco_item(__TopXMLNS,
+                 {xmlel, <<"item">>, _attrs, _els}) ->
+    {Jid, Name, Node} = decode_disco_item_attrs(__TopXMLNS,
+                                               _attrs, undefined, undefined,
                                                undefined),
     {disco_item, Jid, Name, Node}.
 
-decode_disco_item_attrs([{<<"jid">>, _val} | _attrs],
-                       _Jid, Name, Node) ->
-    decode_disco_item_attrs(_attrs, _val, Name, Node);
-decode_disco_item_attrs([{<<"name">>, _val} | _attrs],
-                       Jid, _Name, Node) ->
-    decode_disco_item_attrs(_attrs, Jid, _val, Node);
-decode_disco_item_attrs([{<<"node">>, _val} | _attrs],
-                       Jid, Name, _Node) ->
-    decode_disco_item_attrs(_attrs, Jid, Name, _val);
-decode_disco_item_attrs([_ | _attrs], Jid, Name,
+decode_disco_item_attrs(__TopXMLNS,
+                       [{<<"jid">>, _val} | _attrs], _Jid, Name, Node) ->
+    decode_disco_item_attrs(__TopXMLNS, _attrs, _val, Name,
+                           Node);
+decode_disco_item_attrs(__TopXMLNS,
+                       [{<<"name">>, _val} | _attrs], Jid, _Name, Node) ->
+    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, _val,
+                           Node);
+decode_disco_item_attrs(__TopXMLNS,
+                       [{<<"node">>, _val} | _attrs], Jid, Name, _Node) ->
+    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, Name,
+                           _val);
+decode_disco_item_attrs(__TopXMLNS, [_ | _attrs], Jid,
+                       Name, Node) ->
+    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, Name,
+                           Node);
+decode_disco_item_attrs(__TopXMLNS, [], Jid, Name,
                        Node) ->
-    decode_disco_item_attrs(_attrs, Jid, Name, Node);
-decode_disco_item_attrs([], Jid, Name, Node) ->
-    {decode_disco_item_attr_jid(Jid),
-     decode_disco_item_attr_name(Name),
-     decode_disco_item_attr_node(Node)}.
+    {decode_disco_item_attr_jid(__TopXMLNS, Jid),
+     decode_disco_item_attr_name(__TopXMLNS, Name),
+     decode_disco_item_attr_node(__TopXMLNS, Node)}.
 
 encode_disco_item({disco_item, Jid, Name, Node},
                  _xmlns_attrs) ->
@@ -14805,95 +15746,98 @@ encode_disco_item({disco_item, Jid, Name, Node},
                                                                                                _xmlns_attrs))),
     {xmlel, <<"item">>, _attrs, _els}.
 
-decode_disco_item_attr_jid(undefined) ->
+decode_disco_item_attr_jid(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>,
-                  <<"http://jabber.org/protocol/disco#items">>}});
-decode_disco_item_attr_jid(_val) ->
+                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
+decode_disco_item_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>,
-                        <<"http://jabber.org/protocol/disco#items">>}});
+                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_disco_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_disco_item_attr_name(undefined) -> undefined;
-decode_disco_item_attr_name(_val) -> _val.
+decode_disco_item_attr_name(__TopXMLNS, undefined) ->
+    undefined;
+decode_disco_item_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_disco_item_attr_name(undefined, _acc) -> _acc;
 encode_disco_item_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_disco_item_attr_node(undefined) -> undefined;
-decode_disco_item_attr_node(_val) -> _val.
+decode_disco_item_attr_node(__TopXMLNS, undefined) ->
+    undefined;
+decode_disco_item_attr_node(__TopXMLNS, _val) -> _val.
 
 encode_disco_item_attr_node(undefined, _acc) -> _acc;
 encode_disco_item_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_disco_info({xmlel, <<"query">>, _attrs, _els}) ->
+decode_disco_info(__TopXMLNS,
+                 {xmlel, <<"query">>, _attrs, _els}) ->
     {Xdata, Features, Identities} =
-       decode_disco_info_els(_els, [], [], []),
-    Node = decode_disco_info_attrs(_attrs, undefined),
+       decode_disco_info_els(__TopXMLNS, _els, [], [], []),
+    Node = decode_disco_info_attrs(__TopXMLNS, _attrs,
+                                  undefined),
     {disco_info, Node, Identities, Features, Xdata}.
 
-decode_disco_info_els([], Xdata, Features,
+decode_disco_info_els(__TopXMLNS, [], Xdata, Features,
                      Identities) ->
     {lists:reverse(Xdata), lists:reverse(Features),
      lists:reverse(Identities)};
-decode_disco_info_els([{xmlel, <<"identity">>, _attrs,
-                       _} =
-                          _el
-                      | _els],
+decode_disco_info_els(__TopXMLNS,
+                     [{xmlel, <<"identity">>, _attrs, _} = _el | _els],
                      Xdata, Features, Identities) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/disco#info">> ->
-          decode_disco_info_els(_els, Xdata, Features,
-                                [decode_disco_identity(_el) | Identities]);
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_disco_info_els(__TopXMLNS, _els, Xdata, Features,
+                                [decode_disco_identity(__TopXMLNS, _el)
+                                 | Identities]);
        true ->
-          decode_disco_info_els(_els, Xdata, Features, Identities)
+          decode_disco_info_els(__TopXMLNS, _els, Xdata, Features,
+                                Identities)
     end;
-decode_disco_info_els([{xmlel, <<"feature">>, _attrs,
-                       _} =
-                          _el
-                      | _els],
-                     Xdata, Features, Identities) ->
+decode_disco_info_els(__TopXMLNS,
+                     [{xmlel, <<"feature">>, _attrs, _} = _el | _els], Xdata,
+                     Features, Identities) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>;
-       _xmlns == <<"http://jabber.org/protocol/disco#info">> ->
-          decode_disco_info_els(_els, Xdata,
-                                [decode_disco_feature(_el) | Features],
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_disco_info_els(__TopXMLNS, _els, Xdata,
+                                [decode_disco_feature(__TopXMLNS, _el)
+                                 | Features],
                                 Identities);
        true ->
-          decode_disco_info_els(_els, Xdata, Features, Identities)
+          decode_disco_info_els(__TopXMLNS, _els, Xdata, Features,
+                                Identities)
     end;
-decode_disco_info_els([{xmlel, <<"x">>, _attrs, _} = _el
-                      | _els],
-                     Xdata, Features, Identities) ->
+decode_disco_info_els(__TopXMLNS,
+                     [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
+                     Features, Identities) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
     if _xmlns == <<"jabber:x:data">> ->
-          decode_disco_info_els(_els, [decode_xdata(_el) | Xdata],
-                                Features, Identities);
+          decode_disco_info_els(__TopXMLNS, _els,
+                                [decode_xdata(_xmlns, _el) | Xdata], Features,
+                                Identities);
        true ->
-          decode_disco_info_els(_els, Xdata, Features, Identities)
+          decode_disco_info_els(__TopXMLNS, _els, Xdata, Features,
+                                Identities)
     end;
-decode_disco_info_els([_ | _els], Xdata, Features,
-                     Identities) ->
-    decode_disco_info_els(_els, Xdata, Features,
+decode_disco_info_els(__TopXMLNS, [_ | _els], Xdata,
+                     Features, Identities) ->
+    decode_disco_info_els(__TopXMLNS, _els, Xdata, Features,
                          Identities).
 
-decode_disco_info_attrs([{<<"node">>, _val} | _attrs],
-                       _Node) ->
-    decode_disco_info_attrs(_attrs, _val);
-decode_disco_info_attrs([_ | _attrs], Node) ->
-    decode_disco_info_attrs(_attrs, Node);
-decode_disco_info_attrs([], Node) ->
-    decode_disco_info_attr_node(Node).
+decode_disco_info_attrs(__TopXMLNS,
+                       [{<<"node">>, _val} | _attrs], _Node) ->
+    decode_disco_info_attrs(__TopXMLNS, _attrs, _val);
+decode_disco_info_attrs(__TopXMLNS, [_ | _attrs],
+                       Node) ->
+    decode_disco_info_attrs(__TopXMLNS, _attrs, Node);
+decode_disco_info_attrs(__TopXMLNS, [], Node) ->
+    decode_disco_info_attr_node(__TopXMLNS, Node).
 
 encode_disco_info({disco_info, Node, Identities,
                   Features, Xdata},
@@ -14927,25 +15871,28 @@ encode_disco_info({disco_info, Node, Identities,
                                    [encode_disco_identity(Identities, [])
                                     | _acc]).
 
-decode_disco_info_attr_node(undefined) -> undefined;
-decode_disco_info_attr_node(_val) -> _val.
+decode_disco_info_attr_node(__TopXMLNS, undefined) ->
+    undefined;
+decode_disco_info_attr_node(__TopXMLNS, _val) -> _val.
 
 encode_disco_info_attr_node(undefined, _acc) -> _acc;
 encode_disco_info_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
-decode_disco_feature({xmlel, <<"feature">>, _attrs,
-                     _els}) ->
-    Var = decode_disco_feature_attrs(_attrs, undefined),
+decode_disco_feature(__TopXMLNS,
+                    {xmlel, <<"feature">>, _attrs, _els}) ->
+    Var = decode_disco_feature_attrs(__TopXMLNS, _attrs,
+                                    undefined),
     Var.
 
-decode_disco_feature_attrs([{<<"var">>, _val} | _attrs],
-                          _Var) ->
-    decode_disco_feature_attrs(_attrs, _val);
-decode_disco_feature_attrs([_ | _attrs], Var) ->
-    decode_disco_feature_attrs(_attrs, Var);
-decode_disco_feature_attrs([], Var) ->
-    decode_disco_feature_attr_var(Var).
+decode_disco_feature_attrs(__TopXMLNS,
+                          [{<<"var">>, _val} | _attrs], _Var) ->
+    decode_disco_feature_attrs(__TopXMLNS, _attrs, _val);
+decode_disco_feature_attrs(__TopXMLNS, [_ | _attrs],
+                          Var) ->
+    decode_disco_feature_attrs(__TopXMLNS, _attrs, Var);
+decode_disco_feature_attrs(__TopXMLNS, [], Var) ->
+    decode_disco_feature_attr_var(__TopXMLNS, Var).
 
 encode_disco_feature(Var, _xmlns_attrs) ->
     _els = [],
@@ -14953,52 +15900,52 @@ encode_disco_feature(Var, _xmlns_attrs) ->
                                           _xmlns_attrs),
     {xmlel, <<"feature">>, _attrs, _els}.
 
-decode_disco_feature_attr_var(undefined) ->
+decode_disco_feature_attr_var(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"var">>, <<"feature">>,
-                  <<"http://jabber.org/protocol/disco#info">>}});
-decode_disco_feature_attr_var(_val) -> _val.
+                 {missing_attr, <<"var">>, <<"feature">>, __TopXMLNS}});
+decode_disco_feature_attr_var(__TopXMLNS, _val) -> _val.
 
 encode_disco_feature_attr_var(_val, _acc) ->
     [{<<"var">>, _val} | _acc].
 
-decode_disco_identity({xmlel, <<"identity">>, _attrs,
-                      _els}) ->
+decode_disco_identity(__TopXMLNS,
+                     {xmlel, <<"identity">>, _attrs, _els}) ->
     {Category, Type, Lang, Name} =
-       decode_disco_identity_attrs(_attrs, undefined,
-                                   undefined, undefined, undefined),
+       decode_disco_identity_attrs(__TopXMLNS, _attrs,
+                                   undefined, undefined, undefined, undefined),
     {identity, Category, Type, Lang, Name}.
 
-decode_disco_identity_attrs([{<<"category">>, _val}
-                            | _attrs],
-                           _Category, Type, Lang, Name) ->
-    decode_disco_identity_attrs(_attrs, _val, Type, Lang,
-                               Name);
-decode_disco_identity_attrs([{<<"type">>, _val}
-                            | _attrs],
-                           Category, _Type, Lang, Name) ->
-    decode_disco_identity_attrs(_attrs, Category, _val,
-                               Lang, Name);
-decode_disco_identity_attrs([{<<"xml:lang">>, _val}
-                            | _attrs],
-                           Category, Type, _Lang, Name) ->
-    decode_disco_identity_attrs(_attrs, Category, Type,
-                               _val, Name);
-decode_disco_identity_attrs([{<<"name">>, _val}
-                            | _attrs],
-                           Category, Type, Lang, _Name) ->
-    decode_disco_identity_attrs(_attrs, Category, Type,
-                               Lang, _val);
-decode_disco_identity_attrs([_ | _attrs], Category,
+decode_disco_identity_attrs(__TopXMLNS,
+                           [{<<"category">>, _val} | _attrs], _Category, Type,
+                           Lang, Name) ->
+    decode_disco_identity_attrs(__TopXMLNS, _attrs, _val,
+                               Type, Lang, Name);
+decode_disco_identity_attrs(__TopXMLNS,
+                           [{<<"type">>, _val} | _attrs], Category, _Type,
+                           Lang, Name) ->
+    decode_disco_identity_attrs(__TopXMLNS, _attrs,
+                               Category, _val, Lang, Name);
+decode_disco_identity_attrs(__TopXMLNS,
+                           [{<<"xml:lang">>, _val} | _attrs], Category, Type,
+                           _Lang, Name) ->
+    decode_disco_identity_attrs(__TopXMLNS, _attrs,
+                               Category, Type, _val, Name);
+decode_disco_identity_attrs(__TopXMLNS,
+                           [{<<"name">>, _val} | _attrs], Category, Type, Lang,
+                           _Name) ->
+    decode_disco_identity_attrs(__TopXMLNS, _attrs,
+                               Category, Type, Lang, _val);
+decode_disco_identity_attrs(__TopXMLNS, [_ | _attrs],
+                           Category, Type, Lang, Name) ->
+    decode_disco_identity_attrs(__TopXMLNS, _attrs,
+                               Category, Type, Lang, Name);
+decode_disco_identity_attrs(__TopXMLNS, [], Category,
                            Type, Lang, Name) ->
-    decode_disco_identity_attrs(_attrs, Category, Type,
-                               Lang, Name);
-decode_disco_identity_attrs([], Category, Type, Lang,
-                           Name) ->
-    {decode_disco_identity_attr_category(Category),
-     decode_disco_identity_attr_type(Type),
-     'decode_disco_identity_attr_xml:lang'(Lang),
-     decode_disco_identity_attr_name(Name)}.
+    {decode_disco_identity_attr_category(__TopXMLNS,
+                                        Category),
+     decode_disco_identity_attr_type(__TopXMLNS, Type),
+     'decode_disco_identity_attr_xml:lang'(__TopXMLNS, Lang),
+     decode_disco_identity_attr_name(__TopXMLNS, Name)}.
 
 encode_disco_identity({identity, Category, Type, Lang,
                       Name},
@@ -15011,27 +15958,34 @@ encode_disco_identity({identity, Category, Type, Lang,
                                                                                                                                                       _xmlns_attrs)))),
     {xmlel, <<"identity">>, _attrs, _els}.
 
-decode_disco_identity_attr_category(undefined) ->
+decode_disco_identity_attr_category(__TopXMLNS,
+                                   undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"category">>, <<"identity">>,
-                  <<"http://jabber.org/protocol/disco#info">>}});
-decode_disco_identity_attr_category(_val) -> _val.
+                  __TopXMLNS}});
+decode_disco_identity_attr_category(__TopXMLNS, _val) ->
+    _val.
 
 encode_disco_identity_attr_category(_val, _acc) ->
     [{<<"category">>, _val} | _acc].
 
-decode_disco_identity_attr_type(undefined) ->
+decode_disco_identity_attr_type(__TopXMLNS,
+                               undefined) ->
     erlang:error({xmpp_codec,
                  {missing_attr, <<"type">>, <<"identity">>,
-                  <<"http://jabber.org/protocol/disco#info">>}});
-decode_disco_identity_attr_type(_val) -> _val.
+                  __TopXMLNS}});
+decode_disco_identity_attr_type(__TopXMLNS, _val) ->
+    _val.
 
 encode_disco_identity_attr_type(_val, _acc) ->
     [{<<"type">>, _val} | _acc].
 
-'decode_disco_identity_attr_xml:lang'(undefined) ->
+'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
+                                     undefined) ->
     undefined;
-'decode_disco_identity_attr_xml:lang'(_val) -> _val.
+'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
+                                     _val) ->
+    _val.
 
 'encode_disco_identity_attr_xml:lang'(undefined,
                                      _acc) ->
@@ -15039,16 +15993,19 @@ encode_disco_identity_attr_type(_val, _acc) ->
 'encode_disco_identity_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_disco_identity_attr_name(undefined) -> undefined;
-decode_disco_identity_attr_name(_val) -> _val.
+decode_disco_identity_attr_name(__TopXMLNS,
+                               undefined) ->
+    undefined;
+decode_disco_identity_attr_name(__TopXMLNS, _val) ->
+    _val.
 
 encode_disco_identity_attr_name(undefined, _acc) ->
     _acc;
 encode_disco_identity_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_block_list({xmlel, <<"blocklist">>, _attrs,
-                  _els}) ->
+decode_block_list(__TopXMLNS,
+                 {xmlel, <<"blocklist">>, _attrs, _els}) ->
     {block_list}.
 
 encode_block_list({block_list}, _xmlns_attrs) ->
@@ -15056,24 +16013,26 @@ encode_block_list({block_list}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"blocklist">>, _attrs, _els}.
 
-decode_unblock({xmlel, <<"unblock">>, _attrs, _els}) ->
-    Items = decode_unblock_els(_els, []), {unblock, Items}.
+decode_unblock(__TopXMLNS,
+              {xmlel, <<"unblock">>, _attrs, _els}) ->
+    Items = decode_unblock_els(__TopXMLNS, _els, []),
+    {unblock, Items}.
 
-decode_unblock_els([], Items) -> lists:reverse(Items);
-decode_unblock_els([{xmlel, <<"item">>, _attrs, _} = _el
-                   | _els],
-                  Items) ->
+decode_unblock_els(__TopXMLNS, [], Items) ->
+    lists:reverse(Items);
+decode_unblock_els(__TopXMLNS,
+                  [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
-          decode_unblock_els(_els,
-                             case decode_block_item(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_unblock_els(__TopXMLNS, _els,
+                             case decode_block_item(__TopXMLNS, _el) of
                                undefined -> Items;
                                _new_el -> [_new_el | Items]
                              end);
-       true -> decode_unblock_els(_els, Items)
+       true -> decode_unblock_els(__TopXMLNS, _els, Items)
     end;
-decode_unblock_els([_ | _els], Items) ->
-    decode_unblock_els(_els, Items).
+decode_unblock_els(__TopXMLNS, [_ | _els], Items) ->
+    decode_unblock_els(__TopXMLNS, _els, Items).
 
 encode_unblock({unblock, Items}, _xmlns_attrs) ->
     _els = 'encode_unblock_$items'(Items, []),
@@ -15085,24 +16044,26 @@ encode_unblock({unblock, Items}, _xmlns_attrs) ->
     'encode_unblock_$items'(_els,
                            [encode_block_item(Items, []) | _acc]).
 
-decode_block({xmlel, <<"block">>, _attrs, _els}) ->
-    Items = decode_block_els(_els, []), {block, Items}.
+decode_block(__TopXMLNS,
+            {xmlel, <<"block">>, _attrs, _els}) ->
+    Items = decode_block_els(__TopXMLNS, _els, []),
+    {block, Items}.
 
-decode_block_els([], Items) -> lists:reverse(Items);
-decode_block_els([{xmlel, <<"item">>, _attrs, _} = _el
-                 | _els],
-                Items) ->
+decode_block_els(__TopXMLNS, [], Items) ->
+    lists:reverse(Items);
+decode_block_els(__TopXMLNS,
+                [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
-          decode_block_els(_els,
-                           case decode_block_item(_el) of
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_block_els(__TopXMLNS, _els,
+                           case decode_block_item(__TopXMLNS, _el) of
                              undefined -> Items;
                              _new_el -> [_new_el | Items]
                            end);
-       true -> decode_block_els(_els, Items)
+       true -> decode_block_els(__TopXMLNS, _els, Items)
     end;
-decode_block_els([_ | _els], Items) ->
-    decode_block_els(_els, Items).
+decode_block_els(__TopXMLNS, [_ | _els], Items) ->
+    decode_block_els(__TopXMLNS, _els, Items).
 
 encode_block({block, Items}, _xmlns_attrs) ->
     _els = 'encode_block_$items'(Items, []),
@@ -15114,78 +16075,89 @@ encode_block({block, Items}, _xmlns_attrs) ->
     'encode_block_$items'(_els,
                          [encode_block_item(Items, []) | _acc]).
 
-decode_block_item({xmlel, <<"item">>, _attrs, _els}) ->
-    Jid = decode_block_item_attrs(_attrs, undefined), Jid.
+decode_block_item(__TopXMLNS,
+                 {xmlel, <<"item">>, _attrs, _els}) ->
+    Jid = decode_block_item_attrs(__TopXMLNS, _attrs,
+                                 undefined),
+    Jid.
 
-decode_block_item_attrs([{<<"jid">>, _val} | _attrs],
-                       _Jid) ->
-    decode_block_item_attrs(_attrs, _val);
-decode_block_item_attrs([_ | _attrs], Jid) ->
-    decode_block_item_attrs(_attrs, Jid);
-decode_block_item_attrs([], Jid) ->
-    decode_block_item_attr_jid(Jid).
+decode_block_item_attrs(__TopXMLNS,
+                       [{<<"jid">>, _val} | _attrs], _Jid) ->
+    decode_block_item_attrs(__TopXMLNS, _attrs, _val);
+decode_block_item_attrs(__TopXMLNS, [_ | _attrs],
+                       Jid) ->
+    decode_block_item_attrs(__TopXMLNS, _attrs, Jid);
+decode_block_item_attrs(__TopXMLNS, [], Jid) ->
+    decode_block_item_attr_jid(__TopXMLNS, Jid).
 
 encode_block_item(Jid, _xmlns_attrs) ->
     _els = [],
     _attrs = encode_block_item_attr_jid(Jid, _xmlns_attrs),
     {xmlel, <<"item">>, _attrs, _els}.
 
-decode_block_item_attr_jid(undefined) ->
+decode_block_item_attr_jid(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>,
-                  <<"urn:xmpp:blocking">>}});
-decode_block_item_attr_jid(_val) ->
+                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
+decode_block_item_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>,
-                        <<"urn:xmpp:blocking">>}});
+                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_block_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_privacy({xmlel, <<"query">>, _attrs, _els}) ->
-    {Lists, Default, Active} = decode_privacy_els(_els, [],
-                                                 undefined, undefined),
+decode_privacy(__TopXMLNS,
+              {xmlel, <<"query">>, _attrs, _els}) ->
+    {Lists, Default, Active} =
+       decode_privacy_els(__TopXMLNS, _els, [], undefined,
+                          undefined),
     {privacy, Lists, Default, Active}.
 
-decode_privacy_els([], Lists, Default, Active) ->
+decode_privacy_els(__TopXMLNS, [], Lists, Default,
+                  Active) ->
     {lists:reverse(Lists), Default, Active};
-decode_privacy_els([{xmlel, <<"list">>, _attrs, _} = _el
-                   | _els],
-                  Lists, Default, Active) ->
-    _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_els(_els,
-                             [decode_privacy_list(_el) | Lists], Default,
-                             Active);
-       true -> decode_privacy_els(_els, Lists, Default, Active)
+decode_privacy_els(__TopXMLNS,
+                  [{xmlel, <<"list">>, _attrs, _} = _el | _els], Lists,
+                  Default, Active) ->
+    _xmlns = get_attr(<<"xmlns">>, _attrs),
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_els(__TopXMLNS, _els,
+                             [decode_privacy_list(__TopXMLNS, _el) | Lists],
+                             Default, Active);
+       true ->
+          decode_privacy_els(__TopXMLNS, _els, Lists, Default,
+                             Active)
     end;
-decode_privacy_els([{xmlel, <<"default">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Lists, Default, Active) ->
+decode_privacy_els(__TopXMLNS,
+                  [{xmlel, <<"default">>, _attrs, _} = _el | _els], Lists,
+                  Default, Active) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_els(_els, Lists,
-                             decode_privacy_default_list(_el), Active);
-       true -> decode_privacy_els(_els, Lists, Default, Active)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_els(__TopXMLNS, _els, Lists,
+                             decode_privacy_default_list(__TopXMLNS, _el),
+                             Active);
+       true ->
+          decode_privacy_els(__TopXMLNS, _els, Lists, Default,
+                             Active)
     end;
-decode_privacy_els([{xmlel, <<"active">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Lists, Default, Active) ->
+decode_privacy_els(__TopXMLNS,
+                  [{xmlel, <<"active">>, _attrs, _} = _el | _els], Lists,
+                  Default, Active) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_els(_els, Lists, Default,
-                             decode_privacy_active_list(_el));
-       true -> decode_privacy_els(_els, Lists, Default, Active)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_els(__TopXMLNS, _els, Lists, Default,
+                             decode_privacy_active_list(__TopXMLNS, _el));
+       true ->
+          decode_privacy_els(__TopXMLNS, _els, Lists, Default,
+                             Active)
     end;
-decode_privacy_els([_ | _els], Lists, Default,
-                  Active) ->
-    decode_privacy_els(_els, Lists, Default, Active).
+decode_privacy_els(__TopXMLNS, [_ | _els], Lists,
+                  Default, Active) ->
+    decode_privacy_els(__TopXMLNS, _els, Lists, Default,
+                      Active).
 
 encode_privacy({privacy, Lists, Default, Active},
               _xmlns_attrs) ->
@@ -15209,20 +16181,23 @@ encode_privacy({privacy, Lists, Default, Active},
 'encode_privacy_$active'(Active, _acc) ->
     [encode_privacy_active_list(Active, []) | _acc].
 
-decode_privacy_active_list({xmlel, <<"active">>, _attrs,
-                           _els}) ->
-    Name = decode_privacy_active_list_attrs(_attrs,
-                                           undefined),
+decode_privacy_active_list(__TopXMLNS,
+                          {xmlel, <<"active">>, _attrs, _els}) ->
+    Name = decode_privacy_active_list_attrs(__TopXMLNS,
+                                           _attrs, undefined),
     Name.
 
-decode_privacy_active_list_attrs([{<<"name">>, _val}
-                                 | _attrs],
-                                _Name) ->
-    decode_privacy_active_list_attrs(_attrs, _val);
-decode_privacy_active_list_attrs([_ | _attrs], Name) ->
-    decode_privacy_active_list_attrs(_attrs, Name);
-decode_privacy_active_list_attrs([], Name) ->
-    decode_privacy_active_list_attr_name(Name).
+decode_privacy_active_list_attrs(__TopXMLNS,
+                                [{<<"name">>, _val} | _attrs], _Name) ->
+    decode_privacy_active_list_attrs(__TopXMLNS, _attrs,
+                                    _val);
+decode_privacy_active_list_attrs(__TopXMLNS,
+                                [_ | _attrs], Name) ->
+    decode_privacy_active_list_attrs(__TopXMLNS, _attrs,
+                                    Name);
+decode_privacy_active_list_attrs(__TopXMLNS, [],
+                                Name) ->
+    decode_privacy_active_list_attr_name(__TopXMLNS, Name).
 
 encode_privacy_active_list(Name, _xmlns_attrs) ->
     _els = [],
@@ -15230,28 +16205,35 @@ encode_privacy_active_list(Name, _xmlns_attrs) ->
                                                  _xmlns_attrs),
     {xmlel, <<"active">>, _attrs, _els}.
 
-decode_privacy_active_list_attr_name(undefined) -> none;
-decode_privacy_active_list_attr_name(_val) -> _val.
+decode_privacy_active_list_attr_name(__TopXMLNS,
+                                    undefined) ->
+    none;
+decode_privacy_active_list_attr_name(__TopXMLNS,
+                                    _val) ->
+    _val.
 
 encode_privacy_active_list_attr_name(none, _acc) ->
     _acc;
 encode_privacy_active_list_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_privacy_default_list({xmlel, <<"default">>,
-                            _attrs, _els}) ->
-    Name = decode_privacy_default_list_attrs(_attrs,
-                                            undefined),
+decode_privacy_default_list(__TopXMLNS,
+                           {xmlel, <<"default">>, _attrs, _els}) ->
+    Name = decode_privacy_default_list_attrs(__TopXMLNS,
+                                            _attrs, undefined),
     Name.
 
-decode_privacy_default_list_attrs([{<<"name">>, _val}
-                                  | _attrs],
-                                 _Name) ->
-    decode_privacy_default_list_attrs(_attrs, _val);
-decode_privacy_default_list_attrs([_ | _attrs], Name) ->
-    decode_privacy_default_list_attrs(_attrs, Name);
-decode_privacy_default_list_attrs([], Name) ->
-    decode_privacy_default_list_attr_name(Name).
+decode_privacy_default_list_attrs(__TopXMLNS,
+                                 [{<<"name">>, _val} | _attrs], _Name) ->
+    decode_privacy_default_list_attrs(__TopXMLNS, _attrs,
+                                     _val);
+decode_privacy_default_list_attrs(__TopXMLNS,
+                                 [_ | _attrs], Name) ->
+    decode_privacy_default_list_attrs(__TopXMLNS, _attrs,
+                                     Name);
+decode_privacy_default_list_attrs(__TopXMLNS, [],
+                                 Name) ->
+    decode_privacy_default_list_attr_name(__TopXMLNS, Name).
 
 encode_privacy_default_list(Name, _xmlns_attrs) ->
     _els = [],
@@ -15259,44 +16241,48 @@ encode_privacy_default_list(Name, _xmlns_attrs) ->
                                                   _xmlns_attrs),
     {xmlel, <<"default">>, _attrs, _els}.
 
-decode_privacy_default_list_attr_name(undefined) ->
+decode_privacy_default_list_attr_name(__TopXMLNS,
+                                     undefined) ->
     none;
-decode_privacy_default_list_attr_name(_val) -> _val.
+decode_privacy_default_list_attr_name(__TopXMLNS,
+                                     _val) ->
+    _val.
 
 encode_privacy_default_list_attr_name(none, _acc) ->
     _acc;
 encode_privacy_default_list_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_privacy_list({xmlel, <<"list">>, _attrs,
-                    _els}) ->
-    Items = decode_privacy_list_els(_els, []),
-    Name = decode_privacy_list_attrs(_attrs, undefined),
+decode_privacy_list(__TopXMLNS,
+                   {xmlel, <<"list">>, _attrs, _els}) ->
+    Items = decode_privacy_list_els(__TopXMLNS, _els, []),
+    Name = decode_privacy_list_attrs(__TopXMLNS, _attrs,
+                                    undefined),
     {privacy_list, Name, Items}.
 
-decode_privacy_list_els([], Items) ->
+decode_privacy_list_els(__TopXMLNS, [], Items) ->
     lists:reverse(Items);
-decode_privacy_list_els([{xmlel, <<"item">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
-                       Items) ->
+decode_privacy_list_els(__TopXMLNS,
+                       [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_list_els(_els,
-                                  [decode_privacy_item(_el) | Items]);
-       true -> decode_privacy_list_els(_els, Items)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_list_els(__TopXMLNS, _els,
+                                  [decode_privacy_item(__TopXMLNS, _el)
+                                   | Items]);
+       true -> decode_privacy_list_els(__TopXMLNS, _els, Items)
     end;
-decode_privacy_list_els([_ | _els], Items) ->
-    decode_privacy_list_els(_els, Items).
+decode_privacy_list_els(__TopXMLNS, [_ | _els],
+                       Items) ->
+    decode_privacy_list_els(__TopXMLNS, _els, Items).
 
-decode_privacy_list_attrs([{<<"name">>, _val} | _attrs],
-                         _Name) ->
-    decode_privacy_list_attrs(_attrs, _val);
-decode_privacy_list_attrs([_ | _attrs], Name) ->
-    decode_privacy_list_attrs(_attrs, Name);
-decode_privacy_list_attrs([], Name) ->
-    decode_privacy_list_attr_name(Name).
+decode_privacy_list_attrs(__TopXMLNS,
+                         [{<<"name">>, _val} | _attrs], _Name) ->
+    decode_privacy_list_attrs(__TopXMLNS, _attrs, _val);
+decode_privacy_list_attrs(__TopXMLNS, [_ | _attrs],
+                         Name) ->
+    decode_privacy_list_attrs(__TopXMLNS, _attrs, Name);
+decode_privacy_list_attrs(__TopXMLNS, [], Name) ->
+    decode_privacy_list_attr_name(__TopXMLNS, Name).
 
 encode_privacy_list({privacy_list, Name, Items},
                    _xmlns_attrs) ->
@@ -15310,96 +16296,89 @@ encode_privacy_list({privacy_list, Name, Items},
     'encode_privacy_list_$items'(_els,
                                 [encode_privacy_item(Items, []) | _acc]).
 
-decode_privacy_list_attr_name(undefined) ->
+decode_privacy_list_attr_name(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"list">>,
-                  <<"jabber:iq:privacy">>}});
-decode_privacy_list_attr_name(_val) -> _val.
+                 {missing_attr, <<"name">>, <<"list">>, __TopXMLNS}});
+decode_privacy_list_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_privacy_list_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_privacy_item({xmlel, <<"item">>, _attrs,
-                    _els}) ->
-    Kinds = decode_privacy_item_els(_els, []),
+decode_privacy_item(__TopXMLNS,
+                   {xmlel, <<"item">>, _attrs, _els}) ->
+    Kinds = decode_privacy_item_els(__TopXMLNS, _els, []),
     {Action, Order, Type, Value} =
-       decode_privacy_item_attrs(_attrs, undefined, undefined,
-                                 undefined, undefined),
+       decode_privacy_item_attrs(__TopXMLNS, _attrs, undefined,
+                                 undefined, undefined, undefined),
     {privacy_item, Order, Action, Type, Value, Kinds}.
 
-decode_privacy_item_els([], Kinds) ->
+decode_privacy_item_els(__TopXMLNS, [], Kinds) ->
     lists:reverse(Kinds);
-decode_privacy_item_els([{xmlel, <<"message">>, _attrs,
-                         _} =
-                            _el
-                        | _els],
+decode_privacy_item_els(__TopXMLNS,
+                       [{xmlel, <<"message">>, _attrs, _} = _el | _els],
                        Kinds) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_item_els(_els, Kinds);
-       true -> decode_privacy_item_els(_els, Kinds)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_item_els(__TopXMLNS, _els, Kinds);
+       true -> decode_privacy_item_els(__TopXMLNS, _els, Kinds)
     end;
-decode_privacy_item_els([{xmlel, <<"iq">>, _attrs, _} =
-                            _el
-                        | _els],
-                       Kinds) ->
+decode_privacy_item_els(__TopXMLNS,
+                       [{xmlel, <<"iq">>, _attrs, _} = _el | _els], Kinds) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_item_els(_els, Kinds);
-       true -> decode_privacy_item_els(_els, Kinds)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_item_els(__TopXMLNS, _els, Kinds);
+       true -> decode_privacy_item_els(__TopXMLNS, _els, Kinds)
     end;
-decode_privacy_item_els([{xmlel, <<"presence-in">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_privacy_item_els(__TopXMLNS,
+                       [{xmlel, <<"presence-in">>, _attrs, _} = _el | _els],
                        Kinds) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_item_els(_els, Kinds);
-       true -> decode_privacy_item_els(_els, Kinds)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_item_els(__TopXMLNS, _els, Kinds);
+       true -> decode_privacy_item_els(__TopXMLNS, _els, Kinds)
     end;
-decode_privacy_item_els([{xmlel, <<"presence-out">>,
-                         _attrs, _} =
-                            _el
-                        | _els],
+decode_privacy_item_els(__TopXMLNS,
+                       [{xmlel, <<"presence-out">>, _attrs, _} = _el | _els],
                        Kinds) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
-          decode_privacy_item_els(_els, Kinds);
-       true -> decode_privacy_item_els(_els, Kinds)
-    end;
-decode_privacy_item_els([_ | _els], Kinds) ->
-    decode_privacy_item_els(_els, Kinds).
-
-decode_privacy_item_attrs([{<<"action">>, _val}
-                          | _attrs],
-                         _Action, Order, Type, Value) ->
-    decode_privacy_item_attrs(_attrs, _val, Order, Type,
-                             Value);
-decode_privacy_item_attrs([{<<"order">>, _val}
-                          | _attrs],
-                         Action, _Order, Type, Value) ->
-    decode_privacy_item_attrs(_attrs, Action, _val, Type,
-                             Value);
-decode_privacy_item_attrs([{<<"type">>, _val} | _attrs],
-                         Action, Order, _Type, Value) ->
-    decode_privacy_item_attrs(_attrs, Action, Order, _val,
-                             Value);
-decode_privacy_item_attrs([{<<"value">>, _val}
-                          | _attrs],
-                         Action, Order, Type, _Value) ->
-    decode_privacy_item_attrs(_attrs, Action, Order, Type,
-                             _val);
-decode_privacy_item_attrs([_ | _attrs], Action, Order,
-                         Type, Value) ->
-    decode_privacy_item_attrs(_attrs, Action, Order, Type,
-                             Value);
-decode_privacy_item_attrs([], Action, Order, Type,
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_privacy_item_els(__TopXMLNS, _els, Kinds);
+       true -> decode_privacy_item_els(__TopXMLNS, _els, Kinds)
+    end;
+decode_privacy_item_els(__TopXMLNS, [_ | _els],
+                       Kinds) ->
+    decode_privacy_item_els(__TopXMLNS, _els, Kinds).
+
+decode_privacy_item_attrs(__TopXMLNS,
+                         [{<<"action">>, _val} | _attrs], _Action, Order, Type,
                          Value) ->
-    {decode_privacy_item_attr_action(Action),
-     decode_privacy_item_attr_order(Order),
-     decode_privacy_item_attr_type(Type),
-     decode_privacy_item_attr_value(Value)}.
+    decode_privacy_item_attrs(__TopXMLNS, _attrs, _val,
+                             Order, Type, Value);
+decode_privacy_item_attrs(__TopXMLNS,
+                         [{<<"order">>, _val} | _attrs], Action, _Order, Type,
+                         Value) ->
+    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
+                             _val, Type, Value);
+decode_privacy_item_attrs(__TopXMLNS,
+                         [{<<"type">>, _val} | _attrs], Action, Order, _Type,
+                         Value) ->
+    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
+                             Order, _val, Value);
+decode_privacy_item_attrs(__TopXMLNS,
+                         [{<<"value">>, _val} | _attrs], Action, Order, Type,
+                         _Value) ->
+    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
+                             Order, Type, _val);
+decode_privacy_item_attrs(__TopXMLNS, [_ | _attrs],
+                         Action, Order, Type, Value) ->
+    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
+                             Order, Type, Value);
+decode_privacy_item_attrs(__TopXMLNS, [], Action, Order,
+                         Type, Value) ->
+    {decode_privacy_item_attr_action(__TopXMLNS, Action),
+     decode_privacy_item_attr_order(__TopXMLNS, Order),
+     decode_privacy_item_attr_type(__TopXMLNS, Type),
+     decode_privacy_item_attr_value(__TopXMLNS, Value)}.
 
 encode_privacy_item({privacy_item, Order, Action, Type,
                     Value, Kinds},
@@ -15434,45 +16413,43 @@ encode_privacy_item({privacy_item, Order, Action, Type,
                                 [encode_privacy_presence_out(Kinds, [])
                                  | _acc]).
 
-decode_privacy_item_attr_action(undefined) ->
+decode_privacy_item_attr_action(__TopXMLNS,
+                               undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"action">>, <<"item">>,
-                  <<"jabber:iq:privacy">>}});
-decode_privacy_item_attr_action(_val) ->
+                 {missing_attr, <<"action">>, <<"item">>, __TopXMLNS}});
+decode_privacy_item_attr_action(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [allow, deny]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"action">>, <<"item">>,
-                        <<"jabber:iq:privacy">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
 encode_privacy_item_attr_action(_val, _acc) ->
     [{<<"action">>, enc_enum(_val)} | _acc].
 
-decode_privacy_item_attr_order(undefined) ->
+decode_privacy_item_attr_order(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"order">>, <<"item">>,
-                  <<"jabber:iq:privacy">>}});
-decode_privacy_item_attr_order(_val) ->
+                 {missing_attr, <<"order">>, <<"item">>, __TopXMLNS}});
+decode_privacy_item_attr_order(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"order">>, <<"item">>,
-                        <<"jabber:iq:privacy">>}});
+                       {bad_attr_value, <<"order">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_privacy_item_attr_order(_val, _acc) ->
     [{<<"order">>, enc_int(_val)} | _acc].
 
-decode_privacy_item_attr_type(undefined) -> undefined;
-decode_privacy_item_attr_type(_val) ->
+decode_privacy_item_attr_type(__TopXMLNS, undefined) ->
+    undefined;
+decode_privacy_item_attr_type(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [group, jid, subscription]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"item">>,
-                        <<"jabber:iq:privacy">>}});
+                       {bad_attr_value, <<"type">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -15480,15 +16457,17 @@ encode_privacy_item_attr_type(undefined, _acc) -> _acc;
 encode_privacy_item_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
-decode_privacy_item_attr_value(undefined) -> undefined;
-decode_privacy_item_attr_value(_val) -> _val.
+decode_privacy_item_attr_value(__TopXMLNS, undefined) ->
+    undefined;
+decode_privacy_item_attr_value(__TopXMLNS, _val) ->
+    _val.
 
 encode_privacy_item_attr_value(undefined, _acc) -> _acc;
 encode_privacy_item_attr_value(_val, _acc) ->
     [{<<"value">>, _val} | _acc].
 
-decode_privacy_presence_out({xmlel, <<"presence-out">>,
-                            _attrs, _els}) ->
+decode_privacy_presence_out(__TopXMLNS,
+                           {xmlel, <<"presence-out">>, _attrs, _els}) ->
     'presence-out'.
 
 encode_privacy_presence_out('presence-out',
@@ -15497,8 +16476,8 @@ encode_privacy_presence_out('presence-out',
     _attrs = _xmlns_attrs,
     {xmlel, <<"presence-out">>, _attrs, _els}.
 
-decode_privacy_presence_in({xmlel, <<"presence-in">>,
-                           _attrs, _els}) ->
+decode_privacy_presence_in(__TopXMLNS,
+                          {xmlel, <<"presence-in">>, _attrs, _els}) ->
     'presence-in'.
 
 encode_privacy_presence_in('presence-in',
@@ -15507,7 +16486,8 @@ encode_privacy_presence_in('presence-in',
     _attrs = _xmlns_attrs,
     {xmlel, <<"presence-in">>, _attrs, _els}.
 
-decode_privacy_iq({xmlel, <<"iq">>, _attrs, _els}) ->
+decode_privacy_iq(__TopXMLNS,
+                 {xmlel, <<"iq">>, _attrs, _els}) ->
     iq.
 
 encode_privacy_iq(iq, _xmlns_attrs) ->
@@ -15515,8 +16495,8 @@ encode_privacy_iq(iq, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"iq">>, _attrs, _els}.
 
-decode_privacy_message({xmlel, <<"message">>, _attrs,
-                       _els}) ->
+decode_privacy_message(__TopXMLNS,
+                      {xmlel, <<"message">>, _attrs, _els}) ->
     message.
 
 encode_privacy_message(message, _xmlns_attrs) ->
@@ -15524,31 +16504,33 @@ encode_privacy_message(message, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"message">>, _attrs, _els}.
 
-decode_roster({xmlel, <<"query">>, _attrs, _els}) ->
-    Items = decode_roster_els(_els, []),
-    Ver = decode_roster_attrs(_attrs, undefined),
+decode_roster(__TopXMLNS,
+             {xmlel, <<"query">>, _attrs, _els}) ->
+    Items = decode_roster_els(__TopXMLNS, _els, []),
+    Ver = decode_roster_attrs(__TopXMLNS, _attrs,
+                             undefined),
     {roster, Items, Ver}.
 
-decode_roster_els([], Items) -> lists:reverse(Items);
-decode_roster_els([{xmlel, <<"item">>, _attrs, _} = _el
-                  | _els],
-                 Items) ->
+decode_roster_els(__TopXMLNS, [], Items) ->
+    lists:reverse(Items);
+decode_roster_els(__TopXMLNS,
+                 [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
-          decode_roster_els(_els,
-                            [decode_roster_item(_el) | Items]);
-       true -> decode_roster_els(_els, Items)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_roster_els(__TopXMLNS, _els,
+                            [decode_roster_item(__TopXMLNS, _el) | Items]);
+       true -> decode_roster_els(__TopXMLNS, _els, Items)
     end;
-decode_roster_els([_ | _els], Items) ->
-    decode_roster_els(_els, Items).
+decode_roster_els(__TopXMLNS, [_ | _els], Items) ->
+    decode_roster_els(__TopXMLNS, _els, Items).
 
-decode_roster_attrs([{<<"ver">>, _val} | _attrs],
-                   _Ver) ->
-    decode_roster_attrs(_attrs, _val);
-decode_roster_attrs([_ | _attrs], Ver) ->
-    decode_roster_attrs(_attrs, Ver);
-decode_roster_attrs([], Ver) ->
-    decode_roster_attr_ver(Ver).
+decode_roster_attrs(__TopXMLNS,
+                   [{<<"ver">>, _val} | _attrs], _Ver) ->
+    decode_roster_attrs(__TopXMLNS, _attrs, _val);
+decode_roster_attrs(__TopXMLNS, [_ | _attrs], Ver) ->
+    decode_roster_attrs(__TopXMLNS, _attrs, Ver);
+decode_roster_attrs(__TopXMLNS, [], Ver) ->
+    decode_roster_attr_ver(__TopXMLNS, Ver).
 
 encode_roster({roster, Items, Ver}, _xmlns_attrs) ->
     _els = 'encode_roster_$items'(Items, []),
@@ -15560,62 +16542,69 @@ encode_roster({roster, Items, Ver}, _xmlns_attrs) ->
     'encode_roster_$items'(_els,
                           [encode_roster_item(Items, []) | _acc]).
 
-decode_roster_attr_ver(undefined) -> undefined;
-decode_roster_attr_ver(_val) -> _val.
+decode_roster_attr_ver(__TopXMLNS, undefined) ->
+    undefined;
+decode_roster_attr_ver(__TopXMLNS, _val) -> _val.
 
 encode_roster_attr_ver(undefined, _acc) -> _acc;
 encode_roster_attr_ver(_val, _acc) ->
     [{<<"ver">>, _val} | _acc].
 
-decode_roster_item({xmlel, <<"item">>, _attrs, _els}) ->
-    Groups = decode_roster_item_els(_els, []),
+decode_roster_item(__TopXMLNS,
+                  {xmlel, <<"item">>, _attrs, _els}) ->
+    Groups = decode_roster_item_els(__TopXMLNS, _els, []),
     {Jid, Name, Subscription, Ask} =
-       decode_roster_item_attrs(_attrs, undefined, undefined,
-                                undefined, undefined),
+       decode_roster_item_attrs(__TopXMLNS, _attrs, undefined,
+                                undefined, undefined, undefined),
     {roster_item, Jid, Name, Groups, Subscription, Ask}.
 
-decode_roster_item_els([], Groups) ->
+decode_roster_item_els(__TopXMLNS, [], Groups) ->
     lists:reverse(Groups);
-decode_roster_item_els([{xmlel, <<"group">>, _attrs,
-                        _} =
-                           _el
-                       | _els],
+decode_roster_item_els(__TopXMLNS,
+                      [{xmlel, <<"group">>, _attrs, _} = _el | _els],
                       Groups) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
-          decode_roster_item_els(_els,
-                                 [decode_roster_group(_el) | Groups]);
-       true -> decode_roster_item_els(_els, Groups)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_roster_item_els(__TopXMLNS, _els,
+                                 [decode_roster_group(__TopXMLNS, _el)
+                                  | Groups]);
+       true -> decode_roster_item_els(__TopXMLNS, _els, Groups)
     end;
-decode_roster_item_els([_ | _els], Groups) ->
-    decode_roster_item_els(_els, Groups).
+decode_roster_item_els(__TopXMLNS, [_ | _els],
+                      Groups) ->
+    decode_roster_item_els(__TopXMLNS, _els, Groups).
 
-decode_roster_item_attrs([{<<"jid">>, _val} | _attrs],
-                        _Jid, Name, Subscription, Ask) ->
-    decode_roster_item_attrs(_attrs, _val, Name,
+decode_roster_item_attrs(__TopXMLNS,
+                        [{<<"jid">>, _val} | _attrs], _Jid, Name, Subscription,
+                        Ask) ->
+    decode_roster_item_attrs(__TopXMLNS, _attrs, _val, Name,
                             Subscription, Ask);
-decode_roster_item_attrs([{<<"name">>, _val} | _attrs],
-                        Jid, _Name, Subscription, Ask) ->
-    decode_roster_item_attrs(_attrs, Jid, _val,
+decode_roster_item_attrs(__TopXMLNS,
+                        [{<<"name">>, _val} | _attrs], Jid, _Name,
+                        Subscription, Ask) ->
+    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, _val,
                             Subscription, Ask);
-decode_roster_item_attrs([{<<"subscription">>, _val}
-                         | _attrs],
-                        Jid, Name, _Subscription, Ask) ->
-    decode_roster_item_attrs(_attrs, Jid, Name, _val, Ask);
-decode_roster_item_attrs([{<<"ask">>, _val} | _attrs],
-                        Jid, Name, Subscription, _Ask) ->
-    decode_roster_item_attrs(_attrs, Jid, Name,
+decode_roster_item_attrs(__TopXMLNS,
+                        [{<<"subscription">>, _val} | _attrs], Jid, Name,
+                        _Subscription, Ask) ->
+    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
+                            _val, Ask);
+decode_roster_item_attrs(__TopXMLNS,
+                        [{<<"ask">>, _val} | _attrs], Jid, Name, Subscription,
+                        _Ask) ->
+    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
                             Subscription, _val);
-decode_roster_item_attrs([_ | _attrs], Jid, Name,
-                        Subscription, Ask) ->
-    decode_roster_item_attrs(_attrs, Jid, Name,
+decode_roster_item_attrs(__TopXMLNS, [_ | _attrs], Jid,
+                        Name, Subscription, Ask) ->
+    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
                             Subscription, Ask);
-decode_roster_item_attrs([], Jid, Name, Subscription,
-                        Ask) ->
-    {decode_roster_item_attr_jid(Jid),
-     decode_roster_item_attr_name(Name),
-     decode_roster_item_attr_subscription(Subscription),
-     decode_roster_item_attr_ask(Ask)}.
+decode_roster_item_attrs(__TopXMLNS, [], Jid, Name,
+                        Subscription, Ask) ->
+    {decode_roster_item_attr_jid(__TopXMLNS, Jid),
+     decode_roster_item_attr_name(__TopXMLNS, Name),
+     decode_roster_item_attr_subscription(__TopXMLNS,
+                                         Subscription),
+     decode_roster_item_attr_ask(__TopXMLNS, Ask)}.
 
 encode_roster_item({roster_item, Jid, Name, Groups,
                    Subscription, Ask},
@@ -15633,38 +16622,40 @@ encode_roster_item({roster_item, Jid, Name, Groups,
     'encode_roster_item_$groups'(_els,
                                 [encode_roster_group(Groups, []) | _acc]).
 
-decode_roster_item_attr_jid(undefined) ->
+decode_roster_item_attr_jid(__TopXMLNS, undefined) ->
     erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>,
-                  <<"jabber:iq:roster">>}});
-decode_roster_item_attr_jid(_val) ->
+                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
+decode_roster_item_attr_jid(__TopXMLNS, _val) ->
     case catch dec_jid(_val) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>,
-                        <<"jabber:iq:roster">>}});
+                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
 encode_roster_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_roster_item_attr_name(undefined) -> undefined;
-decode_roster_item_attr_name(_val) -> _val.
+decode_roster_item_attr_name(__TopXMLNS, undefined) ->
+    undefined;
+decode_roster_item_attr_name(__TopXMLNS, _val) -> _val.
 
 encode_roster_item_attr_name(undefined, _acc) -> _acc;
 encode_roster_item_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_roster_item_attr_subscription(undefined) -> none;
-decode_roster_item_attr_subscription(_val) ->
+decode_roster_item_attr_subscription(__TopXMLNS,
+                                    undefined) ->
+    none;
+decode_roster_item_attr_subscription(__TopXMLNS,
+                                    _val) ->
     case catch dec_enum(_val,
                        [none, to, from, both, remove])
        of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"subscription">>, <<"item">>,
-                        <<"jabber:iq:roster">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -15673,13 +16664,13 @@ encode_roster_item_attr_subscription(none, _acc) ->
 encode_roster_item_attr_subscription(_val, _acc) ->
     [{<<"subscription">>, enc_enum(_val)} | _acc].
 
-decode_roster_item_attr_ask(undefined) -> undefined;
-decode_roster_item_attr_ask(_val) ->
+decode_roster_item_attr_ask(__TopXMLNS, undefined) ->
+    undefined;
+decode_roster_item_attr_ask(__TopXMLNS, _val) ->
     case catch dec_enum(_val, [subscribe]) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"ask">>, <<"item">>,
-                        <<"jabber:iq:roster">>}});
+                       {bad_attr_value, <<"ask">>, <<"item">>, __TopXMLNS}});
       _res -> _res
     end.
 
@@ -15687,70 +16678,75 @@ encode_roster_item_attr_ask(undefined, _acc) -> _acc;
 encode_roster_item_attr_ask(_val, _acc) ->
     [{<<"ask">>, enc_enum(_val)} | _acc].
 
-decode_roster_group({xmlel, <<"group">>, _attrs,
-                    _els}) ->
-    Cdata = decode_roster_group_els(_els, <<>>), Cdata.
+decode_roster_group(__TopXMLNS,
+                   {xmlel, <<"group">>, _attrs, _els}) ->
+    Cdata = decode_roster_group_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_roster_group_els([], Cdata) ->
-    decode_roster_group_cdata(Cdata);
-decode_roster_group_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_roster_group_els(_els,
+decode_roster_group_els(__TopXMLNS, [], Cdata) ->
+    decode_roster_group_cdata(__TopXMLNS, Cdata);
+decode_roster_group_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_roster_group_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_roster_group_els([_ | _els], Cdata) ->
-    decode_roster_group_els(_els, Cdata).
+decode_roster_group_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_roster_group_els(__TopXMLNS, _els, Cdata).
 
 encode_roster_group(Cdata, _xmlns_attrs) ->
     _els = encode_roster_group_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"group">>, _attrs, _els}.
 
-decode_roster_group_cdata(<<>>) ->
+decode_roster_group_cdata(__TopXMLNS, <<>>) ->
     erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"group">>,
-                  <<"jabber:iq:roster">>}});
-decode_roster_group_cdata(_val) -> _val.
+                 {missing_cdata, <<>>, <<"group">>, __TopXMLNS}});
+decode_roster_group_cdata(__TopXMLNS, _val) -> _val.
 
 encode_roster_group_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_version({xmlel, <<"query">>, _attrs, _els}) ->
-    {Ver, Os, Name} = decode_version_els(_els, undefined,
-                                        undefined, undefined),
+decode_version(__TopXMLNS,
+              {xmlel, <<"query">>, _attrs, _els}) ->
+    {Ver, Os, Name} = decode_version_els(__TopXMLNS, _els,
+                                        undefined, undefined, undefined),
     {version, Name, Ver, Os}.
 
-decode_version_els([], Ver, Os, Name) ->
+decode_version_els(__TopXMLNS, [], Ver, Os, Name) ->
     {Ver, Os, Name};
-decode_version_els([{xmlel, <<"name">>, _attrs, _} = _el
-                   | _els],
-                  Ver, Os, Name) ->
+decode_version_els(__TopXMLNS,
+                  [{xmlel, <<"name">>, _attrs, _} = _el | _els], Ver, Os,
+                  Name) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
-          decode_version_els(_els, Ver, Os,
-                             decode_version_name(_el));
-       true -> decode_version_els(_els, Ver, Os, Name)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_version_els(__TopXMLNS, _els, Ver, Os,
+                             decode_version_name(__TopXMLNS, _el));
+       true ->
+          decode_version_els(__TopXMLNS, _els, Ver, Os, Name)
     end;
-decode_version_els([{xmlel, <<"version">>, _attrs, _} =
-                       _el
-                   | _els],
-                  Ver, Os, Name) ->
+decode_version_els(__TopXMLNS,
+                  [{xmlel, <<"version">>, _attrs, _} = _el | _els], Ver,
+                  Os, Name) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
-          decode_version_els(_els, decode_version_ver(_el), Os,
-                             Name);
-       true -> decode_version_els(_els, Ver, Os, Name)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_version_els(__TopXMLNS, _els,
+                             decode_version_ver(__TopXMLNS, _el), Os, Name);
+       true ->
+          decode_version_els(__TopXMLNS, _els, Ver, Os, Name)
     end;
-decode_version_els([{xmlel, <<"os">>, _attrs, _} = _el
-                   | _els],
-                  Ver, Os, Name) ->
+decode_version_els(__TopXMLNS,
+                  [{xmlel, <<"os">>, _attrs, _} = _el | _els], Ver, Os,
+                  Name) ->
     _xmlns = get_attr(<<"xmlns">>, _attrs),
-    if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
-          decode_version_els(_els, Ver, decode_version_os(_el),
-                             Name);
-       true -> decode_version_els(_els, Ver, Os, Name)
+    if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+          decode_version_els(__TopXMLNS, _els, Ver,
+                             decode_version_os(__TopXMLNS, _el), Name);
+       true ->
+          decode_version_els(__TopXMLNS, _els, Ver, Os, Name)
     end;
-decode_version_els([_ | _els], Ver, Os, Name) ->
-    decode_version_els(_els, Ver, Os, Name).
+decode_version_els(__TopXMLNS, [_ | _els], Ver, Os,
+                  Name) ->
+    decode_version_els(__TopXMLNS, _els, Ver, Os, Name).
 
 encode_version({version, Name, Ver, Os},
               _xmlns_attrs) ->
@@ -15773,104 +16769,111 @@ encode_version({version, Name, Ver, Os},
 'encode_version_$name'(Name, _acc) ->
     [encode_version_name(Name, []) | _acc].
 
-decode_version_os({xmlel, <<"os">>, _attrs, _els}) ->
-    Cdata = decode_version_os_els(_els, <<>>), Cdata.
+decode_version_os(__TopXMLNS,
+                 {xmlel, <<"os">>, _attrs, _els}) ->
+    Cdata = decode_version_os_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_version_os_els([], Cdata) ->
-    decode_version_os_cdata(Cdata);
-decode_version_os_els([{xmlcdata, _data} | _els],
-                     Cdata) ->
-    decode_version_os_els(_els,
+decode_version_os_els(__TopXMLNS, [], Cdata) ->
+    decode_version_os_cdata(__TopXMLNS, Cdata);
+decode_version_os_els(__TopXMLNS,
+                     [{xmlcdata, _data} | _els], Cdata) ->
+    decode_version_os_els(__TopXMLNS, _els,
                          <<Cdata/binary, _data/binary>>);
-decode_version_os_els([_ | _els], Cdata) ->
-    decode_version_os_els(_els, Cdata).
+decode_version_os_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_version_os_els(__TopXMLNS, _els, Cdata).
 
 encode_version_os(Cdata, _xmlns_attrs) ->
     _els = encode_version_os_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"os">>, _attrs, _els}.
 
-decode_version_os_cdata(<<>>) ->
+decode_version_os_cdata(__TopXMLNS, <<>>) ->
     erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"os">>,
-                  <<"jabber:iq:version">>}});
-decode_version_os_cdata(_val) -> _val.
+                 {missing_cdata, <<>>, <<"os">>, __TopXMLNS}});
+decode_version_os_cdata(__TopXMLNS, _val) -> _val.
 
 encode_version_os_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_version_ver({xmlel, <<"version">>, _attrs,
-                   _els}) ->
-    Cdata = decode_version_ver_els(_els, <<>>), Cdata.
+decode_version_ver(__TopXMLNS,
+                  {xmlel, <<"version">>, _attrs, _els}) ->
+    Cdata = decode_version_ver_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_version_ver_els([], Cdata) ->
-    decode_version_ver_cdata(Cdata);
-decode_version_ver_els([{xmlcdata, _data} | _els],
-                      Cdata) ->
-    decode_version_ver_els(_els,
+decode_version_ver_els(__TopXMLNS, [], Cdata) ->
+    decode_version_ver_cdata(__TopXMLNS, Cdata);
+decode_version_ver_els(__TopXMLNS,
+                      [{xmlcdata, _data} | _els], Cdata) ->
+    decode_version_ver_els(__TopXMLNS, _els,
                           <<Cdata/binary, _data/binary>>);
-decode_version_ver_els([_ | _els], Cdata) ->
-    decode_version_ver_els(_els, Cdata).
+decode_version_ver_els(__TopXMLNS, [_ | _els], Cdata) ->
+    decode_version_ver_els(__TopXMLNS, _els, Cdata).
 
 encode_version_ver(Cdata, _xmlns_attrs) ->
     _els = encode_version_ver_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"version">>, _attrs, _els}.
 
-decode_version_ver_cdata(<<>>) ->
+decode_version_ver_cdata(__TopXMLNS, <<>>) ->
     erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"version">>,
-                  <<"jabber:iq:version">>}});
-decode_version_ver_cdata(_val) -> _val.
+                 {missing_cdata, <<>>, <<"version">>, __TopXMLNS}});
+decode_version_ver_cdata(__TopXMLNS, _val) -> _val.
 
 encode_version_ver_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_version_name({xmlel, <<"name">>, _attrs,
-                    _els}) ->
-    Cdata = decode_version_name_els(_els, <<>>), Cdata.
+decode_version_name(__TopXMLNS,
+                   {xmlel, <<"name">>, _attrs, _els}) ->
+    Cdata = decode_version_name_els(__TopXMLNS, _els, <<>>),
+    Cdata.
 
-decode_version_name_els([], Cdata) ->
-    decode_version_name_cdata(Cdata);
-decode_version_name_els([{xmlcdata, _data} | _els],
-                       Cdata) ->
-    decode_version_name_els(_els,
+decode_version_name_els(__TopXMLNS, [], Cdata) ->
+    decode_version_name_cdata(__TopXMLNS, Cdata);
+decode_version_name_els(__TopXMLNS,
+                       [{xmlcdata, _data} | _els], Cdata) ->
+    decode_version_name_els(__TopXMLNS, _els,
                            <<Cdata/binary, _data/binary>>);
-decode_version_name_els([_ | _els], Cdata) ->
-    decode_version_name_els(_els, Cdata).
+decode_version_name_els(__TopXMLNS, [_ | _els],
+                       Cdata) ->
+    decode_version_name_els(__TopXMLNS, _els, Cdata).
 
 encode_version_name(Cdata, _xmlns_attrs) ->
     _els = encode_version_name_cdata(Cdata, []),
     _attrs = _xmlns_attrs,
     {xmlel, <<"name">>, _attrs, _els}.
 
-decode_version_name_cdata(<<>>) ->
+decode_version_name_cdata(__TopXMLNS, <<>>) ->
     erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"name">>,
-                  <<"jabber:iq:version">>}});
-decode_version_name_cdata(_val) -> _val.
+                 {missing_cdata, <<>>, <<"name">>, __TopXMLNS}});
+decode_version_name_cdata(__TopXMLNS, _val) -> _val.
 
 encode_version_name_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
-decode_last({xmlel, <<"query">>, _attrs, _els}) ->
-    Text = decode_last_els(_els, <<>>),
-    Seconds = decode_last_attrs(_attrs, undefined),
+decode_last(__TopXMLNS,
+           {xmlel, <<"query">>, _attrs, _els}) ->
+    Text = decode_last_els(__TopXMLNS, _els, <<>>),
+    Seconds = decode_last_attrs(__TopXMLNS, _attrs,
+                               undefined),
     {last, Seconds, Text}.
 
-decode_last_els([], Text) -> decode_last_cdata(Text);
-decode_last_els([{xmlcdata, _data} | _els], Text) ->
-    decode_last_els(_els, <<Text/binary, _data/binary>>);
-decode_last_els([_ | _els], Text) ->
-    decode_last_els(_els, Text).
-
-decode_last_attrs([{<<"seconds">>, _val} | _attrs],
-                 _Seconds) ->
-    decode_last_attrs(_attrs, _val);
-decode_last_attrs([_ | _attrs], Seconds) ->
-    decode_last_attrs(_attrs, Seconds);
-decode_last_attrs([], Seconds) ->
-    decode_last_attr_seconds(Seconds).
+decode_last_els(__TopXMLNS, [], Text) ->
+    decode_last_cdata(__TopXMLNS, Text);
+decode_last_els(__TopXMLNS, [{xmlcdata, _data} | _els],
+               Text) ->
+    decode_last_els(__TopXMLNS, _els,
+                   <<Text/binary, _data/binary>>);
+decode_last_els(__TopXMLNS, [_ | _els], Text) ->
+    decode_last_els(__TopXMLNS, _els, Text).
+
+decode_last_attrs(__TopXMLNS,
+                 [{<<"seconds">>, _val} | _attrs], _Seconds) ->
+    decode_last_attrs(__TopXMLNS, _attrs, _val);
+decode_last_attrs(__TopXMLNS, [_ | _attrs], Seconds) ->
+    decode_last_attrs(__TopXMLNS, _attrs, Seconds);
+decode_last_attrs(__TopXMLNS, [], Seconds) ->
+    decode_last_attr_seconds(__TopXMLNS, Seconds).
 
 encode_last({last, Seconds, Text}, _xmlns_attrs) ->
     _els = encode_last_cdata(Text, []),
@@ -15878,13 +16881,14 @@ encode_last({last, Seconds, Text}, _xmlns_attrs) ->
                                      _xmlns_attrs),
     {xmlel, <<"query">>, _attrs, _els}.
 
-decode_last_attr_seconds(undefined) -> undefined;
-decode_last_attr_seconds(_val) ->
+decode_last_attr_seconds(__TopXMLNS, undefined) ->
+    undefined;
+decode_last_attr_seconds(__TopXMLNS, _val) ->
     case catch dec_int(_val, 0, infinity) of
       {'EXIT', _} ->
          erlang:error({xmpp_codec,
                        {bad_attr_value, <<"seconds">>, <<"query">>,
-                        <<"jabber:iq:last">>}});
+                        __TopXMLNS}});
       _res -> _res
     end.
 
@@ -15892,8 +16896,8 @@ encode_last_attr_seconds(undefined, _acc) -> _acc;
 encode_last_attr_seconds(_val, _acc) ->
     [{<<"seconds">>, enc_int(_val)} | _acc].
 
-decode_last_cdata(<<>>) -> undefined;
-decode_last_cdata(_val) -> _val.
+decode_last_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_last_cdata(__TopXMLNS, _val) -> _val.
 
 encode_last_cdata(undefined, _acc) -> _acc;
 encode_last_cdata(_val, _acc) ->
index 80567d7d4d4030f838c9d56c661018f19d448f0f..9521d5d1aed891692349ca99909774bd5ba16a12 100644 (file)
@@ -13,7 +13,8 @@
                      port = 1080 :: non_neg_integer()}).
 
 -record(sm_resume, {h :: non_neg_integer(),
-                    previd :: binary()}).
+                    previd :: binary(),
+                    xmlns :: binary()}).
 
 -record(carbons_enable, {}).
 
                       from :: any(),
                       to :: any()}).
 
--record(sm_a, {h :: non_neg_integer()}).
+-record(sm_a, {h :: non_neg_integer(),
+               xmlns :: binary()}).
 
 -record(starttls_proceed, {}).
 
 -record(sm_resumed, {h :: non_neg_integer(),
-                     previd :: binary()}).
+                     previd :: binary(),
+                     xmlns :: binary()}).
 
 -record(forwarded, {delay :: #delay{},
                     sub_els = [] :: [any()]}).
 
 -record(sm_enable, {max :: non_neg_integer(),
-                    resume = false :: any()}).
+                    resume = false :: any(),
+                    xmlns :: binary()}).
 
 -record(starttls_failure, {}).
 
@@ -63,7 +67,7 @@
 
 -record(p1_ack, {}).
 
--record(feature_sm, {}).
+-record(feature_sm, {xmlns :: binary()}).
 
 -record(pubsub_item, {id :: binary(),
                       xml_els = [] :: [any()]}).
@@ -84,7 +88,7 @@
                             node :: binary(),
                             publisher :: binary()}).
 
--record(sm_r, {}).
+-record(sm_r, {xmlns :: binary()}).
 
 -record(muc_actor, {jid :: any(),
                     nick :: binary()}).
 -record(sm_enabled, {id :: binary(),
                      location :: binary(),
                      max :: non_neg_integer(),
-                     resume = false :: any()}).
+                     resume = false :: any(),
+                     xmlns :: binary()}).
 
 -record(pubsub_event_items, {node :: binary(),
                              retract = [] :: [binary()],
 
 -record(sasl_mechanisms, {list = [] :: [binary()]}).
 
--record(sm_failed, {reason :: atom() | #gone{} | #redirect{}}).
+-record(sm_failed, {reason :: atom() | #gone{} | #redirect{},
+                    xmlns :: binary()}).
 
 -record(error, {type :: 'auth' | 'cancel' | 'continue' | 'modify' | 'wait',
                 by :: binary(),
index be18ce3077de9b24c0f4a61af5117ed51f1a3c71..3e5afd980ce10c3038b791bb15501588c2ef8f6e 100644 (file)
 
 -xml(feature_sm,
      #elem{name = <<"sm">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {feature_sm}}).
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {feature_sm, '$xmlns'},
+          attrs = [#attr{name = <<"xmlns">>}]}).
 
 -xml(sm_enable,
      #elem{name = <<"enable">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_enable, '$max', '$resume'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_enable, '$max', '$resume', '$xmlns'},
           attrs = [#attr{name = <<"max">>,
                          dec = {dec_int, [0, infinity]},
                           enc = {enc_int, []}},
+                   #attr{name = <<"xmlns">>},
                    #attr{name = <<"resume">>,
                          default = false,
                          dec = {dec_bool, []},
 
 -xml(sm_enabled,
      #elem{name = <<"enabled">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_enabled, '$id', '$location', '$max', '$resume'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_enabled, '$id', '$location', '$max', '$resume', '$xmlns'},
           attrs = [#attr{name = <<"id">>},
                    #attr{name = <<"location">>},
+                   #attr{name = <<"xmlns">>},
                    #attr{name = <<"max">>,
                          dec = {dec_int, [0, infinity]},
                           enc = {enc_int, []}},
 
 -xml(sm_resume,
      #elem{name = <<"resume">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_resume, '$h', '$previd'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_resume, '$h', '$previd', '$xmlns'},
           attrs = [#attr{name = <<"h">>,
                          required = true,
                          dec = {dec_int, [0, infinity]},
                           enc = {enc_int, []}},
+                   #attr{name = <<"xmlns">>},
                    #attr{name = <<"previd">>,
                          required = true}]}).
 
 -xml(sm_resumed,
      #elem{name = <<"resumed">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_resumed, '$h', '$previd'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_resumed, '$h', '$previd', '$xmlns'},
           attrs = [#attr{name = <<"h">>,
                          required = true,
                          dec = {dec_int, [0, infinity]},
                           enc = {enc_int, []}},
+                   #attr{name = <<"xmlns">>},
                    #attr{name = <<"previd">>,
                          required = true}]}).
 
 -xml(sm_r,
      #elem{name = <<"r">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_r}}).
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_r, '$xmlns'},
+          attrs = [#attr{name = <<"xmlns">>}]}).
 
 -xml(sm_a,
      #elem{name = <<"a">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_a, '$h'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_a, '$h', '$xmlns'},
           attrs = [#attr{name = <<"h">>,
                          required = true,
                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}]}).
+                          enc = {enc_int, []}},
+                   #attr{name = <<"xmlns">>}]}).
 
 -xml(sm_failed,
      #elem{name = <<"failed">>,
-          xmlns = <<"urn:xmpp:sm:3">>,
-          result = {sm_failed, '$reason'},
+          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
+          result = {sm_failed, '$reason', '$xmlns'},
+          attrs = [#attr{name = <<"xmlns">>}],
           refs = [#ref{name = error_bad_request,
                         min = 0, max = 1, label = '$reason'},
                    #ref{name = error_conflict,