diff --git a/AMDiS/test/CMakeLists.txt b/AMDiS/test/CMakeLists.txt
index 5f6979a381e943f7c8cd74cfdd7328c364660037..8a78070a423b3a963c1494fa4fe089ff303d8e3d 100644
--- a/AMDiS/test/CMakeLists.txt
+++ b/AMDiS/test/CMakeLists.txt
@@ -1,3 +1,4 @@
 project(tests)
 add_subdirectory(demoimpl)
+add_subdirectory(demotest)
 add_subdirectory(datacreation EXCLUDE_FROM_ALL)
diff --git a/AMDiS/test/datacreation/CMakeLists.txt b/AMDiS/test/datacreation/CMakeLists.txt
index 7cd35571872d387505ba050523e8489d13b57619..fd31128d50debb9a2b39ac75df325055edad9a7c 100644
--- a/AMDiS/test/datacreation/CMakeLists.txt
+++ b/AMDiS/test/datacreation/CMakeLists.txt
@@ -1,17 +1,18 @@
 project(testdatacreation)
   include_directories(${AMDiS_SOURCE_DIR})
-  file(GLOB PROJECTFILES src/*Project.cpp)
+  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src)
+  file(GLOB PROJECTFILES ${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src/*Project.cpp)
   set(CREATELINE "")
   foreach(projectfile ${PROJECTFILES})
   	#create creatorname
   	get_filename_component(CppName ${projectfile} NAME_WE)
   	string(REPLACE "Project" "" creatorsuffix ${CppName})
-	set(PROJECTINCLUDE "${CppName}.h")
+	set(PROJECTINCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src/${CppName}.h")
 	set(CURRENTPROJECTTYPE "${creatorsuffix}demo")
 	string(TOLOWER "${creatorsuffix}" creatorsuffix_lower)
 	set(BASENAME "${creatorsuffix_lower}")
 	configure_file(src/creator_base.cpp src/creator${creatorsuffix}.cpp @ONLY)
-  	add_executable(creator${creatorsuffix} src/creator${creatorsuffix}.cpp src/ProjectList.cpp ${projectfile})
+  	add_executable(creator${creatorsuffix} src/creator${creatorsuffix}.cpp src/ProjectList.cpp)
 	target_link_libraries(creator${creatorsuffix} ${AMDiS_LIBS} demoimpl)
 	file(GLOB initfiles RELATIVE ${CMAKE_CURRENT_BINARY_DIR} init/${creatorsuffix_lower}*.dat*)
 	foreach(initfile ${initfiles})
diff --git a/AMDiS/test/demoimpl/src/ProjectList.cpp b/AMDiS/test/datacreation/src/ProjectList.cpp
similarity index 63%
rename from AMDiS/test/demoimpl/src/ProjectList.cpp
rename to AMDiS/test/datacreation/src/ProjectList.cpp
index 3f06026b8d695cfb20189f72cf1c02b08208134c..5471409254ca66dd293dfd85214cb278652980be 100644
--- a/AMDiS/test/demoimpl/src/ProjectList.cpp
+++ b/AMDiS/test/datacreation/src/ProjectList.cpp
@@ -20,16 +20,3 @@ void write(SolutionInformation& info, std::string filename) {
     assert(false);
 }
 
-bool compare(SolutionInformation& info, std::string filename) {
-  if(info.sysVec != NULL) {
-    assert(false);
-  }else if(info.dofVec != NULL) {
-    DOFVector< double > fileVec(info.dofVec->getFeSpace(), "fileVec");
-    Mesh fileMesh("",2);
-    fileMesh = *(info.dofVec->getFeSpace()->getMesh());
-    ArhReader::read(filename, &fileMesh, &fileVec);
-  }else
-    assert(false);
-  return false;
-}
-
diff --git a/AMDiS/test/demoimpl/src/creator_base.cpp b/AMDiS/test/datacreation/src/creator_base.cpp
similarity index 91%
rename from AMDiS/test/demoimpl/src/creator_base.cpp
rename to AMDiS/test/datacreation/src/creator_base.cpp
index 9b9ab64ad82682de10c3c82a129187146a2996a1..6a3809cc8639b03cac7e1bc17354965538b6d42e 100644
--- a/AMDiS/test/demoimpl/src/creator_base.cpp
+++ b/AMDiS/test/datacreation/src/creator_base.cpp
@@ -3,6 +3,7 @@
 #include "@PROJECTINCLUDE@"
 typedef @CURRENTPROJECTTYPE@ ProjectType;
 std::string basename="@BASENAME@";
+void write(SolutionInformation& info, std::string filename);
 int main(int argc, char** argv) {
   if(argc < 2) {
     std::cout<<" need initfile "<<basename<<"*\n";
diff --git a/AMDiS/test/demoimpl/src/Project.h b/AMDiS/test/demoimpl/src/Project.h
index c3a12d0e796d25cb9107566ab79a2a68799f2c38..fcfe61268d8506e56f67c035b2f41dd6c4afb62a 100644
--- a/AMDiS/test/demoimpl/src/Project.h
+++ b/AMDiS/test/demoimpl/src/Project.h
@@ -20,8 +20,6 @@ struct SolutionInformation {
 
 };
 
-void write(SolutionInformation&, std::string filename);
-bool compare(SolutionInformation&, std::string filename);
 class Project {
   public:
     virtual void create(std::string& ) = 0;
diff --git a/AMDiS/test/demotest/CMakeLists.txt b/AMDiS/test/demotest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7bc4fe650c4962f7af5da8da983a1872d13b11fb
--- /dev/null
+++ b/AMDiS/test/demotest/CMakeLists.txt
@@ -0,0 +1,22 @@
+project(demotest)
+  include_directories(${AMDiS_SOURCE_DIR})
+  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src)
+  file(GLOB PROJECTFILES ${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src/*Project.cpp)
+  foreach(projectfile ${PROJECTFILES})
+  	#create creatorname
+  	get_filename_component(CppName ${projectfile} NAME_WE)
+  	string(REPLACE "Project" "" creatorsuffix ${CppName})
+	set(PROJECTINCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../demoimpl/src/${CppName}.h")
+	set(CURRENTPROJECTTYPE "${creatorsuffix}demo")
+	string(TOLOWER "${creatorsuffix}" creatorsuffix_lower)
+	set(BASENAME "${creatorsuffix_lower}")
+	configure_file(src/tester_base.cpp src/tester${creatorsuffix}.cpp @ONLY)
+  	add_executable(tester${creatorsuffix} src/tester${creatorsuffix}.cpp src/Comparer.cpp)
+	target_link_libraries(tester${creatorsuffix} ${AMDiS_LIBS} demoimpl)
+	file(GLOB initfiles RELATIVE ${CMAKE_CURRENT_BINARY_DIR} init/${creatorsuffix_lower}*.dat*)
+	foreach(initfile ${initfiles})
+		get_filename_component(initfile_ext ${initfile} EXT)
+		string(REPLACE ".dat." "" initfile_ext "${initfile_ext}")
+		set(curoutputdatafile "../testdata/${creatorsuffix_lower}_${initfile_ext}.arh")
+	endforeach(initfile)
+  endforeach(projectfile)
diff --git a/AMDiS/test/demotest/init b/AMDiS/test/demotest/init
new file mode 120000
index 0000000000000000000000000000000000000000..13f09ccb11f6f41b2f0152754733ebb282bc77f4
--- /dev/null
+++ b/AMDiS/test/demotest/init
@@ -0,0 +1 @@
+../testdata/init
\ No newline at end of file
diff --git a/AMDiS/test/demotest/macro b/AMDiS/test/demotest/macro
new file mode 120000
index 0000000000000000000000000000000000000000..3ee9fb64c3086802b27858bf7f598981f6e8e323
--- /dev/null
+++ b/AMDiS/test/demotest/macro
@@ -0,0 +1 @@
+../testdata/macro
\ No newline at end of file
diff --git a/AMDiS/test/demotest/src/Comparer.cpp b/AMDiS/test/demotest/src/Comparer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..84983f838fd89ac2a4a2a7bf18dbdfa02957fbcb
--- /dev/null
+++ b/AMDiS/test/demotest/src/Comparer.cpp
@@ -0,0 +1,16 @@
+#include "Project.h"
+#include "io/ArhReader.h"
+bool compare(SolutionInformation& info, std::string filename)
+{
+  if(info.sysVec != NULL) {
+    assert(false);
+  }else if(info.dofVec != NULL) {
+    DOFVector< double > fileVec(info.dofVec->getFeSpace(), "fileVec");
+    Mesh fileMesh("",2);
+    fileMesh = *(info.dofVec->getFeSpace()->getMesh());
+    ArhReader::read(filename, &fileMesh, &fileVec);
+    DOFVector< double > nsolvec(*(info.dofVec));
+  }else
+    assert(false);
+  return false;
+}
diff --git a/AMDiS/test/demotest/src/tester_base.cpp b/AMDiS/test/demotest/src/tester_base.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f436ba7dbfec2c51db7053f7c86c777129fea1d0
--- /dev/null
+++ b/AMDiS/test/demotest/src/tester_base.cpp
@@ -0,0 +1,27 @@
+#include "Parameters.h"
+#include "Project.h"
+#include "@PROJECTINCLUDE@"
+bool compare(SolutionInformation& info, std::string filename);
+typedef @CURRENTPROJECTTYPE@ ProjectType;
+std::string basename="@BASENAME@";
+int main(int argc, char** argv) {
+  if(argc < 2) {
+    std::cout<<" need initfile "<<basename<<"*\n";
+    return 1;
+  }
+  if(argc < 3) {
+    std::cout<<" also need a destination file "<<basename<<"*\n";
+    return 2;
+  }
+  std::string initfile(argv[1]);
+  std::string destinationfile(argv[2]);
+  AMDiS::Parameters::init(false, initfile);
+  ProjectType project;
+  ProjectInfo info(&project, initfile, destinationfile);
+  info.create();
+  SolutionInformation solinfo;
+  info.solve(solinfo);
+  if(compare(solinfo, info.getFilename()))
+    return 0;
+  return 1;
+}