diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a55edbeaf56f49d8c6dab0f3367cdd8c16999be1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,12 @@
+Copyright (c) 2016, ETHZ
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
index 32091a9364a52a70985abe288b50bfcc47d53d54..7c76215207038b458f0511ba145680f36dd1d960 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,22 @@
-# cell_algorithms
+# NestMC Prototype
+
+This is the repository for the NestMC prototype code. Unfortunately we do not have thorough documentation of how-to guides.
+Below are some guides for how to build the project and run the miniapp.
+Contact us or submit a ticket if you have any questions or want help.
 
 ```bash
 # clone repo
-git clone git@github.com:eth-cscs/cell_algorithms.git
-cd cell_algorithms/
+git clone git@github.com:eth-cscs/nestmc-proto.git
+cd nestmc-proto/
 
 # setup sub modules
 git submodule init
 git submodule update
 
 # setup environment
-# on a desktop system this might not be required
-# on a cluster this could be required
+# on a desktop system this is probably not required
+# on a cluster this is usually required to make sure that an appropriate
+# compiler is chosen.
 module load gcc
 module load cmake
 export CC=`which gcc`
@@ -31,8 +36,7 @@ cd tests
 ## MPI
 
 Set the `WITH_MPI` option either via the ccmake interface, or via the command line as shown below.
-For the time being our CMake configuration does not try to detect MPI.
-Instead, it relies on the user specifying an MPI wrapper for the compiler by setting the `CXX` and `CC` environment variables.
+To ensure that CMake detects MPI correctly, you should specify the MPI wrapper for the compiler by setting the `CXX` and `CC` environment variables.
 
 ```
 export CXX=mpicxx
@@ -47,7 +51,6 @@ Support for multi-threading requires Intel Threading Building Blocks (TBB).
 When TBB is installed, it comes with some scripts that can be run to set up the user environment.
 The scripts set the `TBB_ROOT` environment variable, which is used by the CMake configuration to find TBB.
 
-
 ```
 source <path to TBB installation>/tbbvars.sh
 cmake <path to CMakeLists.txt> -DWITH_TBB=ON
@@ -56,6 +59,9 @@ cmake <path to CMakeLists.txt> -DWITH_TBB=ON
 ### TBB on Cray systems
 
 To compile with TBB on Cray systems, load the intel module, which will automatically configure the environment.
+The guide below shows how to use the version of TBB that is installed as part of the Intel compiler toolchain.
+It is recommended that you install the most recent version of TBB yourself, and link against this, because older versions
+of TBB don't work with recent versions of GCC.
 
 ```
 # load the gnu environment for compiling the application
@@ -80,7 +86,7 @@ cmake <path to CMakeLists.txt> -DWITH_TBB=ON -DWITH_MPI=ON -DSYSTEM_CRAY=ON
 
 # targetting KNL
 
-## build modparser                                                                                       
+## build modparser
 
 The source to source compiler "modparser" that generates the C++/CUDA kernels for the ion channels and synapses is in a separate repository.
 It is included in our project as a git submodule, and by default it will be built with the same compiler and flags that are used to build the miniapp and tests.
@@ -116,8 +122,8 @@ which modcc
 
 ```bash
 # clone the repo and set up the submodules
-git clone TODO
-cd cell_algorithms
+git clone https://github.com/eth-cscs/nestmc-proto.git
+cd nestmc-proto
 git submodule init
 git submodule update
 
@@ -127,13 +133,6 @@ cd build_knl
 
 ## build miniapp
 
-# clone the repo and set up the submodules
-git clone https://github.com/bcumming/cell_algorithms.git
-cd cell_algorithms
-
-# checkout the knl branch
-git checkout knl
-
 # setup submodules
 git submodule init
 git submodule update
diff --git a/mechanisms/mod/exp2syn.mod b/mechanisms/mod/exp2syn.mod
old mode 100755
new mode 100644
index ea0cf025e9228216b4699161a2e574ca1d1dda6e..591fcbca8aff2779cc36286b554d6d17d9f475c1
--- a/mechanisms/mod/exp2syn.mod
+++ b/mechanisms/mod/exp2syn.mod
@@ -1,50 +1,47 @@
 NEURON {
-	POINT_PROCESS exp2syn
-	RANGE tau1, tau2, e
-	NONSPECIFIC_CURRENT i
+    POINT_PROCESS exp2syn
+    RANGE tau1, tau2, e
+    NONSPECIFIC_CURRENT i
 }
 
 UNITS {
-	(nA) = (nanoamp)
-	(mV) = (millivolt)
-	(uS) = (microsiemens)
+    (mV) = (millivolt)
 }
 
 PARAMETER {
-	tau1 = .5 (ms) : <1e-9,1e9>
-	tau2 = 2  (ms) : <1e-9,1e9>
-	e=0	(mV)
+    tau1 = 0.5 (ms)
+    tau2 = 2   (ms)
+    e    = 0   (mV)
 }
 
 ASSIGNED {
-	factor
+    factor
 }
 
 STATE {
-	A : (uS)
-	B : (uS)
+    A B
 }
 
 INITIAL {
-	LOCAL tp
-	A = 0
-	B = 0
-	tp = (tau1*tau2)/(tau2 - tau1) * log(tau2/tau1)
-	factor = -exp(-tp/tau1) + exp(-tp/tau2)
-	factor = 1/factor
+    LOCAL tp
+    A = 0
+    B = 0
+    tp = (tau1*tau2)/(tau2 - tau1) * log(tau2/tau1)
+    factor = 1 / (-exp(-tp/tau1) + exp(-tp/tau2))
 }
 
 BREAKPOINT {
-	SOLVE state METHOD cnexp
-	i = (B - A)*(v - e)
+    SOLVE state METHOD cnexp
+    i = (B - A)*(v - e)
 }
 
 DERIVATIVE state {
-	A' = -A/tau1
-	B' = -B/tau2
+    A' = -A/tau1
+    B' = -B/tau2
 }
 
 NET_RECEIVE(weight) {
-	A = A + weight*factor
-	B = B + weight*factor
+    A = A + weight*factor
+    B = B + weight*factor
 }
+
diff --git a/mechanisms/mod/expsyn.mod b/mechanisms/mod/expsyn.mod
index 16d10c5cf856cd87e50252dca2163d844588e2b9..44da3697ddf01321ea9ee5991791baa0f0145880 100644
--- a/mechanisms/mod/expsyn.mod
+++ b/mechanisms/mod/expsyn.mod
@@ -5,22 +5,18 @@ NEURON {
 }
 
 UNITS {
-    (nA) = (nanoamp)
     (mV) = (millivolt)
-    (uS) = (microsiemens)
 }
 
 PARAMETER {
-    : the default for Neuron is 0.1
-    :tau = 0.1 (ms) : <1e-9,1e9>
-    tau = 2.0 (ms) : <1e-9,1e9>
+    tau = 2.0 (ms) : the default for Neuron is 0.1
     e = 0   (mV)
 }
 
 ASSIGNED {}
 
 STATE {
-    g : (uS)
+    g
 }
 
 INITIAL {
@@ -39,3 +35,4 @@ DERIVATIVE state {
 NET_RECEIVE(weight) {
     g = g + weight
 }
+
diff --git a/mechanisms/mod/hh.mod b/mechanisms/mod/hh.mod
index 8b23f44a4dc3e27cdbb2d78a161b9504c8651073..f5acc9fc7c66d283d170f5b11d1ba2da21e039fa 100644
--- a/mechanisms/mod/hh.mod
+++ b/mechanisms/mod/hh.mod
@@ -1,24 +1,3 @@
-TITLE hh.mod   squid sodium, potassium, and leak channels
-
-: COMMENT
-:  This is the original Hodgkin-Huxley treatment for the set of sodium, 
-:   potassium, and leakage channels found in the squid giant axon membrane.
-:   ("A quantitative description of membrane current and its application 
-:   conduction and excitation in nerve" J.Physiol. (Lond.) 117:500-544 (1952).)
-:  Membrane voltage is in absolute mV and has been reversed in polarity
-:   from the original HH convention and shifted to reflect a resting potential
-:   of -65 mV.
-:  Remember to set celsius=6.3 (or whatever) in your HOC file.
-:  See squid.hoc for an example of a simulation using this model.
-:  SW Jaslove  6 March, 1992
-: ENDCOMMENT
-
-UNITS {
-    (mA) = (milliamp)
-    (mV) = (millivolt)
-    (S) = (siemens)
-}
-
 NEURON {
     SUFFIX hh
     USEION na READ ena WRITE ina
@@ -28,13 +7,17 @@ NEURON {
     GLOBAL minf, hinf, ninf, mtau, htau, ntau
 }
 
+UNITS {
+    (mV) = (millivolt)
+    (S) = (siemens)
+}
+
 PARAMETER {
-    gnabar = .12 (S/cm2)  : <0,1e9>
-    gkbar = .036 (S/cm2)  : <0,1e9>
-    gl = .0003 (S/cm2)    : <0,1e9>
+    gnabar = .12 (S/cm2)
+    gkbar = .036 (S/cm2)
+    gl = .0003 (S/cm2)
     el = -54.3 (mV)
     celsius = 6.3 (degC)
-    :celsius = 37 (degC)
 }
 
 STATE {
@@ -77,7 +60,7 @@ DERIVATIVE states {
     n' = (ninf-n)/ntau
 }
 
-PROCEDURE rates(v) :(mV))
+PROCEDURE rates(v)
 {
     LOCAL  alpha, beta, sum, q10
 
@@ -105,21 +88,13 @@ PROCEDURE rates(v) :(mV))
     ninf = alpha/sum
 }
 
+: We don't trap for zero in the denominator like Neuron, because function
+: inlining in modparser won't support it. There is a good argument that
+: vtrap should be provided as a built in of the language, because
+:   - it is a common pattern in many mechanisms.
+:   - it can be implemented efficiently on different back ends if the
+:     compiler has enough information.
 FUNCTION vtrap(x,y) {
-    : Traps for 0 in denominator of rate eqns.
-
-    : Disabled for function inlining...
-    : there is a very good case for making vtrap a builtin function for the language
-    : - it is ubiquitous: used in so many models of ion channels
-    : - platform specific optimizations written in assembly/intrinsics
-    :   required to facilitate vectorization/minimize branch misses
-
-    :if (fabs(x/y) < 1e-6) {
-    :    vtrap = y*(1 - x/y/2)
-    :}else{
-    :    vtrap = x/(exp(x/y) - 1)
-    :}
-
     vtrap = x/(exp(x/y) - 1)
 }
 
diff --git a/mechanisms/mod/pas.mod b/mechanisms/mod/pas.mod
index b7dc2ad6d2a343bb2333c5b8ecfec17060150865..6653f34e1bf3a0b53f367c826f2d424ca7f86927 100644
--- a/mechanisms/mod/pas.mod
+++ b/mechanisms/mod/pas.mod
@@ -1,8 +1,5 @@
-TITLE passive membrane channel
-
 UNITS {
     (mV) = (millivolt)
-    (mA) = (milliamp)
     (S) = (siemens)
 }
 
@@ -15,8 +12,8 @@ NEURON {
 INITIAL {}
 
 PARAMETER {
-    g = .001    (S/cm2) :<0,1e9>
-    e = -65 (mV) : we use -65 for the ball and stick model, instead of Neuron default of -70
+    g = .001 (S/cm2)
+    e = -65  (mV) : we use -65 for the ball and stick model, instead of Neuron default of -70
 }
 
 ASSIGNED {