diff --git a/cmake/modules/DuneFemDgMacros.cmake b/cmake/modules/DuneFemDgMacros.cmake
index 85157f73911ed68b5c99f60460a08d2c884f7cbf..e67dabea43a414d6c1e03494407c33c023639102 100644
--- a/cmake/modules/DuneFemDgMacros.cmake
+++ b/cmake/modules/DuneFemDgMacros.cmake
@@ -64,10 +64,12 @@
 
 function(dune_add_test_case target paramfile )
   set( abbr "${CMAKE_CURRENT_SOURCE_DIR}/" )
-  set( default_params "fem.verboserank:0" "fem.prefix:${abbr}data/${paramfile}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${paramfile}" )
 
   if( "${target}" STREQUAL NAME )
     #First version of this function: we are creating a real new target
+    set( newTarget "${paramfile}" )
+    #set( default_params "fem.verboserank:1" "fem.prefix:${abbr}data/${newTarget}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${newTarget}" )
+    set( default_params "testcase.path:${abbr}" )
 
     # default directory name for direct call (i.e. withouch testing tools)
     set( TESTCASE_OUTPUT "data" )
@@ -75,14 +77,19 @@ function(dune_add_test_case target paramfile )
     set( TESTCASE_INPUT "parameter" )
     # copy default parameter file to location of executable
     configure_file(${CMAKE_SOURCE_DIR}/cmake/scripts/parameter.in ${CMAKE_CURRENT_BINARY_DIR}/parameter )
-    dune_add_test( ${target} ${paramfile} ${ARGN} CMD_ARGS ${CMAKE_CURRENT_SOURCE_DIR}/parameters/${paramfile} ${default_params} )
+    #dune_add_test( NAME ${newTarget} ${ARGN} CMD_ARGS ${default_params} paramfile:parameters/${newTarget} )
+    dune_add_test( NAME ${newTarget} ${ARGN} CMD_ARGS ${default_params} )
   else()
+    set( newTarget "${target}_${paramfile}"  )
+    #set( default_params "fem.verboserank:1" "fem.prefix:${abbr}data/${newTarget}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${newTarget}" )
+    set( default_params "testcase.path:${abbr}" "testcase:${paramfile}" )
+
     #Section version of this function: We just append another parameter file to an existing target
     if(NOT TARGET ${target})
       message( ERROR "You have tried to create a test case depending on a non existing target '${target}'." )
     endif()
-    add_test( NAME ${base_name}_${paramfile}
-              COMMAND ./${target} ${CMAKE_CURRENT_SOURCE_DIR}/parameters/${target}_${paramfile} ${default_params} )
+    #add_test( NAME ${newTarget} COMMAND ./${target} ${default_params} paramfile:parameters/${newTarget} )
+    add_test( NAME ${newTarget} COMMAND ./${target} ${default_params} )
   endif()
 endfunction()
 
@@ -104,12 +111,13 @@ macro(add_header_listing)
         file(GLOB_RECURSE HEADER_LIST "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.ui")
         list(APPEND COMMON_HEADER ${HEADER_LIST})
     endforeach(_mod DEPENDENCIES)
-    set_source_files_properties(${COMMON_HEADER} PROPERTIES HEADER_FILE_ONLY 1)
-    add_custom_target(common_header SOURCES ${COMMON_HEADER})
+    #set_source_files_properties(${COMMON_HEADER} PROPERTIES HEADER_FILE_ONLY 1)
+    #add_custom_target(common_header SOURCES ${COMMON_HEADER})
 
     #needed at least one official target for finding header files in source code
-    dune_add_test( NAME _h SOURCES ${COMMON_HEADER} )
-    set_target_properties(_h PROPERTIES LINKER_LANGUAGE CXX)
+    file(WRITE ${CMAKE_BINARY_DIR}/.qtcreator/main.cc "//this is a dummy file for including files into the project file structure of qtcreator\nint main(){}" )
+    add_executable( qtcreator ${CMAKE_BINARY_DIR}/.qtcreator/main.cc ${COMMON_HEADER} )
+    set_target_properties( qtcreator PROPERTIES LINKER_LANGUAGE CXX)
 endmacro(add_header_listing)
 
 macro(make_dependent_modules_sys_included)
diff --git a/cmake/scripts/parameter.in b/cmake/scripts/parameter.in
index c7a298b7267946302e73ebe36f17577fcd1560a9..d29a4dcddae869278a83f4ccde8928f877adcfd1 100644
--- a/cmake/scripts/parameter.in
+++ b/cmake/scripts/parameter.in
@@ -1,9 +1 @@
-# toggle verbosity of on process 
-# (-1: off, p: process p is verbose, in general 0 is a good choice)
-fem.verboserank: 0 
-
-fem.prefix: ${CMAKE_CURRENT_SOURCE_DIR}/data/${TESTCASE_OUTPUT} # specify directory for data output (is created if not exists)
-fem.prefix.input: ${CMAKE_CURRENT_SOURCE_DIR}/
-fem.eoc.outputpath: ${CMAKE_CURRENT_SOURCE_DIR}/data/${TESTCASE_OUTPUT}
-
-paramfile: parameters/${TESTCASE_INPUT} #real parameter file
+testcase.path: ${CMAKE_CURRENT_SOURCE_DIR}/
diff --git a/dune/fem-dg/algorithm/caller/sub/adapt.hh b/dune/fem-dg/algorithm/caller/sub/adapt.hh
index 09f84c424ebcfbbd66f559a1311d619940a75d48..437690bef18bb3f4ce98f37739198c857dfe9784 100644
--- a/dune/fem-dg/algorithm/caller/sub/adapt.hh
+++ b/dune/fem-dg/algorithm/caller/sub/adapt.hh
@@ -98,7 +98,7 @@ namespace Fem
     : sol_( sol ),
       adaptationHandler_( nullptr ),
       keyPrefix_( keyPrefix ),
-      adaptParam_( AdaptationParametersType( ParameterKey::generate( keyPrefix, "fem.adaptation." ) ) ),
+      adaptParam_( AdaptationParametersType( ParameterKey::generate( "", "fem.adaptation." ) ) ),
       indicator_( const_cast<GridPartType&>(sol_.gridPart()), model, tuple, keyPrefix_ ),
       estimator_( sol_.space(), model.problem(), adaptParam_ )
     {}
diff --git a/dune/fem-dg/examples/advdiff/main.cc b/dune/fem-dg/examples/advdiff/main.cc
index edf0c460956eb76aaaa5f8cc89ad8cf4cae55d8b..790f3f0d32df4faa7296aa012feb2f5f11e2e1ca 100644
--- a/dune/fem-dg/examples/advdiff/main.cc
+++ b/dune/fem-dg/examples/advdiff/main.cc
@@ -10,15 +10,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::AdvectionDiffusionAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/advdiff/test/CMakeLists.txt b/dune/fem-dg/examples/advdiff/test/CMakeLists.txt
index 85607cc06832b7057efe3d886920f2497db0ef06..976aba1619adeb15176199e193006c48f2715fc3 100644
--- a/dune/fem-dg/examples/advdiff/test/CMakeLists.txt
+++ b/dune/fem-dg/examples/advdiff/test/CMakeLists.txt
@@ -59,9 +59,4 @@ if( NOT FEMDG_FAST_TESTBUILD )
                       COMPILE_DEFINITIONS "${GRIDTYPE};POLORDER=${POLORDER};DISCRETEFUNCTIONSPACESENUM=4"
                       TIMEOUT 3000 )
 
-  dune_add_test_case( NAME advdiff_orthonormal
-                      SOURCES ../main.cc
-                      COMPILE_DEFINITIONS "${GRIDTYPE};POLORDER=${POLORDER};DISCRETEFUNCTIONSPACESENUM=4"
-                      TIMEOUT 3000 )
-
 endif()
diff --git a/dune/fem-dg/examples/dataio/main.cc b/dune/fem-dg/examples/dataio/main.cc
index 236b63583b8bf9b2536c01cf7854951d2c4518b2..bf340f8a22ea26651e95ea04d89b3d747480816a 100644
--- a/dune/fem-dg/examples/dataio/main.cc
+++ b/dune/fem-dg/examples/dataio/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::CheckPointingAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/euler/main.cc b/dune/fem-dg/examples/euler/main.cc
index 92be8a507edf15e9ba82f275442e9e95859a6667..bbeba6e7729da9ed139a5618e13691c055516c41 100644
--- a/dune/fem-dg/examples/euler/main.cc
+++ b/dune/fem-dg/examples/euler/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::EulerAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/incompnavierstokes/main.cc b/dune/fem-dg/examples/incompnavierstokes/main.cc
index 34e10f638d4b79b8dc0bfcefc77b7adcbc4685e4..e63a6f8d1c57e6b2e6d90c7821403dce7ea5ae71 100644
--- a/dune/fem-dg/examples/incompnavierstokes/main.cc
+++ b/dune/fem-dg/examples/incompnavierstokes/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::IncompressibleNavierStokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/navierstokes/main.cc b/dune/fem-dg/examples/navierstokes/main.cc
index c32539377a83cd5ba0e6a6a7ffca0f063ece33b5..7e9564d30e76f6c993248467158df34cab3bcc23 100644
--- a/dune/fem-dg/examples/navierstokes/main.cc
+++ b/dune/fem-dg/examples/navierstokes/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::NavierStokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/poisson/main.cc b/dune/fem-dg/examples/poisson/main.cc
index 45fd8e4a4f0737cd4f46465c79dabcfca1455f41..d0a48fc714a120134f8a03d9625b21d04b0c5a8f 100644
--- a/dune/fem-dg/examples/poisson/main.cc
+++ b/dune/fem-dg/examples/poisson/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::PoissonAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/examples/stokes/main.cc b/dune/fem-dg/examples/stokes/main.cc
index c853d9efbdf79357c22fcc447e89340b0a6a2d48..39af2806f52e60d4c9918834146ee15c75ac8167 100644
--- a/dune/fem-dg/examples/stokes/main.cc
+++ b/dune/fem-dg/examples/stokes/main.cc
@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
   /* Initialize MPI (always do this even if you are not using MPI) */
   Dune::Fem::MPIManager :: initialize( argc, argv );
   try {
-    // *** Initialization
-    Dune::Fem::Parameter::append(argc,argv);
-    if (argc >= 2)
-      Dune::Fem::Parameter::append(argv[1]);
-    else
-      Dune::Fem::Parameter::append("parameter");
-
-    // write parameters used (before simulation starts)
-    Dune::Fem::Parameter::write("parameter.log");
+    // read Parameters
+    if( !readParameters( argc, argv ) )
+      return 1;
 
     Dune::Fem::StokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
 
diff --git a/dune/fem-dg/misc/simulator.hh b/dune/fem-dg/misc/simulator.hh
index 3148c11022f298b9a2f8c8f2dba867ac13988e4a..dd01122cd4d179a42cae405c143513fe8399a663 100644
--- a/dune/fem-dg/misc/simulator.hh
+++ b/dune/fem-dg/misc/simulator.hh
@@ -127,6 +127,70 @@ void finalizeCodegen()
 }
 #endif
 
+bool readParameters( int argc, char ** argv )
+{
+  // append all parameters from command line
+  Dune::Fem::Parameter::append(argc,argv);
+  // no parameters defined: search for parameter file
+  if( argc <= 1 )
+    Dune::Fem::Parameter::append("parameter");
+
+
+  //get full test case path
+  const std::string testCasePath = Dune::Fem::Parameter::getValue< std::string >( "testcase.path", "" );
+  //get name for a test case
+  const std::string testCaseName = Dune::Fem::Parameter::getValue< std::string >( "testcase", "" );
+
+  std::string path( argv[0] );
+  std::string targetName = path.substr(path.find_last_of("/") + 1);
+
+  //append test case name, if given
+  if( testCaseName != "" )
+    targetName = targetName + "_" + testCaseName;
+  //set important paths which are related to the test case path
+  if( testCasePath != "" )
+  {
+    Dune::Fem::Parameter::append("fem.prefix.input",testCasePath);
+    Dune::Fem::Parameter::append("fem.prefix",testCasePath + "data/" + targetName );
+    Dune::Fem::Parameter::append("fem.eoc.outputpath",testCasePath + "data/" + targetName );
+  }
+  else
+  {
+    //fail: We need data to provide further information via parameter file
+    if( !Dune::Fem::Parameter::exists( "fem.prefix" ) )
+    {
+      std::cout << "Please specify parameter 'fem.prefix'" << std::endl;
+      return false;
+    }
+    if( !Dune::Fem::Parameter::exists( "fem.prefix.input" ) )
+    {
+      std::cout << "Please specify parameter 'fem.prefix.input'" << std::endl;
+      return false;
+    }
+    if( !Dune::Fem::Parameter::exists( "fem.eoc.outputpath" ) )
+    {
+      std::cout << "Please specify parameter 'fem.eoc.outputpath'" << std::endl;
+      return false;
+    }
+  }
+
+  //read problem dependend file, if existent
+  std::string fullpath = Dune::Fem::Parameter::commonInputPath() + "/parameters/" + targetName;
+  if( std::ifstream( fullpath ) )
+    Dune::Fem::Parameter::append( fullpath );
+  else
+  {
+    std::cout << "Parameter file not found in " << fullpath << ". Aborting." << std::endl;
+    return false;
+  }
+
+  // write parameters used (before simulation starts)
+  Dune::Fem::Parameter::write("parameter.log");
+
+  return true;
+}
+
+
 
 namespace Dune
 {