diff --git a/util/cxx_config/main.cc b/util/cxx_config/main.cc
index 41a2af1..2fe4075 100644
--- a/util/cxx_config/main.cc
+++ b/util/cxx_config/main.cc
@@ -113,8 +113,8 @@
     setClockFrequency(1000000000000);
     curEventQueue(getEventQueue(0));
 
-    Stats::initSimStats();
-    Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
+    statistics::initSimStats();
+    statistics::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
     Trace::enable();
     setDebugFlag("Terminal");
@@ -291,7 +291,7 @@
         } while (drain_count > 0);
 
         old_cpu.switchOut();
-        system.setMemoryMode(Enums::timing);
+        system.setMemoryMode(enums::timing);
         new_cpu.takeOverFrom(&old_cpu);
         config_manager->drainResume();
 
diff --git a/util/cxx_config/stats.cc b/util/cxx_config/stats.cc
index 3780eac..80f2479 100644
--- a/util/cxx_config/stats.cc
+++ b/util/cxx_config/stats.cc
@@ -40,9 +40,12 @@
  *
  *  C++-only configuration stats handling example
  *
- *  Register with: Stats::registerHandlers(statsReset, statsDump)
+ *  Register with: statistics::registerHandlers(statsReset, statsDump)
  */
 
+#include <iostream>
+#include <list>
+
 #include "base/statistics.hh"
 #include "stats.hh"
 
@@ -51,7 +54,7 @@
 
 void statsPrepare()
 {
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     /* gather_stats -> prepare */
     for (auto i = stats.begin(); i != stats.end(); ++i)
@@ -62,24 +65,26 @@
 {
     std::cerr << "Stats dump\n";
 
-    Stats::processDumpQueue();
+    statistics::processDumpQueue();
 
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     statsPrepare();
 
     /* gather_stats -> convert_value */
     for (auto i = stats.begin(); i != stats.end(); ++i) {
-        Stats::Info *stat = *i;
+        statistics::Info *stat = *i;
 
-        Stats::ScalarInfo *scalar = dynamic_cast<Stats::ScalarInfo *>(stat);
-        Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
+        statistics::ScalarInfo *scalar =
+            dynamic_cast<statistics::ScalarInfo *>(stat);
+        statistics::VectorInfo *vector =
+            dynamic_cast<statistics::VectorInfo *>(stat);
 
         if (scalar) {
             std::cerr << "SCALAR " << stat->name << ' '
                 << scalar->value() << '\n';
         } else if (vector) {
-            Stats::VResult results = vector->value();
+            statistics::VResult results = vector->value();
 
             unsigned int index = 0;
             for (auto e = results.begin(); e != results.end(); ++e) {
@@ -99,12 +104,12 @@
 {
     std::cerr << "Stats reset\n";
 
-    Stats::processResetQueue();
+    statistics::processResetQueue();
 }
 
 void statsEnable()
 {
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     for (auto i = stats.begin(); i != stats.end(); ++i)
         (*i)->enable();
diff --git a/util/cxx_config/stats.hh b/util/cxx_config/stats.hh
index a2957c1..34d03e9 100644
--- a/util/cxx_config/stats.hh
+++ b/util/cxx_config/stats.hh
@@ -40,7 +40,7 @@
  *
  *  C++-only configuration stats handling example
  *
- *  Register with: Stats::registerHandlers(statsReset, statsDump)
+ *  Register with: statistics::registerHandlers(statsReset, statsDump)
  */
 
 #ifndef __UTIL_CXX_CONFIG_STATS_H__
diff --git a/util/systemc/gem5_within_systemc/main.cc b/util/systemc/gem5_within_systemc/main.cc
index 6a2f706..6e2bd55 100644
--- a/util/systemc/gem5_within_systemc/main.cc
+++ b/util/systemc/gem5_within_systemc/main.cc
@@ -176,8 +176,8 @@
     initSignals();
 
     /* Enable stats */
-    Stats::initSimStats();
-    Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
+    statistics::initSimStats();
+    statistics::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
     Trace::enable();
     setDebugFlag("Terminal");
@@ -434,7 +434,7 @@
     // it is best to just move this call before the switchCpu loop in run()
     // where it previously was
     if (cpuNum == 0)
-        system.setMemoryMode(Enums::timing);
+        system.setMemoryMode(enums::timing);
 
     new_cpu.takeOverFrom(&old_cpu);
 
diff --git a/util/systemc/gem5_within_systemc/sc_gem5_control.cc b/util/systemc/gem5_within_systemc/sc_gem5_control.cc
index 5e99927..253d7f8 100644
--- a/util/systemc/gem5_within_systemc/sc_gem5_control.cc
+++ b/util/systemc/gem5_within_systemc/sc_gem5_control.cc
@@ -236,8 +236,8 @@
     initSignals();
 
     /* Enable stats */
-    Stats::initSimStats();
-    Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
+    statistics::initSimStats();
+    statistics::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
     Trace::enable();
 
diff --git a/util/systemc/gem5_within_systemc/sc_module.cc b/util/systemc/gem5_within_systemc/sc_module.cc
index a0f36c7..86e10e76 100644
--- a/util/systemc/gem5_within_systemc/sc_module.cc
+++ b/util/systemc/gem5_within_systemc/sc_module.cc
@@ -151,7 +151,7 @@
 
     async_event = false;
     if (async_statdump || async_statreset) {
-        Stats::schedStatEvent(async_statdump, async_statreset);
+        statistics::schedStatEvent(async_statdump, async_statreset);
         async_statdump = false;
         async_statreset = false;
     }
diff --git a/util/systemc/gem5_within_systemc/stats.cc b/util/systemc/gem5_within_systemc/stats.cc
index b073afa..0bb3253 100644
--- a/util/systemc/gem5_within_systemc/stats.cc
+++ b/util/systemc/gem5_within_systemc/stats.cc
@@ -40,9 +40,13 @@
  *
  *  C++-only configuration stats handling example
  *
- *  Register with: Stats::registerHandlers(statsReset, statsDump)
+ *  Register with: statistics::registerHandlers(statsReset, statsDump)
  */
 
+#include <iostream>
+#include <list>
+
+#include "base/logging.hh"
 #include "base/output.hh"
 #include "base/statistics.hh"
 #include "base/stats/text.hh"
@@ -53,14 +57,15 @@
 
 void statsPrepare()
 {
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     /* gather_stats -> prepare */
     for (auto i = stats.begin(); i != stats.end(); ++i){
-        Stats::Info *stat = *i;
-        Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
+        statistics::Info *stat = *i;
+        statistics::VectorInfo *vector =
+            dynamic_cast<statistics::VectorInfo *>(stat);
         if (vector){
-            (dynamic_cast<Stats::VectorInfo *>(*i))->prepare();
+            (dynamic_cast<statistics::VectorInfo *>(*i))->prepare();
         }
         else {
             (*i)->prepare();
@@ -72,11 +77,11 @@
 void statsDump()
 {
     bool desc = true;
-    Stats::Output *output = Stats::initText(filename, desc, true);
+    statistics::Output *output = statistics::initText(filename, desc, true);
 
-    Stats::processDumpQueue();
+    statistics::processDumpQueue();
 
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     statsEnable();
     statsPrepare();
@@ -84,29 +89,32 @@
     output->begin();
     /* gather_stats -> convert_value */
     for (auto i = stats.begin(); i != stats.end(); ++i) {
-        Stats::Info *stat = *i;
+        statistics::Info *stat = *i;
 
-        const Stats::ScalarInfo *scalar = dynamic_cast<Stats::ScalarInfo
-            *>(stat);
-        Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
-        const Stats::Vector2dInfo *vector2d = dynamic_cast<Stats::Vector2dInfo
-            *>(vector);
-        const Stats::DistInfo *dist = dynamic_cast<Stats::DistInfo *>(stat);
-        const Stats::VectorDistInfo *vectordist =
-            dynamic_cast<Stats::VectorDistInfo *>(stat);
-        const Stats::SparseHistInfo *sparse =
-            dynamic_cast<Stats::SparseHistInfo *>(stat);
-        const Stats::InfoProxy <Stats::Vector2d,Stats::Vector2dInfo> *info =
-            dynamic_cast<Stats::InfoProxy
-            <Stats::Vector2d,Stats::Vector2dInfo>*>(stat);
+        const statistics::ScalarInfo *scalar =
+            dynamic_cast<statistics::ScalarInfo *>(stat);
+        statistics::VectorInfo *vector =
+            dynamic_cast<statistics::VectorInfo *>(stat);
+        const statistics::Vector2dInfo *vector2d =
+            dynamic_cast<statistics::Vector2dInfo *>(vector);
+        const statistics::DistInfo *dist =
+            dynamic_cast<statistics::DistInfo *>(stat);
+        const statistics::VectorDistInfo *vectordist =
+            dynamic_cast<statistics::VectorDistInfo *>(stat);
+        const statistics::SparseHistInfo *sparse =
+            dynamic_cast<statistics::SparseHistInfo *>(stat);
+        const statistics::InfoProxy <statistics::Vector2d,
+            statistics::Vector2dInfo> *info =
+            dynamic_cast<statistics::InfoProxy
+            <statistics::Vector2d,statistics::Vector2dInfo>*>(stat);
 
         if (vector) {
-            const Stats::FormulaInfo *formula = dynamic_cast<Stats::FormulaInfo
-                *>(vector);
+            const statistics::FormulaInfo *formula =
+                dynamic_cast<statistics::FormulaInfo *>(vector);
             if (formula){
                 output->visit(*formula);
             } else {
-                const Stats::VectorInfo *vector1 = vector;
+                const statistics::VectorInfo *vector1 = vector;
                 output->visit(*vector1);
             }
         } else if (vector2d) {
@@ -132,18 +140,19 @@
 {
     std::cerr << "Stats reset\n";
 
-    Stats::processResetQueue();
+    statistics::processResetQueue();
 }
 
 void statsEnable()
 {
-    std::list<Stats::Info *> stats = Stats::statsList();
+    std::list<statistics::Info *> stats = statistics::statsList();
 
     for (auto i = stats.begin(); i != stats.end(); ++i){
-        Stats::Info *stat = *i;
-        Stats::VectorInfo *vector = dynamic_cast<Stats::VectorInfo *>(stat);
+        statistics::Info *stat = *i;
+        statistics::VectorInfo *vector =
+            dynamic_cast<statistics::VectorInfo *>(stat);
         if (vector){
-            (dynamic_cast<Stats::VectorInfo *>(*i))->enable();
+            (dynamic_cast<statistics::VectorInfo *>(*i))->enable();
         }
         else {
             (*i)->enable();
diff --git a/util/systemc/gem5_within_systemc/stats.hh b/util/systemc/gem5_within_systemc/stats.hh
index cbb1d92..0964303 100644
--- a/util/systemc/gem5_within_systemc/stats.hh
+++ b/util/systemc/gem5_within_systemc/stats.hh
@@ -40,7 +40,7 @@
  *
  *  C++-only configuration stats handling example
  *
- *  Register with: Stats::registerHandlers(statsReset, statsDump)
+ *  Register with: statistics::registerHandlers(statsReset, statsDump)
  */
 
 #ifndef __UTIL_CXX_CONFIG_STATS_H__
diff --git a/util/systemc/systemc_within_gem5/systemc_simple_object/printer.hh b/util/systemc/systemc_within_gem5/systemc_simple_object/printer.hh
index 5cec142..2f2c7ff 100644
--- a/util/systemc/systemc_within_gem5/systemc_simple_object/printer.hh
+++ b/util/systemc/systemc_within_gem5/systemc_simple_object/printer.hh
@@ -71,7 +71,7 @@
         }
     }
 
-    Stats::Scalar numWords;
+    statistics::Scalar numWords;
 
     // Gem5 statistics should be set up during the "end_of_elabortion"
     // callback.
diff --git a/util/tlm/src/sc_master_port.cc b/util/tlm/src/sc_master_port.cc
index ec17c2c..f17fc3f 100644
--- a/util/tlm/src/sc_master_port.cc
+++ b/util/tlm/src/sc_master_port.cc
@@ -273,8 +273,8 @@
              "Packet sending failed!\n");
 
     // one tick is a pico second
-    auto delay =
-      sc_core::sc_time((double)(ticks / SimClock::Int::ps), sc_core::SC_PS);
+    auto delay = sc_core::sc_time((double)(ticks / sim_clock::as_int::ps),
+        sc_core::SC_PS);
 
     // update time
     t += delay;
diff --git a/util/tlm/src/sim_control.cc b/util/tlm/src/sim_control.cc
index 903c77f..50a2aea 100644
--- a/util/tlm/src/sim_control.cc
+++ b/util/tlm/src/sim_control.cc
@@ -88,8 +88,8 @@
     Gem5SystemC::Module::setupEventQueues(*this);
     initSignals();
 
-    Stats::initSimStats();
-    Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
+    statistics::initSimStats();
+    statistics::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
     Trace::enable();
 
