Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision e59f0bf1e2bd92c1edd775285840d853f5900983)
+++ doc/papers/general/Paper.tex	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -368,4 +368,14 @@
 Hence, programmers can easily form local environments, adding and modifying appropriate functions, to maximize reuse of other existing functions and types.
 
+Unconstruction is a mechanism to distribute @forall@ over related routines/types (see @stack@ examples in Section~\ref{sec:eval}):
+\begin{cfa}
+forall( otype T ) {							$\C{// forall block}$
+	struct stack { stack_node(T) * head; };	$\C{// generic type}$
+	void push( stack(T) & s, T value ) ...	$\C{// generic operations}$
+	T pop( stack(T) & s ) ...
+}
+\end{cfa}
+Each block declaration is prefixed with the initial @forall@ clause significantly reducing duplication.
+
 
 \subsection{Traits}
@@ -836,5 +846,5 @@
 % \end{cfa}
 % so the thunk provides flattening and structuring conversions to inferred functions, improving the compatibility of tuples and polymorphism.
-% These thunks are generated locally using gcc nested-functions, rather hositing them to the external scope, so they can easily access local state.
+% These thunks are generated locally using gcc nested-functions, rather hoisting them to the external scope, so they can easily access local state.
 
 
@@ -1167,5 +1177,5 @@
 \lstMakeShortInline@%
 \end{cquote}
-The target label must be below the @fallthrough@, \ie @fallthrough@ cannot form a loop, and the label may not be nested in a control structor, \ie it must be at the same level as the @case@ clauses;
+The target label must be below the @fallthrough@, \ie @fallthrough@ cannot form a loop, and the label may not be nested in a control structure, \ie it must be at the same level as the @case@ clauses;
 the target label may be case @default@.
 
@@ -2155,7 +2165,7 @@
 \begin{cfa}
 struct W {
-    double stones;
-    W() { stones = 0.0; }
-    W( double w ) { stones = w; }
+	double stones;
+	W() { stones = 0.0; }
+	W( double w ) { stones = w; }
 };
 W operator+( W l, W r ) {
@@ -2719,8 +2729,8 @@
 
 \CC is the best known C-based language, and is similar to \CFA in that both are extensions to C with source and runtime backwards compatibility.
-Specific difference between \CFA and \CC have been identified in prior sections, with a final observation that \CFA has equal or few tokens to express the same notion in several cases.
-The key difference between design philosophies is that \CFA is easier for C programmers to understand, by maintaining a procedural paradigm and avoiding complex interactions among extensions.
+Specific difference between \CFA and \CC have been identified in prior sections, with a final observation that \CFA has equal or fewer tokens to express the same notion in many cases.
+The key difference in design philosophies is that \CFA is easier for C programmers to understand by maintaining a procedural paradigm and avoiding complex interactions among extensions.
 \CC, on the other hand, has multiple overlapping features (such as the three forms of polymorphism), many of which have complex interactions with its object-oriented design. 
-As a result, \CC has a steep learning curve for even experienced C programmers, especially when attempting to maintain performance equivalent to C legacy code.
+As a result, \CC has a steep learning curve for even experienced C programmers, especially when attempting to maintain performance equivalent to C legacy-code.
 
 There are several other C extension-languages with less usage and even more dramatic changes than \CC. 
@@ -2728,7 +2738,7 @@
 Other languages extend C with more focused features. 
 CUDA~\cite{Nickolls08}, ispc~\cite{Pharr12}, and Sierra~\cite{Leissa14} add data-parallel primitives to C or \CC;
-such features have not yet been added to \CFA, but are not precluded by the design.
-Finaly, some C extensions (or suggested extensions) attempt to provide a more memory-safe C~\cite{Boehm88};
-type-checked polymorphism in \CFA covers several of C's memory-safety holes, but more aggressive approaches such as annotating all pointer types with their nullability are contradictory to \CFA's backwards compatibility goals.
+such features have not yet been added to \CFA, but are easily incorporated within its design.
+Finally, some C extensions (or suggested extensions) attempt to provide a more memory-safe C~\cite{Boehm88,Rafkind09};
+type-checked polymorphism in \CFA covers several of C's memory-safety issues, but more aggressive approaches such as annotating all pointer types with their nullability are contradictory to \CFA's backwards compatibility goals.
 
 
@@ -2841,7 +2851,7 @@
 	struct stack_node * n = s->head;
 	s->head = n->next;
-	void * x = n->value;
+	void * v = n->value;
 	free( n );
-	return x;
+	return v;
 }
 \end{cfa}
@@ -2904,7 +2914,10 @@
 		T value;
 		node * next;
-		node( const T & v, node * n = nullptr ) : value( v), next( n) {}
+		node( const T & v, node * n = nullptr ) : value( v ), next( n ) {}
 	};
 	node * head;
+	stack() : head( nullptr ) {}
+	stack( const stack<T> & o) { copy( o ); }
+	stack( stack<T> && o ) : head( o.head ) { o.head = nullptr; }
 	void clear() {
 		for ( node * next = head; next; ) {
@@ -2915,7 +2928,7 @@
 		head = nullptr;
 	}
-	void copy( const stack<T> & o) {
+	void copy( const stack<T> & o ) {
 		node ** crnt = &head;
-		for ( node * next = o.head;; next; next = next->next ) {
+		for ( node * next = o.head; next; next = next->next ) {
 			*crnt = new node{ next->value }; /***/
 			crnt = &(*crnt)->next;
@@ -2923,15 +2936,12 @@
 		*crnt = nullptr;
 	}
-	stack() : head( nullptr) {}
-	stack( const stack<T> & o) { copy( o); }
-	stack( stack<T> && o) : head( o.head) { o.head = nullptr; }
 	~stack() { clear(); }
-	stack & operator= ( const stack<T> & o) {
+	stack & operator= ( const stack<T> & o ) {
 		if ( this == &o ) return *this;
 		clear();
-		copy( o);
+		copy( o );
 		return *this;
 	}
-	stack & operator= ( stack<T> && o) {
+	stack & operator= ( stack<T> && o ) {
 		if ( this == &o ) return *this;
 		head = o.head;
@@ -2940,11 +2950,11 @@
 	}
 	bool empty() const { return head == nullptr; }
-	void push( const T & value) { head = new node{ value, head };  /***/ }
+	void push( const T & value ) { head = new node{ value, head };  /***/ }
 	T pop() {
 		node * n = head;
 		head = n->next;
-		T x = std::move( n->value);
+		T v = std::move( n->value );
 		delete n;
-		return x;
+		return v;
 	}
 };
@@ -2957,8 +2967,8 @@
 	struct node {
 		ptr<object> value;
-		node* next;
-		node( const object & v, node * n ) : value( v.new_copy() ), next( n ) {}
+		node * next;
+		node( const object & v, node * n = nullptr ) : value( v.new_copy() ), next( n ) {}
 	};
-	node* head;
+	node * head;
 	void clear() {
 		for ( node * next = head; next; ) {
@@ -2981,5 +2991,5 @@
 	stack( stack && o ) : head( o.head ) { o.head = nullptr; }
 	~stack() { clear(); }
-	stack & operator= ( const stack & o ) {
+	stack & operator=( const stack & o ) {
 		if ( this == &o ) return *this;
 		clear();
@@ -2987,5 +2997,5 @@
 		return *this;
 	}
-	stack & operator= ( stack && o ) {
+	stack & operator=( stack && o ) {
 		if ( this == &o ) return *this;
 		head = o.head;
@@ -2998,7 +3008,7 @@
 		node * n = head;
 		head = n->next;
-		ptr<object> x = std::move( n->value );
+		ptr<object> v = std::move( n->value );
 		delete n;
-		return x;
+		return v;
 	}
 };
