Index: doc/proposals/enum.tex
===================================================================
--- doc/proposals/enum.tex	(revision dc80280a30ad172511ba6bf3a2cd16da277abe17)
+++ doc/proposals/enum.tex	(revision 0fa0201ddb94edca6686ec4a60eaa061cb4d64b3)
@@ -232,19 +232,33 @@
 
 \subsection{Enumeration Data}
-It is a work in progress, outlined the idea but will update with more information later...
-A \CFA enumeration is backed by data structures to store necessary data. Specifically, an enumeration has arrays to store its labels and values.
-\begin{lstlisting}[label=lst:enumeration_back_data]
-enum(T) E;
+\begin{lstlisting}[label=lst:enumeration_backing_data]
+enum(T) E { ... };
 // backing data
 T* E_values;
 char** E_labels;
 \end{lstlisting}
-Depending on the use cases, the value and label array might not be necessary to the program.
+Storing values and labels as arrays can sometimes help support enumeration features. However, the data structures are the overhead for the programs. We want to reduce the memory usage for enumeration support by:
+\begin{itemize}
+    \item Only generates the data array if necessary
+    \item The compilation units share the data structures. No extra overhead if the data structures are requested multiple times.
+\end{itemize}
+
+
+\subsection{Aggressive Inline}
+To avoid allocating memory for enumeration data structures, \CFA inline the result of enumeration attribute pseudo-function whenever it is possible. 
+\begin{lstlisting}[label=lst:enumeration_inline]
+enum(int) OddNumber { A=1, B=3 };
+sout | "A: " | OddNumber.A | "B: " | OddNumber.B | "A+B: " | OddNumber.A + OddNumber.B
+\end{lstlisting}
+Instead of calling pseudo-function @value@ on expression $OddNumber.A$ and $OddNumber.B$, because the result is known statistically, \CFA will inline the constant expression 1 and 3, respectively. Because no runtime lookup for enumeration value is necessary, \CFA will not generate data structure for enumeration OddNumber.
 
 \subsection{Weak Reference}
-If the value and label need to be determined at the runtime, the data arrays are necessary. However, allocating the attribute arrays in every compilation unit can take up a lot of memory and it is not ideal. \CFA Optimized it by using GCC weak reference ( @__attribute(weak)__@ ).
-
-\subsection{Aggressive Inline}
-If the label and value can be determined during the compilation, \CFA can inline the attributes and no allocation is needed.
+\begin{lstlisting}[label=lst:week_ref]
+enum(int) OddNumber { A=1, B=3 };
+enum OddNumber i = ...;
+...
+sout | OddNumber;
+\end{lstlisting}
+In this example, \CFA cannot determine the static value of the enum variable i, and Runtime lookup is necessary. The OddNumber can be referenced in multiple compilations, and allocating the arrays in all compilation units is not desirable. \CFA addresses this by declaring the value array as a weak reference. All compilation units reference OddNumber have weak references to the same enumeration data structure. No extra memory is allocated if more compilation units reference OddNumber, and the OddNumber is initialized once.
 
 \section{Unification}
