diff --git a/docs/src/userguide/buffer.rst b/docs/src/userguide/buffer.rst
index b7dfb9d6fcd6bfd9e8e7f0d7edbeae0db754934a..01e61da24be2e2e9f08a0cb26dee954bff8e3d97 100644
--- a/docs/src/userguide/buffer.rst
+++ b/docs/src/userguide/buffer.rst
@@ -66,23 +66,23 @@ which Cython handles specially.
             self.shape[1] = self.ncols
 
             # Stride 1 is the distance, in bytes, between two items in a row;
-            # this is the distance between two adjance items in the vector.
+            # this is the distance between two adjacent items in the vector.
             # Stride 0 is the distance between the first elements of adjacent rows.
             self.strides[1] = <Py_ssize_t>(  <char *>&(self.v[1])
                                            - <char *>&(self.v[0]))
             self.strides[0] = self.ncols * self.strides[1]
 
             buffer.buf = <char *>&(self.v[0])
-            buffer.format = 'f'
-            buffer.internal = NULL
+            buffer.format = 'f'                     # float
+            buffer.internal = NULL                  # see References
             buffer.itemsize = itemsize
-            buffer.len = self.v.size() * itemsize
+            buffer.len = self.v.size() * itemsize   # product(shape) * itemsize
             buffer.ndim = 2
             buffer.obj = self
             buffer.readonly = 0
             buffer.shape = self.shape
             buffer.strides = self.strides
-            buffer.suboffsets = NULL
+            buffer.suboffsets = NULL                # for pointer arrays only
 
         def __releasebuffer__(self, Py_buffer *buffer):
             pass