documentation improvements
diff --git a/docs/_static/theme_overrides.css b/docs/_static/theme_overrides.css
index f678ab5..1071809 100644
--- a/docs/_static/theme_overrides.css
+++ b/docs/_static/theme_overrides.css
@@ -5,3 +5,7 @@
 .rst-content table.docutils td {
     vertical-align: top !important;
 }
+div[class^='highlight'] pre {
+    white-space: pre;
+    white-space: pre-wrap;
+}
diff --git a/docs/advanced.rst b/docs/advanced.rst
index 534a0f2..1c6f6e0 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -416,12 +416,12 @@
 +==================================================+============================================================================+
 | :enum:`return_value_policy::automatic`           | This is the default return value policy, which falls back to the policy    |
 |                                                  | :enum:`return_value_policy::take_ownership` when the return value is a     |
-|                                                  | pointer. Otherwise, it uses :enum::`return_value::move` or                 |
-|                                                  | :enum::`return_value::copy` for rvalue and lvalue references, respectively.|
+|                                                  | pointer. Otherwise, it uses :enum:`return_value::move` or                  |
+|                                                  | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
 |                                                  | See below for a description of what all of these different policies do.    |
 +--------------------------------------------------+----------------------------------------------------------------------------+
 | :enum:`return_value_policy::automatic_reference` | As above, but use policy :enum:`return_value_policy::reference` when the   |
-|                                                  | return value is a pointer.                                                 |
+|                                                  | return value is a pointer. You probably won't need to use this.            |
 +--------------------------------------------------+----------------------------------------------------------------------------+
 | :enum:`return_value_policy::take_ownership`      | Reference an existing object (i.e. do not create a new copy) and take      |
 |                                                  | ownership. Python will call the destructor and delete operator when the    |
@@ -439,36 +439,22 @@
 | :enum:`return_value_policy::reference`           | Reference an existing object, but do not take ownership. The C++ side is   |
 |                                                  | responsible for managing the object's lifetime and deallocating it when    |
 |                                                  | it is no longer used. Warning: undefined behavior will ensue when the C++  |
-|                                                  | side deletes an object that is still referenced by Python.                 |
+|                                                  | side deletes an object that is still referenced and used by Python.        |
 +--------------------------------------------------+----------------------------------------------------------------------------+
-| :enum:`return_value_policy::reference_internal`  | Reference the object, but do not take ownership. The object is considered  |
-|                                                  | be owned by the C++ instance whose method or property returned it. The     |
-|                                                  | Python object will increase the reference count of this 'parent' by 1      |
-|                                                  | to ensure that it won't be deallocated while Python is using the 'child'   |
+| :enum:`return_value_policy::reference_internal`  | This policy only applies to methods and properties. It references the      |
+|                                                  | object without taking ownership similar to the above                       |
+|                                                  | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
+|                                                  | the function or property's implicit ``this`` argument (called the *parent*)|
+|                                                  | is considered to be the the owner of the return value (the *child*).       |
+|                                                  | pybind11 then couples the lifetime of the parent to the child via a        |
+|                                                  | reference relationship that ensures that the parent cannot be garbage      |
+|                                                  | collected while Python is still using the child. More advanced variations  |
+|                                                  | of this scheme are also possible using combinations of                     |
+|                                                  | :enum:`return_value_policy::reference` and the :class:`keep_alive` call    |
+|                                                  | policy described next.                                                     |
 +--------------------------------------------------+----------------------------------------------------------------------------+
 
-.. warning::
-
-    Code with invalid call policies might access unitialized memory or free
-    data structures multiple times, which can lead to hard-to-debug
-    non-determinism and segmentation faults, hence it is worth spending the
-    time to understand all the different options above.
-
-.. note::
-
-    The next section on :ref:`call_policies` discusses *call policies* that can be
-    specified *in addition* to a return value policy from the list above. Call
-    policies indicate reference relationships that can involve both return values
-    and parameters of functions.
-
-.. note::
-
-   As an alternative to elaborate call policies and lifetime management logic,
-   consider using smart pointers (see :ref:`smart_pointers` for details) that
-   can be used to share reference count information between C++ and Python.
-
-
-See below for an example that uses the
+The following example snippet shows a use case of the
 :enum:`return_value_policy::reference_internal` policy.
 
 .. code-block:: cpp
@@ -485,11 +471,34 @@
 
         py::class_<Example>(m, "Example")
             .def(py::init<>())
-            .def("get_internal", &Example::get_internal, "Return the internal data", py::return_value_policy::reference_internal);
+            .def("get_internal", &Example::get_internal, "Return the internal data",
+                                 py::return_value_policy::reference_internal);
 
         return m.ptr();
     }
 
+.. warning::
+
+    Code with invalid call policies might access unitialized memory or free
+    data structures multiple times, which can lead to hard-to-debug
+    non-determinism and segmentation faults, hence it is worth spending the
+    time to understand all the different options in the table above.
+
+.. note::
+
+    The next section on :ref:`call_policies` discusses *call policies* that can be
+    specified *in addition* to a return value policy from the list above. Call
+    policies indicate reference relationships that can involve both return values
+    and parameters of functions.
+
+.. note::
+
+   As an alternative to elaborate call policies and lifetime management logic,
+   consider using smart pointers (see the section on :ref:`smart_pointers` for
+   details). Smart pointers can tell whether an object is still referenced from
+   C++ or Python, which generally eliminates the kinds of inconsistencies that
+   can lead to crashes or undefined behavior. For functions returning smart
+   pointers, it is not necessary to specify a return value policy.
 
 .. _call_policies:
 
@@ -590,10 +599,10 @@
 ==============
 
 This section explains how to pass values that are wrapped in "smart" pointer
-types with internal reference counting. For simpler C++11 unique pointers,
-please refer to the previous section.
+types with internal reference counting. For the simpler C++11 unique pointers,
+refer to the previous section.
 
-The binding generator for classes (:class:`class_`) takes an optional second
+The binding generator for classes, :class:`class_`, takes an optional second
 template type, which denotes a special *holder* type that is used to manage
 references to the object. When wrapping a type named ``Type``, the default
 value of this template parameter is ``std::unique_ptr<Type>``, which means that
diff --git a/docs/basics.rst b/docs/basics.rst
index 42ff6e4..a2a6084 100644
--- a/docs/basics.rst
+++ b/docs/basics.rst
@@ -253,7 +253,9 @@
 +----------------------------+--------------------------+-----------------------+
 | std::pair<T1, T2>          | Pair of two custom types | pybind11/pybind11.h   |
 +----------------------------+--------------------------+-----------------------+
-| std::tuple<....>           | Arbitrary tuple of types | pybind11/pybind11.h   |
+| std::tuple<...>            | Arbitrary tuple of types | pybind11/pybind11.h   |
++----------------------------+--------------------------+-----------------------+
+| std::reference_wrapper<...>| Reference type wrapper   | pybind11/pybind11.h   |
 +----------------------------+--------------------------+-----------------------+
 | std::complex<T>            | Complex numbers          | pybind11/complex.h    |
 +----------------------------+--------------------------+-----------------------+
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 63806d8..46c8518 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -8,13 +8,13 @@
 * Added a new ``move`` return value policy that triggers C++11 move semantics.
   The automatic return value policy falls back to this case when a rvalue
   reference is encountered
+* Significantly more general GIL state routines that are used instead of
+  Python's troublesome ``PyGILState_Ensure`` and ``PyGILState_Release`` API
 * ``keep_alive`` fix: don't fail when there is no patient
 * ``functional.h``: acquire the GIL before calling Python function
 * Added Python RAII type wrappers ``none`` and ``iterable``
 * Added ``*args`` and ``*kwargs`` pass-through parameters to
   ``pybind11.get_include()`` function
-* Significantly more general GIL state routines that are used instead of
-  Python's troublesome ``PyGILState_Ensure`` and ``PyGILState_Release`` API.
 * Documentation improvements: ``opaque``, return value policies
 
 1.5 (April 21, 2016)
diff --git a/docs/conf.py b/docs/conf.py
index a05acc3..ca76e19 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -158,7 +158,7 @@
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['.static']
+html_static_path = ['_static']
 
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
diff --git a/docs/faq.rst b/docs/faq.rst
index 7e45b8c..2556105 100644
--- a/docs/faq.rst
+++ b/docs/faq.rst
@@ -144,7 +144,7 @@
 
 .. code-block:: cpp
 
-    __ZN8pybind1112cpp_functionC1Iv8Example2JRNSt3__16vectorINS3_12basic_stringIwNS3_11char_traitsIwEENS3_9allocatorIwEEEENS8_ISA_EEEEEJNS_4nameENS_7siblingENS_9is_methodEA28_cEEEMT0_FT_DpT1_EDpRKT2_
+    __ZN8pybind1112cpp_functionC1Iv8Example2JRNSt3__16vectorINS3_12basic_stringIwNS3_11char_traitsIwEENS​3_9allocatorIwEEEENS8_ISA_EEEEEJNS_4nameENS_7siblingENS_9is_methodEA28_cEEEMT0_FT_DpT1_EDpRKT2_
 
 which is the mangled form of the following function type:
 
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index aba804f..8bfa778 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -149,7 +149,7 @@
     automatic = 0,
 
     /** As above, but use policy return_value_policy::reference when the return
-        value is a pointer. */
+        value is a pointer. You probably won't need to use this. */
     automatic_reference,
 
     /** Reference an existing object (i.e. do not create a new copy) and take
@@ -172,14 +172,20 @@
     /** Reference an existing object, but do not take ownership. The C++ side
         is responsible for managing the object’s lifetime and deallocating it
         when it is no longer used. Warning: undefined behavior will ensue when
-        the C++ side deletes an object that is still referenced by Python. */
+        the C++ side deletes an object that is still referenced and used by
+        Python. */
     reference,
 
-    /** Reference the object, but do not take ownership. The object is
-        considered be owned by the C++ instance whose method or property
-        returned it. The Python object will increase the reference count of this
-        ‘parent’ by 1 to ensure that it won’t be deallocated while Python is
-        using the ‘child’ */
+    /** This policy only applies to methods and properties. It references the
+        object without taking ownership similar to the above
+        return_value_policy::reference policy. In contrast to that policy, the
+        function or property’s implicit this argument (called the parent) is
+        considered to be the the owner of the return value (the child).
+        pybind11 then couples the lifetime of the parent to the child via a
+        reference relationship that ensures that the parent cannot be garbage
+        collected while Python is still using the child. More advanced
+        variations of this scheme are also possible using combinations of
+        return_value_policy::reference and the keep_alive call policy */
     reference_internal
 };