diff --git a/mechanisms/default/hh.mod b/mechanisms/default/hh.mod
index aa73539d3d268336b6f3dc0a419c35f681f9e854..1c26322e1da5df587eaf0ddee1ff3863ed60674f 100644
--- a/mechanisms/default/hh.mod
+++ b/mechanisms/default/hh.mod
@@ -1,10 +1,9 @@
 NEURON {
     SUFFIX hh
     USEION na READ ena WRITE ina
-    USEION k READ ek WRITE ik
+    USEION k  READ ek  WRITE ik
     NONSPECIFIC_CURRENT il
-    RANGE gnabar, gkbar, gl, el, gna, gk
-    GLOBAL minf, hinf, ninf, mtau, htau, ntau
+    RANGE gnabar, gkbar, gl, el, q10
 }
 
 UNITS {
@@ -13,83 +12,79 @@ UNITS {
 }
 
 PARAMETER {
-    gnabar = .12 (S/cm2)
-    gkbar = .036 (S/cm2)
-    gl = .0003 (S/cm2)
-    el = -54.3 (mV)
-    celsius (degC)
+    gnabar =   0.12   (S/cm2)
+    gkbar  =   0.036  (S/cm2)
+    gl     =   0.0003 (S/cm2)
+    el     = -54.3    (mV)
+    celsius           (degC)
 }
 
-STATE {
-    m h n
-}
-
-ASSIGNED {
-    v (mV)
+STATE { m h n }
 
-    gna (S/cm2)
-    gk (S/cm2)
-    minf
-    hinf
-    ninf
-    mtau (ms)
-    htau (ms)
-    ntau (ms)
-    q10
-}
+ASSIGNED { q10 }
 
 BREAKPOINT {
     SOLVE states METHOD cnexp
-    gna = gnabar*m*m*m*h
-    ina = gna*(v - ena)
-    gk = gkbar*n*n*n*n
-    ik = gk*(v - ek)
-    il = gl*(v - el)
+    LOCAL gk, m_, n_, n2
+
+    n_ = n
+    m_ = m
+    n2 = n_*n_
+    gk = gkbar*n2*n2
+    ina = gnabar*m_*m_*m_*h*(v - ena)
+    ik  = gk*(v - ek)
+    il  = gl*(v - el)
 }
 
 INITIAL {
-    q10 = 3^((celsius - 6.3)/10)
-    rates(v)
-    m = minf
-    h = hinf
-    n = ninf
-}
+    LOCAL alpha, beta
 
-DERIVATIVE states {
-    rates(v)
-    m' = (minf-m)/mtau
-    h' = (hinf-h)/htau
-    n' = (ninf-n)/ntau
-}
+    q10 = 3^((celsius - 6.3)/10.0)
+                            
+    : sodium activation system
+    alpha = m_alpha(v)
+    beta  = m_beta(v)
+    m     = alpha/(alpha + beta)
 
-PROCEDURE rates(v)
-{
-    LOCAL  alpha, beta, sum
+    : sodium inactivation system
+    alpha = h_alpha(v)
+    beta  = h_beta(v)
+    h     = alpha/(alpha + beta)
 
-    :"m" sodium activation system
-    alpha = .1 * vtrap(-(v+40),10)
-    beta =  4 * exp(-(v+65)/18)
-    sum = alpha + beta
-    mtau = 1/(q10*sum)
-    minf = alpha/sum
+    : potassium activation system
+    alpha = n_alpha(v)
+    beta  = n_beta(v)
+    n     = alpha/(alpha + beta)
+}
 
-    :"h" sodium inactivation system
-    alpha = .07 * exp(-(v+65)/20)
-    beta = 1 / (exp(-(v+35)/10) + 1)
-    sum = alpha + beta
-    htau = 1/(q10*sum)
-    hinf = alpha/sum
+DERIVATIVE states {
+    LOCAL alpha, beta, sum
 
-    :"n" potassium activation system
-    alpha = .01*vtrap(-(v+55),10)
-    beta = .125*exp(-(v+65)/80)
-    sum = alpha + beta
-    ntau = 1/(q10*sum)
-    ninf = alpha/sum
+    : sodium activation system
+    alpha = m_alpha(v)
+    beta  = m_beta(v)         
+    sum   = alpha + beta
+    m'    = (alpha - m*sum)*q10
+                     
+    : sodium inactivation system
+    alpha = h_alpha(v)
+    beta  = h_beta(v)
+    sum   = alpha + beta
+    h'    = (alpha - h*sum)*q10
+                      
+    : potassium activation system
+    alpha = n_alpha(v)
+    beta  = n_beta(v)                 
+    sum   = alpha + beta
+    n'    = (alpha - n*sum)*q10
 }
 
-FUNCTION vtrap(x,y) {
-    : use built in exprelr(z) = z/(exp(z)-1), which handles the z=0 case correctly
-    vtrap = y*exprelr(x/y)
-}
+FUNCTION vtrap(x,y) { vtrap   = y*exprelr(x/y) }
+
+FUNCTION m_alpha(v) { m_alpha = 0.1*vtrap(-(v + 40.0), 10.0) }
+FUNCTION h_alpha(v) { h_alpha = 0.07*exp(-(v + 65.0)/20.0) }
+FUNCTION n_alpha(v) { n_alpha = 0.01*vtrap(-(v + 55.0), 10.0) }
 
+FUNCTION m_beta(v)  { m_beta  = 4.0*exp(-(v + 65.0)/18.0) }
+FUNCTION h_beta(v)  { h_beta  = 1.0/(exp(-(v + 35.0)/10.0) + 1.0) }
+FUNCTION n_beta(v)  { n_beta  = 0.125*exp(-(v + 65.0)/80.0) }