diff --git a/doc/conf.py b/doc/conf.py
index df05aaa338c16274a8224cb6990895612e2af051..55d9766a664f6d04d52b0af1faac279c48673815 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -318,4 +318,5 @@ intersphinx_mapping = {
     'https://documen.tician.de/pytential/': None,
     'https://documen.tician.de/boxtree/': None,
     'https://docs.sympy.org/latest/': None,
+    'https://matplotlib.org/': None,
     }
diff --git a/doc/index.rst b/doc/index.rst
index 516a51a9217fa1c095d000f23a37a9b35e8bd326..26dab1f8c2c4db257292454de95d5bf3208a09fb 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,6 +1,8 @@
 Welcome to sumpy's documentation!
 =================================
 
+.. automodule:: sumpy
+
 Example
 -------
 
diff --git a/doc/misc.rst b/doc/misc.rst
index 113427ede53e0c739dcd764b617b2c7bad0d1717..b728f098a49fced6ae19310234526d6b84823d29 100644
--- a/doc/misc.rst
+++ b/doc/misc.rst
@@ -1,3 +1,9 @@
+Misc Tools
+==========
+
+.. automodule:: sumpy.tools
+
+
 Installation
 ============
 
diff --git a/sumpy/kernel.py b/sumpy/kernel.py
index 53b8a5506d4945fa54fb7229040fd57ee723f6bc..bb96f598fc5ddc60dc6079064b5987c64075d79c 100644
--- a/sumpy/kernel.py
+++ b/sumpy/kernel.py
@@ -81,7 +81,7 @@ class KernelArgument(object):
     """
     .. attribute:: loopy_arg
 
-        A :class:`loopy.Argument` instance describing the type,
+        A :class:`loopy.KernelArgument` instance describing the type,
         name, and other features of this kernel argument when
         passed to a generated piece of code.
     """
diff --git a/sumpy/point_calculus.py b/sumpy/point_calculus.py
index c6f9540d0dd2a5842ff30dd0132f583c6e09e339..38a5f05b74f9afcf87094c806278747fa1f0998d 100644
--- a/sumpy/point_calculus.py
+++ b/sumpy/point_calculus.py
@@ -37,9 +37,9 @@ class CalculusPatch(object):
     """Sets up a grid of points on which derivatives can be calculated. Useful
     to verify that an evaluated potential actually solves a PDE.
 
-    .. attribute: dim
+    .. attribute:: dim
 
-    .. attribute: points
+    .. attribute:: points
 
         shape: ``(dim, npoints_total)``
 
@@ -118,7 +118,7 @@ class CalculusPatch(object):
     def basis(self):
         """
         :returns: a :class:`list` containing functions that realize
-            a high-order interpolation basis on the :attr:`points`.
+            a high-order interpolation basis on the :py:attr:`points`.
         """
 
         from pytools import indices_in_shape
diff --git a/sumpy/tools.py b/sumpy/tools.py
index e55906d09ee2cc87672f5040aaab18d2c231066c..2a0a8b2220109ab1fc5c1530a6e261752a60d53d 100644
--- a/sumpy/tools.py
+++ b/sumpy/tools.py
@@ -25,6 +25,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 """
 
+__doc__ = """
+
+ Misc tools
+ ==========
+
+ .. autoclass:: BlockIndexRanges
+ .. autoclass:: MatrixBlockIndexRanges
+"""
+
 import six
 from six.moves import range, zip
 from pytools import memoize_method, memoize_in
@@ -342,6 +351,7 @@ class MatrixBlockIndexRanges(object):
     .. automethod:: block_shape
     .. automethod:: block_take
     .. automethod:: get
+    .. autoattribute:: linear_row_indices
     .. automethod:: take
 
     """
@@ -392,8 +402,8 @@ class MatrixBlockIndexRanges(object):
         friends.
 
         :return: a copy of `self` in which all data lives on the host, i.e.
-        all :class:`pyopencl.array.Array` instances are replaces by
-        :class:`numpy.ndarray` instances.
+                 all :class:`pyopencl.array.Array` instances are replaces by
+                 :class:`numpy.ndarray` instances.
         """
         return MatrixBlockIndexRanges(self.cl_context,
                 row=self.row.get(queue=queue),