Index: .gitignore
===================================================================
--- .gitignore	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ .gitignore	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -3,4 +3,5 @@
 ################################################################################
 *.o
+*.swp
 netslow
 /Netslow/.vs/Netslow/v14
Index: NetFlow9Processor.h
===================================================================
--- NetFlow9Processor.h	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ NetFlow9Processor.h	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -1,4 +1,6 @@
 #include "NetFlowDataTemplateCache.h"
 
+#ifndef NETFLOW9PROCESSOR
+#define NETFLOW9PROCESSOR
 class NetFlow9Processor{
 
@@ -6,5 +8,5 @@
 
 		NetFlowDataTemplateCache *dataTemplateCache;
-		NetFlowDataTemplate::DataTemplateItem_t *strtest;
+//		NetFlowDataTemplate::DataTemplateItem_t *strtest;
 
 		unsigned int ByteTouInt32(unsigned char b[], int base);
@@ -20,2 +22,4 @@
 
 };
+
+#endif
Index: NetFlowDataTemplate.cpp
===================================================================
--- NetFlowDataTemplate.cpp	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ NetFlowDataTemplate.cpp	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -1,1 +1,6 @@
 #include "NetFlowDataTemplate.h"
+
+NetFlowDataTemplate::NetFlowDataTemplate(unsigned short i, unsigned short c) {
+	id = i;
+	count = c;
+}
Index: NetFlowDataTemplate.h
===================================================================
--- NetFlowDataTemplate.h	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ NetFlowDataTemplate.h	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -1,3 +1,6 @@
 #include <list>
+
+#ifndef NETFLOWDATATEMPLATE
+#define NETFLOWDATATEMPLATE
 
 class NetFlowDataTemplate {
@@ -6,14 +9,23 @@
 	public:
 
-	typedef struct DataTemplateItem DataTemplateItem_t;
-	struct DataTemplateItem {
-		unsigned short field;
+	typedef struct Field Field_t;
+	struct Field {
+		unsigned short code;
 		unsigned short length;
 	};
 
+	std::list<Field_t*> Fields;
+
+	//Constructor (id, length)
+	NetFlowDataTemplate(unsigned short, unsigned short);
+	
+
 
 	private:
-
-	std::list<DataTemplateItem_t*> DataTemplate;
+	
+	unsigned short id;
+	unsigned short count;
 
 };
+
+#endif
Index: NetFlowDataTemplateCache.cpp
===================================================================
--- NetFlowDataTemplateCache.cpp	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ NetFlowDataTemplateCache.cpp	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -1,17 +1,44 @@
 #include "NetFlowDataTemplateCache.h"
+#include <stdlib.h>
+#include <stdexcept>
 
-void NetFlowDataTemplateCache::UpdateDataTemplate (int id) {
-	return;
+NetFlowDataTemplateCache::NetFlowDataTemplateCache(void) {
 }
 
-void NetFlowDataTemplateCache::AddDataTemplate (int id) {
-	return;
+bool NetFlowDataTemplateCache::AddDataTemplate (unsigned short id, NetFlowDataTemplate* dataTemplate) {
+	NetFlowDataTemplate *test;
+	try {
+		test = Cache.at(id);
+	}
+	catch (const std::out_of_range oor) {
+		//Out of range --> Not in Cache - Great!
+		Cache.at(id) = dataTemplate;
+		return true;
+	}
+	//Uh-oh - this ID is already in the cache
+	return 0;
 }
 
-bool NetFlowDataTemplateCache::ExistsDataTemplate (int id) {
+bool NetFlowDataTemplateCache::ExistsDataTemplate (unsigned short id) {
+	NetFlowDataTemplate *test;
+	try {
+		test = Cache.at(id);
+	}
+	catch (const std::out_of_range oor) {
+		//Out of range --> Not in Cache
+		return 0;
+	}
 	return 1;
 }
 
-NetFlowDataTemplate* NetFlowDataTemplateCache::GetDataTemplate (int id) {
-	return new NetFlowDataTemplate();
+NetFlowDataTemplate* NetFlowDataTemplateCache::GetDataTemplate (unsigned short id) {
+	NetFlowDataTemplate *dataTemplate;
+	try {
+		dataTemplate = Cache.at(id);
+	}
+	catch (const std::out_of_range oor) {
+		//Out of range --> Not in Cache
+		return 0;
+	}
+	return dataTemplate;
 }
Index: NetFlowDataTemplateCache.h
===================================================================
--- NetFlowDataTemplateCache.h	(revision 553240e8f812251da748633cdcd24a20c7b67e1c)
+++ NetFlowDataTemplateCache.h	(revision 76bebfc9d489e4da5fafbb89b34edf92254696a5)
@@ -1,15 +1,21 @@
 #include "NetFlowDataTemplate.h"
+#include <map>
+
+#ifndef NETFLOWDATATEMPLATECACHE
+#define NETFLOWDATATEMPLATECACHE
 
 class NetFlowDataTemplateCache{
 
     private:
-		NetFlowDataTemplate *fish;
+		std::map<unsigned short, NetFlowDataTemplate*> Cache;
 
     public:
 
-		void UpdateDataTemplate(int id);
-		void AddDataTemplate(int id);
-		bool ExistsDataTemplate(int id);
-		NetFlowDataTemplate* GetDataTemplate(int id);
+		NetFlowDataTemplateCache(void);
+		bool AddDataTemplate(unsigned short id, NetFlowDataTemplate*);
+		bool ExistsDataTemplate(unsigned short id);
+		NetFlowDataTemplate* GetDataTemplate(unsigned short id);
 		
 };
+
+#endif
