diff --git a/docs/documentation.aux b/docs/documentation.aux
index 0aaf0d2f43d641d951dd31323b2b85e984d02cd5..9204b4f93cbc94f0dcda6cd05a75cc49a1c88764 100644
--- a/docs/documentation.aux
+++ b/docs/documentation.aux
@@ -35,13 +35,10 @@
 \@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Follow-the-Leader (FTL)}{2}{subsection.2.3}\protected@file@percent }
 \@writefile{toc}{\contentsline {section}{\numberline {3}Simulation of a Single Hair Strand}{2}{section.3}\protected@file@percent }
 \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}A Particle}{2}{subsection.3.1}\protected@file@percent }
+\citation{MullerPBD}
 \citation{PixarVolumetricHair}
 \citation{FTLHair}
 \citation{RappRealTime}
-\citation{UmenhofferSimulation}
-\bibstyle{ACM-Reference-Format}
-\bibdata{references}
-\bibcite{PixarPaper}{{1}{2013}{{Iben et~al\mbox  {.}}}{{Iben, Meyer, Petrovic, Soares, Anderson, and Witkin}}}
 \@writefile{loa}{\contentsline {algocf}{\numberline {1}{\ignorespaces pseudo code for the PBD simulation\relax }}{3}{algocf.1}\protected@file@percent }
 \newlabel{alg:pseudoPBD}{{1}{3}{A Particle}{algocf.1}{}}
 \@writefile{toc}{\contentsline {section}{\numberline {4}Putting Hair on the Head}{3}{section.4}\protected@file@percent }
@@ -52,9 +49,10 @@
 \@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Refinement and proper customizability of the propagation of hair strands on the head object.}{3}{subsection.7.2}\protected@file@percent }
 \@writefile{toc}{\contentsline {subsection}{\numberline {7.3}Better customizability}{3}{subsection.7.3}\protected@file@percent }
 \@writefile{toc}{\contentsline {subsection}{\numberline {7.4}Halton sequence for randomizing hair positions}{3}{subsection.7.4}\protected@file@percent }
-\@writefile{toc}{\contentsline {subsection}{\numberline {7.5}Rendering}{3}{subsection.7.5}\protected@file@percent }
-\@writefile{toc}{\contentsline {subsection}{\numberline {7.6}Moving to the GPU}{3}{subsection.7.6}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{Acknowledgments}{3}{section*.8}\protected@file@percent }
+\citation{UmenhofferSimulation}
+\bibstyle{ACM-Reference-Format}
+\bibdata{references}
+\bibcite{PixarPaper}{{1}{2013}{{Iben et~al\mbox  {.}}}{{Iben, Meyer, Petrovic, Soares, Anderson, and Witkin}}}
 \bibcite{MullerPBD}{{2}{2007}{{M\"{u}ller et~al\mbox  {.}}}{{M\"{u}ller, Heidelberger, Hennix, and Ratcliff}}}
 \bibcite{FTLHair}{{3}{2012}{{Müller et~al\mbox  {.}}}{{Müller, Kim, and Chentanez}}}
 \bibcite{PixarVolumetricHair}{{4}{2006}{{Petrovic et~al\mbox  {.}}}{{Petrovic, Henne, and Pixar}}}
@@ -62,9 +60,12 @@
 \bibcite{UmenhofferSimulation}{{6}{2016}{{Umenhoffer et~al\mbox  {.}}}{{Umenhoffer, Marschal, and Suti}}}
 \newlabel{tocindent-1}{0pt}
 \newlabel{tocindent0}{0pt}
-\newlabel{tocindent1}{6.95pt}
-\newlabel{tocindent2}{13.79999pt}
+\newlabel{tocindent1}{5.56pt}
+\newlabel{tocindent2}{11.49998pt}
 \newlabel{tocindent3}{0pt}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.5}Rendering}{4}{subsection.7.5}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.6}Moving to the GPU}{4}{subsection.7.6}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{Acknowledgments}{4}{section*.8}\protected@file@percent }
 \@writefile{toc}{\contentsline {section}{References}{4}{section*.10}\protected@file@percent }
 \@writefile{toc}{\contentsline {section}{\numberline {A}Supplementary development}{4}{appendix.A}\protected@file@percent }
 \@writefile{toc}{\contentsline {subsection}{\numberline {A.1}OBJ Reader}{4}{subsection.A.1}\protected@file@percent }
diff --git a/docs/documentation.log b/docs/documentation.log
index 14924faebef54dced24218cec755469603384ef0..5f1c3b4484043cfeb19e5571b60684c604177c56 100644
--- a/docs/documentation.log
+++ b/docs/documentation.log
@@ -1,4 +1,4 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.12.8)  9 DEC 2020 00:40
+This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.12.8)  9 DEC 2020 14:06
 entering extended mode
  restricted \write18 enabled.
  %&-line parsing enabled.
@@ -740,19 +740,10 @@ LaTeX Info: Redefining \smaller on input line 151.
 \algocf@algoframe=\box59
 \algocf@algobox=\box60
 )
-(/usr/share/texlive/texmf-dist/tex/latex/algorithms/algorithmic.sty
-Package: algorithmic 2009/08/24 v0.1 Document Style `algorithmic'
-\c@ALC@unique=\count303
-\c@ALC@line=\count304
-\c@ALC@rem=\count305
-\c@ALC@depth=\count306
-\ALC@tlm=\skip94
-\algorithmicindent=\skip95
-)
-Package hyperref Info: Option `colorlinks' set `true' on input line 24.
-Package hyperref Info: Option `pdfdisplaydoctitle' set `true' on input line 24.
+Package hyperref Info: Option `colorlinks' set `true' on input line 25.
+Package hyperref Info: Option `pdfdisplaydoctitle' set `true' on input line 25.
 
-\c@theorem=\count307
+\c@theorem=\count303
 
 (/usr/share/texlive/texmf-dist/tex/latex/preprint/balance.sty
 Package: balance 1999/02/23 4.3 (PWD)
@@ -762,113 +753,113 @@ Include comment 'screenonly' Excluding comment 'printonly'
 Include comment 'anonsuppress'
 (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
 File: l3backend-pdfmode.def 2020-02-03 L3 backend support: PDF mode
-\l__kernel_color_stack_int=\count308
+\l__kernel_color_stack_int=\count304
 \l__pdf_internal_box=\box61
 )
 (./documentation.aux)
 \openout1 = `documentation.aux'.
 
-LaTeX Font Info:    Checking defaults for OML/nxlmi/m/it on input line 24.
+LaTeX Font Info:    Checking defaults for OML/nxlmi/m/it on input line 25.
 LaTeX Font Info:    Trying to load font information for OML+nxlmi on input line
- 24.
+ 25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/omlnxlmi.fd
 File: omlnxlmi.fd 2013/11/19 Fontinst v1.933 font definitions for OML/nxlmi.
 )
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for U/ntxexa/m/n on input line 24.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for U/ntxexa/m/n on input line 25.
 LaTeX Font Info:    Trying to load font information for U+ntxexa on input line 
-24.
+25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxexa.fd
 File: untxexa.fd 2012/04/16 Fontinst v1.933 font definitions for U/ntxexa.
 )
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for PU/pdf/m/n on input line 24.
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for LMS/ntxsy/m/n on input line 24.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for PU/pdf/m/n on input line 25.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for LMS/ntxsy/m/n on input line 25.
 LaTeX Font Info:    Trying to load font information for LMS+ntxsy on input line
- 24.
+ 25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/lmsntxsy.fd
 File: lmsntxsy.fd 2016/07/02 Fontinst v1.933 font definitions for LMS/ntxsy.
 )
-LaTeX Font Info:    ... okay on input line 24.
-LaTeX Font Info:    Checking defaults for LMX/ntxexx/m/n on input line 24.
+LaTeX Font Info:    ... okay on input line 25.
+LaTeX Font Info:    Checking defaults for LMX/ntxexx/m/n on input line 25.
 LaTeX Font Info:    Trying to load font information for LMX+ntxexx on input lin
-e 24.
+e 25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/lmxntxexx.fd
 File: lmxntxexx.fd 2016/07/03 Fontinst v1.933 font definitions for LMX/ntxexx.
 )
-LaTeX Font Info:    ... okay on input line 24.
+LaTeX Font Info:    ... okay on input line 25.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 8.0pt on input line 24.
+(Font)              scaled to size 8.0pt on input line 25.
 LaTeX Font Info:    Trying to load font information for OT1+LinuxLibertineT-TLF
- on input line 24.
+ on input line 25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/libertine/OT1LinuxLibertineT-TLF.fd
 File: OT1LinuxLibertineT-TLF.fd 2017/03/20 (autoinst) Font definitions for OT1/
 LinuxLibertineT-TLF.
 )
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 8.0pt on input line 24.
+(Font)              scaled to size 8.0pt on input line 25.
 <<ot1.cmap>>
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 6.2pt on input line 24.
+(Font)              scaled to size 6.2pt on input line 25.
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 5.5pt on input line 24.
+(Font)              scaled to size 5.5pt on input line 25.
 <<oml.cmap>>
-LaTeX Font Info:    Trying to load font information for U+msa on input line 24.
+LaTeX Font Info:    Trying to load font information for U+msa on input line 25.
 
 
 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
 File: umsa.fd 2013/01/14 v3.01 AMS symbols A
 )
-LaTeX Font Info:    Trying to load font information for U+msb on input line 24.
+LaTeX Font Info:    Trying to load font information for U+msb on input line 25.
 
 
 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
 File: umsb.fd 2013/01/14 v3.01 AMS symbols B
 )
 LaTeX Font Info:    Trying to load font information for U+ntxmia on input line 
-24.
+25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxmia.fd
 File: untxmia.fd 2018/04/14 Fontinst v1.933 font definitions for U/ntxmia.
 )
 LaTeX Font Info:    Trying to load font information for U+ntxsym on input line 
-24.
+25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxsym.fd
 File: untxsym.fd 2015/03/20 Fontinst v1.933 font definitions for U/ntxsym.
 )
 LaTeX Font Info:    Trying to load font information for U+ntxsyc on input line 
-24.
+25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/newtx/untxsyc.fd
 File: untxsyc.fd 2012/04/12 Fontinst v1.933 font definitions for U/ntxsyc.
 )
-LaTeX Info: Redefining \microtypecontext on input line 24.
+LaTeX Info: Redefining \microtypecontext on input line 25.
 Package microtype Info: Generating PDF output.
 Package microtype Info: Character protrusion enabled (level 2).
 Package microtype Info: Using default protrusion set `alltext'.
 Package microtype Info: Automatic font expansion enabled (level 2),
 (microtype)             stretch: 20, shrink: 20, step: 1, non-selected.
 Package microtype Info: Using default expansion set `basictext'.
-LaTeX Info: Redefining \showhyphens on input line 24.
+LaTeX Info: Redefining \showhyphens on input line 25.
 Package microtype Info: No adjustment of tracking.
 Package microtype Info: No adjustment of interword spacing.
 Package microtype Info: No adjustment of character kerning.
@@ -879,7 +870,7 @@ Package microtype Info: Loading generic protrusion settings for font family
 
 ABD: EveryShipout initializing macros
 \AtBeginShipoutBox=\box62
-Package hyperref Info: Link coloring ON on input line 24.
+Package hyperref Info: Link coloring ON on input line 25.
 
 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
 Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
@@ -887,11 +878,11 @@ Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
 (/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
 Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
 )
-\c@section@level=\count309
+\c@section@level=\count305
 )
-LaTeX Info: Redefining \ref on input line 24.
-LaTeX Info: Redefining \pageref on input line 24.
-LaTeX Info: Redefining \nameref on input line 24.
+LaTeX Info: Redefining \ref on input line 25.
+LaTeX Info: Redefining \pageref on input line 25.
+LaTeX Info: Redefining \nameref on input line 25.
 
 (./documentation.out) (./documentation.out)
 \@outlinefile=\write4
@@ -906,16 +897,16 @@ File: se-utf8.def 2019/11/29 v1.12 stringenc: UTF-8
 )
 (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
 [Loading MPS to PDF converter (version 2006.09.02).]
-\scratchcounter=\count310
+\scratchcounter=\count306
 \scratchdimen=\dimen195
 \scratchbox=\box63
-\nofMPsegments=\count311
-\nofMParguments=\count312
+\nofMPsegments=\count307
+\nofMParguments=\count308
 \everyMPshowfont=\toks35
-\MPscratchCnt=\count313
+\MPscratchCnt=\count309
 \MPscratchDim=\dimen196
-\MPnumerator=\count314
-\makeMPintoPDFobject=\count315
+\MPnumerator=\count310
+\makeMPintoPDFobject=\count311
 \everyMPtoPDFconversion=\toks36
 ) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
 Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
@@ -960,8 +951,8 @@ e
 * \@reversemarginfalse
 * (1in=72.27pt=25.4mm, 1cm=28.453pt)
 
-\c@mv@tabular=\count316
-\c@mv@boldtabular=\count317
+\c@mv@tabular=\count312
+\c@mv@boldtabular=\count313
 (/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
 Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba
 tim
@@ -972,38 +963,38 @@ Package caption Info: End \AtBeginDocument code.
 
 Excluding 'CCSXML' comment.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 20.74pt on input line 111.
+(Font)              scaled to size 20.74pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/n' will be
-(Font)              scaled to size 20.74pt on input line 111.
+(Font)              scaled to size 20.74pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/n' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/n' will be
-(Font)              scaled to size 14.4pt on input line 111.
+(Font)              scaled to size 14.4pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 14.4pt on input line 111.
+(Font)              scaled to size 14.4pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 12.0pt on input line 111.
+(Font)              scaled to size 12.0pt on input line 113.
 LaTeX Font Info:    Trying to load font information for T1+LinuxBiolinumT-TLF o
-n input line 111.
+n input line 113.
 
 (/usr/share/texlive/texmf-dist/tex/latex/libertine/T1LinuxBiolinumT-TLF.fd
 File: T1LinuxBiolinumT-TLF.fd 2017/03/20 (autoinst) Font definitions for T1/Lin
 uxBiolinumT-TLF.
 )
 LaTeX Font Info:    Font shape `T1/LinuxBiolinumT-TLF/m/n' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 Package microtype Info: Loading generic protrusion settings for font family
 (microtype)             `LinuxBiolinumT-TLF' (encoding: T1).
 (microtype)             For optimal results, create family-specific settings.
 (microtype)             See the microtype manual for details.
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 Package microtype Info: Loading generic protrusion settings for font family
 (microtype)             `LinuxLibertineT-TLF' (encoding: OT1).
 (microtype)             For optimal results, create family-specific settings.
 (microtype)             See the microtype manual for details.
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 7.3pt on input line 111.
+(Font)              scaled to size 7.3pt on input line 113.
 
 (/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-msa.cfg
 File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS)
@@ -1014,35 +1005,35 @@ File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS)
 <teaser.png, id=99, 602.25pt x 401.5pt>
 File: teaser.png Graphic file (type png)
 <use teaser.png>
-Package pdftex.def Info: teaser.png  used on input line 111.
+Package pdftex.def Info: teaser.png  used on input line 113.
 (pdftex.def)             Requested size: 505.89pt x 337.27606pt.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/n' will be
-(Font)              scaled to size 12.0pt on input line 111.
+(Font)              scaled to size 12.0pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 7.3pt on input line 111.
+(Font)              scaled to size 7.3pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 6.2pt on input line 111.
+(Font)              scaled to size 6.2pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxBiolinumT-TLF/m/n' will be
-(Font)              scaled to size 8.0pt on input line 111.
+(Font)              scaled to size 8.0pt on input line 113.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/it' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 LaTeX Font Info:    Trying to load font information for TS1+LinuxLibertineT-TLF
- on input line 111.
+ on input line 113.
 
 (/usr/share/texlive/texmf-dist/tex/latex/libertine/TS1LinuxLibertineT-TLF.fd
 File: TS1LinuxLibertineT-TLF.fd 2017/03/20 (autoinst) Font definitions for TS1/
 LinuxLibertineT-TLF.
 )
 LaTeX Font Info:    Font shape `TS1/LinuxLibertineT-TLF/m/n' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 Package microtype Info: Loading generic protrusion settings for font family
 (microtype)             `LinuxLibertineT-TLF' (encoding: TS1).
 (microtype)             For optimal results, create family-specific settings.
 (microtype)             See the microtype manual for details.
 LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/it' will be
-(Font)              scaled to size 10.0pt on input line 111.
+(Font)              scaled to size 10.0pt on input line 113.
 
-Overfull \hbox (5.12202pt too wide) in paragraph at lines 111--111
+Overfull \hbox (5.12202pt too wide) in paragraph at lines 113--113
  []\T1/LinuxLibertineT-TLF/b/it/10 Keywords: \T1/LinuxLibertineT-TLF/m/n/10 (-2
 0) hair sim-u-la-tion, po-si-tion based dy-nam-ics, OpenGL 
  []
@@ -1051,13 +1042,22 @@ Overfull \hbox (5.12202pt too wide) in paragraph at lines 111--111
 
  <./teaser.png>]
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be
-(Font)              scaled to size 10.0pt on input line 213.
+(Font)              scaled to size 10.0pt on input line 215.
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be
-(Font)              scaled to size 7.3pt on input line 213.
+(Font)              scaled to size 7.3pt on input line 215.
 LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be
-(Font)              scaled to size 5.5pt on input line 213.
+(Font)              scaled to size 5.5pt on input line 215.
+
+Overfull \hbox (14.9743pt too wide) in paragraph at lines 217--222
+\T1/LinuxLibertineT-TLF/m/n/10 (-20) tion $\OML/nxlmi/m/it/10 C[] \OT1/LinuxLib
+ertineT-TLF/m/n/10 (-20) : \U/ntxsym/m/n/10 R[] \LMS/ntxsy/m/n/10 7! \U/ntxsym/
+m/n/10 R$\T1/LinuxLibertineT-TLF/m/n/10 (-20) . It op-er-ates on a set of in-di
+ces $\LMS/ntxsy/m/n/10 f\OML/nxlmi/m/it/10 i[]; [] i[]\LMS/ntxsy/m/n/10 g\OML/n
+xlmi/m/it/10 ; i[] \LMS/ntxsy/m/n/10 2
+ []
+
 
-Overfull \hbox (20.05922pt too wide) in paragraph at lines 221--226
+Overfull \hbox (20.05922pt too wide) in paragraph at lines 223--228
 []\T1/LinuxLibertineT-TLF/m/n/10 (-20) Constraint $\OML/nxlmi/m/it/10 c$ \T1/Li
 nuxLibertineT-TLF/m/n/10 (-20) with type \T1/LinuxLibertineT-TLF/m/it/10 (-20) 
 equal-ity \T1/LinuxLibertineT-TLF/m/n/10 (-20) is sat-is-fied if $\OML/nxlmi/m/
@@ -1066,7 +1066,7 @@ it/10 C[]\LMS/ntxsy/m/n/10 
  []
 
 
-Overfull \hbox (12.99283pt too wide) in paragraph at lines 221--226
+Overfull \hbox (12.99283pt too wide) in paragraph at lines 223--228
 \OT1/LinuxLibertineT-TLF/m/n/10 (-20) 0$\T1/LinuxLibertineT-TLF/m/n/10 (-20) . 
 If its type is \T1/LinuxLibertineT-TLF/m/it/10 (-20) in-equal-ity\T1/LinuxLiber
 tineT-TLF/m/n/10 (-20) , then it is sat-is-fied if $\OML/nxlmi/m/it/10 C[]\LMS/
@@ -1074,35 +1074,46 @@ ntxsy/m/n/10 
  []
 
 
-Overfull \hbox (10.0pt too wide) detected at line 237
-[][] 
- []
-
-
 Underfull \vbox (badness 10000) has occurred while \output is active []
 
  [2.2]
-LaTeX Font Info:    Trying to load font information for T1+zi4 on input line 23
-9.
+LaTeX Font Info:    Trying to load font information for T1+zi4 on input line 25
+4.
 
 (/usr/share/texlive/texmf-dist/tex/latex/inconsolata/t1zi4.fd
 File: t1zi4.fd 2018/01/14 T1/zi4 (Inconsolata)
 )
 LaTeX Font Info:    Font shape `T1/zi4/m/n' will be
-(Font)              scaled to size 10.0pt on input line 239.
+(Font)              scaled to size 10.0pt on input line 254.
 Package microtype Info: Loading generic protrusion settings for font family
 (microtype)             `zi4' (encoding: T1).
 (microtype)             For optimal results, create family-specific settings.
 (microtype)             See the microtype manual for details.
+LaTeX Font Info:    Font shape `T1/zi4/m/n' will be
+(Font)              scaled to size 7.0pt on input line 254.
 
-Processing 'acks' comment.
+Overfull \hbox (18.40462pt too wide) in paragraph at lines 280--280
+[][]|[]\T1/zi4/m/n/10 projectConstraints($\OML/nxlmi/m/it/10 C[]; [] ; C[]; par
+ticles$\T1/zi4/m/n/10 ) 
+ []
+
+LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/n' will be
+(Font)              scaled to size 7.0pt on input line 280.
+LaTeX Font Info:    Font shape `T1/zi4/m/n' will be
+(Font)              scaled to size 8.0pt on input line 285.
+LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be
+(Font)              scaled to size 8.0pt on input line 291.
+LaTeX Font Info:    Font shape `OT1/LinuxLibertineT-TLF/sb/n' will be
+(Font)              scaled to size 6.2pt on input line 291.
+LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/it' will be
+(Font)              scaled to size 8.0pt on input line 295.
+LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/b/n' will be
+(Font)              scaled to size 8.0pt on input line 329.
+[3.3] Processing 'acks' comment.
 \openout3 = `comment.cut'.
 
  Comment 'acks' writing to comment.cut.
 Straight input of comment.cut. (./comment.cut) (./documentation.bbl
-LaTeX Font Info:    Font shape `T1/LinuxLibertineT-TLF/m/it' will be
-(Font)              scaled to size 8.0pt on input line 49.
- [3.3]
 LaTeX Info: Redefining \tempurl on input line 75.
 LaTeX Info: Redefining \tempurl on input line 90.
 LaTeX Info: Redefining \tempurl on input line 104.
@@ -1114,16 +1125,9 @@ Underfull \hbox (badness 10000) in paragraph at lines 111--118
  []
 
 )
-Overfull \hbox (11.38634pt too wide) in paragraph at lines 418--421
-\T1/LinuxLibertineT-TLF/m/n/10 (-20) at 24 FPS, with the nam-ing con-ven-tion r
-en-derXXXX[.bmp/.png],
- []
-
-
-Overfull \hbox (3.58836pt too wide) in paragraph at lines 423--427
-\T1/zi4/m/n/10 make_video.sh \T1/LinuxLibertineT-TLF/m/n/10 (-20) script to as-
-sem-ble the \T1/zi4/m/n/10 output.mp4 \T1/LinuxLibertineT-TLF/m/n/10 (-20) and 
-delete
+Overfull \hbox (18.1797pt too wide) in paragraph at lines 493--496
+[]\T1/LinuxLibertineT-TLF/m/n/8 (-20) For han-dling the ex-port of the ren-dere
+d im-age into files, the stb_image_write.h[][][][][]
  []
 
 
@@ -1131,47 +1135,51 @@ Package balance Warning: You have called \balance in second column
 (balance)                Columns might not be balanced.
 
 [4.4]
-Package atveryend Info: Empty hook `BeforeClearDocument' on input line 429.
-Package atveryend Info: Empty hook `AfterLastShipout' on input line 429.
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 509.
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 509.
  (./documentation.aux)
-Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 429.
-Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 429.
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 509.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 509.
 Package rerunfilecheck Info: File `documentation.out' has not changed.
 (rerunfilecheck)             Checksum: 86A066FEE8792F691364A237681A9047;4299.
  ) 
 Here is how much of TeX's memory you used:
- 20382 strings out of 481239
- 307739 string characters out of 5920377
- 618891 words of memory out of 5000000
- 34760 multiletter control sequences out of 15000+600000
- 684959 words of font info for 292 fonts, out of 8000000 for 9000
+ 20413 strings out of 481239
+ 309446 string characters out of 5920377
+ 618195 words of memory out of 5000000
+ 34693 multiletter control sequences out of 15000+600000
+ 717829 words of font info for 368 fonts, out of 8000000 for 9000
  1302 hyphenation exceptions out of 8191
- 63i,15n,100p,804b,592s stack positions out of 5000i,500n,10000p,200000b,80000s
-{/usr/share/texlive/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-4.enc}{/usr/
-share/texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_oexx6f.enc}{/usr/share/
-texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_7grukw.enc}{/usr/share/texliv
-e/texmf-dist/fonts/enc/dvips/libertine/lbtn_naooyc.enc}{/usr/share/texlive/texm
-f-dist/fonts/enc/dvips/libertine/lbtn_ki75ao.enc}{/usr/share/texlive/texmf-dist
-/fonts/enc/dvips/libertine/lbtn_25tcsq.enc}{/usr/share/texlive/texmf-dist/fonts
-/enc/dvips/libertine/lbtn_76gpa5.enc}{/usr/share/texlive/texmf-dist/fonts/enc/d
-vips/libertine/lbtn_nh77jq.enc}</usr/share/texlive/texmf-dist/fonts/type1/publi
-c/inconsolata/Inconsolata-zi4r.pfb></usr/share/texlive/texmf-dist/fonts/type1/p
-ublic/newtx/LibertineMathBMI.pfb></usr/share/texlive/texmf-dist/fonts/type1/pub
-lic/newtx/LibertineMathBMI7.pfb></usr/share/texlive/texmf-dist/fonts/type1/publ
-ic/newtx/LibertineMathMI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/
-newtx/LibertineMathMI5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ne
-wtx/LibertineMathMI7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libe
-rtine/LinBiolinumT.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libert
-ine/LinLibertineT.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/liberti
-ne/LinLibertineTB.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/liberti
-ne/LinLibertineTBI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libert
-ine/LinLibertineTI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/
-txmiaX.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txsyb.pfb>
-</usr/share/texlive/texmf-dist/fonts/type1/public/newtx/txsys.pfb>
-Output written on documentation.pdf (4 pages, 476184 bytes).
+ 63i,19n,100p,804b,588s stack positions out of 5000i,500n,10000p,200000b,80000s
+{/usr/share/texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_fygcup.enc}{/us
+r/share/texlive/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-4.enc}{/usr/share/
+texlive/texmf-dist/fonts/enc/dvips/libertine/lbtn_oexx6f.enc}{/usr/share/texliv
+e/texmf-dist/fonts/enc/dvips/libertine/lbtn_7grukw.enc}{/usr/share/texlive/texm
+f-dist/fonts/enc/dvips/libertine/lbtn_naooyc.enc}{/usr/share/texlive/texmf-dist
+/fonts/enc/dvips/libertine/lbtn_ki75ao.enc}{/usr/share/texlive/texmf-dist/fonts
+/enc/dvips/libertine/lbtn_25tcsq.enc}{/usr/share/texlive/texmf-dist/fonts/enc/d
+vips/libertine/lbtn_76gpa5.enc}{/usr/share/texlive/texmf-dist/fonts/enc/dvips/l
+ibertine/lbtn_nh77jq.enc}</usr/share/texlive/texmf-dist/fonts/type1/public/inco
+nsolata/Inconsolata-zi4r.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/
+newtx/LibertineMathBMI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ne
+wtx/LibertineMathBMI5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/new
+tx/LibertineMathBMI7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newt
+x/LibertineMathMI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/L
+ibertineMathMI5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/Lib
+ertineMathMI7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/Liber
+tineMathRM.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinB
+iolinumT.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLib
+ertineT.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLibe
+rtineTB.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLibe
+rtineTBI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLib
+ertineTI.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/libertine/LinLib
+ertineTZ.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/newtx/txmiaX.pfb
+></usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txsyb.pfb></usr/shar
+e/texlive/texmf-dist/fonts/type1/public/newtx/txsys.pfb>
+Output written on documentation.pdf (4 pages, 572023 bytes).
 PDF statistics:
- 288 PDF objects out of 1000 (max. 8388607)
- 244 compressed objects within 3 object streams
- 55 named destinations out of 1000 (max. 500000)
- 40142 words of extra memory for PDF output out of 42996 (max. 10000000)
+ 328 PDF objects out of 1000 (max. 8388607)
+ 278 compressed objects within 3 object streams
+ 75 named destinations out of 1000 (max. 500000)
+ 45262 words of extra memory for PDF output out of 51595 (max. 10000000)
 
diff --git a/docs/documentation.pdf b/docs/documentation.pdf
index 2b0f0a0f7463aec6bb2994b27783be1479b60fcf..ee518687ac384c5960291e82c5838564949c7866 100644
Binary files a/docs/documentation.pdf and b/docs/documentation.pdf differ
diff --git a/docs/documentation.tex b/docs/documentation.tex
index 1077027df5db5414d0a7179b35aea583fcac538d..3a46daf845ce9943d9104a0ff59199c1ca89645c 100644
--- a/docs/documentation.tex
+++ b/docs/documentation.tex
@@ -17,12 +17,14 @@
 \newcommand{\specialcell}[2][t]{%
   \begin{tabular}[#1]{@{}l@{}}#2\end{tabular}}
 
-\usepackage[]{algorithm2e}
-\usepackage{algorithmic}
+  \usepackage[ruled, linesnumbered]{algorithm2e}
+% \usepackage{algorithmic}
+  \renewcommand{\b}{\boldsymbol}
 
 %% end of the preamble, start of the body of the document source.
 \begin{document}
 
+% \renewcommand{\@algocf@capt@plain}{top} % formerly {bottom}
 %%
 %% The "title" command has an optional parameter,
 %% allowing the author to define a "short title" to be used in page headers.
@@ -204,17 +206,17 @@ not further investigate if there could have been improvements made to my
 implementation to eliminate the stretching in the presence of greater forces.
 
 
-\section{Simulation of a Single Hair Strand}
+\section{Position Based Simulation}
 
-\subsection{A Particle}
+\subsection Algorithm Overview
 
-We model an $S$ hair strand as a chain of $P$ particles and a set of $C$
+We model an $S$ hair strand as a chain of $N$ particles and a set of $M$
 constraints. Each particle $p \in [1,\ldots,N]$ has three atributes: mass ($m_p$), position
 ($\boldsymbol{x_p}$) and velocity ($\boldsymbol{v_p}$). 
 
-A constraint $c \in [1,\ldots,C]$ with cardinality $n_c$ is a function $C_c
+A constraint $c \in [1,\ldots,M]$ with cardinality $n_c$ is a function $C_c
 : \mathbb{R} ^{3n_c} \mapsto \mathbb{R}$. It operates on a set of indices $\{i_1,\ldots
-i_{n_c}\}, i_k \in [1,...,P]$. The constraint funtion also has a stiffnes
+i_{n_c}\}, i_k \in [1,...,N]$. The constraint funtion also has a stiffnes
 parameter $k_c \in [0...1]$ and a type of either \emph{equality} or
 \emph{inequality}.
 
@@ -226,16 +228,98 @@ strength of the constraint in a range from zero to one.
 
 Given these notations, the algorithm works in the following way:
 
+\TODO{decide about syntax: array of particles (OOP) or array of v, x and m?}
 \begin{algorithm}
     \caption{pseudo code for the PBD simulation}
     \label{alg:pseudoPBD}
-    \begin{algorithmic}
-        \IF {$i \geq maxval$}
-            \STATE asd
-        \ENDIF
-    \end{algorithmic}
+
+    \SetCommentSty{scriptsize}
+    \SetNlSty{texttt}{(}{)}
+
+    % to turn off vertical lines:
+    % \SetAlgoNoLine
+
+    \SetKwBlock{Loop}{loop}{end}
+
+    \SetKwFunction{dampVelocities}{dampVelocities}
+    \SetKwFunction{genCollCon}{generateCollisionConstraints}
+    \SetKwFunction{projCon}{projectConstraints}
+    \SetKwFunction{velUpdate}{velocityUpdate}
+
+    \SetKwProg{loopTimes}{loop}{ times}{end loop}
+
+    \ForEach{p in particles}{ 
+        initialize $\b{p_x} = \b{x_p^0}, \b{p_v} = \b{v_p^0}, p_w = 1/m_p$ 
+    }
+
+    \Loop{
+        \ForEach{p in particles}{
+            $\b{p_v} \gets \b{p_v} + \Delta t \cdot p_w \cdot \b{f_{external}}$
+        }
+        \dampVelocities{$p_1, \ldots, p_N$}
+        \\
+        \ForEach{p in particles}{
+            $\b{p_{tmp}} \gets \b{p_x} + \Delta t \cdot \b{p_v}$
+
+        }
+        \ForEach{p in particles}{
+            \genCollCon{$p_x \to p_{tmp}$}
+        }
+        \loopTimes{numberOfIterations}{
+            \projCon{$C_1,\ldots, C_{M+M_{coll}}, particles$}\\
+            \tcc*[f]{only the temporary positions of $particles$ are needed}
+        }
+        \ForEach{p in particles}{
+            $\b{p_v} \gets (\b{p_{tmp}} - \b{p_x})/\Delta t$\\
+            $\b{p_x} \gets \b{p_{tmp}}$
+        }
+        \velUpdate{$particles$}\\
+        \tcc*[f]{velocities of colliding particles are modified according to
+        friction and restitution coefficients.}
+    }
 \end{algorithm}
 
+\newcommand{\lineRef}[2]{\footnotesize{\texttt{(#1)}-\texttt{(#2)}}}
+\newcommand{\lineRefSingle}[1]{\footnotesize{\texttt{(#1)}}}
+
+Lines \lineRef{1}{3} initialize the particles. We store the inverse masses $w$
+in order to be able to store infinitely heavy particles that are stationary
+during the simulation. ($\frac{1}{\infty} \approx 0$)
+
+The core idea of position based dynamics is shown in lines \lineRef{9}{11},
+\lineRef{15}{17} and \lineRef{18}{21}. In line \lineRefSingle{10}, estimated
+positions for each particle $\b{p}$ are calculated using and explicit forward
+Euler integration step. In line \lineRefSingle{16} the iterative solver manipulates
+these temporary position estimates such that they satisfy the constraints. It
+does this by repeatedly projecting each constraint in a Gauss-Seidel type
+fashion \TODO{See section ...}. Once the solver finishes with the iteartions, in
+lines \lineRef{19}{20} each particle is moved to the calculated (once temporary)
+positions, and the velocity of each particle is updated accordingly.
+
+Velocities are manipulated in lines \lineRefSingle{6}, \lineRefSingle{8} and
+\lineRefSingle{19}. 
+
+Line \lineRefSingle{6} allows to account for external forces
+in the simulation if some of the forces cannot be converted to positional
+constraints. \emph{(For example the pulling force between subsequent particles
+are modelled as distance constraints instead of external forces, and so are the
+forces generated by the particles colliding with other objects.} We use it to
+add gravity, and to generate wind effects for demonstration purposes. If only
+the gravitational force is present, then the line becomes $\b{p_v} \gets \b{p_v}
++ \Delta t \cdot \b{g}$, where $\b{g}$ is the gravitational acceleration.
+
+In line \lineRefSingle{8} the velocities can be damped, if necessary. \emph{Section
+3.5} of the \citet{MullerPBD} paper gives some more sophisticated methods for
+damping, although the paper also points out that any form of damping can be
+used. In our case, simply applying a $k_s$ damping coefficient with value
+between $98\%$ to $99.9\%$ seemed to be a good enough solution.
+
+The given constraints $C_1, \ldots, C_M$ are fixed throughout the simulation. In
+addition to these initial constraints, line \lineRef{13} generates additional
+$M_coll$ collisition constrants. These change from time step to time step. The
+projection step in line \lineRef{16} considers both the fixed and the collision
+constraints. Our implementation 
+
 \begin{verbatim}
     class Particle {
         vec3 pos;