diff --git a/.gitignore b/.gitignore
index cbdfd81..070f0ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,7 @@
 waf
 *~
 .DS_Store
+*\#
+*.txt
+*.pdf
+*.dot
\ No newline at end of file
diff --git a/apps/ccnx-consumer.cc b/apps/ccnx-consumer.cc
index d9d1ec8..eafa77d 100644
--- a/apps/ccnx-consumer.cc
+++ b/apps/ccnx-consumer.cc
@@ -108,7 +108,7 @@
   , m_seqMax (0) // don't request anything
 {
   NS_LOG_FUNCTION_NOARGS ();
-  
+
   m_rtt = CreateObject<RttMeanDeviation> ();
 }
 
@@ -136,7 +136,7 @@
   Time now = Simulator::Now ();
 
   Time rto = m_rtt->RetransmitTimeout ();
-  
+
   while (!m_seqTimeouts.empty ())
     {
       SeqTimeoutsContainer::index<i_timestamp>::type::iterator entry =
@@ -189,7 +189,7 @@
   uint32_t seq=std::numeric_limits<uint32_t>::max (); //invalid
 
   // std::cout << Simulator::Now ().ToDouble (Time::S) << "s max -> " << m_seqMax << "\n";
-
+  
   while (m_retxSeqs.size ())
     {
       seq = *m_retxSeqs.begin ();
@@ -218,7 +218,7 @@
       
       seq = m_seq++;
     }
-
+  
   // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << seq << "\n";
   
   //
@@ -297,7 +297,7 @@
       m_pathWeightsTrace (GetNode (), tag->GetSourceNode (), seq, tag->GetTotalWeight ());
       // if (Names::FindName (GetNode ()) == "36")// || Names::FindName (GetNode ()) == "40"|| Names::FindName (GetNode ()) == "5")
       //   std::cout << Simulator::Now () << "\t" << boost::cref(*tag) << " = " << tag->GetTotalWeight () << "\n";
-    }
+}
 }
 
 void
diff --git a/apps/ccnx-producer.cc b/apps/ccnx-producer.cc
index 1148767..37209b3 100644
--- a/apps/ccnx-producer.cc
+++ b/apps/ccnx-producer.cc
@@ -111,7 +111,7 @@
   Ptr<CcnxContentObjectHeader> header = Create<CcnxContentObjectHeader> ();
   header->SetName (Create<CcnxNameComponents> (interest->GetName ()));
 
-  NS_LOG_INFO ("Respodning with ContentObject:\n" << boost::cref(*header));
+  NS_LOG_INFO ("node("<< GetNode()->GetId() <<") respodning with ContentObject:\n" << boost::cref(*header));
   
   Ptr<Packet> packet = Create<Packet> (m_virtualPayloadSize);
   // Ptr<const WeightsPathStretchTag> tag = origPacket->RemovePacketTag<WeightsPathStretchTag> ();
diff --git a/examples/car2car-wifi.cc b/examples/car2car-wifi.cc
new file mode 100644
index 0000000..2ef9f5e
--- /dev/null
+++ b/examples/car2car-wifi.cc
@@ -0,0 +1,106 @@
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/NDNabstraction-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("ThirdScriptExample");
+
+int 
+main (int argc, char *argv[])
+{
+  CommandLine cmd;
+  cmd.Parse (argc,argv);
+  NodeContainer producerNode;
+  producerNode.Create (1);
+  NodeContainer consumerNodes;
+  consumerNodes.Create(2);
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
+  NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
+  /*Ssid ssid = Ssid ("ns-3-ssid");
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false));*/
+  mac.SetType("ns3::AdhocWifiMac");
+  NetDeviceContainer producerDevices;
+  producerDevices = wifi.Install (phy, mac, producerNode);
+  /*mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid));
+  */
+  NetDeviceContainer consumerDevices;
+  consumerDevices = wifi.Install (phy, mac, consumerNodes);
+
+  MobilityHelper mobility;
+  mobility.SetPositionAllocator ("ns3::HighwayPositionAllocator",
+				 "Start", VectorValue(Vector(0.0, 0.0, 0.0)),
+				 "Direction", DoubleValue(0.0),
+				 "Length", DoubleValue(1000.0));
+  
+  mobility.SetMobilityModel("ns3::ConstantVelocityMobilityModel",
+			    "ConstantVelocity", VectorValue(Vector(26.8224, 0, 0)));
+  mobility.Install (producerNode);
+
+  mobility.SetMobilityModel("ns3::ConstantVelocityMobilityModel",
+			    "ConstantVelocity", VectorValue(Vector(26.8224, 0, 0)));
+  mobility.Install (consumerNodes);
+
+
+  // 1. Set RoutingHelper to support prefix
+  //InternetStackHelper stack;
+  //Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
+  //stack.SetRoutingHelper (ipv4RoutingHelper);
+
+  // 2. Install CCNx stack
+  NS_LOG_INFO ("Installing CCNx stack");
+  CcnxStackHelper ccnxHelper;
+  std::string strategy = "ns3::CcnxFloodingStrategy";
+  ccnxHelper.SetForwardingStrategy (strategy);
+  ccnxHelper.SetDefaultRoutes(true);
+  //ccnxHelper.EnableLimits (false, Seconds(0.1));
+  ccnxHelper.InstallAll ();
+
+  // 3. Install IP stack
+  //stack.Install (consumerNode);
+  //stack.Install (producerNode);
+
+  // 4. Assign Addresses
+  //Ipv4AddressHelper address;
+  //address.SetBase ("10.1.3.0", "255.255.255.0");
+  //address.Assign (consumerDevices);
+  //Ipv4InterfaceContainer producerInterface = address.Assign (producerDevices);
+
+  // 5. Populate FIB based on IPv4 global routing controller
+  //ccnxHelper.InstallFakeGlobalRoutes ();
+  //ccnxHelper.InstallRouteTo (producerNode.Get(0));
+
+  // 6. Set up applications
+  NS_LOG_INFO ("Installing Applications");
+  std::ostringstream prefix;
+  prefix << "/" << producerNode.Get(0)->GetId ();
+  
+  CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+  consumerHelper.SetPrefix (prefix.str ());
+  consumerHelper.SetAttribute ("MeanRate", StringValue ("1Mbps"));
+  ApplicationContainer consumers = consumerHelper.Install (consumerNodes);
+  
+  // consumers.Start (Seconds (0.0));
+  // consumers.Stop (finishTime);
+    
+  CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+  producerHelper.SetPrefix (prefix.str ());
+  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+  ApplicationContainer producers = producerHelper.Install (producerNode);
+
+  Simulator::Stop (Seconds (10.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+  return 0;
+}
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 781bb72..78266fe 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -124,8 +124,10 @@
 
   /// \todo Implement tracing, if requested
   
-  if (!IsUp ())
+  if (!IsUp ()){
+    NS_LOG_INFO("CcnxFace is not up.");
     return false;
+  }
 
   LeakBucket ();
   
diff --git a/wscript b/wscript
index a1fbfb7..2643c67 100644
--- a/wscript
+++ b/wscript
@@ -126,4 +126,8 @@
         obj = bld.create_ns3_program('vanet-ccnx', ['NDNabstraction', 'highway-mobility'])
         obj.source = 'examples/vanet-ccnx.cc'
 
+        obj = bld.create_ns3_program('car2car-wifi', ['internet', 'applications', 'visualizer', 'NDNabstraction'])
+        obj.source = 'examples/car2car-wifi.cc'
+
+
     bld.ns3_python_bindings()
