diff --git a/src/systemc/ext/channel/sc_fifo_in.hh b/src/systemc/ext/channel/sc_fifo_in.hh
index 7f593c1..0952d77 100644
--- a/src/systemc/ext/channel/sc_fifo_in.hh
+++ b/src/systemc/ext/channel/sc_fifo_in.hh
@@ -49,6 +49,26 @@
     {}
     virtual ~sc_fifo_in() {}
 
+    // Deprecated binding constructors.
+    explicit sc_fifo_in(const sc_fifo_in_if<T> &interface) :
+        sc_port<sc_fifo_in_if<T>, 0>(interface)
+    {}
+    sc_fifo_in(const char *name, const sc_fifo_in_if<T> &interface) :
+        sc_port<sc_fifo_in_if<T>, 0>(name, interface)
+    {}
+    explicit sc_fifo_in(sc_port_b<sc_fifo_in_if<T> > &parent) :
+        sc_port<sc_fifo_in_if<T>, 0>(parent)
+    {}
+    sc_fifo_in(const char *name, sc_port_b<sc_fifo_in_if<T> > &parent) :
+        sc_port<sc_fifo_in_if<T>, 0>(name, parent)
+    {}
+    explicit sc_fifo_in(sc_port<sc_fifo_in_if<T>, 0> &parent) :
+        sc_port<sc_fifo_in_if<T>, 0>(parent)
+    {}
+    sc_fifo_in(const char *name, sc_port<sc_fifo_in_if<T>, 0> &parent) :
+        sc_port<sc_fifo_in_if<T>, 0>(name, parent)
+    {}
+
     void
     read(T &)
     {
diff --git a/src/systemc/ext/channel/sc_fifo_out.hh b/src/systemc/ext/channel/sc_fifo_out.hh
index 4beb15d..af2f6ef 100644
--- a/src/systemc/ext/channel/sc_fifo_out.hh
+++ b/src/systemc/ext/channel/sc_fifo_out.hh
@@ -50,6 +50,26 @@
     {}
     virtual ~sc_fifo_out() {}
 
+    // Deprecated binding constructors.
+    explicit sc_fifo_out(const sc_fifo_out_if<T> &interface) :
+        sc_port<sc_fifo_out_if<T>, 0>(interface)
+    {}
+    sc_fifo_out(const char *name, const sc_fifo_out_if<T> &interface) :
+        sc_port<sc_fifo_out_if<T>, 0>(name, interface)
+    {}
+    explicit sc_fifo_out(sc_port_b<sc_fifo_out_if<T> > &parent) :
+        sc_port<sc_fifo_out_if<T>, 0>(parent)
+    {}
+    sc_fifo_out(const char *name, sc_port_b<sc_fifo_out_if<T> > &parent) :
+        sc_port<sc_fifo_out_if<T>, 0>(name, parent)
+    {}
+    explicit sc_fifo_out(sc_port<sc_fifo_out_if<T>, 0> &parent) :
+        sc_port<sc_fifo_out_if<T>, 0>(parent)
+    {}
+    sc_fifo_out(const char *name, sc_port<sc_fifo_out_if<T>, 0> &parent) :
+        sc_port<sc_fifo_out_if<T>, 0>(name, parent)
+    {}
+
     void
     write(const T &)
     {
diff --git a/src/systemc/ext/channel/sc_in.hh b/src/systemc/ext/channel/sc_in.hh
index a283d0d..f691afe 100644
--- a/src/systemc/ext/channel/sc_in.hh
+++ b/src/systemc/ext/channel/sc_in.hh
@@ -52,6 +52,26 @@
     explicit sc_in(const char *name) : sc_port<sc_signal_in_if<T>, 1>(name) {}
     virtual ~sc_in() {}
 
+    // Deprecated binding constructors.
+    explicit sc_in(const sc_signal_in_if<T> &interface) :
+        sc_port<sc_signal_in_if<T>, 1>(interface)
+    {}
+    sc_in(const char *name, const sc_signal_in_if<T> &interface) :
+        sc_port<sc_signal_in_if<T>, 1>(name, interface)
+    {}
+    explicit sc_in(sc_port_b<sc_signal_in_if<T> > &parent) :
+        sc_port<sc_signal_in_if<T>, 1>(parent)
+    {}
+    sc_in(const char *name, sc_port_b<sc_signal_in_if<T> > &parent) :
+        sc_port<sc_signal_in_if<T>, 1>(name, parent)
+    {}
+    explicit sc_in(sc_port<sc_signal_in_if<T>, 1> &parent) :
+        sc_port<sc_signal_in_if<T>, 1>(parent)
+    {}
+    sc_in(const char *name, sc_port<sc_signal_in_if<T>, 1> &parent) :
+        sc_port<sc_signal_in_if<T>, 1>(name, parent)
+    {}
+
     virtual void
     bind(const sc_signal_in_if<T> &)
     {
@@ -152,6 +172,26 @@
         sc_port<sc_signal_in_if<bool>, 1>(name) {}
     virtual ~sc_in() {}
 
+    // Deprecated binding constructors.
+    explicit sc_in(const sc_signal_in_if<bool> &interface) :
+        sc_port<sc_signal_in_if<bool>, 1>(interface)
+    {}
+    sc_in(const char *name, const sc_signal_in_if<bool> &interface) :
+        sc_port<sc_signal_in_if<bool>, 1>(name, interface)
+    {}
+    explicit sc_in(sc_port_b<sc_signal_in_if<bool> > &parent) :
+        sc_port<sc_signal_in_if<bool>, 1>(parent)
+    {}
+    sc_in(const char *name, sc_port_b<sc_signal_in_if<bool> > &parent) :
+        sc_port<sc_signal_in_if<bool>, 1>(name, parent)
+    {}
+    explicit sc_in(sc_port<sc_signal_in_if<bool>, 1> &parent) :
+        sc_port<sc_signal_in_if<bool>, 1>(parent)
+    {}
+    sc_in(const char *name, sc_port<sc_signal_in_if<bool>, 1> &parent) :
+        sc_port<sc_signal_in_if<bool>, 1>(name, parent)
+    {}
+
     virtual void
     bind(const sc_signal_in_if<bool> &)
     {
@@ -292,6 +332,29 @@
     {}
     virtual ~sc_in() {}
 
+    // Deprecated binding constructors.
+    explicit sc_in(const sc_signal_in_if<sc_dt::sc_logic> &interface) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(interface)
+    {}
+    sc_in(const char *name,
+            const sc_signal_in_if<sc_dt::sc_logic> &interface) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, interface)
+    {}
+    explicit sc_in(sc_port_b<sc_signal_in_if<sc_dt::sc_logic> > &parent) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent)
+    {}
+    sc_in(const char *name,
+            sc_port_b<sc_signal_in_if<sc_dt::sc_logic> > &parent) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent)
+    {}
+    explicit sc_in(sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &parent) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent)
+    {}
+    sc_in(const char *name,
+            sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &parent) :
+        sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent)
+    {}
+
     virtual void
     bind(const sc_signal_in_if<sc_dt::sc_logic> &)
     {
diff --git a/src/systemc/ext/channel/sc_inout.hh b/src/systemc/ext/channel/sc_inout.hh
index 1802b2e..c183e0f 100644
--- a/src/systemc/ext/channel/sc_inout.hh
+++ b/src/systemc/ext/channel/sc_inout.hh
@@ -60,6 +60,26 @@
     {}
     virtual ~sc_inout() {}
 
+    // Deprecated binding constructors.
+    explicit sc_inout(const sc_signal_inout_if<T> &interface) :
+        sc_port<sc_signal_inout_if<T>, 1>(interface)
+    {}
+    sc_inout(const char *name, const sc_signal_inout_if<T> &interface) :
+        sc_port<sc_signal_inout_if<T>, 1>(name, interface)
+    {}
+    explicit sc_inout(sc_port_b<sc_signal_inout_if<T> > &parent) :
+        sc_port<sc_signal_inout_if<T>, 1>(parent)
+    {}
+    sc_inout(const char *name, sc_port_b<sc_signal_inout_if<T> > &parent) :
+        sc_port<sc_signal_inout_if<T>, 1>(name, parent)
+    {}
+    explicit sc_inout(sc_port<sc_signal_inout_if<T>, 1> &parent) :
+        sc_port<sc_signal_inout_if<T>, 1>(parent)
+    {}
+    sc_inout(const char *name, sc_port<sc_signal_inout_if<T>, 1> &parent) :
+        sc_port<sc_signal_inout_if<T>, 1>(name, parent)
+    {}
+
     void
     initialize(const T &)
     {
@@ -170,6 +190,26 @@
     {}
     virtual ~sc_inout() {}
 
+    // Deprecated binding constructors.
+    explicit sc_inout(const sc_signal_inout_if<bool> &interface) :
+        sc_port<sc_signal_inout_if<bool>, 1>(interface)
+    {}
+    sc_inout(const char *name, const sc_signal_inout_if<bool> &interface) :
+        sc_port<sc_signal_inout_if<bool>, 1>(name, interface)
+    {}
+    explicit sc_inout(sc_port_b<sc_signal_inout_if<bool> > &parent) :
+        sc_port<sc_signal_inout_if<bool>, 1>(parent)
+    {}
+    sc_inout(const char *name, sc_port_b<sc_signal_inout_if<bool> > &parent) :
+        sc_port<sc_signal_inout_if<bool>, 1>(name, parent)
+    {}
+    explicit sc_inout(sc_port<sc_signal_inout_if<bool>, 1> &parent) :
+        sc_port<sc_signal_inout_if<bool>, 1>(parent)
+    {}
+    sc_inout(const char *name, sc_port<sc_signal_inout_if<bool>, 1> &parent) :
+        sc_port<sc_signal_inout_if<bool>, 1>(name, parent)
+    {}
+
     void
     initialize(const bool &)
     {
@@ -320,6 +360,31 @@
     {}
     virtual ~sc_inout() {}
 
+    // Deprecated binding constructors.
+    explicit sc_inout(const sc_signal_inout_if<sc_dt::sc_logic> &interface) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(interface)
+    {}
+    sc_inout(const char *name,
+            const sc_signal_inout_if<sc_dt::sc_logic> &interface) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(name, interface)
+    {}
+    explicit sc_inout(
+            sc_port_b<sc_signal_inout_if<sc_dt::sc_logic> > &parent) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(parent)
+    {}
+    sc_inout(const char *name,
+            sc_port_b<sc_signal_inout_if<sc_dt::sc_logic> > &parent) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(name, parent)
+    {}
+    explicit sc_inout(
+            sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &parent) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(parent)
+    {}
+    sc_inout(const char *name,
+            sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &parent) :
+        sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(name, parent)
+    {}
+
     void
     initialize(const sc_dt::sc_logic &)
     {
diff --git a/src/systemc/ext/channel/sc_out.hh b/src/systemc/ext/channel/sc_out.hh
index e55a821..53bd255 100644
--- a/src/systemc/ext/channel/sc_out.hh
+++ b/src/systemc/ext/channel/sc_out.hh
@@ -45,6 +45,22 @@
     explicit sc_out(const char *name) : sc_inout<T>(name) {}
     virtual ~sc_out() {}
 
+    // Deprecated binding constructors.
+    explicit sc_out(const sc_signal_inout_if<T> &interface) :
+        sc_inout<T>(interface)
+    {}
+    sc_out(const char *name, const sc_signal_inout_if<T> &interface) :
+        sc_inout<T>(name, interface)
+    {}
+    explicit sc_out(sc_port_b<sc_signal_inout_if<T> > &parent) :
+        sc_inout<T>(parent)
+    {}
+    sc_out(const char *name, sc_port_b<sc_signal_inout_if<T> > &parent) :
+        sc_inout<T>(name, parent)
+    {}
+    explicit sc_out(sc_out<T> &parent) : sc_inout<T>(parent) {}
+    sc_out(const char *name, sc_out<T> &parent) : sc_inout<T>(name, parent) {}
+
     sc_out<T> &
     operator = (const T &)
     {
diff --git a/src/systemc/ext/core/sc_port.hh b/src/systemc/ext/core/sc_port.hh
index b2f9bd8..dfcae95 100644
--- a/src/systemc/ext/core/sc_port.hh
+++ b/src/systemc/ext/core/sc_port.hh
@@ -61,73 +61,73 @@
     void
     operator () (IF &)
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
     }
 
     void
     operator () (sc_port_b<IF> &)
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
     }
 
     virtual void
     bind(IF &)
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
     }
 
     virtual void
     bind(sc_port_b<IF> &)
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
     }
 
     int
     size() const
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return 0;
     }
 
     IF *
     operator -> ()
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (IF *)nullptr;
     }
 
     const IF *
     operator -> () const
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (IF *)nullptr;
     }
 
     IF *
     operator [] (int)
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (IF *)nullptr;
     }
 
     const IF *
     operator [] (int) const
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (IF *)nullptr;
     }
 
     virtual sc_interface *
     get_interface()
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (sc_interface *)nullptr;
     }
 
     virtual const sc_interface *
     get_interface() const
     {
-        warn_unimpl(__PRETTY_FUNCTION__);
+        this->warn_unimpl(__PRETTY_FUNCTION__);
         return (sc_interface *)nullptr;
     }
 
@@ -156,10 +156,50 @@
 class sc_port : public sc_port_b<IF>
 {
   public:
-    sc_port() : sc_port_b<IF>(sc_gen_unique_name("sc_port"), N, P) {}
+    sc_port() : sc_port_b<IF>(N, P) {}
     explicit sc_port(const char *name) : sc_port_b<IF>(name, N, P) {}
     virtual ~sc_port() {}
 
+    // Deprecated binding constructors.
+    explicit sc_port(const IF &interface) : sc_port_b<IF>(N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(const_cast<IF &>(interface));
+    }
+    sc_port(const char *name, const IF &interface) : sc_port_b<IF>(name, N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(const_cast<IF &>(interface));
+    }
+    explicit sc_port(sc_port_b<IF> &parent) : sc_port_b<IF>(N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(parent);
+    }
+    sc_port(const char *name, sc_port_b<IF> &parent) :
+        sc_port_b<IF>(name, N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(parent);
+    }
+    explicit sc_port(sc_port<IF, N, P> &parent) : sc_port_b<IF>(N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(parent);
+    }
+    sc_port(const char *name, sc_port<IF, N, P> &parent) :
+        sc_port_b<IF>(name, N, P)
+    {
+        this->warn_unimpl(__PRETTY_FUNCTION__);
+        // Should warn that these are deprecated. See Accellera sc_port.h.
+        sc_port_b<IF>::bind(parent);
+    }
+
     virtual const char *kind() const { return "sc_port"; }
 
   private:
