diff --git a/apps/ccnx-consumer-cbr.cc b/apps/ccnx-consumer-cbr.cc
index a7b848c..1727bcd 100644
--- a/apps/ccnx-consumer-cbr.cc
+++ b/apps/ccnx-consumer-cbr.cc
@@ -61,6 +61,7 @@
   : m_frequency (1.0)
 {
   NS_LOG_FUNCTION_NOARGS ();
+  m_seqMax = std::numeric_limits<uint32_t>::max ();
 }
 
 void
diff --git a/examples/vanet-ccnx.cc b/examples/vanet-ccnx.cc
new file mode 100644
index 0000000..54f8fa8
--- /dev/null
+++ b/examples/vanet-ccnx.cc
@@ -0,0 +1,140 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005-2009 Old Dominion University [ARBABI]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Hadi Arbabi <marbabi@cs.odu.edu>
+ */
+
+/*
+  This the starting point of the simulation and experiments.
+  The main function will parse the input and parameter settings.
+  Creates a highway and set the highway parameters. then bind the events (callbacks)
+  to the created controller and designed handlers. Sets the highway start and end time,
+  and eventually runs the simulation which is basically running a highway with a controller.
+  You can add your functions to controller to create various scenarios.
+*/
+
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+
+#include "math.h"
+
+#include "ns3/model.h"
+#include "ns3/highway.h"
+#include "ns3/vehicle-generator.h"
+#include "ns3/tinyxml.h"
+#include "ns3/highway-project-xml.h"
+#include "ns3/highway-xml.h"
+#include "ns3/wifi-configuration-xml.h"
+#include "ns3/highway-project.h"
+
+#include "ns3/ccnx-stack-helper.h"
+#include "ns3/ccnx-face-container.h"
+#include "ns3/ccnx-app-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("VanetCcnx");
+
+using namespace ns3;
+using namespace std;
+
+void
+EquipVehicle (Ptr<Vehicle> vehicle, Ptr<Highway> highway, double probability)
+{
+  NS_LOG_FUNCTION (vehicle->GetNode ()->GetId () << highway << probability);
+
+  CcnxStackHelper ccnxHelper;
+  ccnxHelper.SetDefaultRoutes (true);
+  Ptr<CcnxFaceContainer> faces = ccnxHelper.Install (vehicle->GetNode ());
+  NS_LOG_DEBUG ("Install CCNx stack. " << faces->GetN () << " faces available");
+
+
+  if (probability < 30)
+    {
+      CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+      producerHelper.SetPrefix ("/");
+      producerHelper.Install (vehicle->GetNode ());
+    }
+  else
+    {
+      CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
+      consumerHelper.SetAttribute ("LifeTime", StringValue("100s"));
+      consumerHelper.SetAttribute ("Frequency", StringValue("10"));
+      consumerHelper.SetPrefix ("/");
+      consumerHelper.Install (vehicle->GetNode ());
+    }
+}
+
+int
+main (int argc, char *argv[])
+{
+  string projectXmlFile = "";
+
+  CommandLine cmd;
+  cmd.AddValue ("project", "highway xml description", projectXmlFile);
+  cmd.Parse (argc, argv);
+  if (projectXmlFile == "")
+    {
+      std::cerr << "ERROR: --project option MUST be specified\n";
+      return 1;
+    }
+
+  std::ifstream testProjectFile (projectXmlFile.c_str ());
+  if (testProjectFile.bad ())
+    {
+      std::cerr << "ERROR: Cannot open project file\n";
+      return 2;
+    }
+  testProjectFile.close ();
+  
+  TiXmlDocument doc (projectXmlFile.c_str ());
+  doc.LoadFile ();
+  TiXmlHandle hDoc (&doc);
+  TiXmlElement* root = hDoc.FirstChildElement ().Element ();
+  TiXmlHandle hroot = TiXmlHandle (root);
+  HighwayProjectXml xml;
+  xml.LoadFromXml (hroot);
+
+  ns3::PacketMetadata::Enable ();
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
+  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
+  
+  HighwayProject project (xml);
+  // project.SetVehTraceFile (vehicleTraceFile);
+  // project.SetNetTraceFile (networkTraceFile);
+  
+  for (std::list<ns3::Ptr<ns3::VehicleGenerator> >::iterator generator = project.GetVehicleGenerators ().begin ();
+       generator != project.GetVehicleGenerators ().end ();
+       generator++)
+    {
+      (*generator)->TraceConnectWithoutContext ("NewVehicle", MakeCallback (EquipVehicle));
+    }
+  
+  project.Start ();
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  // Ptr<Highway> highway = project.getHighways ()[0];
+  // Simulator::Schedule (Seconds (10), &addCustomVehicle, highway);
+  // project.SetVehicleControlCallback (MakeCallback (&controlVehicle));
+
+  return 0;
+}
diff --git a/wscript b/wscript
index 034a24b..a1fbfb7 100644
--- a/wscript
+++ b/wscript
@@ -123,4 +123,7 @@
         obj = bld.create_ns3_program('congestion-zoom', ['NDNabstraction'])
         obj.source = 'examples/congestion-zoom.cc'
 
+        obj = bld.create_ns3_program('vanet-ccnx', ['NDNabstraction', 'highway-mobility'])
+        obj.source = 'examples/vanet-ccnx.cc'
+
     bld.ns3_python_bindings()
