diff --git a/doc/preprocessor/preprocessor.tex b/doc/preprocessor/preprocessor.tex
index 003736b8a0b4704bf93a30e4568eb045caa1cab5..9b074274bcbb1901e1cfde95322801d707cca281 100644
--- a/doc/preprocessor/preprocessor.tex
+++ b/doc/preprocessor/preprocessor.tex
@@ -107,6 +107,20 @@
   \end{witemize}
 \end{frame}
 
+\section{Macro processing}
+
+\begin{frame}
+  \frametitle{Macro processing}
+  \begin{witemize}
+  \item The Dynare macro language provides a set of macro commands that can be used in \texttt{mod} files
+  \item The macro processor employs text expansions/inclusions to transform a \texttt{mod} file with macro commands into a \texttt{mod} file without macro commands\\
+  $\rightarrow$ result can be stored using \texttt{savemacro} option
+  \item The result is fed to the parser\\
+  $\rightarrow$ use \texttt{onlymacro} to stop after macro processing before parsing
+  \item Attention: the macro processor only does text substitution; objects computed in later steps are not available yet and cannot be conditioned on for that reason
+  \end{witemize}
+\end{frame}
+
 \section{Parsing}
 
 \begin{frame}
@@ -584,7 +598,7 @@ The class \texttt{ParsingDriver} has the following roles:
     \item computes equation cross references, if desired
     \end{itemize}
   \item NB: analogous operations for static model are performed by \texttt{StaticModel::computingPass()}
-  \item Asserts that equations declared linear are indeed linear (by checking that Hessian == 0)
+  \item Asserts that equations declared \texttt{linear} are indeed linear (by checking that Hessian == 0)
   \item Finally, calls \texttt{Statement::computingPass()} on all statements
   \end{itemize}
 \end{frame}
@@ -597,7 +611,7 @@ The class \texttt{ParsingDriver} has the following roles:
   \item The \texttt{SymbolTable} class keeps track of valid symbols, while the \texttt{variable\_node\_map} keeps track of model variables (symbol, lag pairs stored in \texttt{VariableNode} objects)
   \item After the computing pass, the \texttt{DynamicModel} class writes the leag/lag incidence matrix:
     \begin{witemize}
-    \item three rows: the first row indicates $t-1$, the second row $t$, and the third row $t+1$
+    \item \texttt{max\_lag + max\_lead + 1} rows (usually 3): the first row indicates $t-1$ (if applicable), the second row $t$, and the third row $t+1$ (if applicable)
     \item one column for every endogenous symbol in order of declaration; NB: includes endogenous auxiliary variables created during the transform pass
     \item elements of the matrix are either 0 (if the variable does not appear in the model) or correspond to the variable's column in the Jacobian of the dynamic model
     \end{witemize}
@@ -714,7 +728,8 @@ residual(1)=3*T1+1;
     \item cost of creating new variables
     \end{witemize}
   \item Algorithm uses a recursive cost calculation, which marks some nodes as being ``temporary''
-  \item \textit{Problem}: redundant with optimizations done by the C/C++ compiler (when Dynare is in DLL mode) $\Rightarrow$ compilation very slow on big models
+  \item \textit{Problem}: redundant with optimizations done by the C/C++ compiler (when Dynare is in DLL mode)\\
+   $\Rightarrow$ compilation very slow on big models
   \end{witemize}
 \end{frame}
 
@@ -744,11 +759,12 @@ residual(1)=3*T1+1;
     \end{itemize}
   \item Subsidiary output files:
     \begin{itemize}
-    \item one for the static model
-    \item one for the dynamic model
-    \item one for the auxiliary variables
+    \item for the static model (residuals, temporary terms, derivatives)
+    \item for the dynamic model (residuals, temporary terms, derivatives)
+    \item one for the auxiliary variables in the dynamic model (if relevant)
     \item one for the steady state file (if relevant)
-    \item one for the planner objective (if relevant)
+    \item for the planner objective and Lagrange multipliers (static residuals and derivatives, if relevant)
+    \item one each for the static and dynamic parameter derivatives (if required)
     \end{itemize}
   \end{itemize}
 \end{frame}