diff --git a/src/gtpV2Codec/ieClasses/epcoIe.cpp b/src/gtpV2Codec/ieClasses/epcoIe.cpp
new file mode 100644
index 0000000..8c9ed11
--- /dev/null
+++ b/src/gtpV2Codec/ieClasses/epcoIe.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2019-present Infosys Limited  
+ *   
+ * SPDX-License-Identifier: Apache-2.0    
+ */
+/******************************************************************************
+ *
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/GtpV2StackCodeGen/tts/ietemplate.cpp.tt>
+ ******************************************************************************/
+
+#include "epcoIe.h"
+#include "dataTypeCodecUtils.h"
+
+EpcoIe::EpcoIe() 
+{
+    ieType = 197;
+    // TODO
+
+}
+
+EpcoIe::~EpcoIe() {
+    // TODO Auto-generated destructor stub
+}
+
+bool EpcoIe::encodeEpcoIe(MsgBuffer &buffer, EpcoIeData const &data)
+{
+    if (!(DataTypeCodecUtils::encodeUint8Array16(buffer, data.epco)))
+    {
+    errorStream.add((char *)"Encoding of epco failed\n");
+    return false;
+    }
+
+    return true;
+}
+
+bool EpcoIe::decodeEpcoIe(MsgBuffer &buffer, EpcoIeData &data, Uint16 length)
+{     
+    // TODO optimize the length checks
+    
+    Uint16 ieBoundary = buffer.getCurrentIndex() + length;
+
+    Uint16 lengthLeft = length;
+    lengthLeft = ieBoundary - buffer.getCurrentIndex();
+    if (!(DataTypeCodecUtils::decodeUint8Array16(buffer, data.epco, lengthLeft, 0)))
+    {
+        errorStream.add((char *)"Failed to decode: epco\n");
+        return false;
+    }
+
+    // The IE is decoded now. The buffer index should be pointing to the 
+    // IE Boundary. If not, we have some more data left for the IE which we don't know
+    // how to decode
+    if (ieBoundary == buffer.getCurrentIndex())
+    {
+        return true;
+    }
+    else
+    {
+        errorStream.add((char *)"Unable to decode IE EpcoIe\n");
+        return false;
+    }
+}
+void EpcoIe::displayEpcoIe_v(EpcoIeData const &data, Debug &stream)
+{
+    stream.incrIndent();
+    stream.add((char *)"EpcoIeData:");
+    stream.incrIndent();
+    stream.endOfLine();
+  
+    stream.add((char *)"epco:");
+    stream.endOfLine();
+    DataTypeCodecUtils::displayUint8Array16_v(data.epco, stream);
+    stream.decrIndent();
+    stream.decrIndent();
+}
