diff --git a/src/node.cpp b/src/node.cpp
index 99db103..a5f3d95 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -110,8 +110,8 @@
   signature->setSignature(Blob(signatureBits, (size_t)signatureBitsLength));
 }
 
-Node::Node(const ptr_lib::shared_ptr<Transport>& transport, const ptr_lib::shared_ptr<const Transport::ConnectionInfo>& connectionInfo)
-: transport_(transport), connectionInfo_(connectionInfo),
+Node::Node(const ptr_lib::shared_ptr<Transport>& transport)
+: transport_(transport),
   ndndIdFetcherInterest_(Name("/%C1.M.S.localhost/%C1.M.SRV/ndnd/KEY"), 4000.0)
 {
 }
@@ -121,7 +121,7 @@
 {
   // TODO: Properly check if we are already connected to the expected host.
   if (!transport_->getIsConnected())
-    transport_->connect(*connectionInfo_, *this);
+    transport_->connect(*this);
   
   uint64_t pendingInterestId = PendingInterest::getNextPendingInterestId();
   pendingInterestTable_.push_back(ptr_lib::shared_ptr<PendingInterest>(new PendingInterest
diff --git a/src/transport/tcp-transport.cpp b/src/transport/tcp-transport.cpp
index 6c5dc85..cb1c6e3 100644
--- a/src/transport/tcp-transport.cpp
+++ b/src/transport/tcp-transport.cpp
@@ -17,24 +17,19 @@
 
 namespace ndn {
 
-TcpTransport::ConnectionInfo::~ConnectionInfo()
-{  
-}
-
-TcpTransport::TcpTransport() 
-  : isConnected_(false), transport_(new struct ndn_TcpTransport), elementReader_(new struct ndn_BinaryXmlElementReader)
+TcpTransport::TcpTransport(const char *host, unsigned short port/* = 6363*/)
+  : host_(host), port_(port)
+  , isConnected_(false), transport_(new struct ndn_TcpTransport), elementReader_(new struct ndn_BinaryXmlElementReader)
 {
   ndn_TcpTransport_initialize(transport_.get());
   elementReader_->partialData.array = 0;
 }
 
 void 
-TcpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
+TcpTransport::connect(ElementListener& elementListener)
 {
-  const TcpTransport::ConnectionInfo& tcpConnectionInfo = dynamic_cast<const TcpTransport::ConnectionInfo&>(connectionInfo);
-  
   ndn_Error error;
-  if ((error = ndn_TcpTransport_connect(transport_.get(), (char *)tcpConnectionInfo.getHost().c_str(), tcpConnectionInfo.getPort())))
+  if ((error = ndn_TcpTransport_connect(transport_.get(), (char *)host_.c_str(), port_)))
     throw runtime_error(ndn_getErrorString(error)); 
 
   // TODO: This belongs in the socket listener.
diff --git a/src/transport/transport.cpp b/src/transport/transport.cpp
index 0dcf518..4d5db21 100644
--- a/src/transport/transport.cpp
+++ b/src/transport/transport.cpp
@@ -12,34 +12,6 @@
 
 namespace ndn {
 
-Transport::ConnectionInfo::~ConnectionInfo()
-{  
-}
-
-void 
-Transport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener) 
-{
-  throw logic_error("unimplemented");
-}
-  
-void 
-Transport::send(const uint8_t *data, size_t dataLength)
-{
-  throw logic_error("unimplemented");
-}
-
-void 
-Transport::processEvents()
-{
-  throw logic_error("unimplemented");
-}
-
-bool 
-Transport::getIsConnected()
-{
-  throw logic_error("unimplemented");
-}
-
 void 
 Transport::close()
 {
diff --git a/src/transport/udp-transport.cpp b/src/transport/udp-transport.cpp
index c8def39..aaf3d06 100644
--- a/src/transport/udp-transport.cpp
+++ b/src/transport/udp-transport.cpp
@@ -17,24 +17,19 @@
 
 namespace ndn {
 
-UdpTransport::ConnectionInfo::~ConnectionInfo()
-{  
-}
-
-UdpTransport::UdpTransport() 
-  : isConnected_(false), transport_(new struct ndn_UdpTransport), elementReader_(new struct ndn_BinaryXmlElementReader)
+UdpTransport::UdpTransport(const char *host, unsigned short port/* = 6363*/)
+  : host_(host), port_(port)
+  , isConnected_(false), transport_(new struct ndn_UdpTransport), elementReader_(new struct ndn_BinaryXmlElementReader)
 {
   ndn_UdpTransport_initialize(transport_.get());
   elementReader_->partialData.array = 0;
 }
 
 void 
-UdpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
+UdpTransport::connect(ElementListener& elementListener)
 {
-  const UdpTransport::ConnectionInfo& udpConnectionInfo = dynamic_cast<const UdpTransport::ConnectionInfo&>(connectionInfo);
-  
   ndn_Error error;
-  if ((error = ndn_UdpTransport_connect(transport_.get(), (char *)udpConnectionInfo.getHost().c_str(), udpConnectionInfo.getPort())))
+  if ((error = ndn_UdpTransport_connect(transport_.get(), (char *)host_.c_str(), port_)))
     throw runtime_error(ndn_getErrorString(error)); 
 
   // TODO: This belongs in the socket listener.
