diff --git a/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp b/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp
new file mode 100644
--- /dev/null
+++ b/src/protocols/MyDiffusionModel/mydiffusionmodel.cpp
@@ -0,0 +1,90 @@
+/*
+ *
+ * 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 "mydiffusionmodel.h"
+
+QString Mydiffusionmodel::ModelID(void) {
+ // specify the name of your model here
+ return QString( "Diffusion dependent coloriing" );
+}
+
+// return the number of chemicals your model uses
+int Mydiffusionmodel::NChem(void) { return 4; }
+
+// To be executed after cell division
+void Mydiffusionmodel::OnDivide(ParentInfo *parent_info, CellBase *daughter1, CellBase *daughter2) {
+ // rules to be executed after cell division go here
+ // (e.g., cell differentiation rules)
+}
+
+void Mydiffusionmodel::SetCellColor(CellBase *c, QColor *color) {
+ // add cell coloring rules here
+ double red=c->Chemical(1)/(1.+c->Chemical(1));
+ double green=c->Chemical(0)/(1.+c->Chemical(0));
+ double blue=c->Chemical(3)/(1.+c->Chemical(3));
+ color->setRgbF(red,green,blue);
+}
+
+void Mydiffusionmodel::CellHouseKeeping(CellBase *c) {
+ // add cell behavioral rules here
+
+ if (c->Chemical(0) < 0.5){
+ c->EnlargeTargetArea(par->cell_expansion_rate);
+ }
+
+ if(c->Area() > 2*c->BaseArea()){
+ c->Divide();
+ }
+}
+
+void Mydiffusionmodel::CelltoCellTransport(Wall *w, double *dchem_c1, double *dchem_c2) {
+ // add biochemical transport rules here
+}
+
+void Mydiffusionmodel::WallDynamics(Wall *w, double *dw1, double *dw2) {
+ // add biochemical networks for reactions occuring at walls here
+}
+
+void Mydiffusionmodel::CellDynamics(CellBase *c, double *dchem) {
+ // add biochemical networks for intracellular reactions here
+ double Y = c->Chemical(0),
+ A = c->Chemical(1),
+ H = c->Chemical(2),
+ S = c->Chemical(3);
+
+ dchem[0] = ( par->d * A - par->e * Y + Y*Y/(1 + par->f * Y*Y ) );
+ dchem[1] = ( par->c * A*A*S/H - par->mu * A + par->rho0*Y );
+ dchem[2] = ( par->c * A*A*S - par->nu*H + par->rho1*Y );
+ dchem[3] = ( par->c0 - par->gamma*S - par->eps * Y * S );
+}
+
+
+Q_EXPORT_PLUGIN2(mydiffusionmodel, Mydiffusionmodel)
+
+// finis