diff --git a/AMDiS/Makefile.in b/AMDiS/Makefile.in
index a5db81865b094b4e2bc6529d354f8e85a8eb84ae..3768bc98a23f2c253803f7a135f0bd6d870ed190 100644
--- a/AMDiS/Makefile.in
+++ b/AMDiS/Makefile.in
@@ -102,6 +102,8 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_MKL_FALSE = @ENABLE_MKL_FALSE@
+ENABLE_MKL_TRUE = @ENABLE_MKL_TRUE@
 ENABLE_UMFPACK_FALSE = @ENABLE_UMFPACK_FALSE@
 ENABLE_UMFPACK_TRUE = @ENABLE_UMFPACK_TRUE@
 EXEEXT = @EXEEXT@
diff --git a/AMDiS/bin/Makefile.am b/AMDiS/bin/Makefile.am
index 800f126018510ad909568c16e734bee575d1e3ac..5fed9ecd6724c3d1f0a9d15c1499588d882d113e 100644
--- a/AMDiS/bin/Makefile.am
+++ b/AMDiS/bin/Makefile.am
@@ -33,6 +33,10 @@ if ENABLE_UMFPACK
                     -I$(LIB_DIR)/UMFPACK/Include  
 endif
 
+if ENABLE_MKL
+  libamdis_la_CXXFLAGS += -DHAVE_MKL=1
+endif
+
 INCLUDES = $(AMDIS_INCLUDES) $(PARALLEL_INCLUDES)
 
 if AMDIS_DEBUG
@@ -128,11 +132,12 @@ $(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh \
 $(SOURCE_DIR)/FixVecConvert.h \
 $(SOURCE_DIR)/Flag.h \
 $(SOURCE_DIR)/Global.h \
-$(SOURCE_DIR)/GMResSolver.h \ $(SOURCE_DIR)/GMResSolver.hh \
-$(SOURCE_DIR)/GMResSolver2.h \ $(SOURCE_DIR)/GMResSolver2.hh \
+$(SOURCE_DIR)/GMResSolver.h $(SOURCE_DIR)/GMResSolver.hh \
+$(SOURCE_DIR)/GMResSolver2.h $(SOURCE_DIR)/GMResSolver2.hh \
 $(SOURCE_DIR)/TFQMR.h \ $(SOURCE_DIR)/TFQMR.hh \
-$(SOURCE_DIR)/VecSymSolver.h \ $(SOURCE_DIR)/VecSymSolver.hh \
-$(SOURCE_DIR)/UmfPackSolver.h \ $(SOURCE_DIR)/UmfPackSolver.hh \
+$(SOURCE_DIR)/VecSymSolver.h $(SOURCE_DIR)/VecSymSolver.hh \
+$(SOURCE_DIR)/UmfPackSolver.h $(SOURCE_DIR)/UmfPackSolver.hh \
+$(SOURCE_DIR)/PardisoSolver.h $(SOURCE_DIR)/PardisoSolver.hh $(SOURCE_DIR)/PardisoSolver.cc \
 $(SOURCE_DIR)/Lagrange.h $(SOURCE_DIR)/Line.h \
 $(SOURCE_DIR)/MacroElement.h $(SOURCE_DIR)/MacroWriter.h \
 $(SOURCE_DIR)/Markings.h $(SOURCE_DIR)/Markings.hh \
@@ -145,17 +150,62 @@ $(SOURCE_DIR)/Parameters.h \
 $(SOURCE_DIR)/Parametric.h \
 $(SOURCE_DIR)/Preconditioner.h \
 $(SOURCE_DIR)/Quadrature.h \
-$(SOURCE_DIR)/RCNeighbourList.h $(SOURCE_DIRe)/RefinementManager.h $(SOURCE_DIR)/RefinementManager1d.h $(SOURCE_DIR)/RefinementManager2d.h $(SOURCE_DIR)/RefinementManager3d.h $(SOURCE_DIR)/TecPlotWriter.h $(SOURCE_DIR)/TecPlotWriter.hh $(SOURCE_DIR)/Tetrahedron.h \
-$(SOURCE_DIR)/Traverse.h $(SOURCE_DIR)/Triangle.h $(SOURCE_DIR)/NonLinSolver.h $(SOURCE_DIR)/NonLinSolver.hh $(SOURCE_DIR)/ProblemInstat.h $(SOURCE_DIR)/ProblemInstat.cc $(SOURCE_DIR)/ProblemTimeInterface.h $(SOURCE_DIR)/ProblemNonLin.h $(SOURCE_DIR)/ProblemNonLin.cc \
+$(SOURCE_DIR)/RCNeighbourList.h \
+$(SOURCE_DIRe)/RefinementManager.h \
+$(SOURCE_DIR)/RefinementManager1d.h $(SOURCE_DIR)/RefinementManager2d.h $(SOURCE_DIR)/RefinementManager3d.h \
+$(SOURCE_DIR)/TecPlotWriter.h $(SOURCE_DIR)/TecPlotWriter.hh \
+$(SOURCE_DIR)/Tetrahedron.h \
+$(SOURCE_DIR)/Traverse.h \
+$(SOURCE_DIR)/Triangle.h \
+$(SOURCE_DIR)/NonLinSolver.h $(SOURCE_DIR)/NonLinSolver.hh \
+$(SOURCE_DIR)/ProblemInstat.h $(SOURCE_DIR)/ProblemInstat.cc \
+$(SOURCE_DIR)/ProblemTimeInterface.h \
+$(SOURCE_DIR)/ProblemNonLin.h $(SOURCE_DIR)/ProblemNonLin.cc \
 $(SOURCE_DIR)/NonLinUpdater.h $(SOURCE_DIR)/NonLinUpdater.cc \
-$(SOURCE_DIR)/Newton.h $(SOURCE_DIR)/Newton.hh  $(SOURCE_DIR)/NewtonFS.h $(SOURCE_DIR)/NewtonFS.hh $(SOURCE_DIR)/GridWriter.h $(SOURCE_DIR)/GridWriter.hh $(SOURCE_DIR)/ValueWriter.h $(SOURCE_DIR)/QPsiPhi.cc $(SOURCE_DIR)/BasisFunction.cc $(SOURCE_DIR)/Boundary.cc \
-$(SOURCE_DIR)/CoarseningManager.cc $(SOURCE_DIR)/CoarseningManager1d.cc $(SOURCE_DIR)/CoarseningManager2d.cc $(SOURCE_DIR)/CoarseningManager3d.cc $(SOURCE_DIR)/demangle.cc $(SOURCE_DIR)/DOFAdmin.cc $(SOURCE_DIR)/DOFMatrix.cc $(SOURCE_DIR)/Element.cc $(SOURCE_DIR)/ElInfo1d.cc \
-$(SOURCE_DIR)/ElInfo2d.cc $(SOURCE_DIR)/ElInfo3d.cc $(SOURCE_DIR)/FiniteElemSpace.cc $(SOURCE_DIR)/FixVec.cc $(SOURCE_DIR)/Flag.cc $(SOURCE_DIR)/Global.cc $(SOURCE_DIR)/Lagrange.cc $(SOURCE_DIR)/Line.cc $(SOURCE_DIR)/MacroElement.cc $(SOURCE_DIR)/MacroWriter.cc $(SOURCE_DIR)/Parameters.cc \
-$(SOURCE_DIR)/Parametric.cc $(SOURCE_DIR)/Quadrature.cc $(SOURCE_DIR)/RCNeighbourList.cc $(SOURCE_DIR)/RefinementManager.cc $(SOURCE_DIR)/RefinementManager1d.cc $(SOURCE_DIR)/RefinementManager2d.cc $(SOURCE_DIR)/RefinementManager3d.cc $(SOURCE_DIR)/Tetrahedron.cc $(SOURCE_DIR)/Traverse.cc \
-$(SOURCE_DIR)/Triangle.cc $(SOURCE_DIR)/TecPlotWriter.cc $(SOURCE_DIR)/ValueWriter.cc $(SOURCE_DIR)/MemoryPool.h $(SOURCE_DIR)/MemoryPool.cc $(SOURCE_DIR)/MemoryManager.cc \
+$(SOURCE_DIR)/Newton.h $(SOURCE_DIR)/Newton.hh  \
+$(SOURCE_DIR)/NewtonFS.h $(SOURCE_DIR)/NewtonFS.hh \
+$(SOURCE_DIR)/GridWriter.h $(SOURCE_DIR)/GridWriter.hh \
+$(SOURCE_DIR)/ValueWriter.h \
+$(SOURCE_DIR)/QPsiPhi.cc \
+$(SOURCE_DIR)/BasisFunction.cc \
+$(SOURCE_DIR)/Boundary.cc \
+$(SOURCE_DIR)/CoarseningManager.cc \
+$(SOURCE_DIR)/CoarseningManager1d.cc \
+$(SOURCE_DIR)/CoarseningManager2d.cc \
+$(SOURCE_DIR)/CoarseningManager3d.cc \
+$(SOURCE_DIR)/demangle.cc \
+$(SOURCE_DIR)/DOFAdmin.cc \
+$(SOURCE_DIR)/DOFMatrix.cc \
+$(SOURCE_DIR)/Element.cc \
+$(SOURCE_DIR)/ElInfo1d.cc $(SOURCE_DIR)/ElInfo2d.cc $(SOURCE_DIR)/ElInfo3d.cc \
+$(SOURCE_DIR)/FiniteElemSpace.cc \
+$(SOURCE_DIR)/FixVec.cc \
+$(SOURCE_DIR)/Flag.cc \
+$(SOURCE_DIR)/Global.cc \
+$(SOURCE_DIR)/Lagrange.cc \
+$(SOURCE_DIR)/Line.cc \
+$(SOURCE_DIR)/MacroElement.cc \
+$(SOURCE_DIR)/MacroWriter.cc \
+$(SOURCE_DIR)/Parameters.cc \
+$(SOURCE_DIR)/Parametric.cc \
+$(SOURCE_DIR)/Quadrature.cc \
+$(SOURCE_DIR)/RCNeighbourList.cc \
+$(SOURCE_DIR)/RefinementManager.cc \
+$(SOURCE_DIR)/RefinementManager1d.cc \
+$(SOURCE_DIR)/RefinementManager2d.cc \
+$(SOURCE_DIR)/RefinementManager3d.cc \
+$(SOURCE_DIR)/Tetrahedron.cc \
+$(SOURCE_DIR)/Traverse.cc \
+$(SOURCE_DIR)/Triangle.cc \
+$(SOURCE_DIR)/TecPlotWriter.cc \
+$(SOURCE_DIR)/ValueWriter.cc \
+$(SOURCE_DIR)/MemoryPool.h $(SOURCE_DIR)/MemoryPool.cc \
+$(SOURCE_DIR)/MemoryManager.cc \
 $(SOURCE_DIR)/VtkWriter.h $(SOURCE_DIR)/VtkWriter.cc \
 $(SOURCE_DIR)/DataCollector.h $(SOURCE_DIR)/DataCollector.cc \
-$(SOURCE_DIR)/ElementInfo.h $(SOURCE_DIR)/VertexInfo.h $(SOURCE_DIR)/PeriodicInfo.h \
+$(SOURCE_DIR)/ElementInfo.h \
+$(SOURCE_DIR)/VertexInfo.h \
+$(SOURCE_DIR)/PeriodicInfo.h \
 $(SOURCE_DIR)/OpenMP.h
 
 
diff --git a/AMDiS/bin/Makefile.in b/AMDiS/bin/Makefile.in
index aa26c1cae64e416aefcde4599d96702e52cfee64..0b37740b1a42fa80dda3913c6280c528d6690c30 100644
--- a/AMDiS/bin/Makefile.in
+++ b/AMDiS/bin/Makefile.in
@@ -41,8 +41,9 @@ host_triplet = @host@
 @ENABLE_UMFPACK_TRUE@	            -I$(LIB_DIR)/AMD/Include \
 @ENABLE_UMFPACK_TRUE@                    -I$(LIB_DIR)/UMFPACK/Include  
 
-@AMDIS_DEBUG_TRUE@am__append_3 = -g -O0 -Wall -DDEBUG=1 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
-@AMDIS_DEBUG_FALSE@am__append_4 = -O2 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
+@ENABLE_MKL_TRUE@am__append_3 = -DHAVE_MKL=1
+@AMDIS_DEBUG_TRUE@am__append_4 = -g -O0 -Wall -DDEBUG=1 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
+@AMDIS_DEBUG_FALSE@am__append_5 = -O2 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
 subdir = bin
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -168,21 +169,23 @@ am__libamdis_la_SOURCES_DIST = $(PARALLEL_DIR)/ConditionalEstimator.h \
 	$(SOURCE_DIR)/Estimator.cc $(SOURCE_DIR)/FiniteElemSpace.h \
 	$(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh \
 	$(SOURCE_DIR)/FixVecConvert.h $(SOURCE_DIR)/Flag.h \
-	$(SOURCE_DIR)/Global.h $(SOURCE_DIR)/GMResSolver.h \ \
+	$(SOURCE_DIR)/Global.h $(SOURCE_DIR)/GMResSolver.h \
 	$(SOURCE_DIR)/GMResSolver.hh $(SOURCE_DIR)/GMResSolver2.h \
-	$(SOURCE_DIR)/GMResSolver2.hh $(SOURCE_DIR)/TFQMR.h \
+	$(SOURCE_DIR)/GMResSolver2.hh $(SOURCE_DIR)/TFQMR.h \ \
 	$(SOURCE_DIR)/TFQMR.hh $(SOURCE_DIR)/VecSymSolver.h \
 	$(SOURCE_DIR)/VecSymSolver.hh $(SOURCE_DIR)/UmfPackSolver.h \
-	$(SOURCE_DIR)/UmfPackSolver.hh $(SOURCE_DIR)/Lagrange.h \
-	$(SOURCE_DIR)/Line.h $(SOURCE_DIR)/MacroElement.h \
-	$(SOURCE_DIR)/MacroWriter.h $(SOURCE_DIR)/Markings.h \
-	$(SOURCE_DIR)/Markings.hh $(SOURCE_DIR)/MemoryManager.h \
-	$(SOURCE_DIR)/Mesh.h $(SOURCE_DIR)/ODirSolver.h \
-	$(SOURCE_DIR)/ODirSolver.hh $(SOURCE_DIR)/OEMSolver.h \
-	$(SOURCE_DIR)/OEMSolver.hh $(SOURCE_DIR)/OResSolver.h \
-	$(SOURCE_DIR)/OResSolver.hh $(SOURCE_DIR)/Parameters.h \
-	$(SOURCE_DIR)/Parametric.h $(SOURCE_DIR)/Preconditioner.h \
-	$(SOURCE_DIR)/Quadrature.h $(SOURCE_DIR)/RCNeighbourList.h \
+	$(SOURCE_DIR)/UmfPackSolver.hh $(SOURCE_DIR)/PardisoSolver.h \
+	$(SOURCE_DIR)/PardisoSolver.hh $(SOURCE_DIR)/PardisoSolver.cc \
+	$(SOURCE_DIR)/Lagrange.h $(SOURCE_DIR)/Line.h \
+	$(SOURCE_DIR)/MacroElement.h $(SOURCE_DIR)/MacroWriter.h \
+	$(SOURCE_DIR)/Markings.h $(SOURCE_DIR)/Markings.hh \
+	$(SOURCE_DIR)/MemoryManager.h $(SOURCE_DIR)/Mesh.h \
+	$(SOURCE_DIR)/ODirSolver.h $(SOURCE_DIR)/ODirSolver.hh \
+	$(SOURCE_DIR)/OEMSolver.h $(SOURCE_DIR)/OEMSolver.hh \
+	$(SOURCE_DIR)/OResSolver.h $(SOURCE_DIR)/OResSolver.hh \
+	$(SOURCE_DIR)/Parameters.h $(SOURCE_DIR)/Parametric.h \
+	$(SOURCE_DIR)/Preconditioner.h $(SOURCE_DIR)/Quadrature.h \
+	$(SOURCE_DIR)/RCNeighbourList.h \
 	$(SOURCE_DIRe)/RefinementManager.h \
 	$(SOURCE_DIR)/RefinementManager1d.h \
 	$(SOURCE_DIR)/RefinementManager2d.h \
@@ -260,10 +263,10 @@ am_libamdis_la_OBJECTS = $(am__objects_1) \
 	libamdis_la-ILUPreconditioner.lo \
 	libamdis_la-ILUTPreconditioner.lo libamdis_la-BFGS_Precond.lo \
 	libamdis_la-DOFVector.lo libamdis_la-Estimator.lo \
-	libamdis_la-ProblemInstat.lo libamdis_la-ProblemNonLin.lo \
-	libamdis_la-NonLinUpdater.lo libamdis_la-QPsiPhi.lo \
-	libamdis_la-BasisFunction.lo libamdis_la-Boundary.lo \
-	libamdis_la-CoarseningManager.lo \
+	libamdis_la-PardisoSolver.lo libamdis_la-ProblemInstat.lo \
+	libamdis_la-ProblemNonLin.lo libamdis_la-NonLinUpdater.lo \
+	libamdis_la-QPsiPhi.lo libamdis_la-BasisFunction.lo \
+	libamdis_la-Boundary.lo libamdis_la-CoarseningManager.lo \
 	libamdis_la-CoarseningManager1d.lo \
 	libamdis_la-CoarseningManager2d.lo \
 	libamdis_la-CoarseningManager3d.lo libamdis_la-demangle.lo \
@@ -355,6 +358,8 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_MKL_FALSE = @ENABLE_MKL_FALSE@
+ENABLE_MKL_TRUE = @ENABLE_MKL_TRUE@
 ENABLE_UMFPACK_FALSE = @ENABLE_UMFPACK_FALSE@
 ENABLE_UMFPACK_TRUE = @ENABLE_UMFPACK_TRUE@
 EXEEXT = @EXEEXT@
@@ -454,7 +459,8 @@ AMDIS_INCLUDES = -I$(SOURCE_DIR) $(am__append_2)
 
 @USE_PARALLEL_AMDIS_FALSE@PARALLEL_INCLUDES = 
 @USE_PARALLEL_AMDIS_TRUE@PARALLEL_INCLUDES = -I$(MPI_DIR)/include -I$(PARMETIS_DIR)
-libamdis_la_CXXFLAGS = $(am__append_1) $(am__append_3) $(am__append_4)
+libamdis_la_CXXFLAGS = $(am__append_1) $(am__append_3) $(am__append_4) \
+	$(am__append_5)
 INCLUDES = $(AMDIS_INCLUDES) $(PARALLEL_INCLUDES)
 libamdis_la_SOURCES = \
 $(PARALLEL_AMDIS_SOURCES) \
@@ -542,11 +548,12 @@ $(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh \
 $(SOURCE_DIR)/FixVecConvert.h \
 $(SOURCE_DIR)/Flag.h \
 $(SOURCE_DIR)/Global.h \
-$(SOURCE_DIR)/GMResSolver.h \ $(SOURCE_DIR)/GMResSolver.hh \
-$(SOURCE_DIR)/GMResSolver2.h \ $(SOURCE_DIR)/GMResSolver2.hh \
+$(SOURCE_DIR)/GMResSolver.h $(SOURCE_DIR)/GMResSolver.hh \
+$(SOURCE_DIR)/GMResSolver2.h $(SOURCE_DIR)/GMResSolver2.hh \
 $(SOURCE_DIR)/TFQMR.h \ $(SOURCE_DIR)/TFQMR.hh \
-$(SOURCE_DIR)/VecSymSolver.h \ $(SOURCE_DIR)/VecSymSolver.hh \
-$(SOURCE_DIR)/UmfPackSolver.h \ $(SOURCE_DIR)/UmfPackSolver.hh \
+$(SOURCE_DIR)/VecSymSolver.h $(SOURCE_DIR)/VecSymSolver.hh \
+$(SOURCE_DIR)/UmfPackSolver.h $(SOURCE_DIR)/UmfPackSolver.hh \
+$(SOURCE_DIR)/PardisoSolver.h $(SOURCE_DIR)/PardisoSolver.hh $(SOURCE_DIR)/PardisoSolver.cc \
 $(SOURCE_DIR)/Lagrange.h $(SOURCE_DIR)/Line.h \
 $(SOURCE_DIR)/MacroElement.h $(SOURCE_DIR)/MacroWriter.h \
 $(SOURCE_DIR)/Markings.h $(SOURCE_DIR)/Markings.hh \
@@ -559,17 +566,62 @@ $(SOURCE_DIR)/Parameters.h \
 $(SOURCE_DIR)/Parametric.h \
 $(SOURCE_DIR)/Preconditioner.h \
 $(SOURCE_DIR)/Quadrature.h \
-$(SOURCE_DIR)/RCNeighbourList.h $(SOURCE_DIRe)/RefinementManager.h $(SOURCE_DIR)/RefinementManager1d.h $(SOURCE_DIR)/RefinementManager2d.h $(SOURCE_DIR)/RefinementManager3d.h $(SOURCE_DIR)/TecPlotWriter.h $(SOURCE_DIR)/TecPlotWriter.hh $(SOURCE_DIR)/Tetrahedron.h \
-$(SOURCE_DIR)/Traverse.h $(SOURCE_DIR)/Triangle.h $(SOURCE_DIR)/NonLinSolver.h $(SOURCE_DIR)/NonLinSolver.hh $(SOURCE_DIR)/ProblemInstat.h $(SOURCE_DIR)/ProblemInstat.cc $(SOURCE_DIR)/ProblemTimeInterface.h $(SOURCE_DIR)/ProblemNonLin.h $(SOURCE_DIR)/ProblemNonLin.cc \
+$(SOURCE_DIR)/RCNeighbourList.h \
+$(SOURCE_DIRe)/RefinementManager.h \
+$(SOURCE_DIR)/RefinementManager1d.h $(SOURCE_DIR)/RefinementManager2d.h $(SOURCE_DIR)/RefinementManager3d.h \
+$(SOURCE_DIR)/TecPlotWriter.h $(SOURCE_DIR)/TecPlotWriter.hh \
+$(SOURCE_DIR)/Tetrahedron.h \
+$(SOURCE_DIR)/Traverse.h \
+$(SOURCE_DIR)/Triangle.h \
+$(SOURCE_DIR)/NonLinSolver.h $(SOURCE_DIR)/NonLinSolver.hh \
+$(SOURCE_DIR)/ProblemInstat.h $(SOURCE_DIR)/ProblemInstat.cc \
+$(SOURCE_DIR)/ProblemTimeInterface.h \
+$(SOURCE_DIR)/ProblemNonLin.h $(SOURCE_DIR)/ProblemNonLin.cc \
 $(SOURCE_DIR)/NonLinUpdater.h $(SOURCE_DIR)/NonLinUpdater.cc \
-$(SOURCE_DIR)/Newton.h $(SOURCE_DIR)/Newton.hh  $(SOURCE_DIR)/NewtonFS.h $(SOURCE_DIR)/NewtonFS.hh $(SOURCE_DIR)/GridWriter.h $(SOURCE_DIR)/GridWriter.hh $(SOURCE_DIR)/ValueWriter.h $(SOURCE_DIR)/QPsiPhi.cc $(SOURCE_DIR)/BasisFunction.cc $(SOURCE_DIR)/Boundary.cc \
-$(SOURCE_DIR)/CoarseningManager.cc $(SOURCE_DIR)/CoarseningManager1d.cc $(SOURCE_DIR)/CoarseningManager2d.cc $(SOURCE_DIR)/CoarseningManager3d.cc $(SOURCE_DIR)/demangle.cc $(SOURCE_DIR)/DOFAdmin.cc $(SOURCE_DIR)/DOFMatrix.cc $(SOURCE_DIR)/Element.cc $(SOURCE_DIR)/ElInfo1d.cc \
-$(SOURCE_DIR)/ElInfo2d.cc $(SOURCE_DIR)/ElInfo3d.cc $(SOURCE_DIR)/FiniteElemSpace.cc $(SOURCE_DIR)/FixVec.cc $(SOURCE_DIR)/Flag.cc $(SOURCE_DIR)/Global.cc $(SOURCE_DIR)/Lagrange.cc $(SOURCE_DIR)/Line.cc $(SOURCE_DIR)/MacroElement.cc $(SOURCE_DIR)/MacroWriter.cc $(SOURCE_DIR)/Parameters.cc \
-$(SOURCE_DIR)/Parametric.cc $(SOURCE_DIR)/Quadrature.cc $(SOURCE_DIR)/RCNeighbourList.cc $(SOURCE_DIR)/RefinementManager.cc $(SOURCE_DIR)/RefinementManager1d.cc $(SOURCE_DIR)/RefinementManager2d.cc $(SOURCE_DIR)/RefinementManager3d.cc $(SOURCE_DIR)/Tetrahedron.cc $(SOURCE_DIR)/Traverse.cc \
-$(SOURCE_DIR)/Triangle.cc $(SOURCE_DIR)/TecPlotWriter.cc $(SOURCE_DIR)/ValueWriter.cc $(SOURCE_DIR)/MemoryPool.h $(SOURCE_DIR)/MemoryPool.cc $(SOURCE_DIR)/MemoryManager.cc \
+$(SOURCE_DIR)/Newton.h $(SOURCE_DIR)/Newton.hh  \
+$(SOURCE_DIR)/NewtonFS.h $(SOURCE_DIR)/NewtonFS.hh \
+$(SOURCE_DIR)/GridWriter.h $(SOURCE_DIR)/GridWriter.hh \
+$(SOURCE_DIR)/ValueWriter.h \
+$(SOURCE_DIR)/QPsiPhi.cc \
+$(SOURCE_DIR)/BasisFunction.cc \
+$(SOURCE_DIR)/Boundary.cc \
+$(SOURCE_DIR)/CoarseningManager.cc \
+$(SOURCE_DIR)/CoarseningManager1d.cc \
+$(SOURCE_DIR)/CoarseningManager2d.cc \
+$(SOURCE_DIR)/CoarseningManager3d.cc \
+$(SOURCE_DIR)/demangle.cc \
+$(SOURCE_DIR)/DOFAdmin.cc \
+$(SOURCE_DIR)/DOFMatrix.cc \
+$(SOURCE_DIR)/Element.cc \
+$(SOURCE_DIR)/ElInfo1d.cc $(SOURCE_DIR)/ElInfo2d.cc $(SOURCE_DIR)/ElInfo3d.cc \
+$(SOURCE_DIR)/FiniteElemSpace.cc \
+$(SOURCE_DIR)/FixVec.cc \
+$(SOURCE_DIR)/Flag.cc \
+$(SOURCE_DIR)/Global.cc \
+$(SOURCE_DIR)/Lagrange.cc \
+$(SOURCE_DIR)/Line.cc \
+$(SOURCE_DIR)/MacroElement.cc \
+$(SOURCE_DIR)/MacroWriter.cc \
+$(SOURCE_DIR)/Parameters.cc \
+$(SOURCE_DIR)/Parametric.cc \
+$(SOURCE_DIR)/Quadrature.cc \
+$(SOURCE_DIR)/RCNeighbourList.cc \
+$(SOURCE_DIR)/RefinementManager.cc \
+$(SOURCE_DIR)/RefinementManager1d.cc \
+$(SOURCE_DIR)/RefinementManager2d.cc \
+$(SOURCE_DIR)/RefinementManager3d.cc \
+$(SOURCE_DIR)/Tetrahedron.cc \
+$(SOURCE_DIR)/Traverse.cc \
+$(SOURCE_DIR)/Triangle.cc \
+$(SOURCE_DIR)/TecPlotWriter.cc \
+$(SOURCE_DIR)/ValueWriter.cc \
+$(SOURCE_DIR)/MemoryPool.h $(SOURCE_DIR)/MemoryPool.cc \
+$(SOURCE_DIR)/MemoryManager.cc \
 $(SOURCE_DIR)/VtkWriter.h $(SOURCE_DIR)/VtkWriter.cc \
 $(SOURCE_DIR)/DataCollector.h $(SOURCE_DIR)/DataCollector.cc \
-$(SOURCE_DIR)/ElementInfo.h $(SOURCE_DIR)/VertexInfo.h $(SOURCE_DIR)/PeriodicInfo.h \
+$(SOURCE_DIR)/ElementInfo.h \
+$(SOURCE_DIR)/VertexInfo.h \
+$(SOURCE_DIR)/PeriodicInfo.h \
 $(SOURCE_DIR)/OpenMP.h
 
 COMPOSITE_SOURCE_DIR = ../compositeFEM/src
@@ -733,6 +785,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-ParallelProblem.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Parameters.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Parametric.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-PardisoSolver.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-PeriodicBC.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-ProblemInstat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-ProblemInterpolScal.Plo@am__quote@
@@ -1183,6 +1236,13 @@ libamdis_la-Estimator.lo: $(SOURCE_DIR)/Estimator.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-Estimator.lo `test -f '$(SOURCE_DIR)/Estimator.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/Estimator.cc
 
+libamdis_la-PardisoSolver.lo: $(SOURCE_DIR)/PardisoSolver.cc
+@am__fastdepCXX_TRUE@	if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-PardisoSolver.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-PardisoSolver.Tpo" -c -o libamdis_la-PardisoSolver.lo `test -f '$(SOURCE_DIR)/PardisoSolver.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/PardisoSolver.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libamdis_la-PardisoSolver.Tpo" "$(DEPDIR)/libamdis_la-PardisoSolver.Plo"; else rm -f "$(DEPDIR)/libamdis_la-PardisoSolver.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(SOURCE_DIR)/PardisoSolver.cc' object='libamdis_la-PardisoSolver.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-PardisoSolver.lo `test -f '$(SOURCE_DIR)/PardisoSolver.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/PardisoSolver.cc
+
 libamdis_la-ProblemInstat.lo: $(SOURCE_DIR)/ProblemInstat.cc
 @am__fastdepCXX_TRUE@	if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-ProblemInstat.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-ProblemInstat.Tpo" -c -o libamdis_la-ProblemInstat.lo `test -f '$(SOURCE_DIR)/ProblemInstat.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/ProblemInstat.cc; \
 @am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libamdis_la-ProblemInstat.Tpo" "$(DEPDIR)/libamdis_la-ProblemInstat.Plo"; else rm -f "$(DEPDIR)/libamdis_la-ProblemInstat.Tpo"; exit 1; fi
diff --git a/AMDiS/configure b/AMDiS/configure
index d708ac39d266f4b44764f07b9008f7c77d64627d..f825ce09863fe0489067800b5933f6eb764b8a07 100755
--- a/AMDiS/configure
+++ b/AMDiS/configure
@@ -462,7 +462,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT AMDIS_DEBUG_TRUE AMDIS_DEBUG_FALSE CXX CC AMDIS_INTEL_TRUE AMDIS_INTEL_FALSE AMDIS_OPENMP_TRUE AMDIS_OPENMP_FALSE OPENMP_FLAG MPI_DIR USE_PARALLEL_AMDIS_TRUE USE_PARALLEL_AMDIS_FALSE ENABLE_UMFPACK_TRUE ENABLE_UMFPACK_FALSE CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT AMDIS_DEBUG_TRUE AMDIS_DEBUG_FALSE CXX CC AMDIS_INTEL_TRUE AMDIS_INTEL_FALSE AMDIS_OPENMP_TRUE AMDIS_OPENMP_FALSE OPENMP_FLAG MPI_DIR USE_PARALLEL_AMDIS_TRUE USE_PARALLEL_AMDIS_FALSE ENABLE_UMFPACK_TRUE ENABLE_UMFPACK_FALSE ENABLE_MKL_TRUE ENABLE_MKL_FALSE CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -1029,6 +1029,7 @@ Optional Features:
   --enable-openmp    Turn on support for the Intel compiler
   --enable-parmetis   Compile with the ParMetis library
   --enable-umfpack  Compile with the UMFPACK direct solver library
+  --enable-mkl  Compile with the Intel MKL library
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --enable-shared[=PKGS]
@@ -2122,6 +2123,30 @@ else
 fi
 
 
+# Check whether --enable-mkl or --disable-mkl was given.
+if test "${enable_mkl+set}" = set; then
+  enableval="$enable_mkl"
+  case "${enableval}" in
+    yes) mkl=true ;;
+    no)  mkl=false ;;
+    *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-mkl" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-mkl" >&2;}
+   { (exit 1); exit 1; }; } ;;
+  esac
+else
+  mkl=false
+fi;
+
+
+if test $mkl = true; then
+  ENABLE_MKL_TRUE=
+  ENABLE_MKL_FALSE='#'
+else
+  ENABLE_MKL_TRUE='#'
+  ENABLE_MKL_FALSE=
+fi
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4312,7 +4337,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 4315 "configure"' > conftest.$ac_ext
+  echo '#line 4340 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -5447,7 +5472,7 @@ fi
 
 
 # Provide some information about the compiler.
-echo "$as_me:5450:" \
+echo "$as_me:5475:" \
      "checking for Fortran 77 compiler version" >&5
 ac_compiler=`set X $ac_compile; echo $2`
 { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
@@ -6510,11 +6535,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6513: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6538: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6517: \$? = $ac_status" >&5
+   echo "$as_me:6542: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -6778,11 +6803,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6781: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6806: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6785: \$? = $ac_status" >&5
+   echo "$as_me:6810: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -6882,11 +6907,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6885: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6910: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:6889: \$? = $ac_status" >&5
+   echo "$as_me:6914: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8351,7 +8376,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 8354 "configure"' > conftest.$ac_ext
+    echo '#line 8379 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -9248,7 +9273,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 9251 "configure"
+#line 9276 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -9348,7 +9373,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 9351 "configure"
+#line 9376 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11691,11 +11716,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11694: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11719: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:11698: \$? = $ac_status" >&5
+   echo "$as_me:11723: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -11795,11 +11820,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11798: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11823: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:11802: \$? = $ac_status" >&5
+   echo "$as_me:11827: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -12331,7 +12356,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 12334 "configure"' > conftest.$ac_ext
+    echo '#line 12359 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -13389,11 +13414,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13392: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13417: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13396: \$? = $ac_status" >&5
+   echo "$as_me:13421: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13493,11 +13518,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13496: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13521: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13500: \$? = $ac_status" >&5
+   echo "$as_me:13525: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14942,7 +14967,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 14945 "configure"' > conftest.$ac_ext
+    echo '#line 14970 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -15720,11 +15745,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15723: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15748: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:15727: \$? = $ac_status" >&5
+   echo "$as_me:15752: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -15988,11 +16013,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15991: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16016: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:15995: \$? = $ac_status" >&5
+   echo "$as_me:16020: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -16092,11 +16117,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16095: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16120: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16099: \$? = $ac_status" >&5
+   echo "$as_me:16124: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -17561,7 +17586,7 @@ linux*)
   libsuff=
   case "$host_cpu" in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 17564 "configure"' > conftest.$ac_ext
+    echo '#line 17589 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -18952,6 +18977,13 @@ echo "$as_me: error: conditional \"ENABLE_UMFPACK\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${ENABLE_MKL_TRUE}" && test -z "${ENABLE_MKL_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_MKL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_MKL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -19539,6 +19571,8 @@ s,@USE_PARALLEL_AMDIS_TRUE@,$USE_PARALLEL_AMDIS_TRUE,;t t
 s,@USE_PARALLEL_AMDIS_FALSE@,$USE_PARALLEL_AMDIS_FALSE,;t t
 s,@ENABLE_UMFPACK_TRUE@,$ENABLE_UMFPACK_TRUE,;t t
 s,@ENABLE_UMFPACK_FALSE@,$ENABLE_UMFPACK_FALSE,;t t
+s,@ENABLE_MKL_TRUE@,$ENABLE_MKL_TRUE,;t t
+s,@ENABLE_MKL_FALSE@,$ENABLE_MKL_FALSE,;t t
 s,@CFLAGS@,$CFLAGS,;t t
 s,@LDFLAGS@,$LDFLAGS,;t t
 s,@CPPFLAGS@,$CPPFLAGS,;t t
diff --git a/AMDiS/configure.ac b/AMDiS/configure.ac
index de4166ec3328a47c78454c28477dfec3276b88ca..f05d120a5b64b94b2d6a0997b498084a702c3ba4 100644
--- a/AMDiS/configure.ac
+++ b/AMDiS/configure.ac
@@ -72,6 +72,15 @@ AC_ARG_ENABLE(umfpack,
   esac],[umfpack=false])
 AM_CONDITIONAL(ENABLE_UMFPACK, test $umfpack = true)
 
+AC_ARG_ENABLE(mkl,
+  [  --enable-mkl  Compile with the Intel MKL library],
+  [case "${enableval}" in
+    yes) mkl=true ;;
+    no)  mkl=false ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for --enable-mkl) ;;
+  esac],[mkl=false])
+AM_CONDITIONAL(ENABLE_MKL, test $mkl = true)
+
 AC_PROG_CC
 AC_PROG_CXX
 AC_PROG_LIBTOOL
diff --git a/AMDiS/src/CreatorMap.cc b/AMDiS/src/CreatorMap.cc
index 1d66229964919374349e95a54054117be0059056..e74bdefdb4b945223d0adc16e142bb8b39fc5eef 100644
--- a/AMDiS/src/CreatorMap.cc
+++ b/AMDiS/src/CreatorMap.cc
@@ -26,6 +26,7 @@
 #include "TFQMR.h"
 #include "VecSymSolver.h"
 #include "UmfPackSolver.h"
+#include "PardisoSolver.h"
 
 namespace AMDiS {
 
@@ -158,6 +159,11 @@ namespace AMDiS {
     creator = NEW UmfPackSolver<SystemVector>::Creator;
     addCreator("umfpack", creator);
 #endif
+
+#ifdef HAVE_MKL
+    creator = NEW PardisoSolver<SystemVector>::Creator;
+    addCreator("pardiso", creator);
+#endif
   }
 
 
diff --git a/AMDiS/src/PardisoSolver.cc b/AMDiS/src/PardisoSolver.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a6a79b220bcc5955ff5a77939e8b3f69b6bc2bac
--- /dev/null
+++ b/AMDiS/src/PardisoSolver.cc
@@ -0,0 +1,10 @@
+#include "PardisoSolver.h"
+
+namespace AMDiS {
+
+  int UmfPackSolver<SystemVector>::solveSystem(MatVecMultiplier<SystemVector> *matVec,
+					       SystemVector *x, SystemVector *b)
+  {
+    return(1);
+  }
+}
diff --git a/AMDiS/src/PardisoSolver.h b/AMDiS/src/PardisoSolver.h
new file mode 100644
index 0000000000000000000000000000000000000000..f23673fab70e060cf0a74cf662eb09740cb8b8c8
--- /dev/null
+++ b/AMDiS/src/PardisoSolver.h
@@ -0,0 +1,112 @@
+// ============================================================================
+// ==                                                                        ==
+// == AMDiS - Adaptive multidimensional simulations                          ==
+// ==                                                                        ==
+// ============================================================================
+// ==                                                                        ==
+// ==  crystal growth group                                                  ==
+// ==                                                                        ==
+// ==  Stiftung caesar                                                       ==
+// ==  Ludwig-Erhard-Allee 2                                                 ==
+// ==  53175 Bonn                                                            ==
+// ==  germany                                                               ==
+// ==                                                                        ==
+// ============================================================================
+// ==                                                                        ==
+// ==  http://www.caesar.de/cg/AMDiS                                         ==
+// ==                                                                        ==
+// ============================================================================
+
+/** \file PardisoSolver.h */
+
+#ifndef AMDIS_PARDISOSOLVER_H
+#define AMDIS_PARDISOSOLVER_H
+
+#ifdef HAVE_MKL
+
+#include "OEMSolver.h"
+#include "MemoryManager.h"
+
+namespace AMDiS {
+
+  // ============================================================================
+  // ===== class PardisoSolver ==================================================
+  // ============================================================================
+  
+  /**
+   * \ingroup Solver
+   * 
+   * \brief
+   * Wrapper for the external Intel MKL Pardiso solver
+   *
+   * This is a direct solver for large sparse matrices.
+   */
+  template<typename VectorType>
+  class PardisoSolver : public OEMSolver<VectorType>
+  {
+  public:
+    MEMORY_MANAGED(PardisoSolver<VectorType>);
+
+    /** \brief
+     * Creator class used in the OEMSolverMap.
+     */
+    class Creator : public OEMSolverCreator<VectorType>
+    {
+    public:
+      MEMORY_MANAGED(Creator);
+      
+      virtual ~Creator() {};
+      
+      /** \brief
+       * Returns a new UmfPackSolver object.
+       */
+      OEMSolver<VectorType>* create() { 
+	return NEW PardisoSolver<VectorType>(this->name); 
+      };
+    };
+
+    /** \brief
+     * constructor
+     */
+    PardisoSolver(::std::string name);
+    
+    /** \brief
+     * destructor
+     */
+    ~PardisoSolver();
+  protected:
+    /** \brief
+     * Implements OEMSolver<VectorType>::init().
+     */
+    void init() {
+      p = this->vectorCreator->create();
+      r = this->vectorCreator->create();
+    };
+    
+    /** \brief
+     * Implements OEMSolver<VectorType>::exit().
+     */
+    void exit() {
+      this->vectorCreator->free(p);
+      this->vectorCreator->free(r);
+    };
+    
+    /** \brief
+     * Implements OEMSolver<VectorType>::solve().
+     */
+    int solveSystem(MatVecMultiplier<VectorType> *mv, VectorType *x, VectorType *b);
+    
+  private:
+    /** \brief
+     * These vectors are justed to calculate the final residual of the solution.
+     */
+    VectorType *r, *p;
+  };
+  
+}
+
+#include "PardisoSolver.hh"
+
+#endif // HAVE_MKL
+
+#endif // AMDIS_PARDISOSOLVER_H
diff --git a/AMDiS/src/PardisoSolver.hh b/AMDiS/src/PardisoSolver.hh
new file mode 100644
index 0000000000000000000000000000000000000000..3baad421852e73f3d5d46473e204fe5a89810aea
--- /dev/null
+++ b/AMDiS/src/PardisoSolver.hh
@@ -0,0 +1,15 @@
+#include "PardisoSolver.h"
+
+namespace AMDiS {
+
+  template<typename VectorType>
+  PardisoSolver<VectorType>::PardisoSolver(::std::string name) 
+    : OEMSolver<VectorType>(name)
+  {}
+
+  template<typename VectorType>
+  PardisoSolver<VectorType>::~PardisoSolver() 
+  {}
+
+}    
+