diff --git a/arbor/include/arbor/mechcat.hpp b/arbor/include/arbor/mechcat.hpp
index d72394f7111948344f47ef3c45473365e3eecadb..0fc0a23fabeb678375f9c357937231c5ae80795d 100644
--- a/arbor/include/arbor/mechcat.hpp
+++ b/arbor/include/arbor/mechcat.hpp
@@ -122,5 +122,6 @@ private:
 
 const mechanism_catalogue& global_default_catalogue();
 const mechanism_catalogue& global_allen_catalogue();
+const mechanism_catalogue& global_bbp_catalogue();
 
 } // namespace arb
diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt
index f72d7399874da1b2b2e070ba8c87619b4c66007d..d4539de33fd642fbfe8ab5b55e902c23c083df0f 100644
--- a/mechanisms/CMakeLists.txt
+++ b/mechanisms/CMakeLists.txt
@@ -9,6 +9,46 @@ add_custom_target(build_all_mods)
 
 set(mech_sources "")
 
+# BBP
+set(bbp_mechanisms CaDynamics_E2 Ca_HVA Ca_LVAst Ih Im K_Pst K_Tst Nap_Et2 NaTa_t NaTs2_t SK_E2 SKv3_1)
+set(bbp_mod_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/bbp")
+set(mech_dir "${CMAKE_CURRENT_BINARY_DIR}/generated/bbp")
+file(MAKE_DIRECTORY "${mech_dir}")
+
+build_modules(
+        ${bbp_mechanisms}
+        SOURCE_DIR "${bbp_mod_srcdir}"
+        DEST_DIR "${mech_dir}"
+        ${external_modcc}
+        MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS}
+        GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu
+        TARGET build_catalogue_bbp_mods)
+
+set(bbp_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/bbp_catalogue.cpp)
+set(bbp_catalogue_options -A arbor -I ${mech_dir} -o ${bbp_catalogue_source} -B multicore -C bbp)
+if(ARB_WITH_GPU)
+    list(APPEND bbp_catalogue_options -B gpu)
+endif()
+
+add_custom_command(
+        OUTPUT ${bbp_catalogue_source}
+        COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate_catalogue ${bbp_catalogue_options} ${bbp_mechanisms}
+        DEPENDS generate_catalogue
+)
+
+add_custom_target(bbp_catalogue_cpp_target DEPENDS ${bbp_catalogue_source})
+add_dependencies(build_catalogue_bbp_mods bbp_catalogue_cpp_target)
+add_dependencies(build_all_mods build_catalogue_bbp_mods)
+
+list(APPEND mech_sources ${bbp_catalogue_source})
+foreach(mech ${bbp_mechanisms})
+    list(APPEND mech_sources ${mech_dir}/${mech}_cpu.cpp)
+    if(ARB_WITH_GPU)
+        list(APPEND mech_sources ${mech_dir}/${mech}_gpu.cpp)
+        list(APPEND mech_sources ${mech_dir}/${mech}_gpu.cu)
+    endif()
+endforeach()
+
 # ALLEN
 set(allen_mechanisms CaDynamics Ca_HVA Ca_LVA Ih Im Im_v2 K_P K_T Kd Kv2like Kv3_1 NaTa NaTs NaV Nap SK)
 set(allen_mod_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/allen")
diff --git a/mechanisms/bbp/CaDynamics_E2.mod b/mechanisms/bbp/CaDynamics_E2.mod
new file mode 100644
index 0000000000000000000000000000000000000000..5b07cacefd70a6cc240190c3071bb5e643c1ed22
--- /dev/null
+++ b/mechanisms/bbp/CaDynamics_E2.mod
@@ -0,0 +1,41 @@
+: Dynamics that track inside calcium concentration
+: modified from Destexhe et al. 1994
+
+NEURON {
+   SUFFIX CaDynamics_E2
+   USEION ca READ ica WRITE cai
+   RANGE decay, gamma, minCai, depth, initCai
+}
+
+UNITS {
+   (mV)    = (millivolt)
+   (mA)    = (milliamp)
+   (molar) = (1/liter)
+   (mM)    = (millimolar)
+   (um)    = (micron)
+}
+
+PARAMETER {
+   F      = 96485.3321233100184 (coulomb/mole) : Faraday's constant
+   gamma  = 0.05                               : percent of free calcium (not buffered)
+   decay  = 80                  (ms)           : rate of removal of calcium
+   depth  = 0.1                 (um)           : depth of shell
+   minCai = 1e-4                (mM)
+   initCai = 5e-5
+}
+
+STATE {
+   cai
+}
+
+INITIAL {
+   cai = initCai
+}
+
+BREAKPOINT {
+   SOLVE states METHOD cnexp
+}
+
+DERIVATIVE states {
+   cai' = -5000*ica*gamma/(F*depth) - (cai - minCai)/decay
+}
diff --git a/mechanisms/bbp/Ca_HVA.mod b/mechanisms/bbp/Ca_HVA.mod
new file mode 100644
index 0000000000000000000000000000000000000000..b25827295f3e75c21b71be43b2a4ab4a97a44258
--- /dev/null
+++ b/mechanisms/bbp/Ca_HVA.mod
@@ -0,0 +1,64 @@
+: Reference: Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993
+
+NEURON {
+   SUFFIX Ca_HVA
+   USEION ca READ eca WRITE ica
+   RANGE gCa_HVAbar
+}
+
+UNITS {
+   (S)  = (siemens)
+   (mV) = (millivolt)
+   (mA) = (milliamp)
+}
+
+PARAMETER {
+   gCa_HVAbar = 0.00001 (S/cm2)
+}
+
+STATE {
+   m
+   h
+}
+
+BREAKPOINT {
+   SOLVE states METHOD cnexp
+   ica = gCa_HVAbar*m*m*h*(v - eca)
+}
+
+DERIVATIVE states {
+   LOCAL mAlpha, mBeta, hAlpha, hBeta
+
+   mAlpha = m_alpha(v)
+   mBeta  = m_beta(v)
+   hAlpha = h_alpha(v)
+   hBeta  = h_beta(v)
+
+   m' = mAlpha - m*(mAlpha + mBeta)
+   h' = hAlpha - h*(hAlpha + hBeta)
+}
+
+INITIAL {
+   LOCAL mAlpha, mBeta, hAlpha, hBeta
+
+   mAlpha = m_alpha(v)
+   mBeta  = m_beta(v)
+   hAlpha = h_alpha(v)
+   hBeta  = h_beta(v)
+
+   m = mAlpha/(mAlpha + mBeta)
+   h = hAlpha/(hAlpha + hBeta)
+}
+
+FUNCTION m_alpha(v) {
+   m_alpha = 0.055*3.8*exprelr(-(27 + v)/3.8)
+}
+FUNCTION m_beta(v) {
+   m_beta  = 0.94*exp(-(v + 75)/17)
+}
+FUNCTION h_alpha(v) {
+   h_alpha = 0.000457*exp(-(v + 13)/50)
+}
+FUNCTION h_beta(v) {
+   h_beta  = 0.0065/(exp(-(v + 15)/28) + 1)
+}
diff --git a/mechanisms/bbp/Ca_LVAst.mod b/mechanisms/bbp/Ca_LVAst.mod
new file mode 100644
index 0000000000000000000000000000000000000000..32b44ba766d4e294c5ecd104112c797355188cc2
--- /dev/null
+++ b/mechanisms/bbp/Ca_LVAst.mod
@@ -0,0 +1,57 @@
+:Comment   LVA ca channel. Note: mtau is an approximation from the plots
+:Reference Avery and Johnston 1996, tau from Randall 1997
+:Comment   shifted by -10 mv to correct for junction potential
+:Comment   corrected rates using q10 = 2.3, target temperature 34, orginal 21
+
+NEURON {
+   SUFFIX Ca_LVAst
+   USEION ca READ eca WRITE ica
+   RANGE gCa_LVAstbar
+}
+
+UNITS {
+   (S) = (siemens)
+   (mV) = (millivolt)
+   (mA) = (milliamp)
+}
+
+PARAMETER {
+   gCa_LVAstbar = 0.00001 (S/cm2)
+}
+
+STATE {
+   m
+   h
+}
+
+BREAKPOINT {
+   SOLVE states METHOD cnexp
+   ica = gCa_LVAstbar*m*m*h*(v - eca)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mInf, mTau, hInf, hTau
+
+    qt = 2.3^((34 - 21)/10)
+
+    mInf = m_inf(v)
+    hInf = h_inf(v)
+    mTau =  5 + 20/(1 + exp((v + 35)/5))
+    hTau = 20 + 50/(1 + exp((v + 50)/7))
+
+    m' = (mInf - m)*qt/mTau
+    h' = (hInf - h)*qt/hTau
+}
+
+INITIAL {
+    m = m_inf(v)
+    h = h_inf(v)
+}
+
+FUNCTION m_inf(v) {
+    m_inf = 1/(1 + exp(-(v + 40)/6.0))
+}
+FUNCTION h_inf(v) {
+    h_inf = 1/(1 + exp( (v + 90)/6.4))
+}
+
diff --git a/mechanisms/bbp/Ih.mod b/mechanisms/bbp/Ih.mod
new file mode 100644
index 0000000000000000000000000000000000000000..dd2dc8969a0996f74a05ae06b9ccd6008f59f79b
--- /dev/null
+++ b/mechanisms/bbp/Ih.mod
@@ -0,0 +1,53 @@
+: Reference:  Kole,Hallermann,and Stuart, J. Neurosci. 2006
+
+NEURON {
+    SUFFIX Ih
+    NONSPECIFIC_CURRENT ihcn
+    RANGE gIhbar
+}
+
+UNITS {
+    (S) = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gIhbar =   0.00001 (S/cm2)
+    ehcn   = -45.0     (mV)
+}
+
+STATE {
+    m
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ihcn = gIhbar*m*(v - ehcn)
+}
+
+DERIVATIVE states {
+    LOCAL mAlpha, mBeta
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+
+    m' = mAlpha - m*(mAlpha + mBeta)
+}
+
+INITIAL {
+    LOCAL mAlpha, mBeta
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+
+    m = mAlpha/(mAlpha + mBeta)
+}
+
+FUNCTION m_alpha(v) {
+    m_alpha = 0.001*6.43*11.9*exprelr((v + 154.9)/11.9)
+}
+FUNCTION m_beta(v) {
+    m_beta  = 0.001*193*exp(v/33.1)
+}
+
diff --git a/mechanisms/bbp/Im.mod b/mechanisms/bbp/Im.mod
new file mode 100644
index 0000000000000000000000000000000000000000..fa164be70731287980e8e3291faf72f19a5cd63c
--- /dev/null
+++ b/mechanisms/bbp/Im.mod
@@ -0,0 +1,54 @@
+: Reference: Adams et al. 1982 - M-currents and other potassium currents in bullfrog sympathetic neurones
+: Comment:   corrected rates using q10 = 2.3, target temperature 34, orginal 21
+
+NEURON {
+    SUFFIX Im
+    USEION k READ ek WRITE ik
+    RANGE gImbar
+}
+
+UNITS {
+    (S) = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gImbar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ik = gImbar*m*(v - ek)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mAlpha, mBeta
+
+    qt     = 2.3^((34-21)/10)
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+
+    m'     = qt*(mAlpha - m*(mAlpha + mBeta))
+}
+
+INITIAL {
+    LOCAL mAlpha, mBeta
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+
+    m = mAlpha/(mAlpha + mBeta)
+}
+
+FUNCTION m_alpha(v) {
+    m_alpha = 3.3e-3*exp( 2.5*0.04*(v + 35))
+}
+FUNCTION m_beta(v) {
+    m_beta  = 3.3e-3*exp(-2.5*0.04*(v + 35))
+}
+
diff --git a/mechanisms/bbp/K_Pst.mod b/mechanisms/bbp/K_Pst.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a849755c962375c915d430c9f1764fbbf8429fe7
--- /dev/null
+++ b/mechanisms/bbp/K_Pst.mod
@@ -0,0 +1,60 @@
+:Comment    The persistent component of the K current
+:Reference  Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients,Korngreen and Sakmann, J. Physiology, 2000
+:Comment    shifted -10 mv to correct for junction potential
+:Comment    corrected rates using q10 = 2.3, target temperature 34, orginal 21
+
+
+NEURON {
+    SUFFIX K_Pst
+    USEION k READ ek WRITE ik
+    RANGE gK_Pstbar
+}
+
+UNITS {
+    (S) = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gK_Pstbar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+    h
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ik = gK_Pstbar*m*m*h*(v-ek)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mTau, mInf, hTau, hInf
+    qt = 2.3^((34-21)/10)
+
+    mInf = m_inf(v)
+    if (v < -60){
+        mTau = 1.25 + 175.03*exp( (v + 10)*0.026)
+    } else {
+        mTau = 1.25 +  13.00*exp(-(v + 10)*0.026)
+    }
+    hInf = h_inf(v)
+    hTau = 360 + (1010 + 24*(v + 65))*exp(-((v + 85)/48)^2)
+
+    m' = qt*(mInf - m)/mTau
+    h' = qt*(hInf - h)/hTau
+}
+
+INITIAL {
+    m = m_inf(v)
+    h = h_inf(v)
+}
+
+FUNCTION m_inf(v) {
+    m_inf = 1/(1 + exp(-(v + 11)/12))
+}
+FUNCTION h_inf(v) {
+    h_inf = 1/(1 + exp( (v + 64)/11))
+}
diff --git a/mechanisms/bbp/K_Tst.mod b/mechanisms/bbp/K_Tst.mod
new file mode 100644
index 0000000000000000000000000000000000000000..8cd1ac0eea73fcf3581d565644e48d6176bc3642
--- /dev/null
+++ b/mechanisms/bbp/K_Tst.mod
@@ -0,0 +1,55 @@
+: Comment    The transient component of the K current
+: Reference  Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients,Korngreen and Sakmann, J. Physiology, 2000
+: Comment:   shifted -10 mv to correct for junction potential
+: Comment    corrected rates using q10 = 2.3, target temperature 34, orginal 21
+
+NEURON {
+    SUFFIX K_Tst
+    USEION k READ ek WRITE ik
+    RANGE gK_Tstbar
+}
+
+UNITS {
+    (S)  = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gK_Tstbar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+    h
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ik = gK_Tstbar*(m^4)*h*(v-ek)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mInf, hInf, mTau, hTau
+
+    qt   = 2.3^((34 - 21)/10)
+    mInf = m_inf(v)
+    mTau = 0.34 + 0.92*exp(-((v + 81)/59)^2)
+    hInf = h_inf(v)
+    hTau = 8 + 49*exp(-((v + 83)/23)^2)
+
+    m' = qt*(mInf - m)/mTau
+    h' = qt*(hInf - h)/hTau
+}
+
+INITIAL {
+    m = m_inf(v)
+    h = h_inf(v)
+}
+
+FUNCTION m_inf(v) {
+   m_inf = 1/(1 + exp(-(v + 10)/19))
+}
+FUNCTION h_inf(v) {
+   h_inf = 1/(1 + exp(-(v + 76)/-10))
+}
diff --git a/mechanisms/bbp/NaTa_t.mod b/mechanisms/bbp/NaTa_t.mod
new file mode 100644
index 0000000000000000000000000000000000000000..0b161083cb2353e81c18582af345097e4667a6be
--- /dev/null
+++ b/mechanisms/bbp/NaTa_t.mod
@@ -0,0 +1,69 @@
+NEURON  {
+    SUFFIX NaTa_t
+    USEION na READ ena WRITE ina
+    RANGE gNaTa_tbar
+}
+
+UNITS {
+    (S)  = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gNaTa_tbar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+    h
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ina = gNaTa_tbar*m*m*m*h*(v-ena)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mAlpha, mBeta, mRate, hAlpha, hBeta, hRate
+    qt = 2.3^((34-21)/10)
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+    mRate  = mAlpha + mBeta
+
+    hAlpha = h_alpha(v)
+    hBeta  = h_beta(v)
+    hRate  = hAlpha + hBeta
+
+    m' = qt*(mAlpha - m*mRate)
+    h' = qt*(hAlpha - h*hRate)
+}
+
+INITIAL {
+    LOCAL mAlpha, mBeta, hAlpha, hBeta
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+    m      = mAlpha/(mAlpha + mBeta)
+
+    hAlpha = h_alpha(v)
+    hBeta  = h_beta(v)
+    h      = hAlpha/(hAlpha + hBeta)
+}
+
+FUNCTION m_alpha(v) {
+    m_alpha = 0.182*6*exprelr(-(v + 38)/6)
+}
+
+FUNCTION m_beta(v) {
+    m_beta = 0.124*6*exprelr( (v + 38)/6)
+}
+
+FUNCTION h_alpha(v) {
+    h_alpha = 0.015*6*exprelr( (v + 66)/6)
+}
+
+FUNCTION h_beta(v) {
+    h_beta = 0.015*6*exprelr(-(v + 66)/6)
+}
diff --git a/mechanisms/bbp/NaTs2_t.mod b/mechanisms/bbp/NaTs2_t.mod
new file mode 100644
index 0000000000000000000000000000000000000000..57cdd225e1a9c0c2f5743b1d43475193408b3a4a
--- /dev/null
+++ b/mechanisms/bbp/NaTs2_t.mod
@@ -0,0 +1,71 @@
+: Reference Colbert and Pan 2002
+: Comment   took the NaTa and shifted both activation/inactivation by 6 mv
+
+NEURON {
+    SUFFIX NaTs2_t
+    USEION na READ ena WRITE ina
+    RANGE gNaTs2_tbar
+}
+
+UNITS {
+    (S) = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gNaTs2_tbar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+    h
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ina = gNaTs2_tbar*m*m*m*h*(v - ena)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mAlpha, mBeta, mRate, hAlpha, hBeta, hRate
+
+    qt = 2.3^((34-21)/10)
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+    mRate  = mAlpha + mBeta
+
+    hAlpha = h_alpha(v)
+    hBeta  = h_beta(v)
+    hRate  = hAlpha + hBeta
+
+    m' = qt*(mAlpha - m*mRate)
+    h' = qt*(hAlpha - h*hRate)
+}
+
+INITIAL {
+    LOCAL mAlpha, mBeta, hAlpha, hBeta
+
+    mAlpha = m_alpha(v)
+    mBeta  = m_beta(v)
+    m      = mAlpha/(mAlpha + mBeta)
+
+    hAlpha = h_alpha(v)
+    hBeta  = h_beta(v)
+    h      = hAlpha/(hAlpha + hBeta)
+}
+
+FUNCTION m_alpha(v) {
+    m_alpha = 0.182*6*exprelr(-(v + 32)/6)
+}
+FUNCTION m_beta(v) {
+    m_beta  = 0.124*6*exprelr( (v + 32)/6)
+}
+FUNCTION h_alpha(v) {
+    h_alpha = 0.015*6*exprelr( (v + 60)/6)
+}
+FUNCTION h_beta(v) {
+    h_beta  = 0.015*6*exprelr(-(v + 60)/6)
+}
+
diff --git a/mechanisms/bbp/Nap_Et2.mod b/mechanisms/bbp/Nap_Et2.mod
new file mode 100644
index 0000000000000000000000000000000000000000..21159846de8ca36275963b9a2954a0c04eef58ee
--- /dev/null
+++ b/mechanisms/bbp/Nap_Et2.mod
@@ -0,0 +1,57 @@
+NEURON {
+    SUFFIX Nap_Et2
+    USEION na READ ena WRITE ina
+    RANGE gNap_Et2bar
+}
+
+UNITS {
+    (S)  = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gNap_Et2bar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+    h
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ina = gNap_Et2bar*m*m*m*h*(v - ena)
+}
+
+DERIVATIVE states {
+    LOCAL qt, mInf, mAlpha, mBeta, mRho, hInf, hAlpha, hBeta, hRho
+
+    qt = 2.3^((34 - 21)/10)
+
+    mInf = m_inf(v)
+    mAlpha = 0.182*6*exprelr(-(v + 38)/6)
+    mBeta  = 0.124*6*exprelr( (v + 38)/6)
+    mRho   = mAlpha + mBeta
+
+    hInf = h_inf(v)
+    hAlpha = 2.88e-6*4.63*exprelr( (v + 17.0)/4.63)
+    hBeta  = 6.94e-6*2.63*exprelr(-(v + 64.4)/2.63)
+    hRho   = hAlpha + hBeta
+
+    m' = qt*(mInf - m)*mRho/6.0     : equivalent to mTau = 6.0/mRho; m' = qt*(mInf - m)/mTau
+    h' = qt*(hInf - h)*hRho         : equivalent to hTau = 1.0/hRho; h' = qt*(hInf - h)/hTau
+}
+
+INITIAL {
+    m = m_inf(v)
+    h = h_inf(v)
+}
+
+FUNCTION m_inf(v) {
+    m_inf = 1.0/(1 + exp(-(v + 52.6)/4.6))
+}
+
+FUNCTION h_inf(v) {
+    h_inf = 1.0/(1 + exp( (v + 48.8)/10))
+}
diff --git a/mechanisms/bbp/SK_E2.mod b/mechanisms/bbp/SK_E2.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a7b41d057358853d72fe72a969603226b633974d
--- /dev/null
+++ b/mechanisms/bbp/SK_E2.mod
@@ -0,0 +1,45 @@
+: SK-type calcium-activated potassium current
+: Reference : Kohler et al. 1996
+
+NEURON {
+    SUFFIX SK_E2
+    USEION k READ ek WRITE ik
+    USEION ca READ cai
+    RANGE gSK_E2bar
+}
+
+UNITS {
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+    (mM) = (milli/liter)
+}
+
+PARAMETER {
+    gSK_E2bar = 0.000001 (mho/cm2)
+    zTau      = 1        (ms)
+}
+
+STATE {
+    z FROM 0 TO 1
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ik = gSK_E2bar*z*(v - ek)
+}
+
+DERIVATIVE states {
+    z' = (z_inf(cai) - z)/zTau
+}
+
+INITIAL {
+    z = z_inf(cai)
+}
+
+FUNCTION z_inf(ca) {
+    if (ca < 1e-7) {
+        z_inf = 0
+    } else {
+        z_inf =  1/(1 + (0.00043/ca)^4.8)
+    }
+}
diff --git a/mechanisms/bbp/SKv3_1.mod b/mechanisms/bbp/SKv3_1.mod
new file mode 100644
index 0000000000000000000000000000000000000000..969a88550f43b771f770ad350d946b60173fed5b
--- /dev/null
+++ b/mechanisms/bbp/SKv3_1.mod
@@ -0,0 +1,43 @@
+:Reference  Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992)
+
+NEURON {
+    SUFFIX SKv3_1
+    USEION k READ ek WRITE ik
+    RANGE gSKv3_1bar
+}
+
+UNITS    {
+    (S)  = (siemens)
+    (mV) = (millivolt)
+    (mA) = (milliamp)
+}
+
+PARAMETER {
+    gSKv3_1bar = 0.00001 (S/cm2)
+}
+
+STATE {
+    m
+}
+
+BREAKPOINT {
+    SOLVE states METHOD cnexp
+    ik = gSKv3_1bar*m*(v - ek)
+}
+
+DERIVATIVE states {
+    LOCAL mInf, mRho
+
+    mInf = m_inf(v)
+    mRho = 0.25*(1 + exp((v + 46.56)/(-44.140)))
+
+    m' = (mInf - m)*mRho
+}
+
+INITIAL {
+    m = m_inf(v)
+}
+
+FUNCTION m_inf(v) {
+    m_inf = 1/(1 + exp((18.7 - v)/9.7))
+}
diff --git a/python/mechanism.cpp b/python/mechanism.cpp
index 56538721f09f44c3db18905d06138587f9228bb6..9c65cc2d8858cf3b3e2bfd991109296e87e67c75 100644
--- a/python/mechanism.cpp
+++ b/python/mechanism.cpp
@@ -136,6 +136,7 @@ void register_mechanisms(pybind11::module& m) {
 
     m.def("default_catalogue", [](){return arb::global_default_catalogue();});
     m.def("allen_catalogue", [](){return arb::global_allen_catalogue();});
+    m.def("bbp_catalogue", [](){return arb::global_bbp_catalogue();});
 
     // arb::mechanism_desc
     // For specifying a mechanism in the cable_cell interface.