diff --git a/doc/dev/cable_cell.rst b/doc/dev/cable_cell.rst
index ff70c545d5bb652e985702c0ae230d782e550c0b..b37c7dd061bdea721e12d8e3d3036cc2e0a8f433 100644
--- a/doc/dev/cable_cell.rst
+++ b/doc/dev/cable_cell.rst
@@ -14,14 +14,14 @@ is turned into an executable object.
 Terminology
 -----------
 
-In Arbor's codebase some prefixes are used as a low-key namespacing
+In Arbor's codebase, some prefixes are used as a low-key namespacing.
 
-- ``arb_``:: Mech ABI types, in general use through out Arbor, eg
+- ``arb_``:: Mech ABI types, in general use throughout Arbor, eg
   ``arb_mechanism_type``.
 - ``fvm_``:: Concerning use by the Finite Volume Method (FVM), eg
   ``fvm_lowered_cell``.
-- ``mc_``:: Related to Multi-Compartment (Cells), identical to cable cells the
-  difference is purely historical, eg ``cable_cell_group``.
+- ``mc_``:: Related to Multi-Compartment (Cells), identical to cable cells, the
+  difference is purely historical, e.g., ``cable_cell_group``.
 
 Setting up a Cable Cell simulation
 ----------------------------------
@@ -37,7 +37,7 @@ Arbor constructs a runnable simulation from three ingredients:
 
 The interesting part here is the ``recipe``, which is used to lazily produce the
 data required by the ``simulation`` and ``domain_decomposition``. A simple example
-might be this model of a single cell
+might be this model of a single cell.
 
 .. code:: c++
 
@@ -69,11 +69,11 @@ ion channels are described by a structure ``(name, [(parameter, value)])``.
 Lowered Cells, Shared State, and the Discretisation
 ---------------------------------------------------
 
-To obtain a simulation we need to turn the ``cable_cell`` description object
+To obtain a simulation, we need to turn the ``cable_cell`` description object
 into a ``fvm_lowered_cell``. However, multiple cells are collected into a
 ``cable_cell_group`` and ``fvm_lowered_cell`` is the lowered representation of a
 full cell group. The ``fvm_lowered_cell`` is responsible for holding the
-backend-specific data of a cell group, managing sampling and stimuli, facilitate
+backend-specific data of a cell group, managing sampling and stimuli, facilitating
 event processing, and driving time integration.
 
 Discretisation splits the segments described by the morphology into *control
@@ -98,10 +98,9 @@ Now we are in a state to simulate a cell group by calling
 
 The integration in Arbor proceeds in *epochs* with a length less than half a
 time constant :math:`T_{min}`, which is the maximum time over which cell groups
-can evolve independently. The length :math:`T_{min}` is derived as the minimum over all
+can evolve independently. The length :math:`T_{min}` is derived as the minimum overall
 axonal/synaptic delays. This works since we know that an event at time :math:`t`
-can have an effect at time :math:`t + T_{min}` at the soonest. The factor of one
-half stems from double-buffering to overlap communication and computation. So,
+can have an effect at time :math:`t + T_{min}` at the soonest. The factor of one-half stems from double-buffering to overlap communication and computation. So,
 Arbor collects all events in an epoch and transmits them in bulk, see
 :ref:`Communication <communication>` for details.