diff --git a/model/wire/ndn-wire.cc b/model/wire/ndn-wire.cc
new file mode 100644
index 0000000..6b50340
--- /dev/null
+++ b/model/wire/ndn-wire.cc
@@ -0,0 +1,228 @@
+/** -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/* 
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Alexander Afanasyev
+ * 
+ * GNU 3.0 license, See the LICENSE file for more information
+ * 
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ndn-wire.h"
+
+#include "ns3/global-value.h"
+#include "ns3/integer.h"
+#include "ns3/ndn-common.h"
+#include "ns3/ndn-interest.h"
+#include "ns3/ndn-content-object.h"
+#include "ns3/ndn-header-helper.h"
+
+#include "ndnsim.h"
+#include "ndnsim/wire-ndnsim.h"
+#include "ccnb.h"
+#include "ccnb/wire-ccnb.h"
+
+NDN_NAMESPACE_BEGIN
+
+static
+GlobalValue g_wireFormat ("ndn::WireFormat", 
+                          "Default wire format for ndnSIM.  ndnSIM will be accepting packets "
+                          "in any supported packet formats, but if encoding requested, it will "
+                          "use default wire format to encode (0 for ndnSIM (default), 1 for CCNb)",
+                          IntegerValue (Wire::WIRE_FORMAT_NDNSIM),
+                          MakeIntegerChecker<int32_t> ());
+
+static inline uint32_t
+GetWireFormat ()
+{
+  static int32_t format = -1;
+  if (format >= 0)
+    return format;
+
+  IntegerValue value;
+  g_wireFormat.GetValue (value);
+  format = value.Get ();
+
+  return format;
+}
+
+Ptr<Packet>
+Wire::FromInterest (Ptr<const Interest> interest, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+{
+  if (wireFormat == WIRE_FORMAT_DEFAULT)
+    wireFormat = GetWireFormat ();
+    
+  if (wireFormat == WIRE_FORMAT_NDNSIM)
+    return wire::ndnSIM::Interest::ToWire (interest);
+  else if (wireFormat == WIRE_FORMAT_CCNB)
+    return wire::ccnb::Interest::ToWire (interest);
+  else
+    {
+      NS_FATAL_ERROR ("Unsupported format requested");
+      return 0;
+    }
+}
+
+Ptr<Interest>
+Wire::ToInterest (Ptr<Packet> packet, int8_t wireFormat/* = WIRE_FORMAT_AUTODETECT*/)
+{
+  if (wireFormat == WIRE_FORMAT_AUTODETECT)
+    {
+      try
+        {
+          HeaderHelper::Type type = HeaderHelper::GetNdnHeaderType (packet);
+          switch (type)
+            {
+            case HeaderHelper::INTEREST_NDNSIM:
+              {
+                return wire::ndnSIM::Interest::FromWire (packet);
+              }
+            case HeaderHelper::INTEREST_CCNB:
+              {
+                return wire::ccnb::Interest::FromWire (packet);
+              }
+            case HeaderHelper::CONTENT_OBJECT_NDNSIM:
+            case HeaderHelper::CONTENT_OBJECT_CCNB:
+              NS_FATAL_ERROR ("Data packet supplied for InterestFromWire function");
+              break;
+            }
+
+          // exception will be thrown if packet is not recognized
+        }
+      catch (UnknownHeaderException)
+        {
+          NS_FATAL_ERROR ("Unknown NDN header");
+          return 0;
+        }
+    }
+  else
+    {
+      if (wireFormat == WIRE_FORMAT_NDNSIM)
+        return wire::ndnSIM::Interest::FromWire (packet);
+      else if (wireFormat == WIRE_FORMAT_CCNB)
+        return wire::ccnb::Interest::FromWire (packet);
+      else
+        {
+          NS_FATAL_ERROR ("Unsupported format requested");
+          return 0;
+        }
+    }
+}
+
+Ptr<Packet>
+Wire::FromData (Ptr<const ContentObject> data, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+{
+  if (wireFormat == WIRE_FORMAT_DEFAULT)
+    wireFormat = GetWireFormat ();
+
+  if (wireFormat == WIRE_FORMAT_NDNSIM)
+    return wire::ndnSIM::Data::ToWire (data);
+  else if (wireFormat == WIRE_FORMAT_CCNB)
+    return wire::ccnb::Data::ToWire (data);
+  else
+    {
+      NS_FATAL_ERROR ("Unsupported format requested");
+      return 0;
+    }
+}
+
+Ptr<ContentObject>
+Wire::ToData (Ptr<Packet> packet, int8_t wireFormat/* = WIRE_FORMAT_AUTODETECT*/)
+{
+  if (wireFormat == WIRE_FORMAT_AUTODETECT)
+    {
+      try
+        {
+          HeaderHelper::Type type = HeaderHelper::GetNdnHeaderType (packet);
+          switch (type)
+            {
+            case HeaderHelper::CONTENT_OBJECT_NDNSIM:
+              {
+                return wire::ndnSIM::Data::FromWire (packet);
+              }
+            case HeaderHelper::CONTENT_OBJECT_CCNB:
+              {
+                return wire::ccnb::Data::FromWire (packet);
+              }
+            case HeaderHelper::INTEREST_NDNSIM:
+            case HeaderHelper::INTEREST_CCNB:
+              NS_FATAL_ERROR ("Interest supplied for DataFromWire function");
+              break;
+            }
+
+          // exception will be thrown if packet is not recognized
+        }
+      catch (UnknownHeaderException)
+        {
+          NS_FATAL_ERROR ("Unknown NDN header");
+          return 0;
+        }
+    }
+  else
+    {
+      if (wireFormat == WIRE_FORMAT_NDNSIM)
+        return wire::ndnSIM::Data::FromWire (packet);
+      else if (wireFormat == WIRE_FORMAT_CCNB)
+        return wire::ccnb::Data::FromWire (packet);
+      else
+        {
+          NS_FATAL_ERROR ("Unsupported format requested");
+          return 0;
+        }
+    }
+}
+
+
+uint32_t
+Wire::FromNameSize (Ptr<const Name> name, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+{
+  if (wireFormat == WIRE_FORMAT_DEFAULT)
+    wireFormat = GetWireFormat ();
+
+  if (wireFormat == WIRE_FORMAT_NDNSIM)
+    return wire::NdnSim::SerializedSizeName (*name);
+  else if (wireFormat == WIRE_FORMAT_CCNB)
+    return wire::Ccnb::SerializedSizeName (*name);
+  else
+    {
+      NS_FATAL_ERROR ("Unsupported format requested");
+      return 0;
+    }
+}
+  
+void
+Wire::FromName (Buffer::Iterator start, Ptr<const Name> name, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+{
+  if (wireFormat == WIRE_FORMAT_DEFAULT)
+    wireFormat = GetWireFormat ();
+
+  if (wireFormat == WIRE_FORMAT_NDNSIM)
+    wire::NdnSim::SerializedSizeName (*name);
+  else if (wireFormat == WIRE_FORMAT_CCNB)
+    wire::Ccnb::SerializedSizeName (*name);
+  else
+    {
+      NS_FATAL_ERROR ("Unsupported format requested");
+    }
+}
+
+Ptr<Name>
+Wire::ToName (Buffer::Iterator start, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+{
+  if (wireFormat == WIRE_FORMAT_DEFAULT)
+    wireFormat = GetWireFormat ();
+
+  if (wireFormat == WIRE_FORMAT_NDNSIM)
+    return wire::NdnSim::DeserializeName (start);
+  else if (wireFormat == WIRE_FORMAT_CCNB)
+    {
+      return wire::Ccnb::DeserializeName (start);
+      return 0;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unsupported format requested");
+    }
+}
+
+NDN_NAMESPACE_END
diff --git a/model/wire/ndn-wire.h b/model/wire/ndn-wire.h
new file mode 100644
index 0000000..e83c217
--- /dev/null
+++ b/model/wire/ndn-wire.h
@@ -0,0 +1,67 @@
+/** -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/* 
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Alexander Afanasyev
+ * 
+ * GNU 3.0 license, See the LICENSE file for more information
+ * 
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef NDN_WIRE_H
+#define NDN_WIRE_H
+
+#include "ns3/buffer.h"
+
+#include "ns3/ndn-common.h"
+#include "ns3/ndn-name.h"
+#include "ns3/ndn-interest.h"
+#include "ns3/ndn-content-object.h"
+
+NDN_NAMESPACE_BEGIN
+
+struct Wire
+{
+  enum
+    {
+      WIRE_FORMAT_DEFAULT = -2,
+      WIRE_FORMAT_AUTODETECT = -1,
+    
+      WIRE_FORMAT_NDNSIM = 0,
+      WIRE_FORMAT_CCNB = 1
+    };
+
+  static Ptr<Packet>
+  FromInterest (Ptr<const Interest> interest, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+
+  static Ptr<Interest>
+  ToInterest (Ptr<Packet> packet, int8_t type = WIRE_FORMAT_AUTODETECT);
+
+  static Ptr<Packet>
+  FromData (Ptr<const ContentObject> data, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+
+  static Ptr<ContentObject>
+  ToData (Ptr<Packet> packet, int8_t type = WIRE_FORMAT_AUTODETECT);
+
+  /*
+   * @brief Get size of buffer to fit wire-formatted name object
+   */
+  static uint32_t
+  FromNameSize (Ptr<const Name> name, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+  
+  /**
+   * @brief Convert name to wire format
+   */
+  static void
+  FromName (Buffer::Iterator start, Ptr<const Name> name, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+
+  /**
+   * @brief Convert name from wire format
+   */
+  static Ptr<Name>
+  ToName (Buffer::Iterator start, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+};
+
+NDN_NAMESPACE_END
+
+#endif // NDN_WIRE_H
