Index: doc/theses/mike_brooks_MMath/programs/sharectx.run.cfa
===================================================================
--- doc/theses/mike_brooks_MMath/programs/sharectx.run.cfa	(revision 5329cba3bc0fd9973b02f354beaa0694fa72ca22)
+++ doc/theses/mike_brooks_MMath/programs/sharectx.run.cfa	(revision 399074a5d8e05559710bede105d5b113eee30e65)
@@ -1,10 +1,4 @@
 #include <string.hfa>
 #include <string_sharectx.hfa>
-
-void a() {}
-void b() {}
-void c() {}
-void d() {}
-void e() {}
 
 
@@ -14,22 +8,48 @@
 
 
-
-
-
-
-void helper2() {
-	c();
-	string_sharectx c = {NEW_SHARING};
-	d();
+void a( string & sm ) {
+	string sm_a = sm; // share
 }
-void helper1() {
-	a();
-	string_sharectx c = {NO_SHARING};
-	b();
-	helper2();
-	e();
+void b( string & sm ) {
+	string sm_b = sm; // share
+}
+void c( string & sm, string & sh1 ) {
+	string sm_c = sm; // copy
+	string sh1_c = sh1; // copy
+}
+void d( string & sm, string & sh1 ) {
+	string sm_d = sm; // copy
+	string sh1_d = sh1; // copy
+}
+void e( string & sm, string & sh1, string & sh2 ) {
+	string sm_e = sm; // copy
+	string sh1_e = sh1; // copy
+	string sh2_e = sh2; // share
+}
+void f( string & sm, string & sh1 ) {
+	string sm_f = sm; // copy
+	string sh1_f = sh1; // copy
+}
+void g( string & sm ) {
+	string sm_g = sm; // share
+}
+void helper2( string & sm, string & sh1 ) {
+	d( sm, sh1 );
+	string_sharectx ctx_on = {NEW_SHARING};
+	string sh2 = "sh2";
+	e( sm, sh1, sh2 );
+}
+void helper1( string & sm ) {
+	b( sm );
+	string_sharectx ctx_off = {NO_SHARING};
+	string sh1 = "sh1";
+	c( sm, sh1 );
+	helper2( sm, sh1 );
+	f( sm, sh1 );
 }
 int main() {
-	helper1();
+	string sm = "sm";
+	a( sm );
+	helper1( sm );
+	g( sm );
 }
-
Index: doc/theses/mike_brooks_MMath/string.tex
===================================================================
--- doc/theses/mike_brooks_MMath/string.tex	(revision 5329cba3bc0fd9973b02f354beaa0694fa72ca22)
+++ doc/theses/mike_brooks_MMath/string.tex	(revision 399074a5d8e05559710bede105d5b113eee30e65)
@@ -470,13 +470,32 @@
 Hence, concurrent users of string objects must still bring their own mutual exclusion, but the string library does not add any cross thread uses that are not apparent in a user's code.
 
-\PAB{I could not get this to do anything.}
-The \CFA string library does provides a @string_sharectx@ type to control an ambient sharing context for the current thread.
+The \CFA string library provides the type @string_sharectx@to control an ambient sharing context for the current thread.
 It allows two adjustments: to opt out of sharing entirely or to begin sharing within a private context.
 Either way, the chosen mode applies only to the current thread, for the duration of the lifetime of the created  @string_sharectx@ object, up to being suspended by child lifetimes of different contexts.
+\VRef[Figure]{fig:string-sharectx} illustrates its behaviour.
+Executing the example does not produce an interesting outcome.
+But the comments indicate when the logical copy operation runs with
+\begin{description}
+    \item[share:] the copy being deferred, as described through the rest of this section (fast), or
+    \item[copy:] the copy performed eagerly (slow).
+\end{description}
+Only eager copies can cross @string_sharectx@ boundaries.
 The intended use is with stack-managed lifetimes, in which the established context lasts until the current function returns, and affects all functions called that do not create their own contexts.
-\lstinputlisting[language=CFA, firstline=20, lastline=34]{sharectx.run.cfa}
 In this example, the single-letter functions are called in alphabetic order.
-The functions @a@ and @d@ share string character ranges within themselves, but not with each other.
-The functions @b@, @c@ and @e@ never share anything.
+The functions @a@, @b@ and @g@ share string character ranges with each other, because they occupy a common sharing-enabled context.
+The function @e@ shares within itself (because its is in a sharing-enabled context), but not with the rest of the program (because its context is not occupied by any of the rest of the program).
+The functions @c@, @d@ and @f@ never share anything, because they are in a sharing-disabled context.
+
+
+\begin{figure}
+    \begin{tabular}{ll}
+        \lstinputlisting[language=CFA, firstline=10, lastline=55]{sharectx.run.cfa}
+        &
+        \includegraphics{string-sharectx.pdf}
+    \end{tabular}
+	\caption{Controlling copying vs sharing of strings using \lstinline{string_sharectx}.}
+	\label{fig:string-sharectx}
+\end{figure}
+
 
 [ TODO: true up with ``is thread local'' (implement that and expand this discussion to give a concurrent example, or adjust this wording) ]
