Index: doc/theses/andrew_beach_MMath/thesis-frontpgs.tex
===================================================================
--- doc/theses/andrew_beach_MMath/thesis-frontpgs.tex	(revision b9537e6e28ae020f54097b3d63e5a8bebeaf1cde)
+++ doc/theses/andrew_beach_MMath/thesis-frontpgs.tex	(revision f7e4f8e88c21cb43ef3af3a6e6bbdbba94f76af5)
@@ -5,4 +5,12 @@
 % TITLE PAGE
 %----------------------------------------------------------------------
+
+% Slowly generalizing.
+\ethesissetup{
+  author=Pat Neugraad,%
+  title={University of Waterloo E-Thesis Template for \LaTeX},
+  degree=phd,%
+  program=Zoology,%
+}
 
 \pagestyle{empty}
@@ -15,27 +23,23 @@
         \vspace*{1.0cm}
 
-        \Huge
-        {\bf University of Waterloo E-Thesis Template for \LaTeX }
-
-        \vspace*{1.0cm}
-
-        \normalsize
+        {\Huge\bf \eprint{title}}
+
+        \vspace*{1.0cm}
+
         by \\
 
         \vspace*{1.0cm}
 
-        \Large
-        Pat Neugraad \\
+        {\Large \eprint{author}} \\
 
         \vspace*{3.0cm}
 
-        \normalsize
         A thesis \\
         presented to the University of Waterloo \\ 
         in fulfillment of the \\
         thesis requirement for the degree of \\
-        Doctor of Philosophy \\
+        \eprint{degree} \\
         in \\
-        Zoology \\
+        \eprint{program} \\
 
         \vspace*{2.0cm}
@@ -45,5 +49,5 @@
         \vspace*{1.0cm}
 
-        \copyright\ Pat Neugraad 2017 \\
+        \copyright{} \eprint{author} 2017 \\
         \end{center}
 \end{titlepage}
Index: doc/theses/andrew_beach_MMath/uw-ethesis.cls
===================================================================
--- doc/theses/andrew_beach_MMath/uw-ethesis.cls	(revision b9537e6e28ae020f54097b3d63e5a8bebeaf1cde)
+++ doc/theses/andrew_beach_MMath/uw-ethesis.cls	(revision f7e4f8e88c21cb43ef3af3a6e6bbdbba94f76af5)
@@ -19,4 +19,9 @@
 %
 % Exported Names:
+%   \ethesissetup{<key-value-pairs>}
+%     Preforms set-up (or a reconfiguration) of the document class. See the
+%     Set-Up Keys section for the keys that may be passed in. Use commas to
+%     seperate key-value-pairs.
+%
 %   \ifformat{<format>}{<true>}{<false>}
 %     If the document's format is <format> than expands to <true> otherwise
@@ -27,13 +32,27 @@
 %     initial setup depends on the document format but they can be overriden
 %     with options in <setup> (set hyperref's \hypersetup for details).
+%
+%   \eprint{<key>}
+%     Expands to a human readable value tracked by the ethesis class. This
+%     can be used to retreave and format values set during set up.
+%
+% Set-Up Keys:
+%   author=<text>
+%   title=<text>
+%   program=<text>
+%   subject=<text>
+%   keywords=<text>
+%   degree=masters|phd
+%   faculty=ahs|arts|eng|env|math|sci
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{uw-ethesis}[2020/03/24 v0.1 UW-eThesis Template Document Class]
+\ProvidesClass{uw-ethesis}[2020/10/25 v0.2 UW-eThesis Template Document Class]
 
 \RequirePackage{etoolbox}
+\RequirePackage{xkeyval}
 
 % Requested Format:
-\newrobustcmd*{\ethesis@format}{digital}
-\DeclareOption{print}{\renewrobustcmd*{\ethesis@format}{print}}
-\DeclareOption{digital}{\renewrobustcmd*{\ethesis@format}{digital}}
+\newrobustcmd*{\ethesis@@format}{digital}
+\DeclareOption{print}{\renewrobustcmd*{\ethesis@@format}{print}}
+\DeclareOption{digital}{\renewrobustcmd*{\ethesis@@format}{digital}}
 
 \ProcessOptions\relax
@@ -81,7 +100,7 @@
 % a recto page. This will often require an empty verso (left-hand side) page
 % that should not have the page number printed on it.
-\let\origdoublepage\cleardoublepage
+\let\ethesis@origdoublepage\cleardoublepage
 \newcommand{\clearemptydoublepage}{%
-  \clearpage{\pagestyle{empty}\origdoublepage}}
+  \clearpage{\pagestyle{empty}\ethesis@origdoublepage}}
 \let\cleardoublepage\clearemptydoublepage
 
@@ -89,9 +108,24 @@
 \renewcommand*{\bibname}{References}
 
-% Configurations
-\def\setThesisTitle#1{\newrobustcmd*{\ethesis@title}{#1}}
-\def\setThesisAuthor#1{\newrobustcmd*{\ethesis@author}{#1}}
-\def\setThesisSubject#1{\newrobustcmd*{\ethesis@subject}{#1}}
-\def\setThesisKeywords#1{\newrobustcmd*{\ethesis@keywords}{#1}}
+\newrobustcmd*\ethesissetup[1]{\setkeys{ethesis}{#1}}
+
+\define@cmdkeys{ethesis}[ethesis@@]{%
+  author,title,program,subject,keywords}
+
+\define@choicekey{ethesis}{degree}{masters,phd}{\def\ethesis@@degree{#1}}
+\define@choicekey{ethesis}{faculty}{ahs,arts,eng,env,math,sci}%
+  {\def\ethesis@@faculty{#1}}
+
+\newrobustcmd*\eprint[1]{
+  \ifcsdef{ethesis@long#1}{\csuse{ethesis@long#1}}{%
+    \ifcsdef{ethesis@@#1}{\csuse{ethesis@@#1}}{%
+      % ERROR: (Check for a way to emit an actual error.)
+      [UW-eThesis doesn't know how to print: #1 ]
+    }
+  }
+}
+
+\newrobustcmd*\ethesis@longdegree{%
+  \ifdefstring{\ethesis@@degree}{phd}{Doctor of Philosophy}{Masters}}
 
 % Includes the hyperref package loading a number of defaults.
@@ -106,8 +140,8 @@
     pdfstartview={FitH},    % Fits the width of the page to the window.
   }
-  \ifdef{\ethesis@title}{\hypersetup{pdftitle={\ethesis@title}}}{}
-  \ifdef{\ethesis@author}{\hypersetup{pdfauthor={\ethesis@author}}}{}
-  \ifdef{\ethesis@subject}{\hypersetup{pdfsubject={\ethesis@subject}}}{}
-  \ifdef{\ethesis@keywords}{\hypersetup{pdfkeywords={\ethesis@keywords}}}{}
+  \ifdef{\ethesis@@title}{\hypersetup{pdftitle={\ethesis@@title}}}{}
+  \ifdef{\ethesis@@author}{\hypersetup{pdfauthor={\ethesis@@author}}}{}
+  \ifdef{\ethesis@@subject}{\hypersetup{pdfsubject={\ethesis@@subject}}}{}
+  \ifdef{\ethesis@@keywords}{\hypersetup{pdfkeywords={\ethesis@@keywords}}}{}
   \ifformat{print}{
     \hypersetup{
