diff --git a/ndn-cpp/transport/tcp-transport.cpp b/ndn-cpp/transport/tcp-transport.cpp
index 2fbfeeb..e454e4a 100644
--- a/ndn-cpp/transport/tcp-transport.cpp
+++ b/ndn-cpp/transport/tcp-transport.cpp
@@ -17,7 +17,8 @@
 {  
 }
 
-void TcpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
+void 
+TcpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
 {
   const TcpTransport::ConnectionInfo& tcpConnectionInfo = dynamic_cast<const TcpTransport::ConnectionInfo&>(connectionInfo);
   
@@ -35,14 +36,16 @@
   elementListener_ = &elementListener;
 }
 
-void TcpTransport::send(const unsigned char *data, unsigned int dataLength)
+void 
+TcpTransport::send(const unsigned char *data, unsigned int dataLength)
 {
   ndn_Error error;
   if ((error = ndn_TcpTransport_send(&transport_, (unsigned char *)data, dataLength)))
     throw std::runtime_error(ndn_getErrorString(error));  
 }
 
-void TcpTransport::processEvents()
+void 
+TcpTransport::processEvents()
 {
   int receiveIsReady;
   ndn_Error error;
@@ -59,12 +62,14 @@
   ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
 }
 
-bool TcpTransport::getIsConnected()
+bool 
+TcpTransport::getIsConnected()
 {
   return isConnected_;
 }
 
-void TcpTransport::close()
+void 
+TcpTransport::close()
 {
   ndn_Error error;
   if ((error = ndn_TcpTransport_close(&transport_)))
diff --git a/ndn-cpp/transport/tcp-transport.hpp b/ndn-cpp/transport/tcp-transport.hpp
index 9e12ef6..1f8a573 100644
--- a/ndn-cpp/transport/tcp-transport.hpp
+++ b/ndn-cpp/transport/tcp-transport.hpp
@@ -35,15 +35,18 @@
      * Get the host given to the constructor.
      * @return A string reference for the host.
      */
-    const std::string& getHost() const { return host_; }
+    const std::string& 
+    getHost() const { return host_; }
     
     /**
      * Get the port given to the constructor.
      * @return The port number.
      */
-    unsigned short getPort() const { return port_; }
+    unsigned short 
+    getPort() const { return port_; }
     
-    virtual ~ConnectionInfo();
+    virtual 
+    ~ConnectionInfo();
     
   private:
     std::string host_;
diff --git a/ndn-cpp/transport/transport.cpp b/ndn-cpp/transport/transport.cpp
index bb28045..ae532db 100644
--- a/ndn-cpp/transport/transport.cpp
+++ b/ndn-cpp/transport/transport.cpp
@@ -15,27 +15,32 @@
 {  
 }
 
-void Transport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener) 
+void 
+Transport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener) 
 {
   throw logic_error("unimplemented");
 }
   
-void Transport::send(const unsigned char *data, unsigned int dataLength)
+void 
+Transport::send(const unsigned char *data, unsigned int dataLength)
 {
   throw logic_error("unimplemented");
 }
 
-void Transport::processEvents()
+void 
+Transport::processEvents()
 {
   throw logic_error("unimplemented");
 }
 
-bool Transport::getIsConnected()
+bool 
+Transport::getIsConnected()
 {
   throw logic_error("unimplemented");
 }
 
-void Transport::close()
+void 
+Transport::close()
 {
 }
 
diff --git a/ndn-cpp/transport/transport.hpp b/ndn-cpp/transport/transport.hpp
index c791a87..2f71096 100644
--- a/ndn-cpp/transport/transport.hpp
+++ b/ndn-cpp/transport/transport.hpp
@@ -28,16 +28,19 @@
    * @param connectionInfo A reference to an object of a subclass of ConnectionInfo.
    * @param elementListener Not a shared_ptr because we assume that it will remain valid during the life of this object.
    */
-  virtual void connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener);
+  virtual void 
+  connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener);
   
   /**
    * Set data to the host
    * @param data A pointer to the buffer of data to send.
    * @param dataLength The number of bytes in data.
    */
-  virtual void send(const unsigned char *data, unsigned int dataLength);
+  virtual void 
+  send(const unsigned char *data, unsigned int dataLength);
   
-  void send(const std::vector<unsigned char>& data)
+  void 
+  send(const std::vector<unsigned char>& data)
   {
     send(&data[0], data.size());
   }
@@ -49,14 +52,17 @@
    * @throw This may throw an exception for reading data or in the callback for processing the data.  If you
    * call this from an main event loop, you may want to catch and log/disregard all exceptions.
    */
-  virtual void processEvents() = 0;
+  virtual void 
+  processEvents() = 0;
 
-  virtual bool getIsConnected();
+  virtual bool 
+  getIsConnected();
   
   /**
    * Close the connection.  This base class implementation does nothing, but your derived class can override.
    */
-  virtual void close();
+  virtual void 
+  close();
   
   virtual ~Transport();
 };
diff --git a/ndn-cpp/transport/udp-transport.cpp b/ndn-cpp/transport/udp-transport.cpp
index 0cde016..d5e48cb 100644
--- a/ndn-cpp/transport/udp-transport.cpp
+++ b/ndn-cpp/transport/udp-transport.cpp
@@ -17,7 +17,8 @@
 {  
 }
 
-void UdpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
+void 
+UdpTransport::connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener)
 {
   const UdpTransport::ConnectionInfo& udpConnectionInfo = dynamic_cast<const UdpTransport::ConnectionInfo&>(connectionInfo);
   
@@ -35,14 +36,16 @@
   elementListener_ = &elementListener;
 }
 
-void UdpTransport::send(const unsigned char *data, unsigned int dataLength)
+void 
+UdpTransport::send(const unsigned char *data, unsigned int dataLength)
 {
   ndn_Error error;
   if ((error = ndn_UdpTransport_send(&transport_, (unsigned char *)data, dataLength)))
     throw std::runtime_error(ndn_getErrorString(error));  
 }
 
-void UdpTransport::processEvents()
+void 
+UdpTransport::processEvents()
 {
   int receiveIsReady;
   ndn_Error error;
@@ -59,12 +62,14 @@
   ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
 }
 
-bool UdpTransport::getIsConnected()
+bool 
+UdpTransport::getIsConnected()
 {
   return isConnected_;
 }
 
-void UdpTransport::close()
+void 
+UdpTransport::close()
 {
   ndn_Error error;
   if ((error = ndn_UdpTransport_close(&transport_)))
diff --git a/ndn-cpp/transport/udp-transport.hpp b/ndn-cpp/transport/udp-transport.hpp
index deb7dc5..3ea1703 100644
--- a/ndn-cpp/transport/udp-transport.hpp
+++ b/ndn-cpp/transport/udp-transport.hpp
@@ -35,15 +35,18 @@
      * Get the host given to the constructor.
      * @return A string reference for the host.
      */
-    const std::string& getHost() const { return host_; }
+    const std::string& 
+    getHost() const { return host_; }
     
     /**
      * Get the port given to the constructor.
      * @return The port number.
      */
-    unsigned short getPort() const { return port_; }
+    unsigned short 
+    getPort() const { return port_; }
     
-    virtual ~ConnectionInfo();
+    virtual 
+    ~ConnectionInfo();
 
   private:
     std::string host_;
@@ -62,14 +65,16 @@
    * @param connectionInfo A reference to a TcpTransport::ConnectionInfo.
    * @param elementListener Not a shared_ptr because we assume that it will remain valid during the life of this object.
    */
-  virtual void connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener);
+  virtual void 
+  connect(const Transport::ConnectionInfo& connectionInfo, ElementListener& elementListener);
   
   /**
    * Set data to the host
    * @param data A pointer to the buffer of data to send.
    * @param dataLength The number of bytes in data.
    */
-  virtual void send(const unsigned char *data, unsigned int dataLength);
+  virtual void 
+  send(const unsigned char *data, unsigned int dataLength);
 
   /**
    * Process any data to receive.  For each element received, call elementListener.onReceivedElement.
@@ -78,14 +83,17 @@
    * @throw This may throw an exception for reading data or in the callback for processing the data.  If you
    * call this from an main event loop, you may want to catch and log/disregard all exceptions.
    */
-  virtual void processEvents();
+  virtual void 
+  processEvents();
   
-  virtual bool getIsConnected();
+  virtual bool 
+  getIsConnected();
 
   /**
    * Close the connection to the host.
    */
-  virtual void close();
+  virtual void 
+  close();
 
   ~UdpTransport();
   
