diff --git a/data.rst b/data.rst
index 6ce1cab..2f48325 100644
--- a/data.rst
+++ b/data.rst
@@ -94,7 +94,7 @@
 Data.wireDecode Method
 ----------------------
 
-Decode the input using a particular wire format and update this Data. If wireFormat is the default wire format, also set the defaultWireEncoding field to the input.
+Decode the input from wire format and update this Data.
 
 :[C++]:
 
@@ -103,7 +103,6 @@
     void wireDecode(
     
         const std::vector<uint8_t>& input
-	[, WireFormat& wireFormat]
     
     );
 
@@ -114,7 +113,6 @@
     ContentObject.prototype.decode = function(
     
         input // Uint8Array
-        [, wireFormat // WireFormat]
     
     )
 
@@ -123,39 +121,23 @@
     - ``input``
 	The input byte array to be decoded.
 
-    - ``wireFormat``
-	(optional) A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat().
-
 Data.wireEncode Method
 ----------------------
 
-Encode this Data for a particular wire format. If wireFormat is the default wire format, also set the defaultWireEncoding field to the encoded result.
+Encode this Data to wire format.
 
 :[C++]:
 
 .. code-block:: c++
 
-    SignedBlob wireEncode(
-    
-        [WireFormat& wireFormat]
-    
-    ) const;
+    SignedBlob wireEncode() const;
 
 :[JavaScript]:
 
 .. code-block:: javascript
 
     // Returns Uint8Array
-    ContentObject.prototype.encode = function(
-    
-        [wireFormat // WireFormat]
-    
-    )
-
-:Parameters:
-
-    - wireFormat
-	(optional) A WireFormat object used to encode the input. If omitted, use WireFormat getDefaultWireFormat ().
+    ContentObject.prototype.encode = function()
 
 :Returns:
 
diff --git a/face.rst b/face.rst
index 28699fa..6348245 100644
--- a/face.rst
+++ b/face.rst
@@ -135,7 +135,6 @@
             const Interest& interest,
             const OnData& onData,
             [, const OnTimeout& onTimeout]
-            [, WireFormat& wireFormat]
         
         );
 
@@ -167,9 +166,6 @@
 
 	    - ``interest`` is the interest given to expressInterest.
 
-    - ``wireFormat``
-	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
-
 :Returns:
 
     The pending interest ID which can be used with removePendingInterest.
@@ -190,7 +186,6 @@
             [, const Interest* interestTemplate]
             const OnData& onData,
             [, const OnTimeout& onTimeout]
-            [, WireFormat& wireFormat]
         
         );
 
@@ -238,9 +233,6 @@
 
 	    - ``interest`` is the interest given to expressInterest.
 
-    - ``wireFormat``
-	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
-
 :Returns:
 
     The pending interest ID which can be used with removePendingInterest.
@@ -282,7 +274,6 @@
             const OnInterest& onInterest,
             const OnRegisterFailed& onRegisterFailed,
             [, ForwardingFlags flags]
-            [, WireFormat& wireFormat]
         
         );
 
@@ -331,9 +322,6 @@
     - ``flags``
 	(optional) The flags for finer control of which interests are forward to the application.  If omitted, use the default flags defined by the default ForwardingFlags constructor.
 
-    - ``wireFormat``
-	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
-
 :Returns:
 
     The registered prefix ID which can be used with removeRegisteredPrefix.
diff --git a/index.rst b/index.rst
index 1a4b946..c047064 100644
--- a/index.rst
+++ b/index.rst
@@ -23,10 +23,10 @@
    details/forwarding-flags
    details/tcp-transport
    details/udp-transport
-   details/wire-format
-   details/binary-xml-wire-format
    :maxdepth: 1
 
+.. details/wire-format
+.. details/binary-xml-wire-format
 
 .. Indices and tables
 .. ==================
diff --git a/interest.rst b/interest.rst
index 614b354..e40de90 100644
--- a/interest.rst
+++ b/interest.rst
@@ -81,7 +81,7 @@
 Interest.wireDecode Method
 --------------------------
 
-Decode the input using a particular wire format and update this Interest.
+Decode the input from wire format and update this Interest.
 
 :[C++]:
 
@@ -90,7 +90,6 @@
     void decode(
     
         const std::vector<uint8_t>& input
-        [,WireFormat& wireFormat]
     
     );
 
@@ -101,7 +100,6 @@
     Interest.prototype.decode = function(
     
         input         // Uint8Array
-        [, wireFormat // WireFormat]
         
     )
 
@@ -110,40 +108,24 @@
     - ``input``
 	The input byte array to be decoded.
 
-    - ``wireFormat``
-	(optional) A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat ().
-
 
 Interest.wireEncode Method
 --------------------------
 
-Encode this Interest for a particular wire format.
+Encode this Interest to a wire format.
 
 :[C++]:
 
 .. code-block:: c++
 
-    Blob encode(
-    
-        [WireFormat& wireFormat]
-    
-    ) const;
+    Blob encode() const;
 
 :[JavaScript]:
 
 .. code-block:: javascript
 
     // Returns Uint8Array
-    Interest.prototype.encode = function(
-    
-        [wireFormat // WireFormat]
-    
-    )
-
-:Parameters:
-
-    - ``wireFormat``
-	(optional) A WireFormat object used to encode the input. If omitted, use use WireFormat getDefaultWireFormat ().
+    Interest.prototype.encode = function()
 
 :Returns:
 
diff --git a/key-chain.rst b/key-chain.rst
index c2e0029..ca571c6 100644
--- a/key-chain.rst
+++ b/key-chain.rst
@@ -19,7 +19,6 @@
         
             Data& data,
             const Name& certificateName
-            [, WireFormat& wireFormat]
         
         );
 
@@ -31,9 +30,6 @@
     - `certificateName`
         The certificate name of the key to use for signing.
 
-    - `wireFormat`
-        (optional) A WireFormat object used to encode the Data object. If omitted, use WireFormat getDefaultWireFormat ().
-
 KeyChain.signByIdentity Method
 ------------------------------
 
@@ -47,7 +43,6 @@
         
             Data& data
             [, const Name& identityName]
-            [, WireFormat& wireFormat]
             
         );
 
@@ -59,9 +54,6 @@
     - `identityName`
         (optional) The identity name for the key to use for signing.  If omitted, infer the signing identity from the data packet name.
 
-    - `wireFormat`
-        (optional) A WireFormat object used to encode the Data object. If omitted, use WireFormat getDefaultWireFormat ().
-
 KeyChain.verifyData Method
 --------------------------
 
