diff --git a/scripts/GtpV2StackCodeGen/groupedIECodeGen.py b/scripts/GtpV2StackCodeGen/groupedIECodeGen.py
new file mode 100644
index 0000000..072ccc0
--- /dev/null
+++ b/scripts/GtpV2StackCodeGen/groupedIECodeGen.py
@@ -0,0 +1,271 @@
+# Copyright 2019-present Infosys Limited     
+# SPDX-License-Identifier: Apache-2.0
+
+
+import re
+import os
+
+from template import Template
+from xlUtils import xlUtils,wb
+templateData = {}
+templateData['instList']=[]
+grpIeDataTypeData={}
+grpIeDataTypeData['grpList']=[]
+grpIeDataTypeData['grpTypeList']=[]
+class GenerateGrpIeClass():
+    def __init__( self ):
+        
+        self.groupIEParser()
+    
+    def groupIEParser(self):
+        
+        
+        sheet = wb['Grouped IE Modeling']
+        state = ''
+        
+        data = {}
+        grpIeData = {}
+        currentGrpie = ''
+        currentMsg = ''
+        currentVar = ''
+        currentInstance = ''
+        currentInstanceValue = 0
+        grpIeList = []
+        ieDetailsList = []
+        ieList = []
+       
+        for i in range(1,sheet.max_row+1):
+            
+            cell_value_B = xlUtils.getCellValue(sheet,i,'B')
+            
+            mGroupedIeDefStart = re.search('Grouped IE Definition Start:(\w+):(\d+):(\w+):(\w+):Instance\[(\d+)]',str(cell_value_B))
+            mGroupedIeDefEnd = re.search('Grouped IE Definition End:(\w+):(\w+)',str(cell_value_B))
+            
+            if mGroupedIeDefStart:
+                
+                state = 'StartDetected'
+                currentGrpie = mGroupedIeDefStart.group(1)
+                currentMsg = mGroupedIeDefStart.group(4)
+                currentVar = mGroupedIeDefStart.group(3)
+                currentInstanceValue = mGroupedIeDefStart.group(5)
+                currentInstance = currentVar + 'In' + currentMsg
+                
+                if currentGrpie not in grpIeList:
+                     grpIeList.append(currentGrpie)
+                     data['grpIeList'] = grpIeList
+                data['grpIeDetails'] = {}
+                data['grpIeDetails'][currentGrpie] = {}
+                data['grpIeDetails'][currentGrpie]['ieTypeValue'] = mGroupedIeDefStart.group(2)
+                data['grpIeDetails'][currentGrpie]['instList'] = []
+                data['grpIeDetails'][currentGrpie]['instList'].append(currentInstance)
+                data['grpIeDetails'][currentGrpie][currentInstance] = {}
+                data['grpIeDetails'][currentGrpie][currentInstance]['instance'] = currentInstanceValue
+                grpIeData = data['grpIeDetails'][currentGrpie][currentInstance]
+                grpIeData['msgName'] = currentMsg
+                
+            elif mGroupedIeDefEnd:
+                state = 'EndDetected'
+                grpIeData = {} 
+                ieList = []
+                grpIeList=[]
+                ieDetailsList = []
+               
+                GenerateGrpIeClass.generateGroupedIeClasses(data)
+                GenerateGrpIeClass.prepareGrpIeMakeFile()
+                
+                
+            elif state == 'StartDetected':
+                state = 'IeListStart'
+                
+            elif state == 'IeListStart':
+                
+                if xlUtils.getCellValue(sheet,i,'D') != None:
+                    ieData = {}
+                    ieDescription = xlUtils.getCellValue(sheet,i,'D')
+                    ieData['ieDescription'] = xlUtils.getCellValue(sheet,i,'D')
+                    ieData['presence'] = xlUtils.getCellValue(sheet,i,'E')
+                    ieData['grouped'] = xlUtils.getCellValue(sheet,i,'B')
+                    ieData['cardinality'] = xlUtils.getCellValue(sheet,i,'C')
+                    ieData['instance'] = xlUtils.getCellValue(sheet,i,'H') 
+                    
+                    if ieData['cardinality'] == None:
+                        ieData['cardinality'] = 1 
+                    ieTypeDescription = xlUtils.getCellValue(sheet,i,'G')
+                    ieData['ieTypeDescription'] = ieTypeDescription
+                    
+                    ieVarName  = xlUtils.getVarNameFromString(ieDescription,0)
+                    
+                    ieTypeName  = xlUtils.getVarNameFromString(ieTypeDescription,1)
+                    
+                    if ieData['grouped'] == 'Yes':
+                        ieData['ieGroupTypeName'] = ieVarName.capitalize() + 'In' + currentMsg
+                        
+                    ieData['ieVarName'] = ieVarName
+                    ieData['ieTypeName'] = ieTypeName
+                    
+                    
+                    ieList.append(ieVarName)
+                    grpIeData['ieList'] = ieList
+                    grpIeData['ieDetails'] = {}
+                    grpIeData['ieDetails'][ieVarName] = ieData
+                    ieDetailsList.append(grpIeData['ieDetails'])
+                    grpIeData['ieDetails'] = ieDetailsList
+                    
+        
+    def generateGroupedIeClasses(data):
+        parsedData = data
+        
+        for grpIe in parsedData['grpIeList']:
+            
+            grpIeDetails = parsedData['grpIeDetails'][grpIe]
+            
+            GenerateGrpIeClass.generateGroupedIeClass(grpIeDetails,grpIe)
+            GenerateGrpIeClass.generateGroupedIeDataType(grpIeDetails, grpIe)
+    def generateGroupedIeClass(grpIeDetails,grpIe):
+        
+        templateData['fileName'] = grpIe[0].lower()+grpIe[1:] + 'Ie'
+        templateData['className'] = grpIe + 'Ie'
+        templateData['classNameUC'] = templateData['fileName'].upper()
+        fileName=templateData['fileName']
+
+        for inst in grpIeDetails['instList']:
+            instanceInfo = {}
+            instDetails  = grpIeDetails[inst]
+            GenerateGrpIeClass.generateGroupedIeInstanceClass(instDetails, inst)
+            
+            instanceInfo['className'] = inst
+            instanceInfo['fileName'] = inst[0].lower()+inst[1:]
+            instanceInfo['msgType'] =  instDetails['msgName'] + 'MsgType'
+            instanceInfo['instance'] = instDetails['instance']
+            
+            if instanceInfo not in templateData['instList']:
+                templateData['instList'].append(instanceInfo)
+            
+        templateData[fileName]=[inst for inst in templateData['instList'] if grpIe in inst['className']]                
+           
+        outputDir = '../../src/gtpV2Codec/ieClasses'
+        ttFileNameCpp = 'tts/grpietemplate.cpp.tt'
+        ttFileNameH = 'tts/grpietemplate.h.tt'
+        xlUtils.templateProcess(templateData,ttFileNameCpp,ttFileNameH,outputDir,outputDir)
+        
+        objectfile ='ieClasses/' + templateData['fileName'] + '.o'
+        sourcefile = 'ieClasses/' + templateData['fileName'] + '.cpp'
+        xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
+    
+    def generateGroupedIeDataType(grpIeDetails, grpIe):
+        grpIeInfo={}
+        
+        grpIeInfo['iePresenceList']=[]
+        grpIeTypeInfo={}
+        grpIeTypeInfo['grpIeTypeName']=grpIe + 'IeType'
+        grpIeTypeInfo['grpIeTypeValue']=grpIeDetails['ieTypeValue']
+        if grpIeTypeInfo not in grpIeDataTypeData['grpTypeList']:
+            grpIeDataTypeData['grpTypeList'].append(grpIeTypeInfo)
+        
+        for inst in grpIeDetails['instList']:
+            
+            instDetails  = grpIeDetails[inst]
+            grpIeInfo={}
+            grpIeInfo['iePresenceList']=[]
+            grpIeInfo['grpIeName']= inst+'Data'
+            grpIeInfo['ieList']=[]
+            for ieDict in instDetails['ieDetails']:
+                for ieDetails in ieDict:
+                    if ieDict[ieDetails]['presence']!='M':
+                        grpIeInfo['iePresenceList'].append(ieDict[ieDetails]['ieVarName']+'IePresent')
+                    ieInfo={}
+                    ieInfo['ieTypeName']=ieDict[ieDetails]['ieTypeName']+'IeData'
+                    ieInfo['ieVarName']=ieDict[ieDetails]['ieVarName']
+                    grpIeInfo['ieList'].append(ieInfo)
+        
+        if grpIeInfo not in grpIeDataTypeData['grpList']:
+            grpIeDataTypeData['grpList'].append(grpIeInfo)
+        template = Template()
+        ttFileNamefactoryH = 'tts/grpIeDataTypetemplate.h.tt'
+        outputDir = '../../src/gtpV2Codec/ieClasses/'
+        
+        if not os.path.exists(outputDir):
+            os.makedirs(outputDir)
+        outputFileName = 'gtpV2GrpIeDataTypes.h'
+        template.__init__({'OUTPUT' : outputFileName, 'OUTPUT_PATH' : outputDir})
+        template.process(ttFileNamefactoryH, {'tempdata' : grpIeDataTypeData})
+        
+    def generateGroupedIeInstanceClass(instDetails, inst):
+        templateInstData = {}
+        ieTypeList = []
+        ieTypeDetailsList = []
+       
+        ieInfoList =[]
+       
+        templateInstData['fileName'] = inst[0].lower()+inst[1:]
+        
+        templateInstData['msgClassName'] = inst
+        templateInstData['classNameUC'] = templateInstData['fileName'].upper()
+        
+        for ieEntry in instDetails['ieList']:
+            
+            ieInfo = {}
+            ieTypeInfo = {}
+            
+            ies = instDetails['ieDetails']
+            for x in ies:
+                
+                ie = x.get(ieEntry)
+                
+                if ie != None and ieEntry == ie.get('ieVarName'):
+                    ieInfo['ieName'] =  ie['ieVarName']
+                    ieInfo['ieVarName'] = ie['ieVarName']
+                    ieInfo['ieType'] = ie['ieTypeName']
+                    ieInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
+                    ieInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
+                    ieInfo['iePresence'] = ie['presence']
+                    ieInfo['ieCardinality'] = ie['cardinality']
+                    ieInfo['instance'] = ie['instance']
+                    ieInfo['grouped'] = ie['grouped']
+                   
+                    ieType = ieInfo['ieType']
+                    
+                    ieTypeInfo['ieName'] =  ie['ieVarName']
+                    ieTypeInfo['ieVarName'] = ie['ieVarName']
+                    ieTypeInfo['ieType'] = ie['ieTypeName']
+                    ieTypeInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
+                    ieTypeInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
+                    ieTypeInfo['iePresence'] = ie['presence']
+                    ieTypeInfo['ieCardinality'] = ie['cardinality']
+                    ieTypeInfo['instance'] = ie['instance']
+                    ieTypeInfo['grouped'] = ie['grouped']
+                                        
+                    if ieInfo['ieType'] not in ieTypeList:   
+                        ieTypeList.append(ieInfo['ieType'])
+                        templateInstData['ieTypeList'] = ieTypeList
+                                        
+                    if ieInfo not in ieInfoList:
+                                              
+                        ieInfoList.append(ieInfo)
+                        templateInstData['ieList'] = ieInfoList
+                    
+                    templateInstData['ieTypeDetails'] = {}
+                    templateInstData['ieTypeDetails'][ieType] = []
+                    if ieTypeInfo not in templateInstData['ieTypeDetails'][ieType]:
+                        templateInstData['ieTypeDetails'][ieType].append(ieTypeInfo)
+                        ieTypeDetailsList.append(templateInstData['ieTypeDetails'])
+                        templateInstData['ieTypeDetails'] = ieTypeDetailsList
+      
+        GenerateGrpIeClass.templateInstanceprocess(templateInstData)
+        outputDirCpp = 'ieClasses/'
+        objectfile = outputDirCpp +templateInstData['fileName'] + '.o'
+        sourcefile = outputDirCpp + templateInstData['fileName'] + '.cpp'
+        xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
+        
+    def templateInstanceprocess(templateInstData):
+        
+        ttFileNameInstCpp = 'tts/grpieinsttemplate.cpp.tt'
+        outputDir = '../../src/gtpV2Codec/ieClasses'
+        ttFileNameInstH = 'tts/grpieinsttemplate.h.tt'
+        xlUtils.templateProcess(templateInstData,ttFileNameInstCpp,ttFileNameInstH,outputDir,outputDir)
+            
+    def prepareGrpIeMakeFile():
+        outputDirCpp = 'ieClasses/manual/'
+        xlUtils.addToMakeSo("gtpV2Stack.so", outputDirCpp+'gtpV2GroupedIe.o',outputDirCpp+'gtpV2GroupedIe.cpp')
+                    
+GenerateGrpIeClass()
