diff --git a/fs-succinct/Makefile b/fs-succinct/Makefile
index cbece957916d94d3227c910caa2aedf592e80c46..12eb9337f0550811280369256a69511a1867d34b 100644
--- a/fs-succinct/Makefile
+++ b/fs-succinct/Makefile
@@ -1,5 +1,5 @@
 TOP=..
-PICS=sole sole_boxes sole_hilevel mixer composition mixer_chain mixer_tree
+PICS=sole sole_boxes sole_hilevel mixer composition mixer_chain mixer_tree tree_shapes
 
 
 include ../Makerules
@@ -9,3 +9,4 @@ sole_boxes.pdf:: succinct_common.asy
 sole_hilevel.pdf:: succinct_common.asy
 mixer_chain.pdf:: succinct_common.asy
 mixer_tree.pdf:: succinct_common.asy
+tree_shapes.pdf:: succinct_common.asy
diff --git a/fs-succinct/succinct.tex b/fs-succinct/succinct.tex
index 58bcc52f4ca5c34cc6ef3875c99f02dd7d010949..1b566a8ff5ddb96f6f32a8b147eaa84885c05a68 100644
--- a/fs-succinct/succinct.tex
+++ b/fs-succinct/succinct.tex
@@ -398,7 +398,7 @@ parent (thus most vertices receive two carry inputs but it is trivial to
 combine them into one). This is depicted in fig. \figref{mixer_tree}. Now we
 need $Y\cdot Z \cdot C \le 2^M$.
 
-\figure[mixer_tree]{mixer_tree.pdf}{}{Mixer tree for string encoding}
+\figure[mixer_tree]{mixer_tree.pdf}{}{A single mixer vertex and the organization of those into a tree}
 
 Then you can create a linear order on the vertices (e.g. by layers
 bottom-to-top), split the input string into blocks and feed the blocks through
@@ -409,8 +409,21 @@ Note that this scheme still has all the nice properties, for example it is local
 decodable. To decode a vertex's input, you only need the output of that vertex and
 its parent.
 
+But how does a tree help us determine individual mixer parameters more easily?
+The parameters of a mixer in a vertex are uniquely determined by the shape of the
+subtree under that vertex. This is easily seen by induction: all leaves have the
+same parameters (as they have dummy carry-in alphabets of size 1) and the parameters
+of any vertex are determined by the parameters of its children.
+
 We will use the same tree shape as for binary heaps: all the levels are full, except
 for possibly the last and in the last level all the vertices in one contiguous segement
 starting at the very left.
 
+Now let us consider a level at height $h$ (from the bottom). There are at most three
+subtree types at that level: full subtrees of height $h$, full subtrees of height $h-1$
+and one irregular subtree in the middle (unless the whole tree is full; then there would
+be only one kind of subtree). See fig. \figref{tree_shapes}.
+
+\figure[tree_shapes]{tree_shapes.pdf}{}{Tree and subtree shapes}
+
 \endchapter
diff --git a/fs-succinct/tree_shapes.asy b/fs-succinct/tree_shapes.asy
new file mode 100644
index 0000000000000000000000000000000000000000..d53ba17a68f634281c78a47e40f048af075d6dae
--- /dev/null
+++ b/fs-succinct/tree_shapes.asy
@@ -0,0 +1,18 @@
+import succinct_common;
+
+
+draw((-3,-2) -- (3,-2), 0.3*white);
+draw((-3.2,-4)--(-3.2,-2), Arrows);
+label((-3.2, -3), "$h$", W);
+draw((3.2,-3.5)--(3.2,-2), Arrows);
+label((3.2, -2.75), "$h-1$", E);
+
+void subtree(path p) {
+    filldraw(p, 0.5*white);
+}
+
+subtree((-1.75, -4)--(-0.75,-4)--(-1.25,-2)--cycle);
+subtree((-0.5, -4)--(0,-4)--(0,-3.5)--(0.5,-3.5)--(0,-2)--cycle);
+subtree((1.75, -3.5)--(0.75,-3.5)--(1.25,-2)--cycle);
+
+draw((-3, -4) -- (0,-4) -- (0,-3.5) -- (3,-3.5) -- (0, 0) -- cycle, halfthick);