// Connect new CPU to old CPU's memory only if new CPU isn't
     // connected to anything.  Also connect old CPU's memory to new
     // CPU.
-    Port *peer;
-    if (ic->getPeer() == NULL || ic->getPeer()->isDefaultPort()) {
-        peer = oldCPU->getPort("icache_port")->getPeer();
+    if (!ic->isConnected()) {
+        Port *peer = oldCPU->getPort("icache_port")->getPeer();
         ic->setPeer(peer);
-    } else {
-        peer = ic->getPeer();
+        peer->setPeer(ic);
     }
-    peer->setPeer(ic);
 
-    if (dc->getPeer() == NULL || dc->getPeer()->isDefaultPort()) {
-        peer = oldCPU->getPort("dcache_port")->getPeer();
+    if (!dc->isConnected()) {
+        Port *peer = oldCPU->getPort("dcache_port")->getPeer();
         dc->setPeer(peer);
-    } else {
-        peer = dc->getPeer();
+        peer->setPeer(dc);
     }
-    peer->setPeer(dc);
 }
 
 
 
 Bridge::init()
 {
     // Make sure that both sides are connected to.
-    if (portA.getPeer() == NULL || portB.getPeer() == NULL)
+    if (!portA.isConnected() || !portB.isConnected())
         fatal("Both ports of bus bridge are not connected to a bus.\n");
 
     if (portA.peerBlockSize() != portB.peerBlockSize())
 
 #include "mem/mem_object.hh"
 #include "mem/port.hh"
 
-class defaultPeerPortClass: public Port
+class DefaultPeerPort : public Port
 {
   protected:
     void blowUp()
     {
-        fatal("Unconnected port!");
+        fatal("%s: Unconnected port!", peer->name());
     }
 
   public:
-    defaultPeerPortClass() : Port("default_port")
-    {}
+    DefaultPeerPort()
+        : Port("default_port")
+    { }
 
     bool recvTiming(PacketPtr)
     {
         blowUp();
     }
 
-    bool isDefaultPort() { return true; }
+    bool isDefaultPort() const { return true; }
+};
 
-} defaultPeerPort;
+DefaultPeerPort defaultPeerPort;
 
-Port::Port() : peer(&defaultPeerPort), owner(NULL)
+Port::Port()
+    : peer(&defaultPeerPort), owner(NULL)
 {
 }
 
-Port::Port(const std::string &_name, MemObject *_owner) :
-    portName(_name), peer(&defaultPeerPort), owner(_owner)
+Port::Port(const std::string &_name, MemObject *_owner)
+    : portName(_name), peer(&defaultPeerPort), owner(_owner)
+{
+}
+
+Port::~Port()
 {
 }
 
 Port::setPeer(Port *port)
 {
     DPRINTF(Config, "setting peer to %s\n", port->name());
+
     peer = port;
 }
 
 
  */
 class Port
 {
-  private:
-
+  protected:
     /** Descriptive name (for DPRINTF output) */
     mutable std::string portName;
 
     /** Return port name (for DPRINTF). */
     const std::string &name() const { return portName; }
 
-    virtual ~Port() {};
+    virtual ~Port();
 
     // mey be better to use subclasses & RTTI?
     /** Holds the ports status.  Currently just that a range recomputation needs
      * demise. */
     void removeConn();
 
-    virtual bool isDefaultPort() { return false; }
+    virtual bool isDefaultPort() const { return false; }
+
+    bool isConnected() { return peer && !peer->isDefaultPort(); }
 
   protected: