diff --git a/doc/scapy/build_dissect.rst b/doc/scapy/build_dissect.rst
index 6f9926d867be48b8f14affab9c60675ee3441c88..5f0ef6aac5187861dd828970d1a4a91e3d8f374a 100644
--- a/doc/scapy/build_dissect.rst
+++ b/doc/scapy/build_dissect.rst
@@ -387,7 +387,14 @@ Binding layers
 
 One of the cool features with  Scapy when dissecting layers is that is
 try to guess for us what the next layer is. The official way to link 2
-layers is using ``bind_layers()``:
+layers is using ``bind_layers()`` function.
+
+Available inside the ``packet`` module, this function can be used as following::
+
+    bind_layers(ProtoA, ProtoB, FieldToBind=Value)
+
+Each time a packet ``ProtoA()/ProtoB()`` will be created, the ``FieldToBind`` of
+``ProtoA`` will be equal to ``Value``.
 
 For instance,  if you have a class ``HTTP``, you may expect  that all the
 packets coming from or going to  port 80 will be decoded as such. This
diff --git a/scapy/packet.py b/scapy/packet.py
index eb8e265e3f0831477b74f301d39cb37148f53fcb..2ac07d15c05825b1b11481bb516c4062a214e216 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -131,9 +131,15 @@ class Packet(BasePacket):
             self.post_transforms = [post_transform]
 
     def init_fields(self):
+        """
+        Initialize each fields of the fields_desc dict
+        """
         self.do_init_fields(self.fields_desc)
 
     def do_init_fields(self, flist):
+        """
+        Initialize each fields of the fields_desc dict
+        """
         for f in flist:
             self.default_fields[f.name] = copy.deepcopy(f.default)
             self.fieldtype[f.name] = f
@@ -340,6 +346,11 @@ class Packet(BasePacket):
         return {fname: self.copy_field_value(fname, fval)
                 for fname, fval in fields.iteritems()}
     def self_build(self, field_pos_list=None):
+        """
+        Create the default layer regarding fields_desc dict
+
+        :param field_pos_list:
+        """
         if self.raw_packet_cache is not None:
             for fname, fval in self.raw_packet_cache_fields.iteritems():
                 if self.getfieldval(fname) != fval:
@@ -361,9 +372,19 @@ class Packet(BasePacket):
         return p
 
     def do_build_payload(self):
+        """
+        Create the default version of the payload layer
+
+        :return: a string of payload layer
+        """
         return self.payload.do_build()
 
     def do_build(self):
+        """
+        Create the default version of the layer
+
+        :return: a string of the packet with the payload
+        """
         if not self.explicit:
             self = self.__iter__().next()
         pkt = self.self_build()
@@ -379,13 +400,24 @@ class Packet(BasePacket):
         return self.payload.build_padding()
 
     def build(self):
+        """
+        Create the current layer
+
+        :return: string of the packet with the payload
+        """
         p = self.do_build()
         p += self.build_padding()
         p = self.build_done(p)
         return p
     
     def post_build(self, pkt, pay):
-        """DEV: called right after the current layer is build."""
+        """
+        DEV: called right after the current layer is build.
+
+        :param str pkt: the current packet (build by self_buil function)
+        :param str pay: the packet payload (build by do_build_payload function)
+        :return: a string of the packet with the payload
+        """
         return pkt+pay
 
     def build_done(self, p):
@@ -425,8 +457,14 @@ class Packet(BasePacket):
 
 
     def psdump(self, filename=None, **kargs):
-        """psdump(filename=None, layer_shift=0, rebuild=1)
-Creates an EPS file describing a packet. If filename is not provided a temporary file is created and gs is called."""
+        """
+        psdump(filename=None, layer_shift=0, rebuild=1)
+
+        Creates an EPS file describing a packet. If filename is not provided a
+        temporary file is created and gs is called.
+
+        :param filename: the file's filename
+        """
         canvas = self.canvas_dump(**kargs)
         if filename is None:
             fname = get_temp_file(autoext=".eps")
@@ -436,8 +474,14 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
             canvas.writeEPSfile(filename)
 
     def pdfdump(self, filename=None, **kargs):
-        """pdfdump(filename=None, layer_shift=0, rebuild=1)
-        Creates a PDF file describing a packet. If filename is not provided a temporary file is created and xpdf is called."""
+        """
+        pdfdump(filename=None, layer_shift=0, rebuild=1)
+
+        Creates a PDF file describing a packet. If filename is not provided a
+        temporary file is created and xpdf is called.
+
+        :param filename: the file's filename
+        """
         canvas = self.canvas_dump(**kargs)
         if filename is None:
             fname = get_temp_file(autoext=".pdf")
@@ -597,7 +641,12 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
 
 
     def extract_padding(self, s):
-        """DEV: to be overloaded to extract current layer's padding. Return a couple of strings (actual layer, padding)"""
+        """
+        DEV: to be overloaded to extract current layer's padding.
+
+        :param str s: the current layer
+        :return: a couple of strings (actual layer, padding)
+        """
         return s,None
 
     def post_dissect(self, s):
@@ -626,6 +675,11 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
         return s
 
     def do_dissect_payload(self, s):
+        """
+        Perform the dissection of the layer's payload
+
+        :param str s: the raw layer
+        """
         if s:
             cls = self.guess_payload_class(s)
             try:
@@ -657,7 +711,13 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
 
 
     def guess_payload_class(self, payload):
-        """DEV: Guesses the next payload class from layer bonds. Can be overloaded to use a different mechanism."""
+        """
+        DEV: Guesses the next payload class from layer bonds.
+        Can be overloaded to use a different mechanism.
+
+        :param str payload: the layer's payload
+        :return: the payload class
+        """
         for t in self.aliastypes:
             for fval, cls in t.payload_guess:
                 ok = 1
@@ -670,7 +730,13 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
         return self.default_payload_class(payload)
     
     def default_payload_class(self, payload):
-        """DEV: Returns the default payload class if nothing has been found by the guess_payload_class() method."""
+        """
+        DEV: Returns the default payload class if nothing has been found by the
+        guess_payload_class() method.
+
+        :param str payload: the layer's payload
+        :return: the default payload class define inside the configuration file
+        """
         return conf.raw_layer
 
     def hide_defaults(self):
@@ -873,6 +939,13 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
         """
         Internal method that shows or dumps a hierarchical view of a packet.
         Called by show.
+
+        :param dump: determine if it prints or returns the string value
+        :param int indent: the size of indentation for each layer
+        :param str lvl: additional information about the layer lvl
+        :param str label_lvl: additional information about the layer fields
+        :param first_call: determine if the current function is the first
+        :return: return a hierarchical view if dump, else print it
         """
 
         if dump:
@@ -919,11 +992,30 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
             return s
 
     def show(self, dump=False, indent=3, lvl="", label_lvl=""):
-        """Prints or returns (when "dump" is true) a hierarchical view of the packet. "indent" gives the size of indentation for each layer."""
+        """
+        Prints or returns (when "dump" is true) a hierarchical view of the
+        packet.
+
+        :param dump: determine if it prints or returns the string value
+        :param int indent: the size of indentation for each layer
+        :param str lvl: additional information about the layer lvl
+        :param str label_lvl: additional information about the layer fields
+        :return: return a hierarchical view if dump, else print it
+        """
         return self._show_or_dump(dump, indent, lvl, label_lvl)
 
     def show2(self, dump=False, indent=3, lvl="", label_lvl=""):
-        """Prints or returns (when "dump" is true) a hierarchical view of an assembled version of the packet, so that automatic fields are calculated (checksums, etc.)"""
+        """
+        Prints or returns (when "dump" is true) a hierarchical view of an
+        assembled version of the packet, so that automatic fields are
+        calculated (checksums, etc.)
+
+        :param dump: determine if it prints or returns the string value
+        :param int indent: the size of indentation for each layer
+        :param str lvl: additional information about the layer lvl
+        :param str label_lvl: additional information about the layer fields
+        :return: return a hierarchical view if dump, else print it
+        """
         return self.__class__(str(self)).show(dump, indent, lvl, label_lvl)
 
     def sprintf(self, fmt, relax=1):