diff --git a/corsika/framework/process/BaseProcess.hpp b/corsika/framework/process/BaseProcess.hpp
index 77ccc2d10d1e2c1e51756f5a1f68fb0511e0bd2b..5a12986a0cb196a1dda607e18db548fc147fac04 100644
--- a/corsika/framework/process/BaseProcess.hpp
+++ b/corsika/framework/process/BaseProcess.hpp
@@ -16,6 +16,8 @@ namespace corsika {
 
   class TDerived; // fwd decl
 
+  class _BaseProcess {};
+
   /**
      @ingroup Processes
      @{
@@ -31,7 +33,6 @@ namespace corsika {
      ./Processes/AnalyticProcessors/ExecTime.h, see e.g. how this is done in
      ProcessSequence.hpp/make_sequence
    */
-  class _BaseProcess {};
 
   template <typename TDerived>
   struct BaseProcess : _BaseProcess {
@@ -54,7 +55,7 @@ namespace corsika {
   };
 
   /**
-   * ProcessTraits specialization
+     ProcessTraits specialization
    **/
   template <typename TProcess>
   struct is_process<
diff --git a/corsika/framework/process/ProcessSequence.hpp b/corsika/framework/process/ProcessSequence.hpp
index 79d5dc53e93d86f39fc9b9ab9a2799039fbc7ad1..c660ab7d0c33fb5e8fb6b811b3dca055f44cfe2d 100644
--- a/corsika/framework/process/ProcessSequence.hpp
+++ b/corsika/framework/process/ProcessSequence.hpp
@@ -60,6 +60,65 @@ namespace corsika {
    - ContinuousProcess
    - StackProcess
    - SecondariesProcess   
+   - BoundaryCrossingProcess
+
+   And all processes (including ProcessSequence and SwitchProcessSequence) are derived from BaseProcess. 
+   
+   Processes of any type (e.g. p1, p2, p3,...) can be assembled into a ProcessSequence using the `make_sequence` factory function.
+   
+   @code{.cpp}
+     auto sequence1 = make_sequence(p1, p2, p3);
+     auto sequence2 = make_sequence(p4, p5, p6, p7);
+     auto sequence3 = make_sequence(sequence1, sequemce2, p8, p9);
+   @endcode
+
+   Note, if the order of processes
+   matters, the order of occurence
+   in the ProcessSequence determines
+   the executiion order.
+   
+   SecondariesProcess alyways act on
+   new secondaries produced (i.e. in
+   InteractionProcess and
+   DecayProcess) in the scope of
+   their ProcessSequence. For
+   example if i1 and i2 are
+   InteractionProcesses and s1 is a
+   SecondariesProcess, then
+
+   @code{.cpp}
+     auto sequence = make_sequence(i1, make_sequence(i2, s1))
+   @endcode
+
+   will result in s1 acting only on
+   the particles produced by i2 and
+   not by i1. This can be very
+   useful, e.g. to fine tune thinning. 
+
+   A special type of ProcessSequence
+   is SwitchProcessSequence, which
+   has two branches and a functor
+   that can select between these two
+   branches.
+
+   @code{.cpp}
+     auto sequence = make_switch(sequence1, sequence2, selector);
+   @endcode
+
+   where the only requirement to
+   `selector` is that it
+   provides a `SwitchResult operator()(Particle const& particle) const` method. Thus,
+   based on the dynamic properties
+   of `particle` the functor
+   can make its decision. This is
+   clearly important for switching
+   between low-energy and
+   high-energy models, but not
+   limited to this. The selection
+   can even be done with a lambda
+   function.
+   
+   
 
    @ingroup Processes
    @{
@@ -67,27 +126,28 @@ namespace corsika {
 
   
   /**
-   *
-   *  Definition of a static process list/sequence
-   *
-   *  A compile time static list of processes. The compiler will
-   *  generate a new type based on template logic containing all the
-   *  elements provided by the user.
-   *
-   *  TProcess1 and TProcess2 must both be derived from BaseProcess,
-   *  and are both references if possible (lvalue), otherwise (rvalue)
-   *  they are just classes. This allows us to handle both, rvalue as
-   *  well as lvalue Processes in the ProcessSequence.
-   *
-   *  (The sequence, and the processes use the CRTP, curiously recurring template
-   *  pattern).
-   *
-   * Template parameters:
-   *  - TProcess1 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
-   *  - TProcess2 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
-   *  - ProcessIndexOffset, IndexOfProcess1, IndexOfProcess2 are to count and index each
-   *    ContinuousProcess in the entire process-chain
-   **/
+   
+     Definition of a static process list/sequence
+   
+     A compile time static list of processes. The compiler will
+     generate a new type based on template logic containing all the
+     elements provided by the user.
+   
+     TProcess1 and TProcess2 must both be derived from BaseProcess,
+     and are both references if possible (lvalue), otherwise (rvalue)
+     they are just classes. This allows us to handle both, rvalue as
+     well as lvalue Processes in the ProcessSequence.
+   
+     (The sequence, and the processes use the CRTP, curiously recurring template
+     pattern).
+   
+    Template parameters:
+     @tparam TProcess1 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
+     @tparam TProcess2 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
+     @tparam ProcessIndexOffset to count and index each ContinuousProcess in the entire process-chain
+      @tparam IndexOfProcess1
+      @tparam IndexOfProcess2 
+   */
 
   template <typename TProcess1, typename TProcess2 = NullModel,
             int ProcessIndexOffset = 0,
@@ -218,17 +278,21 @@ namespace corsika {
   };
 
   /**
+    @fn make_sequence
+
     Factory function to create a ProcessSequence
    
     to construct ProcessSequences in a flexible and dynamic way the
     `sequence` factory functions are provided
    
     Any objects of type
-     - BaseProcess,
-     - ContinuousProcess, and
-     - InteractionProcess/DecayProcess,
-     - StackProcess,
+     - BaseProcess
+     - ContinuousProcess and
+     - InteractionProcess/DecayProcess
+     - StackProcess
      - SecondariesProcess
+     - BoundaryCrossingProcess
+
     can be assembled into a ProcessSequence, all
     combinatorics are allowed.
 
@@ -236,11 +300,11 @@ namespace corsika {
     types derived from BaseProcess. Also the ProcessSequence itself
     is derived from type BaseProcess
    
-    \param vA needs to derive from BaseProcess or ProcessSequence
-    \param vB paramter-pack, needs to derive BaseProcess or ProcessSequence
-   
-   **/
-
+    @tparam TProcesses parameter pack with objects of type BaseProcess
+    @tparam TProcess1 another BaseProcess
+    @param vA needs to derive from BaseProcess or ProcessSequence
+    @param vB paramter-pack, needs to derive BaseProcess or ProcessSequence
+   */
   template <typename... TProcesses, typename TProcess1>
   typename std::enable_if_t<
       is_process_v<typename std::decay_t<TProcess1>>,
@@ -252,13 +316,17 @@ namespace corsika {
   }
 
   /**
-   * Factory function to create ProcessSequence
-   *
-   * specialization for two input objects (no paramter pack in vB).
-   *
-   * \param vA needs to derive from BaseProcess or ProcessSequence
-   * \param vB needs to derive BaseProcess or ProcessSequence
-   **/
+    @fn make_sequence
+    
+    Factory function to create ProcessSequence
+   
+    specialization for two input objects (no paramter pack in vB).
+   
+    @tparam TProcess1 another BaseProcess
+    @tparam TProcess2 another BaseProcess
+    @param vA needs to derive from BaseProcess or ProcessSequence
+    @param vB needs to derive BaseProcess or ProcessSequence
+   */
   template <typename TProcess1, typename TProcess2>
   typename std::enable_if_t<is_process_v<typename std::decay_t<TProcess1>> &&
                                 is_process_v<typename std::decay_t<TProcess2>>,
@@ -268,13 +336,16 @@ namespace corsika {
   }
 
   /**
-   * Factory function to create ProcessSequence from a single BaseProcess
-   *
-   * also allow a single Process in ProcessSequence, accompany by
-   * `NullModel`
-   *
-   * \param vA needs to derive from BaseProcess or ProcessSequence
-   **/
+    @fn make_sequence
+
+    Factory function to create ProcessSequence from a single BaseProcess
+   
+    also allow a single Process in ProcessSequence, accompany by
+    `NullModel`
+   
+    @tparam TProcess1 another BaseProcess
+    @param vA needs to derive from BaseProcess or ProcessSequence
+   */
   template <typename TProcess>
   typename std::enable_if_t<is_process_v<typename std::decay_t<TProcess>>,
                             ProcessSequence<TProcess, NullModel>>
@@ -283,7 +354,10 @@ namespace corsika {
   }
 
   /**
-   * traits marker to identify objectas ProcessSequence
+    traits marker to identify objectas ProcessSequence
+
+    @tparam TProcess1 another BaseProcess
+    @tparam TProcess2 another BaseProcess
    **/
   template <typename TProcess1, typename TProcess2>
   struct is_process_sequence<ProcessSequence<TProcess1, TProcess2>> : std::true_type {
diff --git a/corsika/framework/process/SwitchProcessSequence.hpp b/corsika/framework/process/SwitchProcessSequence.hpp
index 275df81d4c13fc6e3fa2960c65653f06132f07a0..453446981f5f544450110b8fa6e4f5c068ad4fd5 100644
--- a/corsika/framework/process/SwitchProcessSequence.hpp
+++ b/corsika/framework/process/SwitchProcessSequence.hpp
@@ -9,7 +9,7 @@
 #pragma once
 
 /**
- * \file SwitchProcessSequence.hpp
+  @file SwitchProcessSequence.hpp
  **/
 
 #include <corsika/framework/process/BaseProcess.hpp>
@@ -31,18 +31,22 @@
 namespace corsika {
 
   /**
+     @enum
      @ingroup Processes
-     @{
 
-   * enum for the process switch selection: identify if First or
-   * Second process branch should be used.
-   **/
-  enum class SwitchResult { First, /// Follow first branch in SwitchProcessSequence
-			    Second /// Follow second branch in
-				   /// SwitchProcessSequence
+     enum for the process switch selection: identify if First or Second
+     process branch should be used.
+     @var SwitchResult::First Follow first branch in SwitchProcessSequence
+     @var SwitchResult::Second Follow second branch in SwitchProcessSequence
+   */
+  enum class SwitchResult { First, 
+			    Second 
   };
   
   /**
+     @ingroup Processes
+     @{
+
      Class to switch between two process branches
 
      A compile-time static list of processes that uses an internal
@@ -65,12 +69,14 @@ namespace corsika {
      particle stack and not on indiviidual particles.
 
      Template parameters:
-      - TProcess1 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
-      - TProcess2 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
-      - IndexFirstProcess, IndexOfProcess1, IndexOfProcess2 are to count and index each
-  ContinuousProcess in the entire process-chain
-
-     See also class ProcessSequence
+     @tparam TProcess1 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
+     @tparam TProcess2 is of type BaseProcess, either a dedicatd process, or a ProcessSequence
+     @tparam TSelect selector functor/function 
+     @tparam IndexFirstProcess to count and index each ContinuousProcess in the entire process-chain
+     @tparam IndexOfProcess1 index of TProcess1 (counting of ContinuousProcess)
+     @tparam IndexOfProcess2 index of TProcess2 (counting of ContinuousProcess)
+
+     See also class ProcessSequence.
   **/
 
   template <typename TProcess1, typename TProcess2, typename TSelect,
diff --git a/documentation/conf.py b/documentation/conf.py
index 08cdbd0a1b203413606fa3a402ebf47f0d97aa82..ab28020201a0af1b306226ac3afad29d2a606b85 100644
--- a/documentation/conf.py
+++ b/documentation/conf.py
@@ -37,9 +37,9 @@ copyright = u'2021, CORSIKA 8 Collaboration'
 author = u'CORSIKA 8 Collaboration'
 
 # The short X.Y version
-version = u''
+version = u'0.0.0'
 # The full version, including alpha/beta/rc tags
-release = u'0.0.1'
+release = u'prototype-0.1.0'
 
 extensions = [
     'sphinx.ext.todo',
@@ -85,39 +85,14 @@ pygments_style = 'sphinx'
 
 # -- Options for HTML output -------------------------------------------------
 
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-#
 html_theme = 'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#
 # html_theme_options = {}
 
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Custom sidebar templates, must be a dictionary that maps document names
-# to template names.
-#
-# The default sidebars (for documents that don't match any pattern) are
-# defined by theme itself.  Builtin themes are using these templates by
-# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
-# 'searchbox.html']``.
-#
+# html_static_path = []
 # html_sidebars = {}
 
-
-# -- Options for HTMLHelp output ---------------------------------------------
-
-# Output file base name for HTML help builder.
 htmlhelp_basename = 'C8doc'
 
-
 # -- Options for LaTeX output ------------------------------------------------
 
 latex_elements = {
@@ -142,8 +117,8 @@ latex_elements = {
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-    (master_doc, 'PROPOSAL.tex', u'PROPOSAL Documentation',
-     u'tudo-astroparticlephysics', 'manual'),
+    (master_doc, 'C8-GUIDE.tex', u'CORSIKA 8 Documentation',
+     u'CORSIKA 8 Collaboration', 'manual'),
 ]
 
 
@@ -152,7 +127,7 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    (master_doc, 'proposal', u'PROPOSAL Documentation',
+    (master_doc, 'CORSIKA 8', u'CORSIKA 8 Documentation',
      [author], 1)
 ]
 
@@ -163,8 +138,8 @@ man_pages = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-    (master_doc, 'PROPOSAL', u'PROPOSAL Documentation',
-     author, 'PROPOSAL', 'One line description of project.',
+    (master_doc, 'CORSIKA 8', u'CORSIKA 8 Documentation',
+     author, 'CORSIKA 8', 'The air shower simulation framework',
      'Miscellaneous'),
 ]