diff --git a/dune/xt/common/test/profiler.cc b/dune/xt/common/test/profiler.cc
index 7a177fab45998e5e306b1f5f4d48c320a22a01e9..483666b9fd262e2c89d7ecbef7eac6c7d50ce56d 100644
--- a/dune/xt/common/test/profiler.cc
+++ b/dune/xt/common/test/profiler.cc
@@ -52,8 +52,9 @@ TEST(ProfilerTest, OutputConstness)
 {
   DXTC_TIMINGS.reset();
   const auto& prof = DXTC_TIMINGS;
-  prof.output_timings("timings");
-  prof.output_timings(dev_null);
+  prof.output_per_rank("timings");
+  prof.output_all_measures(dev_null);
+  prof.output_simple(dev_null);
 }
 
 TEST(ProfilerTest, ExpectedFailures)
diff --git a/dune/xt/common/timings.cc b/dune/xt/common/timings.cc
index 3887b2c963ba1f2a4190eeb653063cb261c15fff..3a16cfa2a244b5a54a775172993537a7ebc856c3 100644
--- a/dune/xt/common/timings.cc
+++ b/dune/xt/common/timings.cc
@@ -165,25 +165,37 @@ void Timings::set_outputdir(const std::string dir)
   test_create_directory(output_dir_);
 }
 
-void Timings::output_timings(const std::string csv_base,
-                             const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
+void Timings::output_per_rank(const std::string csv_base) const
 {
+  const auto rank = MPIHelper::getCollectiveCommunication().rank();
   boost::filesystem::path dir(output_dir_);
-  boost::filesystem::path filename = dir / (boost::format("%s_p%08d.csv") % csv_base % comm.rank()).str();
+  boost::filesystem::path filename = dir / (boost::format("%s_p%08d.csv") % csv_base % rank).str();
   boost::filesystem::ofstream out(filename);
-  output_timings(out);
+  output_all_measures(out, MPIHelper::getLocalCommunicator());
   std::stringstream tmp_out;
-  output_timings_all(tmp_out);
-  if (comm.rank() == 0) {
+  output_all_measures(tmp_out, MPIHelper::getCommunicator());
+  if (rank == 0) {
     boost::filesystem::path a_filename = dir / (boost::format("%s.csv") % csv_base).str();
     boost::filesystem::ofstream a_out(a_filename);
     a_out << tmp_out.str() << std::endl;
   }
 }
 
-void Timings::output_timings_all(std::ostream& out,
-                                 const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
+void Timings::output_simple(std::ostream& out) const
 {
+  for (const auto& section : commited_deltas_) {
+    out << csv_sep_ << section.first;
+  }
+  for (const auto& section : commited_deltas_) {
+    out << csv_sep_ << section.second[0];
+    ;
+  }
+  out << std::endl;
+}
+
+void Timings::output_all_measures(std::ostream& out, MPIHelper::MPICommunicator mpi_comm) const
+{
+  CollectiveCommunication<MPIHelper::MPICommunicator> comm(mpi_comm);
   std::stringstream stash;
 
   stash << "run" << csv_sep_ << "threads" << csv_sep_ << "ranks";
@@ -217,19 +229,6 @@ void Timings::output_timings_all(std::ostream& out,
     out << stash.str();
 }
 
-void Timings::output_timings(std::ostream& out, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
-{
-  for (const auto& section : commited_deltas_) {
-    out << csv_sep_ << section.first;
-  }
-  const double size = comm.size();
-  for (const auto& section : commited_deltas_) {
-    auto val = section.second[0];
-    out << csv_sep_ << comm.sum(val) / size;
-  }
-  out << std::endl;
-}
-
 Timings::Timings()
   : csv_sep_(",")
 {
diff --git a/dune/xt/common/timings.hh b/dune/xt/common/timings.hh
index a68dce193a85cec7887c668355c5ebc7796dae86..70ba6d686a200e318f055c5b59d324199b119870 100644
--- a/dune/xt/common/timings.hh
+++ b/dune/xt/common/timings.hh
@@ -103,17 +103,16 @@ public:
   //! get the full delta array
   TimingData::DeltaType delta(const std::string section_name) const;
 
-  /** file-output the named sections' walltimes only
-   * \note averages over all MPI processes **/
-  void output_timings(const std::string csv_base, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
-                                                      Dune::MPIHelper::getCollectiveCommunication()) const;
-  void output_timings(std::ostream& out = std::cout, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
-                                                         Dune::MPIHelper::getCollectiveCommunication()) const;
-  /** output all recoreded measures
-   * \note outputs average, min, max over all MPI processes **/
-  void output_timings_all(std::ostream& out = std::cout,
-                          const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
-                              Dune::MPIHelper::getCollectiveCommunication()) const;
+  /** creates one file local to each MPI-rank (no global averaging)
+   *  one single rank-0 file with all combined/averaged measures
+   ***/
+  void output_per_rank(const std::string csv_base) const;
+  //! outputs walltime only w/o MPI-rank averaging
+  void output_simple(std::ostream& out = std::cout) const;
+  /** output all recorded measures
+   * \note outputs average, min, max over all MPI processes associated to mpi_comm **/
+  void output_all_measures(std::ostream& out = std::cout,
+                           MPIHelper::MPICommunicator mpi_comm = Dune::MPIHelper::getCommunicator()) const;
 
   /// stops and resets all timers and data
   void reset();