diff --git a/src/protocols/MyAuxinModel/myauxinmodel.cpp b/src/protocols/MyAuxinModel/myauxinmodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/protocols/MyAuxinModel/myauxinmodel.cpp
@@ -0,0 +1,127 @@
+/*
+ *
+ * This file is part of the Virtual Leaf.
+ *
+ * The Virtual Leaf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Virtual Leaf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with the Virtual Leaf. If not, see .
+ *
+ * Copyright 2010 Roeland Merks.
+ *
+ */
+
+#include
+#include
+#include
+#include "simplugin.h"
+#include "parameter.h"
+#include "wallbase.h"
+#include "cellbase.h"
+#include "myauxinmodel.h"
+#include "flux_function.h"
+#include "math.h"
+#include "random.h"
+
+QString MyAuxinModel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Auxin upstream pumping" );
+}
+
+// return the number of chemicals your model uses
+int MyAuxinModel::NChem(void) { return 2; }
+
+// To be executed after cell division
+void MyAuxinModel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void MyAuxinModel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+
+ double colour;
+
+ colour = c->Chemical(1) / (1.0 + c->Chemical(1));
+ double red = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
+
+ colour = c->Chemical(0) / (1.0 + c->Chemical(0));
+ double green = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
+
+ colour = c->Chemical(3) / (1.0 + c->Chemical(3));
+ double blue = (colour < 0.0) ? 0.0 : (colour > 1.0) ? 1.0 : colour;
+
+ if ((red < 0 || red > 1) || (green < 0 || green > 1) || (blue < 0 || blue > 1))
+ qDebug() << "COLORS OUT OF RANGE: red: " << red << ", green: " << green << ", blue: " << blue << endl;
+
+ color->setRgbF(red, green, blue);
+}
+
+void MyAuxinModel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+}
+
+void MyAuxinModel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ for (int c=0; cLength() * ( par->D[c] ) *
+ ( w->C2()->Chemical(c) - w->C1()->Chemical(c) );
+ dchem_c1[c] += phi;
+ dchem_c2[c] -= phi;
+
+ }
+
+ // active transport
+
+ // efflux from cell 1 to cell 2
+ double trans12 = ( par->transport * w->Transporters1(1) *
+ w->C1()->Chemical(0) / (par->ka + w->C1()->Chemical(0)) );
+
+ // efflux from cell 2 to cell 1
+ double trans21 = ( par->transport * w->Transporters2(1) *
+ w->C2()->Chemical(0) / (par->ka + w->C2()->Chemical(0)) );
+
+ dchem_c1[0] += trans21 - trans12;
+ dchem_c2[0] += trans12 - trans21;
+
+}
+
+
+void MyAuxinModel::WallDynamics(Wall *w, double *dw1, double *dw2){
+ // add biochemical networks for reactions occurring at walls here
+}
+
+
+void MyAuxinModel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+}
+
+
+double MyAuxinModel::PINflux(CellBase *this_cell, CellBase *adjacent_cell, Wall *w) {
+ // calculate PIN translocation rate from cell to membrane
+ double adj_auxin = adjacent_cell->Chemical(0);
+ double receptor_level = adj_auxin * par->r / (par->kr + adj_auxin);
+ double pin_atwall; // pick the correct side of the Wall
+ if (w->C1() == this_cell){
+ pin_atwall = w->Transporters1(1);
+ }
+ else{
+ pin_atwall=w->Transporters2(1);
+ }
+ double pin_flux = par->k1 * this_cell->Chemical(1) *
+ receptor_level / ( par->km + this_cell->Chemical(1) ) - par->k2 * w->Transporters1(1);
+ return pin_flux;
+}
+
+Q_EXPORT_PLUGIN2(myauxinmodel, MyAuxinModel)
+
+// finis