diff --git a/include/mme-app/mmeStates/attachStart.h b/include/mme-app/mmeStates/attachStart.h
new file mode 100644
index 0000000..56df80b
--- /dev/null
+++ b/include/mme-app/mmeStates/attachStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachStart__
+#define __AttachStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachStart* Instance();
+
+			/****************************************
+			* AttachStart
+			*    Destructor
+			****************************************/
+			~AttachStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachStart
+			*    Private constructor
+			****************************************/
+			AttachStart();  
+	};
+};
+#endif // __AttachStart__
diff --git a/include/mme-app/mmeStates/attachWfAia.h b/include/mme-app/mmeStates/attachWfAia.h
new file mode 100644
index 0000000..b54c808
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfAia.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfAia.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfAia__
+#define __AttachWfAia__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfAia : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfAia* Instance();
+
+			/****************************************
+			* AttachWfAia
+			*    Destructor
+			****************************************/
+			~AttachWfAia();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfAia
+			*    Private constructor
+			****************************************/
+			AttachWfAia();  
+	};
+};
+#endif // __AttachWfAia__
diff --git a/include/mme-app/mmeStates/attachWfAttCmp.h b/include/mme-app/mmeStates/attachWfAttCmp.h
new file mode 100644
index 0000000..5913047
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfAttCmp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfAttCmp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfAttCmp__
+#define __AttachWfAttCmp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfAttCmp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfAttCmp* Instance();
+
+			/****************************************
+			* AttachWfAttCmp
+			*    Destructor
+			****************************************/
+			~AttachWfAttCmp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfAttCmp
+			*    Private constructor
+			****************************************/
+			AttachWfAttCmp();  
+	};
+};
+#endif // __AttachWfAttCmp__
diff --git a/include/mme-app/mmeStates/attachWfAuthResp.h b/include/mme-app/mmeStates/attachWfAuthResp.h
new file mode 100644
index 0000000..af8c4ba
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfAuthResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfAuthResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfAuthResp__
+#define __AttachWfAuthResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfAuthResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfAuthResp* Instance();
+
+			/****************************************
+			* AttachWfAuthResp
+			*    Destructor
+			****************************************/
+			~AttachWfAuthResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfAuthResp
+			*    Private constructor
+			****************************************/
+			AttachWfAuthResp();  
+	};
+};
+#endif // __AttachWfAuthResp__
diff --git a/include/mme-app/mmeStates/attachWfAuthRespValidate.h b/include/mme-app/mmeStates/attachWfAuthRespValidate.h
new file mode 100644
index 0000000..46cfe57
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfAuthRespValidate.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfAuthRespValidate.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfAuthRespValidate__
+#define __AttachWfAuthRespValidate__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfAuthRespValidate : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfAuthRespValidate* Instance();
+
+			/****************************************
+			* AttachWfAuthRespValidate
+			*    Destructor
+			****************************************/
+			~AttachWfAuthRespValidate();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfAuthRespValidate
+			*    Private constructor
+			****************************************/
+			AttachWfAuthRespValidate();  
+	};
+};
+#endif // __AttachWfAuthRespValidate__
diff --git a/include/mme-app/mmeStates/attachWfCsResp.h b/include/mme-app/mmeStates/attachWfCsResp.h
new file mode 100644
index 0000000..a9ebb84
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfCsResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfCsResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfCsResp__
+#define __AttachWfCsResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfCsResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfCsResp* Instance();
+
+			/****************************************
+			* AttachWfCsResp
+			*    Destructor
+			****************************************/
+			~AttachWfCsResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfCsResp
+			*    Private constructor
+			****************************************/
+			AttachWfCsResp();  
+	};
+};
+#endif // __AttachWfCsResp__
diff --git a/include/mme-app/mmeStates/attachWfEsmInfoCheck.h b/include/mme-app/mmeStates/attachWfEsmInfoCheck.h
new file mode 100644
index 0000000..13c0d24
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfEsmInfoCheck.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfEsmInfoCheck.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfEsmInfoCheck__
+#define __AttachWfEsmInfoCheck__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfEsmInfoCheck : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfEsmInfoCheck* Instance();
+
+			/****************************************
+			* AttachWfEsmInfoCheck
+			*    Destructor
+			****************************************/
+			~AttachWfEsmInfoCheck();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfEsmInfoCheck
+			*    Private constructor
+			****************************************/
+			AttachWfEsmInfoCheck();  
+	};
+};
+#endif // __AttachWfEsmInfoCheck__
diff --git a/include/mme-app/mmeStates/attachWfEsmInfoResp.h b/include/mme-app/mmeStates/attachWfEsmInfoResp.h
new file mode 100644
index 0000000..b710b26
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfEsmInfoResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfEsmInfoResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfEsmInfoResp__
+#define __AttachWfEsmInfoResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfEsmInfoResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfEsmInfoResp* Instance();
+
+			/****************************************
+			* AttachWfEsmInfoResp
+			*    Destructor
+			****************************************/
+			~AttachWfEsmInfoResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfEsmInfoResp
+			*    Private constructor
+			****************************************/
+			AttachWfEsmInfoResp();  
+	};
+};
+#endif // __AttachWfEsmInfoResp__
diff --git a/include/mme-app/mmeStates/attachWfIdentityResponse.h b/include/mme-app/mmeStates/attachWfIdentityResponse.h
new file mode 100644
index 0000000..52ce29c
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfIdentityResponse.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfIdentityResponse.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfIdentityResponse__
+#define __AttachWfIdentityResponse__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfIdentityResponse : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfIdentityResponse* Instance();
+
+			/****************************************
+			* AttachWfIdentityResponse
+			*    Destructor
+			****************************************/
+			~AttachWfIdentityResponse();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfIdentityResponse
+			*    Private constructor
+			****************************************/
+			AttachWfIdentityResponse();  
+	};
+};
+#endif // __AttachWfIdentityResponse__
diff --git a/include/mme-app/mmeStates/attachWfImsiValidateAction.h b/include/mme-app/mmeStates/attachWfImsiValidateAction.h
new file mode 100644
index 0000000..aeede2b
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfImsiValidateAction.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfImsiValidateAction.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfImsiValidateAction__
+#define __AttachWfImsiValidateAction__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfImsiValidateAction : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfImsiValidateAction* Instance();
+
+			/****************************************
+			* AttachWfImsiValidateAction
+			*    Destructor
+			****************************************/
+			~AttachWfImsiValidateAction();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfImsiValidateAction
+			*    Private constructor
+			****************************************/
+			AttachWfImsiValidateAction();  
+	};
+};
+#endif // __AttachWfImsiValidateAction__
diff --git a/include/mme-app/mmeStates/attachWfInitCtxtResp.h b/include/mme-app/mmeStates/attachWfInitCtxtResp.h
new file mode 100644
index 0000000..e6a37bc
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfInitCtxtResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfInitCtxtResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfInitCtxtResp__
+#define __AttachWfInitCtxtResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfInitCtxtResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfInitCtxtResp* Instance();
+
+			/****************************************
+			* AttachWfInitCtxtResp
+			*    Destructor
+			****************************************/
+			~AttachWfInitCtxtResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfInitCtxtResp
+			*    Private constructor
+			****************************************/
+			AttachWfInitCtxtResp();  
+	};
+};
+#endif // __AttachWfInitCtxtResp__
diff --git a/include/mme-app/mmeStates/attachWfInitCtxtRespAttCmp.h b/include/mme-app/mmeStates/attachWfInitCtxtRespAttCmp.h
new file mode 100644
index 0000000..0484d76
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfInitCtxtRespAttCmp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfInitCtxtRespAttCmp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfInitCtxtRespAttCmp__
+#define __AttachWfInitCtxtRespAttCmp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfInitCtxtRespAttCmp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfInitCtxtRespAttCmp* Instance();
+
+			/****************************************
+			* AttachWfInitCtxtRespAttCmp
+			*    Destructor
+			****************************************/
+			~AttachWfInitCtxtRespAttCmp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfInitCtxtRespAttCmp
+			*    Private constructor
+			****************************************/
+			AttachWfInitCtxtRespAttCmp();  
+	};
+};
+#endif // __AttachWfInitCtxtRespAttCmp__
diff --git a/include/mme-app/mmeStates/attachWfMbResp.h b/include/mme-app/mmeStates/attachWfMbResp.h
new file mode 100644
index 0000000..4ceb47d
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfMbResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfMbResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfMbResp__
+#define __AttachWfMbResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfMbResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfMbResp* Instance();
+
+			/****************************************
+			* AttachWfMbResp
+			*    Destructor
+			****************************************/
+			~AttachWfMbResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfMbResp
+			*    Private constructor
+			****************************************/
+			AttachWfMbResp();  
+	};
+};
+#endif // __AttachWfMbResp__
diff --git a/include/mme-app/mmeStates/attachWfSecCmp.h b/include/mme-app/mmeStates/attachWfSecCmp.h
new file mode 100644
index 0000000..e5efe91
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfSecCmp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfSecCmp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfSecCmp__
+#define __AttachWfSecCmp__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfSecCmp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfSecCmp* Instance();
+
+			/****************************************
+			* AttachWfSecCmp
+			*    Destructor
+			****************************************/
+			~AttachWfSecCmp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfSecCmp
+			*    Private constructor
+			****************************************/
+			AttachWfSecCmp();  
+	};
+};
+#endif // __AttachWfSecCmp__
diff --git a/include/mme-app/mmeStates/attachWfUla.h b/include/mme-app/mmeStates/attachWfUla.h
new file mode 100644
index 0000000..3c046a2
--- /dev/null
+++ b/include/mme-app/mmeStates/attachWfUla.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * attachWfUla.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __AttachWfUla__
+#define __AttachWfUla__
+
+#include "state.h"
+
+namespace mme {
+
+	class AttachWfUla : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static AttachWfUla* Instance();
+
+			/****************************************
+			* AttachWfUla
+			*    Destructor
+			****************************************/
+			~AttachWfUla();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* AttachWfUla
+			*    Private constructor
+			****************************************/
+			AttachWfUla();  
+	};
+};
+#endif // __AttachWfUla__
diff --git a/include/mme-app/mmeStates/defaultMmeState.h b/include/mme-app/mmeStates/defaultMmeState.h
new file mode 100644
index 0000000..e223b75
--- /dev/null
+++ b/include/mme-app/mmeStates/defaultMmeState.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * defaultMmeState.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __DefaultMmeState__
+#define __DefaultMmeState__
+
+#include "state.h"
+
+namespace mme {
+
+	class DefaultMmeState : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static DefaultMmeState* Instance();
+
+			/****************************************
+			* DefaultMmeState
+			*    Destructor
+			****************************************/
+			~DefaultMmeState();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* DefaultMmeState
+			*    Private constructor
+			****************************************/
+			DefaultMmeState();  
+	};
+};
+#endif // __DefaultMmeState__
diff --git a/include/mme-app/mmeStates/detachStart.h b/include/mme-app/mmeStates/detachStart.h
new file mode 100644
index 0000000..d40bcfd
--- /dev/null
+++ b/include/mme-app/mmeStates/detachStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * detachStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __DetachStart__
+#define __DetachStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class DetachStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static DetachStart* Instance();
+
+			/****************************************
+			* DetachStart
+			*    Destructor
+			****************************************/
+			~DetachStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* DetachStart
+			*    Private constructor
+			****************************************/
+			DetachStart();  
+	};
+};
+#endif // __DetachStart__
diff --git a/include/mme-app/mmeStates/detachWfDelSessionResp.h b/include/mme-app/mmeStates/detachWfDelSessionResp.h
new file mode 100644
index 0000000..6b9a9a7
--- /dev/null
+++ b/include/mme-app/mmeStates/detachWfDelSessionResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * detachWfDelSessionResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __DetachWfDelSessionResp__
+#define __DetachWfDelSessionResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class DetachWfDelSessionResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static DetachWfDelSessionResp* Instance();
+
+			/****************************************
+			* DetachWfDelSessionResp
+			*    Destructor
+			****************************************/
+			~DetachWfDelSessionResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* DetachWfDelSessionResp
+			*    Private constructor
+			****************************************/
+			DetachWfDelSessionResp();  
+	};
+};
+#endif // __DetachWfDelSessionResp__
diff --git a/include/mme-app/mmeStates/niDetachStart.h b/include/mme-app/mmeStates/niDetachStart.h
new file mode 100644
index 0000000..a45260f
--- /dev/null
+++ b/include/mme-app/mmeStates/niDetachStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * niDetachStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __NiDetachStart__
+#define __NiDetachStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class NiDetachStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static NiDetachStart* Instance();
+
+			/****************************************
+			* NiDetachStart
+			*    Destructor
+			****************************************/
+			~NiDetachStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* NiDetachStart
+			*    Private constructor
+			****************************************/
+			NiDetachStart();  
+	};
+};
+#endif // __NiDetachStart__
diff --git a/include/mme-app/mmeStates/niDetachWfDelSessResp.h b/include/mme-app/mmeStates/niDetachWfDelSessResp.h
new file mode 100644
index 0000000..9f334ce
--- /dev/null
+++ b/include/mme-app/mmeStates/niDetachWfDelSessResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * niDetachWfDelSessResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __NiDetachWfDelSessResp__
+#define __NiDetachWfDelSessResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class NiDetachWfDelSessResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static NiDetachWfDelSessResp* Instance();
+
+			/****************************************
+			* NiDetachWfDelSessResp
+			*    Destructor
+			****************************************/
+			~NiDetachWfDelSessResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* NiDetachWfDelSessResp
+			*    Private constructor
+			****************************************/
+			NiDetachWfDelSessResp();  
+	};
+};
+#endif // __NiDetachWfDelSessResp__
diff --git a/include/mme-app/mmeStates/niDetachWfDetAccptDelSessResp.h b/include/mme-app/mmeStates/niDetachWfDetAccptDelSessResp.h
new file mode 100644
index 0000000..c3f3f3d
--- /dev/null
+++ b/include/mme-app/mmeStates/niDetachWfDetAccptDelSessResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * niDetachWfDetAccptDelSessResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __NiDetachWfDetAccptDelSessResp__
+#define __NiDetachWfDetAccptDelSessResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class NiDetachWfDetAccptDelSessResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static NiDetachWfDetAccptDelSessResp* Instance();
+
+			/****************************************
+			* NiDetachWfDetAccptDelSessResp
+			*    Destructor
+			****************************************/
+			~NiDetachWfDetAccptDelSessResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* NiDetachWfDetAccptDelSessResp
+			*    Private constructor
+			****************************************/
+			NiDetachWfDetAccptDelSessResp();  
+	};
+};
+#endif // __NiDetachWfDetAccptDelSessResp__
diff --git a/include/mme-app/mmeStates/niDetachWfDetachAccept.h b/include/mme-app/mmeStates/niDetachWfDetachAccept.h
new file mode 100644
index 0000000..47ccdc9
--- /dev/null
+++ b/include/mme-app/mmeStates/niDetachWfDetachAccept.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * niDetachWfDetachAccept.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __NiDetachWfDetachAccept__
+#define __NiDetachWfDetachAccept__
+
+#include "state.h"
+
+namespace mme {
+
+	class NiDetachWfDetachAccept : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static NiDetachWfDetachAccept* Instance();
+
+			/****************************************
+			* NiDetachWfDetachAccept
+			*    Destructor
+			****************************************/
+			~NiDetachWfDetachAccept();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* NiDetachWfDetachAccept
+			*    Private constructor
+			****************************************/
+			NiDetachWfDetachAccept();  
+	};
+};
+#endif // __NiDetachWfDetachAccept__
diff --git a/include/mme-app/mmeStates/niDetachWfS1RelComp.h b/include/mme-app/mmeStates/niDetachWfS1RelComp.h
new file mode 100644
index 0000000..57af7a1
--- /dev/null
+++ b/include/mme-app/mmeStates/niDetachWfS1RelComp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * niDetachWfS1RelComp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __NiDetachWfS1RelComp__
+#define __NiDetachWfS1RelComp__
+
+#include "state.h"
+
+namespace mme {
+
+	class NiDetachWfS1RelComp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static NiDetachWfS1RelComp* Instance();
+
+			/****************************************
+			* NiDetachWfS1RelComp
+			*    Destructor
+			****************************************/
+			~NiDetachWfS1RelComp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* NiDetachWfS1RelComp
+			*    Private constructor
+			****************************************/
+			NiDetachWfS1RelComp();  
+	};
+};
+#endif // __NiDetachWfS1RelComp__
diff --git a/include/mme-app/mmeStates/pagingStart.h b/include/mme-app/mmeStates/pagingStart.h
new file mode 100644
index 0000000..d42f481
--- /dev/null
+++ b/include/mme-app/mmeStates/pagingStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * pagingStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __PagingStart__
+#define __PagingStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class PagingStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static PagingStart* Instance();
+
+			/****************************************
+			* PagingStart
+			*    Destructor
+			****************************************/
+			~PagingStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* PagingStart
+			*    Private constructor
+			****************************************/
+			PagingStart();  
+	};
+};
+#endif // __PagingStart__
diff --git a/include/mme-app/mmeStates/pagingWfServiceReq.h b/include/mme-app/mmeStates/pagingWfServiceReq.h
new file mode 100644
index 0000000..5c81557
--- /dev/null
+++ b/include/mme-app/mmeStates/pagingWfServiceReq.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * pagingWfServiceReq.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __PagingWfServiceReq__
+#define __PagingWfServiceReq__
+
+#include "state.h"
+
+namespace mme {
+
+	class PagingWfServiceReq : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static PagingWfServiceReq* Instance();
+
+			/****************************************
+			* PagingWfServiceReq
+			*    Destructor
+			****************************************/
+			~PagingWfServiceReq();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* PagingWfServiceReq
+			*    Private constructor
+			****************************************/
+			PagingWfServiceReq();  
+	};
+};
+#endif // __PagingWfServiceReq__
diff --git a/include/mme-app/mmeStates/s1ReleaseStart.h b/include/mme-app/mmeStates/s1ReleaseStart.h
new file mode 100644
index 0000000..7540446
--- /dev/null
+++ b/include/mme-app/mmeStates/s1ReleaseStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * s1ReleaseStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __S1ReleaseStart__
+#define __S1ReleaseStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class S1ReleaseStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static S1ReleaseStart* Instance();
+
+			/****************************************
+			* S1ReleaseStart
+			*    Destructor
+			****************************************/
+			~S1ReleaseStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* S1ReleaseStart
+			*    Private constructor
+			****************************************/
+			S1ReleaseStart();  
+	};
+};
+#endif // __S1ReleaseStart__
diff --git a/include/mme-app/mmeStates/s1ReleaseWfReleaseAccessBearerResp.h b/include/mme-app/mmeStates/s1ReleaseWfReleaseAccessBearerResp.h
new file mode 100644
index 0000000..6c6eef7
--- /dev/null
+++ b/include/mme-app/mmeStates/s1ReleaseWfReleaseAccessBearerResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * s1ReleaseWfReleaseAccessBearerResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __S1ReleaseWfReleaseAccessBearerResp__
+#define __S1ReleaseWfReleaseAccessBearerResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class S1ReleaseWfReleaseAccessBearerResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static S1ReleaseWfReleaseAccessBearerResp* Instance();
+
+			/****************************************
+			* S1ReleaseWfReleaseAccessBearerResp
+			*    Destructor
+			****************************************/
+			~S1ReleaseWfReleaseAccessBearerResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* S1ReleaseWfReleaseAccessBearerResp
+			*    Private constructor
+			****************************************/
+			S1ReleaseWfReleaseAccessBearerResp();  
+	};
+};
+#endif // __S1ReleaseWfReleaseAccessBearerResp__
diff --git a/include/mme-app/mmeStates/s1ReleaseWfUeCtxtReleaseComp.h b/include/mme-app/mmeStates/s1ReleaseWfUeCtxtReleaseComp.h
new file mode 100644
index 0000000..25b39c6
--- /dev/null
+++ b/include/mme-app/mmeStates/s1ReleaseWfUeCtxtReleaseComp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * s1ReleaseWfUeCtxtReleaseComp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __S1ReleaseWfUeCtxtReleaseComp__
+#define __S1ReleaseWfUeCtxtReleaseComp__
+
+#include "state.h"
+
+namespace mme {
+
+	class S1ReleaseWfUeCtxtReleaseComp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static S1ReleaseWfUeCtxtReleaseComp* Instance();
+
+			/****************************************
+			* S1ReleaseWfUeCtxtReleaseComp
+			*    Destructor
+			****************************************/
+			~S1ReleaseWfUeCtxtReleaseComp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* S1ReleaseWfUeCtxtReleaseComp
+			*    Private constructor
+			****************************************/
+			S1ReleaseWfUeCtxtReleaseComp();  
+	};
+};
+#endif // __S1ReleaseWfUeCtxtReleaseComp__
diff --git a/include/mme-app/mmeStates/serviceRequestStart.h b/include/mme-app/mmeStates/serviceRequestStart.h
new file mode 100644
index 0000000..24ca62a
--- /dev/null
+++ b/include/mme-app/mmeStates/serviceRequestStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * serviceRequestStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __ServiceRequestStart__
+#define __ServiceRequestStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class ServiceRequestStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static ServiceRequestStart* Instance();
+
+			/****************************************
+			* ServiceRequestStart
+			*    Destructor
+			****************************************/
+			~ServiceRequestStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* ServiceRequestStart
+			*    Private constructor
+			****************************************/
+			ServiceRequestStart();  
+	};
+};
+#endif // __ServiceRequestStart__
diff --git a/include/mme-app/mmeStates/serviceRequestWfAuthAndSecCheckCmp.h b/include/mme-app/mmeStates/serviceRequestWfAuthAndSecCheckCmp.h
new file mode 100644
index 0000000..ba37289
--- /dev/null
+++ b/include/mme-app/mmeStates/serviceRequestWfAuthAndSecCheckCmp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * serviceRequestWfAuthAndSecCheckCmp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __ServiceRequestWfAuthAndSecCheckCmp__
+#define __ServiceRequestWfAuthAndSecCheckCmp__
+
+#include "state.h"
+
+namespace mme {
+
+	class ServiceRequestWfAuthAndSecCheckCmp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static ServiceRequestWfAuthAndSecCheckCmp* Instance();
+
+			/****************************************
+			* ServiceRequestWfAuthAndSecCheckCmp
+			*    Destructor
+			****************************************/
+			~ServiceRequestWfAuthAndSecCheckCmp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* ServiceRequestWfAuthAndSecCheckCmp
+			*    Private constructor
+			****************************************/
+			ServiceRequestWfAuthAndSecCheckCmp();  
+	};
+};
+#endif // __ServiceRequestWfAuthAndSecCheckCmp__
diff --git a/include/mme-app/mmeStates/serviceRequestWfInitCtxtResp.h b/include/mme-app/mmeStates/serviceRequestWfInitCtxtResp.h
new file mode 100644
index 0000000..0276c08
--- /dev/null
+++ b/include/mme-app/mmeStates/serviceRequestWfInitCtxtResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * serviceRequestWfInitCtxtResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __ServiceRequestWfInitCtxtResp__
+#define __ServiceRequestWfInitCtxtResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class ServiceRequestWfInitCtxtResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static ServiceRequestWfInitCtxtResp* Instance();
+
+			/****************************************
+			* ServiceRequestWfInitCtxtResp
+			*    Destructor
+			****************************************/
+			~ServiceRequestWfInitCtxtResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* ServiceRequestWfInitCtxtResp
+			*    Private constructor
+			****************************************/
+			ServiceRequestWfInitCtxtResp();  
+	};
+};
+#endif // __ServiceRequestWfInitCtxtResp__
diff --git a/include/mme-app/mmeStates/serviceRequestWfMbResp.h b/include/mme-app/mmeStates/serviceRequestWfMbResp.h
new file mode 100644
index 0000000..b7b103c
--- /dev/null
+++ b/include/mme-app/mmeStates/serviceRequestWfMbResp.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * serviceRequestWfMbResp.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __ServiceRequestWfMbResp__
+#define __ServiceRequestWfMbResp__
+
+#include "state.h"
+
+namespace mme {
+
+	class ServiceRequestWfMbResp : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static ServiceRequestWfMbResp* Instance();
+
+			/****************************************
+			* ServiceRequestWfMbResp
+			*    Destructor
+			****************************************/
+			~ServiceRequestWfMbResp();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* ServiceRequestWfMbResp
+			*    Private constructor
+			****************************************/
+			ServiceRequestWfMbResp();  
+	};
+};
+#endif // __ServiceRequestWfMbResp__
diff --git a/include/mme-app/mmeStates/stateFactory.h b/include/mme-app/mmeStates/stateFactory.h
new file mode 100644
index 0000000..5367e85
--- /dev/null
+++ b/include/mme-app/mmeStates/stateFactory.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+/**************************************
+ * 
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/stateFactory.h.tt>
+ **************************************/
+
+#ifndef __StateFactory__
+#define __StateFactory__
+
+namespace mme {
+	class StateFactory {
+            public:
+			/******************************************
+			* Instance
+			*   Creates static instance for the state
+			*******************************************/
+            static StateFactory* Instance();
+
+			/*****************************************
+			* StateFactory
+			*   Destructor
+			*****************************************/
+			~StateFactory();
+
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+             void initialize();
+
+            private:
+			/****************************************
+			* StateFactory
+			*	Private constructor
+			****************************************/
+            StateFactory();
+
+	};
+};
+#endif // __StateFactory__
diff --git a/include/mme-app/mmeStates/tauStart.h b/include/mme-app/mmeStates/tauStart.h
new file mode 100644
index 0000000..d42c203
--- /dev/null
+++ b/include/mme-app/mmeStates/tauStart.h
@@ -0,0 +1,61 @@
+ /*
+ * Copyright 2019-present, Infosys Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ /******************************************************
+ * tauStart.h
+ * This is an auto generated file.
+ * Please do not edit this file.
+ * All edits to be made through template source file
+ * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.h.tt>
+ ******************************************************/
+ 
+#ifndef __TauStart__
+#define __TauStart__
+
+#include "state.h"
+
+namespace mme {
+
+	class TauStart : public SM::State
+	{
+		public:
+			/******************************************
+			* Instance 
+			*    Creates static instance for the state
+			*******************************************/
+			static TauStart* Instance();
+
+			/****************************************
+			* TauStart
+			*    Destructor
+			****************************************/
+			~TauStart();			
+			
+			/******************************************
+			* initialize
+			*  Initializes action handlers for the state
+			* and next state
+			******************************************/
+			void initialize();
+	
+		private:
+			/****************************************
+			* TauStart
+			*    Private constructor
+			****************************************/
+			TauStart();  
+	};
+};
+#endif // __TauStart__
