diff --git a/doc/index.rst b/doc/index.rst
index 7e95d502560a34829eaa7f450d0d16a0222276c6..cfa9d02c0385786ae4f837a6893f56bc610246f8 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -6,13 +6,13 @@ PyOpenCL gives you easy, Pythonic access to the `OpenCL
 What makes PyOpenCL special?
 
 * Object cleanup tied to lifetime of objects. This idiom,
-  often called 
+  often called
   `RAII <http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization>`_
   in C++, makes it much easier to write correct, leak- and
   crash-free code.
 
 * Completeness. PyOpenCL puts the full power of OpenCL's API at your
-  disposal, if you wish. Every obscure `get_info()` query and 
+  disposal, if you wish. Every obscure `get_info()` query and
   all CL calls are accessible.
 
 * Automatic Error Checking. All errors are automatically translated
@@ -23,7 +23,7 @@ What makes PyOpenCL special?
 
 * Helpful Documentation. You're looking at it. ;)
 
-* Liberal license. PyOpenCL is open-source under the 
+* Liberal license. PyOpenCL is open-source under the
   :ref:`MIT license <license>`
   and free for commercial, academic, and private use.
 
@@ -35,12 +35,32 @@ Here's an example, to give you an impression:
 :download:`examples/demo.py <../examples/demo.py>` in the PyOpenCL
 source distribution.)
 
+Tutorials
+=========
+
+* `Simon McIntosh-Smith <http://www.cs.bris.ac.uk/~simonm/>`_
+  and `Tom Deakin <http://www.tomdeakin.com/>`_'s course
+  `Hands-on OpenCL <http://handsonopencl.github.io/>`_ contains
+  both `lecture slides <https://github.com/HandsOnOpenCL/Lecture-Slides/releases>`_
+  and `excercises (with solutions) <https://github.com/HandsOnOpenCL/Exercises-Solutions>`_
+  (The course covers PyOpenCL as well as OpenCL's C and C++ APIs.)
+* PyOpenCL course at `PASI <http://bu.edu/pasi>`_: Parts
+  `1 <https://www.youtube.com/watch?v=X9mflbX1NL8>`_
+  `2 <https://www.youtube.com/watch?v=MqvfCE_bKOg>`_
+  `3 <https://www.youtube.com/watch?v=TAvKmV7CuUw>`_
+  `4 <https://www.youtube.com/watch?v=SsuJ0LvZW1Q>`_
+  (YouTube, 2011)
+* PyOpenCL course at `DTU GPULab <http://gpulab.imm.dtu.dk/>`_ and
+  `Simula <http://simula.no/>`_ (2011):
+  `Lecture 1 <http://tiker.net/pub/simula-pyopencl-lec1.pdf>`_
+  `Lecture 2 <http://tiker.net/pub/simula-pyopencl-lec2.pdf>`_
+  `Problem set 1 <http://tiker.net/pub/simula-pyopencl-probset1.pdf>`_
+  `Problem set 2 <http://tiker.net/pub/simula-pyopencl-probset2.pdf>`_
+* Ian Johnson's `PyOpenCL tutorial <http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/>`_.
+
 Contents
 ========
 
-A `tutorial <http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/>`_
-is on the web, thanks to Ian Johnson.
-
 .. toctree::
     :maxdepth: 2
 
@@ -51,7 +71,7 @@ is on the web, thanks to Ian Johnson.
     tools
     misc
 
-Note that this guide does not explain OpenCL programming and technology. Please 
+Note that this guide does not explain OpenCL programming and technology. Please
 refer to the official `Khronos OpenCL documentation <http://khronos.org/opencl>`_
 for that.
 
diff --git a/doc/tools.rst b/doc/tools.rst
index 47620252061bd34534270f35f950c672ca286e3e..e85b4e9a39ac8dca6be4b8a4a6831ab49bf8852c 100644
--- a/doc/tools.rst
+++ b/doc/tools.rst
@@ -23,6 +23,12 @@ are made through it. Allocations performed from outside of the pool may run
 into spurious out-of-memory conditions due to the pool owning much or all of
 the available memory.
 
+Using :class:`pyopencl.array.Array` instances with a :class:`MemoryPool` is
+not complicated::
+
+    mem_pool = cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))
+    a_dev = cl_array.arange(queue, 2000, dtype=np.float32, allocator=mem_pool)
+
 .. class:: PooledBuffer
 
     An object representing a :class:`MemoryPool`-based allocation of