diff --git a/python/dune/xt/common/CMakeLists.txt b/python/dune/xt/common/CMakeLists.txt
index 68557ddca78a851f9092746b297201557c3f05f1..8e5412668cfcfd249d6a3541ae8cffc55757cf95 100644
--- a/python/dune/xt/common/CMakeLists.txt
+++ b/python/dune/xt/common/CMakeLists.txt
@@ -11,6 +11,6 @@
 
 dune_pybindxi_add_module(_common EXCLUDE_FROM_ALL bindings.cc)
 dune_pybindxi_add_module(_empty EXCLUDE_FROM_ALL empty.cc)
-dune_pybindxi_add_module(_logging EXCLUDE_FROM_ALL logging.cc)
+dune_pybindxi_add_module(logging EXCLUDE_FROM_ALL logging.cc)
 dune_pybindxi_add_module(_timings EXCLUDE_FROM_ALL timings.cc)
 
diff --git a/python/dune/xt/common/__init__.py b/python/dune/xt/common/__init__.py
index 0e9bea5c2d6b09ff5dd855d34a40ca71e66b080a..afc6769a4fb31284aaae3c029a6013ace2584998 100644
--- a/python/dune/xt/common/__init__.py
+++ b/python/dune/xt/common/__init__.py
@@ -15,11 +15,6 @@ from dune.xt import guarded_import
 
 for mod_name in (
     '_common',
-    '_logging',
-    '_timings',
     ):
     guarded_import(globals(), 'dune.xt.common', mod_name)
 
-# make sure the singleton exists
-timings()
-
diff --git a/python/dune/xt/common/logging.cc b/python/dune/xt/common/logging.cc
index 267a516a8908c5022f83c77833bd38c54310af5a..a4913bee8399a9fd88d282f80c7e2acb1ff3017b 100644
--- a/python/dune/xt/common/logging.cc
+++ b/python/dune/xt/common/logging.cc
@@ -22,13 +22,13 @@
 #include <python/dune/xt/common/exceptions.bindings.hh>
 
 
-PYBIND11_MODULE(_logging, m)
+PYBIND11_MODULE(logging, m)
 {
   namespace py = pybind11;
   using namespace pybind11::literals;
   using namespace Dune::XT::Common;
 
-  Dune::XT::Common::bindings::add_initialization(m, "dune.xt.common", "_logging");
+  Dune::XT::Common::bindings::add_initialization(m, "dune.xt.common", "logging");
 
   m.def("create",
         [](int logflags, const std::string logfile, const std::string datadir, const std::string _logdir) {
diff --git a/python/dune/xt/common/timings.cc b/python/dune/xt/common/timings.cc
index e3942f3689291fde67a628ada4412256bb31d3fa..4c187ac6be482fe5938cd21ff46f7ac03bfbe547 100644
--- a/python/dune/xt/common/timings.cc
+++ b/python/dune/xt/common/timings.cc
@@ -29,21 +29,23 @@ PYBIND11_MODULE(_timings, m)
   using namespace pybind11::literals;
   using namespace Dune::XT::Common;
 
-  Dune::XT::Common::bindings::add_initialization(m, "dune.xt.common", "_timings");
-
-  py::class_<Timings>(m, "Timings")
-      .def("start", &Timings::start, "set this to begin a named section")
-      .def("reset", py::overload_cast<std::string>(&Timings::reset), "set elapsed time back to 0 for section_name")
-      .def("reset", py::overload_cast<>(&Timings::reset), "set elapsed time back to 0 for section_name")
-      .def("stop", py::overload_cast<std::string>(&Timings::stop), "stop all timer for given section only")
-      .def("stop", py::overload_cast<>(&Timings::stop), "stop all running timers")
-      .def("walltime", &Timings::walltime, "get runtime of section in milliseconds")
-      //! TODO this actually accepts an ostream
-      .def("output_simple", [](Timings& self) { self.output_simple(); }, "outputs per-rank csv-file")
-      .def("output_per_rank", &Timings::output_per_rank, "outputs walltime only")
-      //! TODO this actually accepts an MPICOMM and an ostream too
-      .def("output_all_measures",
-           [](Timings& self) { self.output_all_measures(); },
-           "outputs per rank and global averages of all measures");
-  m.def("timings", &timings, py::return_value_policy::reference);
+  bindings::add_initialization(m, "dune.xt.common", "_timings");
+
+  bindings::try_register(m, [](auto& m_) {
+    py::class_<Timings>(m_, "Timings")
+        .def("start", &Timings::start, "set this to begin a named section")
+        .def("reset", py::overload_cast<std::string>(&Timings::reset), "set elapsed time back to 0 for section_name")
+        .def("reset", py::overload_cast<>(&Timings::reset), "set elapsed time back to 0 for section_name")
+        .def("stop", py::overload_cast<std::string>(&Timings::stop), "stop all timer for given section only")
+        .def("stop", py::overload_cast<>(&Timings::stop), "stop all running timers")
+        .def("walltime", &Timings::walltime, "get runtime of section in milliseconds")
+        //! TODO this actually accepts an ostream
+        .def("output_simple", [](Timings& self) { self.output_simple(); }, "outputs per-rank csv-file")
+        .def("output_per_rank", &Timings::output_per_rank, "outputs walltime only")
+        //! TODO this actually accepts an MPICOMM and an ostream too
+        .def("output_all_measures",
+             [](Timings& self) { self.output_all_measures(); },
+             "outputs per rank and global averages of all measures");
+    m_.def("instance", &timings, py::return_value_policy::reference);
+  });
 }
diff --git a/python/dune/xt/common/logging.py b/python/dune/xt/common/timings.py
similarity index 77%
rename from python/dune/xt/common/logging.py
rename to python/dune/xt/common/timings.py
index 8cc8cf178f1d9dd75d7e2bcf07d2bc6e6ddd1b69..27f4615ca5f46555da29f32a85f526ccb450480a 100644
--- a/python/dune/xt/common/logging.py
+++ b/python/dune/xt/common/timings.py
@@ -6,7 +6,12 @@
 #      or  GPL-2.0+ (http://opensource.org/licenses/gpl-license)
 #          with "runtime exception" (http://www.dune-project.org/license.html)
 # Authors:
-#   René Fritze (2018 - 2019)
+#   René Fritze (2018)
 # ~~~
 
-from dune.xt._logging import *
+from dune.xt import guarded_import
+
+guarded_import(globals(), 'dune.xt.common', '_timings')
+
+instance()
+
diff --git a/python/test/base.py b/python/test/base.py
index ad8a0020d6a7d3f6a3f20f01f2917ba5ab0e8670..0a77ea82a22a9438da920d6ab64f7178537f1219 100644
--- a/python/test/base.py
+++ b/python/test/base.py
@@ -39,7 +39,8 @@ def test_logging():
 
 
 def test_timings():
-    from dune.xt.common.timings import timings
+    from dune.xt.common.timings import instance
+    timings = instance()
     timings.reset()
     timings.start("foo.bar")
     timings.stop()