diff --git a/src/systemc/core/sc_main.cc b/src/systemc/core/sc_main.cc
index 5a6108a..3c4fdbb 100644
--- a/src/systemc/core/sc_main.cc
+++ b/src/systemc/core/sc_main.cc
@@ -121,4 +121,97 @@
     return _argv;
 }
 
+void
+sc_start()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_pause()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_start(const sc_time &time, sc_starvation_policy p)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_set_stop_mode(sc_stop_mode mode)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_stop_mode
+sc_get_stop_mode()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return SC_STOP_FINISH_DELTA;
+}
+
+void
+sc_stop()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+const sc_time &
+sc_time_stamp()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return *(sc_time *)nullptr;
+}
+
+sc_dt::uint64
+sc_delta_count()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return 0;
+}
+
+bool
+sc_is_running()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return false;
+}
+
+bool
+sc_pending_activity_at_current_time()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return false;
+}
+
+bool
+sc_pending_activity_at_future_time()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return false;
+}
+
+bool
+sc_pending_activity()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return false;
+}
+
+sc_time
+sc_time_to_pending_activity()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return sc_time();
+}
+
+sc_status
+sc_get_status()
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    return SC_ELABORATION;
+}
+
 } // namespace sc_core
diff --git a/src/systemc/ext/core/_using.hh b/src/systemc/ext/core/_using.hh
index 3f8bfec..5f5a23a 100644
--- a/src/systemc/ext/core/_using.hh
+++ b/src/systemc/ext/core/_using.hh
@@ -53,6 +53,34 @@
 
 using sc_core::sc_argc;
 using sc_core::sc_argv;
+using sc_core::sc_starvation_policy;
+using sc_core::SC_RUN_TO_TIME;
+using sc_core::SC_EXIT_ON_STARVATION;
+using sc_core::sc_start;
+using sc_core::sc_pause;
+using sc_core::sc_set_stop_mode;
+using sc_core::sc_get_stop_mode;
+using sc_core::sc_stop_mode;
+using sc_core::SC_STOP_FINISH_DELTA;
+using sc_core::SC_STOP_IMMEDIATE;
+using sc_core::sc_stop;
+using sc_core::sc_time_stamp;
+using sc_core::sc_delta_count;
+using sc_core::sc_is_running;
+using sc_core::sc_pending_activity_at_current_time;
+using sc_core::sc_pending_activity_at_future_time;
+using sc_core::sc_pending_activity;
+using sc_core::sc_time_to_pending_activity;
+using sc_core::sc_get_status;
+using sc_core::SC_ELABORATION;
+using sc_core::SC_BEFORE_END_OF_ELABORATION;
+using sc_core::SC_END_OF_ELABORATION;
+using sc_core::SC_START_OF_SIMULATION;
+using sc_core::SC_RUNNING;
+using sc_core::SC_PAUSED;
+using sc_core::SC_STOPPED;
+using sc_core::SC_END_OF_SIMULATION;
+using sc_core::sc_status;
 
 using sc_core::sc_bind_proxy;
 using sc_core::SC_BIND_PROXY_NIL;
@@ -100,6 +128,12 @@
 using sc_core::sc_spawn;
 
 using sc_core::sc_time_unit;
+using sc_core::SC_FS;
+using sc_core::SC_PS;
+using sc_core::SC_NS;
+using sc_core::SC_US;
+using sc_core::SC_MS;
+using sc_core::SC_SEC;
 using sc_core::sc_time;
 using sc_core::SC_ZERO_TIME;
 using sc_core::sc_set_time_resolution;
diff --git a/src/systemc/ext/core/sc_main.hh b/src/systemc/ext/core/sc_main.hh
index 9bf0d0a..24e9350 100644
--- a/src/systemc/ext/core/sc_main.hh
+++ b/src/systemc/ext/core/sc_main.hh
@@ -30,6 +30,9 @@
 #ifndef __SYSTEMC_EXT_CORE_SC_MAIN_HH__
 #define __SYSTEMC_EXT_CORE_SC_MAIN_HH__
 
+#include "../dt/int/sc_nbdefs.hh"
+#include "sc_time.hh"
+
 extern "C" int sc_main(int argc, char *argv[]);
 
 namespace sc_core
@@ -39,6 +42,55 @@
     // The standard version of this function doesn't have these "const"
     // qualifiers, but the canonical SystemC implementation does.
     extern "C" const char *const *sc_argv();
+
+    enum sc_starvation_policy
+    {
+        SC_RUN_TO_TIME,
+        SC_EXIT_ON_STARVATION
+    };
+
+    void sc_start();
+    void sc_start(const sc_time &, sc_starvation_policy p=SC_RUN_TO_TIME);
+    static inline void
+    sc_start(double d, sc_time_unit t, sc_starvation_policy p=SC_RUN_TO_TIME)
+    {
+        sc_start(sc_time(d, t), p);
+    }
+
+    void sc_pause();
+
+    enum sc_stop_mode
+    {
+        SC_STOP_FINISH_DELTA,
+        SC_STOP_IMMEDIATE,
+    };
+
+    void sc_set_stop_mode(sc_stop_mode mode);
+    sc_stop_mode sc_get_stop_mode();
+
+    void sc_stop();
+
+    const sc_time &sc_time_stamp();
+    sc_dt::uint64 sc_delta_count();
+    bool sc_is_running();
+    bool sc_pending_activity_at_current_time();
+    bool sc_pending_activity_at_future_time();
+    bool sc_pending_activity();
+    sc_time sc_time_to_pending_activity();
+
+    enum sc_status
+    {
+        SC_ELABORATION = 0x1,
+        SC_BEFORE_END_OF_ELABORATION = 0x02,
+        SC_END_OF_ELABORATION = 0x04,
+        SC_START_OF_SIMULATION = 0x08,
+        SC_RUNNING = 0x10,
+        SC_PAUSED = 0x20,
+        SC_STOPPED = 0x40,
+        SC_END_OF_SIMULATION = 0x80
+    };
+
+    sc_status sc_get_status();
 } // namespace sc_core
 
 #endif  //__SYSTEMC_EXT_CORE_SC_MAIN_HH__
