diff --git a/AMDiS/src/ProblemInstat.cc b/AMDiS/src/ProblemInstat.cc
index dbfa5e0155ac48f159f07d9b629de63c6bfe238e..0421ef77ee0e5d69b03adc2f5e1d141d1c47e2ec 100644
--- a/AMDiS/src/ProblemInstat.cc
+++ b/AMDiS/src/ProblemInstat.cc
@@ -43,23 +43,20 @@ namespace AMDiS {
 
 
   ProblemInstatScal::ProblemInstatScal(std::string name_, 
-				       ProblemScal *prob,
-				       ProblemStatBase *initialProb)
+				       ProblemScal *prob, ProblemStatBase *initialProb)
     : ProblemInstat(name_, initialProb), 
       problemStat(prob),
       oldSolution(NULL)
   {}
 
-  ProblemInstatScal::ProblemInstatScal(std::string name_, 
-				       ProblemScal& prob)
+  ProblemInstatScal::ProblemInstatScal(std::string name_, ProblemScal& prob)
     : ProblemInstat(name_, NULL), 
       problemStat(&prob),
       oldSolution(NULL)
   {}
 
   ProblemInstatScal::ProblemInstatScal(std::string name_, 
-				       ProblemScal& prob,
-				       ProblemStatBase& initialProb)
+				       ProblemScal& prob, ProblemStatBase& initialProb)
     : ProblemInstat(name_, &initialProb), 
       problemStat(&prob),
       oldSolution(NULL)
@@ -127,13 +124,25 @@ namespace AMDiS {
   }
 
   ProblemInstatVec::ProblemInstatVec(std::string name_, 
-				     ProblemVec *prob,
-				     ProblemStatBase *initialProb)
+				     ProblemVec *prob, ProblemStatBase *initialProb)
     : ProblemInstat(name_, initialProb), 
       problemStat(prob),
       oldSolution(NULL)
   {}
 
+  ProblemInstatVec::ProblemInstatVec(std::string name_, ProblemVec &prob)
+    : ProblemInstat(name_, NULL), 
+      problemStat(&prob),
+      oldSolution(NULL)
+  {}
+
+  ProblemInstatVec::ProblemInstatVec(std::string name_, 
+				     ProblemVec &prob, ProblemStatBase &initialProb)
+    : ProblemInstat(name_, &initialProb), 
+      problemStat(&prob),
+      oldSolution(NULL)
+  {}
+
   ProblemInstatVec::~ProblemInstatVec()
   {
     delete oldSolution;
diff --git a/AMDiS/src/ProblemInstat.h b/AMDiS/src/ProblemInstat.h
index 94badcf219fdee4e3058837251f4f1b582ad154e..352ee24b5a57fa2c659ce46ae801500db3603c98 100644
--- a/AMDiS/src/ProblemInstat.h
+++ b/AMDiS/src/ProblemInstat.h
@@ -183,6 +183,10 @@ namespace AMDiS {
 		     ProblemVec *prob,
 		     ProblemStatBase *initialProb = NULL);
 
+    ProblemInstatVec(std::string name, ProblemVec &prob);
+
+    ProblemInstatVec(std::string name, ProblemVec &prob, ProblemStatBase &initialProb);
+
     /// Destructor.
     virtual ~ProblemInstatVec();
 
diff --git a/AMDiS/src/ProblemScal.cc b/AMDiS/src/ProblemScal.cc
index baa6a63ee09ede90623c5b550659881b1d1d7814..01d82f7adcb6165dc0b2d804543933d0eb8ecc50 100644
--- a/AMDiS/src/ProblemScal.cc
+++ b/AMDiS/src/ProblemScal.cc
@@ -68,19 +68,25 @@ namespace AMDiS {
     solution->interpol(fct);
   }
 
-  void ProblemScal::addMatrixOperator(Operator *op, 
-				      double *factor,
-				      double *estFactor) 
+  void ProblemScal::addMatrixOperator(Operator *op, double *factor, double *estFactor) 
   {
     systemMatrix->addOperator(op, factor, estFactor);
   }
 
-  void ProblemScal::addVectorOperator(Operator *op, 
-				      double *factor,
-				      double *estFactor) 
+  void ProblemScal::addMatrixOperator(Operator &op, double *factor, double *estFactor) 
+  {
+    systemMatrix->addOperator(&op, factor, estFactor);
+  }
+
+  void ProblemScal::addVectorOperator(Operator *op, double *factor, double *estFactor) 
   {
     rhs->addOperator(op, factor, estFactor);
   }
+
+  void ProblemScal::addVectorOperator(Operator &op, double *factor, double *estFactor) 
+  {
+    rhs->addOperator(&op, factor, estFactor);
+  }
   
   void ProblemScal::addDirichletBC(BoundaryType type, 
 				   AbstractFunction<double, WorldVector<double> >* b) 
@@ -94,8 +100,7 @@ namespace AMDiS {
       solution->getBoundaryManager()->addBoundaryCondition(dirichlet);
   }
 
-  void ProblemScal::addDirichletBC(BoundaryType type, 
-				   DOFVector<double> *vec) 
+  void ProblemScal::addDirichletBC(BoundaryType type, DOFVector<double> *vec) 
   {
     DirichletBC *dirichlet = new DirichletBC(type, vec);
     if (systemMatrix) 
@@ -126,8 +131,7 @@ namespace AMDiS {
   }
 
   void ProblemScal::addRobinBC(BoundaryType type, 
-			       DOFVector<double> *n,
-			       DOFVector<double> *r)
+			       DOFVector<double> *n, DOFVector<double> *r)
   {
     RobinBC *robin = new RobinBC(type, n, r, feSpace);
     if (rhs) 
diff --git a/AMDiS/src/ProblemScal.h b/AMDiS/src/ProblemScal.h
index 4b5c9154443a64f76da0b3eb2aabd22c56cd25d8..55fb1ce00dc712449eec00f7a3fd404bc9f8af8d 100644
--- a/AMDiS/src/ProblemScal.h
+++ b/AMDiS/src/ProblemScal.h
@@ -170,10 +170,18 @@ namespace AMDiS {
     void addMatrixOperator(Operator *op, 
 			   double *factor = NULL, double *estFactor = NULL);
 
+    /// Adds an Operator to \ref systemMatrix.
+    void addMatrixOperator(Operator &op, 
+			   double *factor = NULL, double *estFactor = NULL);
+
     /// Adds an Operator to \ref rhs.
     void addVectorOperator(Operator *op, 
 			   double *factor = NULL, double *estFactor = NULL);
 
+    /// Adds an Operator to \ref rhs.
+    void addVectorOperator(Operator &op, 
+			   double *factor = NULL, double *estFactor = NULL);
+
     /// Adds dirichlet boundary conditions.
     virtual void addDirichletBC(BoundaryType type, 
 				AbstractFunction<double, WorldVector<double> >* b);
diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc
index 65233cd72f96e5f28e513a9297315da854d9aa55..8846c7cc75c6e0a2216f9d90fc37aabe85544b21 100644
--- a/AMDiS/src/ProblemVec.cc
+++ b/AMDiS/src/ProblemVec.cc
@@ -1043,10 +1043,8 @@ namespace AMDiS {
     solution->interpol(fct);
   }
 
-  void ProblemVec::addMatrixOperator(Operator *op, 
-				     int i, int j,
-				     double *factor,
-				     double *estFactor)
+  void ProblemVec::addMatrixOperator(Operator *op, int i, int j,
+				     double *factor, double *estFactor)
   {
     FUNCNAME("ProblemVec::addMatrixOperator()");
    
@@ -1079,9 +1077,14 @@ namespace AMDiS {
     opFlags[op].setFlag(Operator::MATRIX_OPERATOR);
   }
 
-  void ProblemVec::addVectorOperator(Operator *op, int i,
-				     double *factor,
-				     double *estFactor)	
+  void ProblemVec::addMatrixOperator(Operator &op, int i, int j,
+				     double *factor, double *estFactor)
+  {
+    addMatrixOperator(&op, i, j, factor, estFactor);
+  }
+
+  void ProblemVec::addVectorOperator(Operator *op, int i, 
+				     double *factor, double *estFactor)	
   {
     FUNCNAME("ProblemVec::addVectorOperator()");
 
@@ -1101,6 +1104,12 @@ namespace AMDiS {
     opFlags[op].setFlag(Operator::VECTOR_OPERATOR);
   }
 
+  void ProblemVec::addVectorOperator(Operator &op, int i, 
+				     double *factor, double *estFactor)	
+  {
+    addVectorOperator(&op, i, factor, estFactor);
+  }
+
   void ProblemVec::addDirichletBC(BoundaryType type, int row, int col,
 				  AbstractFunction<double, WorldVector<double> >* b)
   {
diff --git a/AMDiS/src/ProblemVec.h b/AMDiS/src/ProblemVec.h
index c6740d386cb5738a44dad075487ca0ee43c24166..9dab27d02eaea17e62a24aaf2dff9645045e20e3 100644
--- a/AMDiS/src/ProblemVec.h
+++ b/AMDiS/src/ProblemVec.h
@@ -222,13 +222,19 @@ namespace AMDiS {
 
     /// Adds an Operator to \ref A.
     void addMatrixOperator(Operator *op, int i, int j,
-			   double *factor = NULL,
-			   double *estFactor = NULL);
+			   double *factor = NULL, double *estFactor = NULL);
+
+    /// Adds an Operator to \ref A.
+    void addMatrixOperator(Operator &op, int i, int j,
+			   double *factor = NULL, double *estFactor = NULL);
 
     /// Adds an Operator to \ref rhs.
     void addVectorOperator(Operator *op, int i,
-			   double *factor = NULL,
-			   double *estFactor = NULL);
+			   double *factor = NULL, double *estFactor = NULL);
+
+    /// Adds an Operator to \ref rhs.
+    void addVectorOperator(Operator &op, int i,
+			   double *factor = NULL, double *estFactor = NULL);
 
     /// Adds dirichlet boundary conditions.
     virtual void addDirichletBC(BoundaryType type, int row, int col,