diff --git a/moose-core/biophysics/DifBuffer.cpp b/moose-core/biophysics/DifBuffer.cpp
index 78d42b52117caa1befa848abf6dd14ded748d275..3382311de8203b767dfbd42e606315cc46532350 100644
--- a/moose-core/biophysics/DifBuffer.cpp
+++ b/moose-core/biophysics/DifBuffer.cpp
@@ -47,19 +47,32 @@
 
 #include "header.h"
 #include "DifBuffer.h"
+#include "ElementValueFinfo.h"
 #include "../utility/numutil.h"
 #include <cmath>
 
-static SrcFinfo4< double, double, double, double >* reactionOut()
+SrcFinfo4< double, double, double, double >* DifBuffer::reactionOut()
 {
   static SrcFinfo4< double, double, double, double > reactionOut(
-      "reactionOut",
-      "Sends out reaction rates (forward and backward), and concentrations"
-       " (free-buffer and bound-buffer molecules).");
+								 "reactionOut",
+								 "Sends out reaction rates (forward and backward), and concentrations"
+								 " (free-buffer and bound-buffer molecules).");
   return &reactionOut;
 }
                                                                  
 
+SrcFinfo2< double, double >* DifBuffer::innerDifSourceOut(){
+  static SrcFinfo2< double, double > sourceOut("innerDifSourceOut",
+					       "Sends out source information.");
+  return &sourceOut;
+}
+
+SrcFinfo2< double, double >* DifBuffer::outerDifSourceOut(){
+  static SrcFinfo2< double, double > sourceOut("outerDifSourceOut",
+					       "Sends out source information.");
+  return &sourceOut;
+}
+
 const Cinfo * DifBuffer::initCinfo()
 {
   static DestFinfo process( "process",
@@ -69,43 +82,41 @@ const Cinfo * DifBuffer::initCinfo()
                            "Reinit happens only in stage 0",
                            new ProcOpFunc< DifBuffer >( &DifBuffer::reinit));
     
-  static Finfo* processShared_0[] = {
+  static Finfo* processShared[] = {
     &process,
     &reinit
   };
 
-  static SharedFinfo process_0(
-      "process_0", 
-      "Here we create 2 shared finfos to attach with the Ticks. This is because we want to perform DifBuffer "
-      "computations in 2 stages, much as in the Compartment object. "
-      "In the first stage we send out the concentration value to other DifBuffers and Buffer elements. We also "
-      "receive fluxes and currents and sum them up to compute ( dC / dt ). "
-      "In the second stage we find the new C value using an explicit integration method. "
-      "This 2-stage procedure eliminates the need to store and send prev_C values, as was common in GENESIS.",
-      processShared_0,
-      sizeof( processShared_0 ) / sizeof( Finfo* ));
+  static SharedFinfo proc(
+			       "proc", 
+			       "Here we create 2 shared finfos to attach with the Ticks. This is because we want to perform DifBuffer "
+			       "computations in 2 stages, much as in the Compartment object. "
+			       "In the first stage we send out the concentration value to other DifBuffers and Buffer elements. We also",
+			       processShared,
+			       sizeof( processShared ) / sizeof( Finfo* ));
 	
-  static DestFinfo process1( "process",
+  /*static DestFinfo process1( "process",
                              "Handle process call",
                              new ProcOpFunc< DifBuffer >( &DifBuffer::process_1 ) );
   static DestFinfo reinit1( "reinit", 
                             "Reinit happens only in stage 0",
-                            new ProcOpFunc< DifBuffer >( &DifBuffer::reinit_1)
-                            );
+                            new ProcOpFunc< DifBuffer >( &DifBuffer::reinit_1 ) );
+  
   static Finfo* processShared_1[] = {
     &process1, &reinit1        
   };
-    
+  
   static SharedFinfo process_1( "process_1",
                                 "Second process call",
                                 processShared_1,
                                 sizeof( processShared_1 ) / sizeof( Finfo* ) );
-
+  */
   //// Diffusion related shared messages
+  
+  
   static DestFinfo concentration("concentration",
                                  "Receives concentration (from DifShell).",
-                                 new OpFunc1<DifBuffer, double>(&DifBuffer::concentration));
-  
+                                 new EpFunc1<DifBuffer, double>(&DifBuffer::buffer));
   static Finfo* bufferShared[] = {
     &concentration, reactionOut()
   };
@@ -126,7 +137,7 @@ const Cinfo * DifBuffer::initCinfo()
 
   static DestFinfo fluxFromOut( "fluxFromOut",
                                 "Destination message",
-                                new OpFunc2< DifBuffer, double, double > ( &DifBuffer::fluxFromOut ));
+                                new EpFunc2< DifBuffer, double, double > ( &DifBuffer::fluxFromOut ));
     
   static Finfo* innerDifShared[] = {
     innerDifSourceOut(),
@@ -141,7 +152,8 @@ const Cinfo * DifBuffer::initCinfo()
                                sizeof( innerDifShared ) / sizeof( Finfo* ));
 
   static DestFinfo fluxFromIn( "fluxFromIn", "",
-                               new OpFunc2< DifBuffer, double, double> ( &DifBuffer::fluxFromIn ) );
+                               new EpFunc2< DifBuffer, double, double> ( &DifBuffer::fluxFromIn) );
+  
   static Finfo* outerDifShared[] = {
     &fluxFromIn,
     outerDifSourceOut(),
@@ -155,78 +167,104 @@ const Cinfo * DifBuffer::initCinfo()
   ////////////////////////////
   // Field defs
   ////////////////////////////
-  static ValueFinfo<DifBuffer, double> activation("activation",
+  static ElementValueFinfo<DifBuffer, double> activation("activation",
                                                   "Ion concentration from incoming conc message.",
                                                   &DifBuffer::setActivation,
                                                   &DifBuffer::getActivation);
-  static ValueFinfo<DifBuffer, double> D("D",
+  static ElementValueFinfo<DifBuffer, double> kf("kf",
+					  "Forward rate constant of buffer molecules 1/mM/s (?)",
+					  &DifBuffer::setKf,
+					  &DifBuffer::getKf);
+  static ElementValueFinfo<DifBuffer, double> kb("kb",
+					  "Backward rate constant of buffer molecules. 1/s",
+					  &DifBuffer::setKb,
+					  &DifBuffer::getKb);
+  static ElementValueFinfo<DifBuffer, double> D("D",
                                          "Diffusion constant of buffer molecules. m^2/s",
                                          &DifBuffer::setD,
                                          &DifBuffer::getD);
-  static ReadOnlyValueFinfo<DifBuffer, double> bFree("bFree",
+  static ReadOnlyElementValueFinfo<DifBuffer, double> bFree("bFree",
                                                      "Free buffer concentration",
                                                      &DifBuffer::getBFree);
-  static ReadOnlyValueFinfo<DifBuffer, double> bBound("bBound",
+  static ReadOnlyElementValueFinfo<DifBuffer, double> bBound("bBound",
                                                       "Bound buffer concentration",
                                                       &DifBuffer::getBBound);
-  static ReadOnlyValueFinfo<DifBuffer, double> prevFree("prevFree",
-                                                      "Free buffer concentration in previous step",
-                                                      &DifBuffer::getPrevFree);
-  static ReadOnlyValueFinfo<DifBuffer, double> prevBound("prevBound",
-                                                      "Bound buffer concentration in previous step",
-                                                      &DifBuffer::getPrevBound);
-  static ValueFinfo<DifBuffer, double> bTot("bTot",
+  /*  static ReadOnlyElementValueFinfo<DifBuffer, double> prevFree("prevFree",
+							"Free buffer concentration in previous step",
+							&DifBuffer::getPrevFree);
+  static ReadOnlyElementValueFinfo<DifBuffer, double> prevBound("prevBound",
+							 "Bound buffer concentration in previous step",
+							 &DifBuffer::getPrevBound);*/
+  static ElementValueFinfo<DifBuffer, double> bTot("bTot",
                                             "Total buffer concentration.",
                                             &DifBuffer::setBTot,
                                             &DifBuffer::getBTot);  
-  static ValueFinfo<DifBuffer, double> length("length",
+  static ElementValueFinfo<DifBuffer, double> length("length",
                                               "Length of shell",
                                               &DifBuffer::setLength,
                                               &DifBuffer::getLength);
-  static ValueFinfo<DifBuffer, double> diameter("diameter",
+  static ElementValueFinfo<DifBuffer, double> diameter("diameter",
                                                 "Diameter of shell",
                                                 &DifBuffer::setDiameter,
                                                 &DifBuffer::getDiameter);
-  static ValueFinfo<DifBuffer, int> shapeMode("shapeMode",
+  static ElementValueFinfo<DifBuffer, int> shapeMode("shapeMode",
                                               "shape of the shell: SHELL=0, SLICE=SLAB=1, USERDEF=3",
                                               &DifBuffer::setShapeMode,
                                               &DifBuffer::getShapeMode);
   
-  static ValueFinfo<DifBuffer, double> thick("thickness",
-                                             "Thickness of shell",
-                                             &DifBuffer::setThickness,
-                                             &DifBuffer::getThickness);
+  static ElementValueFinfo<DifBuffer, double> thickness("thickness",
+						 "Thickness of shell",
+						 &DifBuffer::setThickness,
+						 &DifBuffer::getThickness);
  
-  static ValueFinfo<DifBuffer, double> innerArea("innerArea",
+  static ElementValueFinfo<DifBuffer, double> innerArea("innerArea",
                                                  "Inner area of shell",
                                                  &DifBuffer::setInnerArea,
                                                  &DifBuffer::getInnerArea);
-  static ValueFinfo<DifBuffer, double> outerArea("outerArea",
+  static ElementValueFinfo<DifBuffer, double> outerArea("outerArea",
                                                  "Outer area of shell",
                                                  &DifBuffer::setOuterArea,
                                                  &DifBuffer::getOuterArea);
+  static ElementValueFinfo< DifBuffer, double> volume( "volume", "",
+						&DifBuffer::setVolume,
+						&DifBuffer::getVolume );
   
   ////
   // DestFinfo
   ////
   static Finfo * difBufferFinfos[] = {
+    //////////////////////////////////////////////////////////////////
+    // Field definitions
+    //////////////////////////////////////////////////////////////////
+    
     &activation,
     &D,
     &bFree,
     &bBound,
     &bTot,
-    // &prevFree,
-    // &prevBound,
+    &kf,
+    &kb,
+    //&prevFree,
+    //&prevBound,
     &length,
     &diameter,
     &shapeMode,
     &thickness,
     &innerArea,
     &outerArea,
-    &process,
-    &reinit,
+    &volume,
+    //////////////////////////////////////////////////////////////////
+    // SharedFinfo definitions
+    /////////////////////////////////////////////////////////////////
+    &proc,
+    reactionOut(),
+    innerDifSourceOut(),
+    outerDifSourceOut(),
     &innerDif,
     &outerDif,
+    //////////////////////////////////////////////////////////////////
+    // DestFinfo definitions
+    //////////////////////////////////////////////////////////////////
     &concentration,    
   };
 
@@ -238,13 +276,13 @@ const Cinfo * DifBuffer::initCinfo()
   };
   static Dinfo<DifBuffer> dinfo;
   static Cinfo difBufferCinfo(
-      "DifBuffer",
-      Neutral::initCinfo(),
-      difBufferFinfos,
-      sizeof(difBufferFinfos)/sizeof(Finfo*),
-      &dinfo,
-      doc,
-      sizeof(doc)/sizeof(string));
+			      "DifBuffer",
+			      Neutral::initCinfo(),
+			      difBufferFinfos,
+			      sizeof(difBufferFinfos)/sizeof(Finfo*),
+			      &dinfo,
+			      doc,
+			      sizeof(doc)/sizeof(string));
 
   return &difBufferCinfo;
 }
@@ -256,18 +294,36 @@ static const Cinfo * difBufferCinfo = DifBuffer::initCinfo();
 // Class functions
 ////////////////////////////////////////////////////////////////////////////////
 
-DifBuffer::DifBuffer()//konstruktor?
-{ ; }
+DifBuffer::DifBuffer() :
+  activation_(0),
+  Af_(0),
+  Bf_(0),
+  bFree_(0),
+  bBound_(0),
+  //  prevFree_(0),
+  //prevBound_(0),
+  bTot_(0),
+  kf_(0),
+  kb_(0),
+  D_(0),
+  shapeMode_(0),
+  diameter_(0),
+  length_(0),
+  thickness_(0),
+  outerArea_(0),
+  innerArea_(0),
+  volume_(0)
+{}
 
 ////////////////////////////////////////////////////////////////////////////////
 // Field access functions
 ////////////////////////////////////////////////////////////////////////////////
-double DifBuffer::getActivation() const
+double DifBuffer::getActivation(const Eref& e) const
 {
   return activation_;
 }
 
-void DifBuffer::setActivation(double value)
+void DifBuffer::setActivation(const Eref& e,double value)
 {
   if ( value  < 0.0 ) {
     cerr << "Error: DifBuffer: Activation cannot be negative!\n";
@@ -276,32 +332,33 @@ void DifBuffer::setActivation(double value)
   activation_ = value;
 }
 
-double DifBuffer::getBFree() const
+
+double DifBuffer::getBFree(const Eref& e) const
 {
   return bFree_;
 }
 
-double DifBuffer::getBBound() const
+double DifBuffer::getBBound(const Eref& e) const
 {
   return bBound_;
 }
 
-double DifBuffer::getPrevFree() const
+/*double DifBuffer::getPrevFree(const Eref& e) const
 {
   return prevFree_;
 }
 
-double DifBuffer::getPrevBound() const
+double DifBuffer::getPrevBound(const Eref& e) const
 {
   return prevBound_;
 }
-
-double DifBuffer::getBTot() const
+*/
+double DifBuffer::getBTot(const Eref& e) const
 {
   return bTot_;
 }
 
-void DifBuffer::setBTot(double value)
+void DifBuffer::setBTot(const Eref& e,double value)
 {
   if ( value  < 0.0 ) {
     cerr << "Error: DifBuffer: Total buffer concentration cannot be negative!\n";
@@ -311,12 +368,12 @@ void DifBuffer::setBTot(double value)
 }
 
 
-double DifBuffer::getKf() const
+double DifBuffer::getKf(const Eref& e) const
 {
   return kf_;
 }
 
-void DifBuffer::setKf(double value)
+void DifBuffer::setKf(const Eref& e,double value)
 {
   if ( value  < 0.0 ) {
     cerr << "Error: DifBuffer: Kf cannot be negative!\n";
@@ -326,12 +383,12 @@ void DifBuffer::setKf(double value)
 }
 
 
-double DifBuffer::getKb() const
+double DifBuffer::getKb(const Eref& e) const
 {
   return kb_;
 }
 
-void DifBuffer::setKb(double value)
+void DifBuffer::setKb(const Eref& e,double value)
 {
   if ( value  < 0.0 ) {
     cerr << "Error: DifBuffer: Kb cannot be negative!\n";
@@ -340,40 +397,41 @@ void DifBuffer::setKb(double value)
   kb_ = value;
 }
 
-double DifBuffer::getD() const
+double DifBuffer::getD(const Eref& e) const
 {
   return D_;
 }
 
-void DifBuffer::setD(double value)
+void DifBuffer::setD(const Eref& e,double value)
 {
+  
   if ( value  < 0.0 ) {
-    cerr << "Error: DifBuffer: Diffusion constant, D, cannot be negative!\n";
+    cerr << " Error: DifBuffer: Diffusion constant, D, cannot be negative!\n";
     return;
   }
   D_ = value;
 }
 
-double DifBuffer::getShapeMode() const
+int DifBuffer::getShapeMode(const Eref& e) const
 {
   return shapeMode_;
 }
 
-void DifBuffer::setShapeMode(int value)
+void DifBuffer::setShapeMode(const Eref& e,int value)
 {
-  if ( value  != 1 && value !=2 && value != 3 ) {
-    cerr << "Error: DifBuffer: Diffusion constant, D, cannot be negative!\n";
+  if ( value  != 0 && value !=1 && value != 3 ) {
+    cerr << "Error: DifBuffer: Shape mode can only be 0, 1 or 3";
     return;
   }
   shapeMode_ = value;
 }
 
-double DifBuffer::getLength() const
+double DifBuffer::getLength(const Eref& e) const
 {
   return length_;
 }
 
-void DifBuffer::setLength(int value)
+void DifBuffer::setLength(const Eref& e,double value)
 {
   if ( value < 0.0) {
     cerr << "Error: DifBuffer: Length cannot be negative!\n";
@@ -382,12 +440,12 @@ void DifBuffer::setLength(int value)
   length_ = value;
 }
 
-double DifBuffer::getDiameter() const
+double DifBuffer::getDiameter(const Eref& e) const
 {
   return diameter_;
 }
 
-void DifBuffer::setDiameter(int value)
+void DifBuffer::setDiameter(const Eref& e,double value)
 {
   if ( value < 0.0) {
     cerr << "Error: DifBuffer: Diameter cannot be negative!\n";
@@ -396,12 +454,12 @@ void DifBuffer::setDiameter(int value)
   diameter_ = value;
 }
 
-double DifBuffer::getThickness() const
+double DifBuffer::getThickness(const Eref& e) const
 {
   return thickness_;
 }
 
-void DifBuffer::setThickness(int value)
+void DifBuffer::setThickness(const Eref& e,double value)
 {
   if ( value < 0.0) {
     cerr << "Error: DifBuffer: Thickness cannot be negative!\n";
@@ -410,85 +468,181 @@ void DifBuffer::setThickness(int value)
   thickness_ = value;
 }
 
-void DifBuffer::setVolume( double volume )
+void DifBuffer::setVolume(const Eref& e, double volume )
 {
-	if ( shapeMode_ != 3 )
-		cerr << "Warning: DifBuffer: Trying to set volume, when shapeMode is not USER-DEFINED\n";
+  if ( shapeMode_ != 3 )
+    cerr << "Warning: DifBuffer: Trying to set volume, when shapeMode is not USER-DEFINED\n";
 	
-	if ( volume < 0.0 ) {
-		cerr << "Error: DifBuffer: volume cannot be negative!\n";
-		return;
-	}
+  if ( volume < 0.0 ) {
+    cerr << "Error: DifBuffer: volume cannot be negative!\n";
+    return;
+  }
 	
-	volume_ = volume;
+  volume_ = volume;
 }
 
-double DifBuffer::getVolume( ) const
+double DifBuffer::getVolume(const Eref& e ) const
 {
-	return volume_;
+  return volume_;
 }
 
-void DifBuffer::setOuterArea( double outerArea )
+void DifBuffer::setOuterArea(const Eref& e, double outerArea )
 {
-    if (shapeMode_ != 3 )
-        cerr << "Warning: DifBuffer: Trying to set outerArea, when shapeMode is not USER-DEFINED\n";
+  if (shapeMode_ != 3 )
+    cerr << "Warning: DifBuffer: Trying to set outerArea, when shapeMode is not USER-DEFINED\n";
 	
-    if ( outerArea < 0.0 ) {
-        cerr << "Error: DifBuffer: outerArea cannot be negative!\n";
-        return;
-    }
+  if ( outerArea < 0.0 ) {
+    cerr << "Error: DifBuffer: outerArea cannot be negative!\n";
+    return;
+  }
 	
-    outerArea_ = outerArea;
+  outerArea_ = outerArea;
 }
 
-double DifBuffer::getOuterArea( ) const
+double DifBuffer::getOuterArea(const Eref& e ) const
 {
-    return outerArea_;
+  return outerArea_;
 }
 
-void DifBuffer::setInnerArea( double innerArea )
+void DifBuffer::setInnerArea(const Eref& e, double innerArea )
 {
-    if ( shapeMode_ != 3 )
-        cerr << "Warning: DifBuffer: Trying to set innerArea, when shapeMode is not USER-DEFINED\n";
+  if ( shapeMode_ != 3 )
+    cerr << "Warning: DifBuffer: Trying to set innerArea, when shapeMode is not USER-DEFINED\n";
     
-    if ( innerArea < 0.0 ) {
-        cerr << "Error: DifBuffer: innerArea cannot be negative!\n";
-        return;
-    }
+  if ( innerArea < 0.0 ) {
+    cerr << "Error: DifBuffer: innerArea cannot be negative!\n";
+    return;
+  }
     
-    innerArea_ = innerArea;
+  innerArea_ = innerArea;
 }
 
-double DifBuffer::getInnerArea() const
+double DifBuffer::getInnerArea(const Eref& e) const
 {
-    return innerArea_;
+  return innerArea_;
 }
 // Dest function for conenctration received from DifShell.  This
 // function updates buffer concentration and sends back immediately
 // using call back.
 // TODO: complete this ... where do we get dt from? ProcPtr p->dt
-void DifBuffer::concentration(double conc)
+//Check DifShell
+
+//In Genesis the following are messages:
+
+
+void DifBuffer::reinit( const Eref& e, ProcPtr p )
 {
-  activation_ = conc;
+  localReinit_0( e, p );
+}
+
+void DifBuffer::process( const Eref& e, ProcPtr p )
+{
+  localProcess_0( e, p );
+}
+
+/*void DifBuffer::process_1(const Eref& e, ProcPtr p )
+{
+  localProcess_1( e, p );
+}
+
+void DifBuffer::reinit_1(const Eref& e, ProcPtr p )
+{
+  ;
+}
+*/
+void DifBuffer::buffer(const Eref& e,
+		       double C )
+{
+  activation_ = C;
+}
+
+
+void DifBuffer::localProcess_0( const Eref & e, ProcPtr p )
+{
+  /**
+   * Send ion concentration and thickness to adjacent DifShells. They will
+   * then compute their incoming fluxes.
+   */
+
+  innerDifSourceOut()->send( e, bFree_, thickness_ );
+  outerDifSourceOut()->send( e, bFree_, thickness_ );
   Af_ += kb_ * bBound_;
   Bf_ += kf_ * activation_;
-  bFree_ += (Af_ - bFree_ * Bf_) * dt_;  
+  bFree_ += (Af_ - bFree_ * Bf_) * p->dt;
+  reactionOut()->send(e,kf_,kb_,bFree_,bBound_);
+  /**
+   * Send ion concentration to ion buffers. They will send back information on
+   * the reaction (forward / backward rates ; free / bound buffer concentration)
+   * immediately, which this DifShell will use to find amount of ion captured
+   * or released in the current time-step.
+   */
+
 }
 
-void DifBuffer::fluxFromIn(double innerC, double innerThickness)
+void DifBuffer::localReinit_0( const Eref& e, ProcPtr p )
+{
+	
+  const double dOut = diameter_;
+  const double dIn = diameter_ - thickness_;
+	
+  switch ( shapeMode_ )
+    {
+      /*
+       * Onion Shell
+       */
+    case 0:
+      if ( length_ == 0.0 ) { // Spherical shell
+	volume_ = ( M_PI / 6.0 ) * ( dOut * dOut * dOut - dIn * dIn * dIn );
+	outerArea_ = M_PI * dOut * dOut;
+	innerArea_ = M_PI * dIn * dIn;
+      } else { // Cylindrical shell
+	volume_ = ( M_PI * length_ / 4.0 ) * ( dOut * dOut - dIn * dIn );
+	outerArea_ = M_PI * dOut * length_;
+	innerArea_ = M_PI * dIn * length_;
+      }
+	
+      break;
+	
+      /*
+       * Cylindrical Slice
+       */
+    case 1:
+      volume_ = M_PI * diameter_ * diameter_ * thickness_ / 4.0;
+      outerArea_ = M_PI * diameter_ * diameter_ / 4.0;
+      innerArea_ = outerArea_;
+      break;
+	
+      /*
+       * User defined
+       */
+    case 3:
+      // Nothing to be done here. Volume and inner-, outer areas specified by
+      // user.
+      break;
+	
+    default:
+      assert( 0 );
+    }
+}
+/*
+void DifBuffer::localProcess_1(const Eref& e, ProcPtr p )
+{
+  //activation_ = conc;
+  Af_ += kb_ * bBound_;
+  Bf_ += kf_ * activation_;
+  bFree_ += (Af_ - bFree_ * Bf_) * p->dt;  
+}
+*/
+void DifBuffer::fluxFromIn(const Eref& e,double innerC, double innerThickness)
 {
   double dif = 2 * D_ * innerArea_ / ((thickness_ + innerThickness) * volume_);
   Af_ += dif * innerC;
   Bf_ += dif;
 }
 
-void DifBuffer::fluxFromOut(double outerC, double outerThickness)
+void DifBuffer::fluxFromOut(const Eref& e,double outerC, double outerThickness)
 {
   double dif = 2 * D_ * outerArea_ / ((thickness_ + outerThickness)  * volume_);
   Af_ += dif * outerC;
   Bf_ += dif;
 }
-
-
-// 
-// DifBuffer.cpp ends here
diff --git a/moose-core/biophysics/DifBuffer.h b/moose-core/biophysics/DifBuffer.h
index adf6efe070f62ddb3cde73596a7c7fa0e6fa3426..500b43269b1ddcfa166de64070186484d805420d 100644
--- a/moose-core/biophysics/DifBuffer.h
+++ b/moose-core/biophysics/DifBuffer.h
@@ -54,58 +54,75 @@ class DifBuffer
   
   //Field access functions
 
-  double getActivation() const;
-  void setActivation(double value);
+  double getActivation(const Eref& e) const;
+  void setActivation(const Eref& e,double value);
 
-  double getBFree() const;
-  double getBBound() const;
+  double getBFree(const Eref& e) const;
+  double getBBound(const Eref& e) const;
 
-  double getPrevFree() const;   // Bfree at previous time step
-  double getPrevBound() const;  // Bbound at previous time step
+  //double getPrevFree(const Eref& e) const;   // Bfree at previous time step
+  //double getPrevBound(const Eref& e) const;  // Bbound at previous time step
 
-  double getBTot() const;           //  total buffer concentration in mM (free + bound)
-  void setBTot(double value);
+  double getBTot(const Eref& e) const;           //  total buffer concentration in mM (free + bound)
+  void setBTot(const Eref& e,double value);
 
-  double getKf() const;         // forward rate constant in 1/(mM*sec)
-  void setKf(double value);
+  double getKf(const Eref& e) const;         // forward rate constant in 1/(mM*sec)
+  void setKf(const Eref& e,double value);
 
-  double getKb() const;         // backward rate constant in 1/sec
-  void setKb(double value);
+  double getKb(const Eref& e) const;         // backward rate constant in 1/sec
+  void setKb(const Eref& e,double value);
   
-  double getD() const;          // diffusion constant of buffer molecules, m^2/sec
-  void setD(double value);
+  double getD(const Eref& e) const;          // diffusion constant of buffer molecules, m^2/sec
+  void setD(const Eref& e,double value);
 
-  int getShapeMode() const; //    Set to one of the predefined global
-  void setShapeMode(int value); // variables SHELL=0, SLICE=SLAB=1, USERDEF=3.
+  int getShapeMode(const Eref& e) const; //    Set to one of the predefined global
+  void setShapeMode(const Eref& e,int value); // variables SHELL=0, SLICE=SLAB=1, USERDEF=3.
 
-  double getLength() const; //             shell length
-  void setLength(double value);
+  double getLength(const Eref& e) const; //             shell length
+  void setLength(const Eref& e,double value);
 
-  double getDiameter() const; //            shell diameter
-  void setDiameter(double value);
+  double getDiameter(const Eref& e) const; //            shell diameter
+  void setDiameter(const Eref& e,double value);
   
-  double getThickness() const; //           shell thickness
-  void setThickness(double value);
-
-  double getVolume() const; //             shell volume
-  void setVolume(double volume) const; //            
+  double getThickness(const Eref& e) const; //           shell thickness
+  void setThickness(const Eref& e,double value);
+  
+  void setOuterArea( const Eref& e,double outerArea );
+  double getOuterArea(const Eref& e) const; //         area of upper (outer) shell surface
+  
+  void setInnerArea( const Eref& e,double innerArea );
+  double getInnerArea(const Eref& e) const; //       area of lower (inner) shell surface
 
-  double getOuterArea() const; //         area of upper (outer) shell surface
-  double getInnerArea() const; //       area of lower (inner) shell surface
+  double getVolume(const Eref& e) const; //             shell volume
+  void setVolume(const Eref& e,double volume); //
+  
+  //void concentration();
+  void  buffer(const Eref& e,double C);
 
-  void concentration();
+  void reinit( const Eref & e, ProcPtr p );
 
-  void reinit(const Eref & e, ProcPtr p);
-  void init(const Eref & e, ProcPtr p);
+  void process(const Eref & e, ProcPtr p );
   
+  void fluxFromOut(const Eref& e,double outerC, double outerThickness );
+
+  void fluxFromIn( const Eref& e,double innerC, double innerThickness );
+  static SrcFinfo4< double, double, double, double >* reactionOut();
+  static SrcFinfo2< double, double >* innerDifSourceOut();
+  static SrcFinfo2< double, double >* outerDifSourceOut();
   static const Cinfo * initCinfo();
 
  private:
+  
+  void localReinit_0(  const Eref & e, ProcPtr p );
+  void localProcess_0( const Eref & e, ProcPtr p );
+  
   double activation_; //ion concentration from incoming CONCEN message
+  double Af_;
+  double Bf_;
   double bFree_; //free buffer concentration
   double bBound_; //bound buffer concentration
-  double prevFree_; //bFree at previous time
-  double prevBound_; //bBound at previous time
+  //double prevFree_; //bFree at previous time
+  //double prevBound_; //bBound at previous time
   double bTot_; //bFree+bBound
   double kf_; //forward rate constant
   double kb_; //backward rate constant
@@ -116,7 +133,7 @@ class DifBuffer
   double thickness_; //shell thickness
   double outerArea_; //area of upper (outer) shell surface
   double innerArea_; //area of lower (inner) shell surface
-  
+  double volume_;
 };
 
 #endif // _DifBuffer_h