diff --git a/src/nucsyn/nucsyn_burn_helium.c b/src/nucsyn/nucsyn_burn_helium.c
new file mode 100644
index 0000000000000000000000000000000000000000..99466f49651cec8c2d252319f2f236e5d6285c64
--- /dev/null
+++ b/src/nucsyn/nucsyn_burn_helium.c
@@ -0,0 +1,165 @@
+#include "../binary_c.h"
+
+No_empty_translation_unit_warning;
+
+
+#ifdef NUCSYN
+
+static void helium_Jacobian(double *const*const RESTRICT  J,
+                           const double * RESTRICT const N,
+                           const double * RESTRICT const sigmav);
+static void helium_derivatives(const double * RESTRICT const y,
+                              double * RESTRICT const dydt,
+                              const double * RESTRICT const sigmav,
+                              const double * RESTRICT const N);
+
+double nucsyn_burn_helium(struct stardata_t * RESTRICT const stardata,
+                          double * RESTRICT const Nin,
+                          const double * RESTRICT const sigmav,
+                          const double h)
+{
+    double err;
+    double **Jhelium;
+#define NSPECIES 5
+    if(stardata->tmpstore->network_jacobians[NUCSYN_NETWORK_helium] == NULL)
+    {
+        Allocate_network_jacobian(NUCSYN_NETWORK_helium,
+                                  NSPECIES);
+    }
+
+    Jhelium = stardata->tmpstore->network_jacobians[NUCSYN_NETWORK_helium];
+    double y_heburn[NSPECIES+1],
+        y2_heburn[NSPECIES+1],
+        f1_heburn[NSPECIES+1],
+        f2_heburn[NSPECIES+1],
+        f3_heburn[NSPECIES+1],
+        f4_heburn[NSPECIES+1];
+    int indx_heburn[NSPECIES+1];
+    y_heburn[1] = Nin[XHe4];
+    y_heburn[2] = Nin[XC12];
+    y_heburn[3] = Nin[XO16];
+    y_heburn[4] = Nin[XNe20];
+    y_heburn[5] = Nin[XMg24];
+
+    err=kaps_rentrop_GSL(stardata,
+                         h,
+                         y_heburn,
+                         y2_heburn,
+                         NSPECIES,
+                         Jhelium,
+                         sigmav,
+                         Nin,
+                         &helium_Jacobian,
+                         &helium_derivatives,
+                         f1_heburn,
+                         f2_heburn,
+                         f3_heburn,
+                         f4_heburn,
+                         stardata->preferences->nucsyn_network_error[NUCSYN_NETWORK_helium],
+                         TRUE,
+                         indx_heburn);
+    if(err<=1.0)
+    {
+        Nin[XHe4] = y_heburn[1];
+        Nin[XC12] = y_heburn[2];
+        Nin[XO16] = y_heburn[3];
+        Nin[XNe20] = y_heburn[4];
+        Nin[XMg24] = y_heburn[5];
+    }
+    return err;
+}
+
+static void helium_derivatives(const double * RESTRICT const y,
+                               double * RESTRICT const dydt,
+                               const double * RESTRICT const sigmav,
+                               const double * RESTRICT const N MAYBE_UNUSED)
+{
+    const double a = sigmav[SIGMAV_3He4] * Pow3(y[1]);
+    const double b = sigmav[SIGMAV_C12_He4] * y[2] * y[1];
+    const double c = sigmav[SIGMAV_O16_He4] * y[3] * y[1];
+    const double d = sigmav[SIGMAV_Ne20_He4] * y[4] * y[1];
+
+    dydt[1] = -3.0*a -b -c -d;
+    dydt[2] = a - b;
+    dydt[3] = b - c;
+    dydt[4] = c - d;
+    dydt[5] = d;
+
+    /*
+    dydt[1] =
+        -3.0*sigmav[SIGMAV_3He4] * Pow3(N[XHe4])
+        -sigmav[SIGMAV_C12_He4] * N[XC12] * N[XHe4]
+        -sigmav[SIGMAV_O16_He4] * N[XO16] * N[XHe4];
+        -sigmav[SIGMAV_Ne20_He4] * N[XNe20] * N[XHe4];
+    dydt[2] =
+        + sigmav[SIGMAV_3He4] * Pow3(N[XHe4])
+        - sigmav[SIGMAV_C12_He4] * N[XC12] * N[XHe4];
+    dydt[3] =
+        + sigmav[SIGMAV_C12_He4] * N[XC12] * N[XHe4]
+        - sigmav[SIGMAV_O16_He4] * N[XO16] * N[XHe4];
+    dydt[4] =
+        + sigmav[SIGMAV_O16_He4] * N[XO16] * N[XHe4]
+        - sigmav[SIGMAV_Ne20_He4] * N[XNe20] * N[XHe4];
+    dydt[5] =
+        + sigmav[SIGMAV_Ne20_He4] * N[XNe20] * N[XHe4];
+    */
+}
+
+static void helium_Jacobian(double *const*const RESTRICT J,
+                            const double * RESTRICT const N,
+                            const double * RESTRICT const sigmav)
+{
+    const double y2 = 3.0 * Pow2(N[XHe4]) * sigmav[SIGMAV_3He4];
+    const double dummy1 = sigmav[SIGMAV_C12_He4] * N[XC12];
+    const double dummy2 = sigmav[SIGMAV_O16_He4] * N[XO16];
+    const double dummy3 = sigmav[SIGMAV_Ne20_He4] * N[XNe20];
+    const double dummy4 = sigmav[SIGMAV_C12_He4] * N[XHe4];
+    const double dummy5 = sigmav[SIGMAV_O16_He4] * N[XHe4];
+    const double dummy6 = sigmav[SIGMAV_Ne20_He4] * N[XHe4];
+
+    J[1][1] =
+        -3.0 * y2
+        -dummy1
+        -dummy2
+        -dummy3;
+    J[1][2] = -dummy4;
+    J[1][3] = -dummy5;
+    J[1][4] = -dummy6;
+    J[1][5] = 0.0;
+
+    J[2][1] =
+        + y2
+        - dummy1;
+    J[2][2] = - dummy4;
+    J[2][3] = - dummy5;
+    J[2][4] = 0.0;
+    J[2][5] = 0.0;
+
+    J[3][1] =
+        + dummy1
+        - dummy2;
+    J[3][2] =
+        + dummy4;
+    J[3][3] =
+        - dummy5;
+    J[3][4] = 0.0;
+    J[3][5] = 0.0;
+
+    J[4][1] =
+        + dummy2
+        - dummy3;
+    J[4][2] = 0.0;
+    J[4][3] =
+        - dummy5;
+    J[4][4] =
+        + dummy6;
+    J[4][5] = 0.0;
+
+    J[5][1] = dummy3;
+    J[5][2] = 0.0;
+    J[5][3] = 0.0;
+    J[5][4] = dummy6;
+    J[5][5] = 0.0;
+}
+
+#endif//NUCSYN
diff --git a/src/nucsyn/nucsyn_burn_ppfast.c b/src/nucsyn/nucsyn_burn_ppfast.c
index 558d89ff27efe02494b529c53bb5d2c9f4407d26..224b3269296c70fce0c0a44c31139bdb70ffb86e 100644
--- a/src/nucsyn/nucsyn_burn_ppfast.c
+++ b/src/nucsyn/nucsyn_burn_ppfast.c
@@ -37,7 +37,7 @@
 No_empty_translation_unit_warning;
 
 
-#if defined NUCSYN
+#ifdef NUCSYN
 /*
  * Network code : ppfast
  * Automatically generated by make_reaction_network_code.pl
diff --git a/src/nucsyn/nucsyn_hbb.c b/src/nucsyn/nucsyn_hbb.c
index c7898f682c9c167cd7a167c93bcbb9d286731c52..f7972f4ed36975fc9c84480625e62a87ec84d59d 100644
--- a/src/nucsyn/nucsyn_hbb.c
+++ b/src/nucsyn/nucsyn_hbb.c
@@ -21,14 +21,50 @@ void nucsyn_clayton_table(double *mnuc);
 void nucsyn_hbb(const double T, /* (log10) temperature */
                 const double rho, /* density */
                 const double dt, /* time we burn for (years) */
-                Abundance * RESTRICT Xhbb, /* incoming mass fractions */
-                struct star_t *star,
-                struct stardata_t *  stardata
+                Abundance * RESTRICT const Xhbb, /* incoming mass fractions */
+                struct star_t * const star,
+                struct stardata_t * const stardata
     )
 {
     const Nuclear_mass * mnuc = stardata->store->mnuc;
     const Nuclear_mass *imnuc = stardata->store->imnuc;
 
+
+#ifdef __TEST_HE_BURN
+    Abundance * X = New_clear_isotope_array;
+    Number_density * N = New_isotope_array;
+    const double testrho = 1e3;
+
+    /* start with a lot of helium */
+    X[XHe4] = 1.0;
+    X_to_N(imnuc,testrho,N,X,ISOTOPE_ARRAY_SIZE);
+
+    const double timemax = 1000;
+    double time = 0.0;
+    double dtime = timemax/1000.0;
+    double logtemp = log10(3e8);
+
+    while(time < timemax)
+    {
+        nucsyn_burn(logtemp,dtime,N,star,stardata);
+        N_to_X(mnuc,testrho,N,X,ISOTOPE_ARRAY_SIZE);
+        printf("HEBURN %g %g %g %g %g %g %g\n",
+               time,
+               X[XHe4],
+               X[XC12],
+               X[XO16],
+               X[XNe20],
+               X[XMg24],
+               XXsum(stardata,X)
+            );
+        time += dtime;
+    }
+    Safe_free(X);
+    Safe_free(N);
+
+    Flexit;
+#endif//__TEST_HE_BURN
+
 #ifdef NUCSYN_HBB_RENORMALIZE_MASS_FRACTIONS
     Abundance Xtot;
 #endif
diff --git a/src/nucsyn/nucsyn_networks.def b/src/nucsyn/nucsyn_networks.def
index 3b708e1c38d2169ad5efc15ea0bcaee19eb7e4f1..afc80e37690f7696db0287a9c3c4fcb043599db8 100644
--- a/src/nucsyn/nucsyn_networks.def
+++ b/src/nucsyn/nucsyn_networks.def
@@ -25,9 +25,10 @@
         X(COLDCNO, TRUE, "Cold CNO",&nucsyn_burn_kaps_rentrop_coldCNO,&nucsyn_burn_lsoda_coldCNO,_CVODE(&nucsyn_burn_cvode_coldCNO)) \
         X(HOTCNO, FALSE, "Hot CNO",&nucsyn_burn_hotCNO,NULL,_CVODE(NULL)) \
         X(NeNa, FALSE, "NeNa",NULL,NULL,_CVODE(NULL))                   \
-        X(NeNaMgAlnoleak, FALSE, "NeNaMgAl no leak",NULL,NULL,_CVODE(NULL)) \
-        X(NeNaMgAl, TRUE, "NeNaMgAl",&nucsyn_burn_kaps_rentrop_NeNaMgAl,&nucsyn_burn_lsoda_coldCNO,_CVODE(&nucsyn_burn_cvode_NeNaMgAl)) \
-        X(NUMBER, FALSE, "",NULL,NULL,NULL)
+    X(NeNaMgAlnoleak, FALSE, "NeNaMgAl no leak",NULL,NULL,_CVODE(NULL)) \
+    X(NeNaMgAl, TRUE, "NeNaMgAl",&nucsyn_burn_kaps_rentrop_NeNaMgAl,&nucsyn_burn_lsoda_coldCNO,_CVODE(&nucsyn_burn_cvode_NeNaMgAl)) \
+    X(helium,TRUE,"helium",&nucsyn_burn_helium,NULL,_CVODE(NULL))       \
+    X(NUMBER, FALSE, "",NULL,NULL,NULL)
 
 
 
diff --git a/src/nucsyn/nucsyn_prototypes.h b/src/nucsyn/nucsyn_prototypes.h
index 4ad79586a35c9172a999061f9b5d3fb0ce915b57..842295885a13cdca7c75a01f851ecbe5dd3766ad 100644
--- a/src/nucsyn/nucsyn_prototypes.h
+++ b/src/nucsyn/nucsyn_prototypes.h
@@ -51,9 +51,9 @@ void nucsyn_long_log(struct stardata_t * RESTRICT const stardata);
 void nucsyn_hbb(const double temp,
                 const double rho,
                 const double thisdt,
-                Abundance * RESTRICT Xhbb,
-                struct star_t *star,
-                struct stardata_t *  stardata);
+                Abundance * RESTRICT const Xhbb,
+                struct star_t *const star,
+                struct stardata_t *  const stardata);
 void nucsyn_set_nuc_masses(Nuclear_mass * RESTRICT mnuc,
                            Nuclear_mass * RESTRICT imnuc,
                            Nuclear_mass * RESTRICT mnuc_anu,
@@ -499,6 +499,12 @@ double nucsyn_burn_lsoda_NeNaMgAl(struct stardata_t * RESTRICT const stardata,
                                   const double * RESTRICT const sigmav,
                                   const double h);
 
+double nucsyn_burn_helium(struct stardata_t * RESTRICT const stardata,
+                          double * RESTRICT const Nin,
+                          const double * RESTRICT const sigmav,
+                          const double h);
+
+
 
 
 double Constant_function nucsyn_CN_timescale(const double t9,
diff --git a/src/nucsyn/nucsyn_set_sigmav.c b/src/nucsyn/nucsyn_set_sigmav.c
index 8227bc3040432857f1e643b5584cf21280c1fee9..d179d6ba5e3eb7906e14a67fd01779bbb9112e39 100644
--- a/src/nucsyn/nucsyn_set_sigmav.c
+++ b/src/nucsyn/nucsyn_set_sigmav.c
@@ -1609,14 +1609,15 @@ void nucsyn_set_sigmav(struct stardata_t * const stardata,
          * page 67
          * formulae on page 151
          */
+        const double sigmav_C12_tmp = -32.123 * tm13;
         const double sigmav_C12_E1 =
-            6.66e7 * Pow2(i9) * exp(-32.123 * tm13 - t92/Pow2(4.6)) *
+            6.66e7 * Pow2(i9) * exp(sigmav_C12_tmp - t92/Pow2(4.6)) *
             (1.0 + 2.54*t9 + 1.04*t92 - 0.226*t93)
             +
             1.39e3 * t15 * exp(-28.930*i9);
 
         const double sigmav_C12_E2 =
-            6.56e7 * Pow2(i9) * exp(-32.123 * tm13 - t92/Pow2(1.3)) *
+            6.56e7 * Pow2(i9) * exp(sigmav_C12_tmp - t92/Pow2(1.3)) *
             (1.0 + 9.23*t9 - 13.7*t92 + 7.4*t93);
 
         const double sigmav_C12_res =