diff --git a/src/mem/port.cc b/src/mem/port.cc
index 47f56e6..ab62ccf 100644
--- a/src/mem/port.cc
+++ b/src/mem/port.cc
@@ -51,8 +51,8 @@
 #include "base/trace.hh"
 #include "mem/mem_object.hh"
 
-Port::Port(const std::string &_name, MemObject& _owner, PortID _id)
-    : portName(_name), id(_id), owner(_owner)
+Port::Port(const std::string &_name, PortID _id)
+    : portName(_name), id(_id)
 {
 }
 
@@ -60,9 +60,8 @@
 {
 }
 
-BaseMasterPort::BaseMasterPort(const std::string& name, MemObject* owner,
-                               PortID _id)
-    : Port(name, *owner, _id), _baseSlavePort(NULL)
+BaseMasterPort::BaseMasterPort(const std::string &name, PortID _id)
+    : Port(name, _id), _baseSlavePort(NULL)
 {
 }
 
@@ -86,9 +85,8 @@
     return _baseSlavePort != NULL;
 }
 
-BaseSlavePort::BaseSlavePort(const std::string& name, MemObject* owner,
-                             PortID _id)
-    : Port(name, *owner, _id), _baseMasterPort(NULL)
+BaseSlavePort::BaseSlavePort(const std::string &name, PortID _id)
+    : Port(name, _id), _baseMasterPort(NULL)
 {
 }
 
@@ -115,8 +113,8 @@
 /**
  * Master port
  */
-MasterPort::MasterPort(const std::string& name, MemObject* owner, PortID _id)
-    : BaseMasterPort(name, owner, _id), _slavePort(NULL)
+MasterPort::MasterPort(const std::string& name, MemObject* _owner, PortID _id)
+    : BaseMasterPort(name, _id), _slavePort(NULL), owner(*_owner)
 {
 }
 
@@ -219,8 +217,8 @@
 /**
  * Slave port
  */
-SlavePort::SlavePort(const std::string& name, MemObject* owner, PortID id)
-    : BaseSlavePort(name, owner, id), _masterPort(NULL)
+SlavePort::SlavePort(const std::string& name, MemObject* _owner, PortID id)
+    : BaseSlavePort(name, id), _masterPort(NULL), owner(*_owner)
 {
 }
 
diff --git a/src/mem/port.hh b/src/mem/port.hh
index 39f6dea..2c30e31 100644
--- a/src/mem/port.hh
+++ b/src/mem/port.hh
@@ -76,17 +76,13 @@
      */
     const PortID id;
 
-    /** A reference to the MemObject that owns this port. */
-    MemObject& owner;
-
     /**
      * Abstract base class for ports
      *
      * @param _name Port name including the owners name
-     * @param _owner The MemObject that is the structural owner of this port
      * @param _id A port identifier for vector ports
      */
-    Port(const std::string& _name, MemObject& _owner, PortID _id);
+    Port(const std::string& _name, PortID _id);
 
     /**
      * Virtual destructor due to inheritance.
@@ -119,8 +115,7 @@
 
     BaseSlavePort* _baseSlavePort;
 
-    BaseMasterPort(const std::string& name, MemObject* owner,
-                   PortID id = InvalidPortID);
+    BaseMasterPort(const std::string& name, PortID id=InvalidPortID);
     virtual ~BaseMasterPort();
 
   public:
@@ -143,8 +138,7 @@
 
     BaseMasterPort* _baseMasterPort;
 
-    BaseSlavePort(const std::string& name, MemObject* owner,
-                  PortID id = InvalidPortID);
+    BaseSlavePort(const std::string& name, PortID id=InvalidPortID);
     virtual ~BaseSlavePort();
 
   public:
@@ -173,10 +167,14 @@
 
     SlavePort* _slavePort;
 
+  protected:
+
+    MemObject& owner;
+
   public:
 
-    MasterPort(const std::string& name, MemObject* owner,
-               PortID id = InvalidPortID);
+    MasterPort(const std::string& name, MemObject* _owner,
+               PortID id=InvalidPortID);
     virtual ~MasterPort();
 
     /**
@@ -350,10 +348,14 @@
 
     MasterPort* _masterPort;
 
+  protected:
+
+    MemObject& owner;
+
   public:
 
-    SlavePort(const std::string& name, MemObject* owner,
-              PortID id = InvalidPortID);
+    SlavePort(const std::string& name, MemObject* _owner,
+              PortID id=InvalidPortID);
     virtual ~SlavePort();
 
     /**
