diff --git a/include/stateMachineFwk/actionTable.h b/include/stateMachineFwk/actionTable.h
new file mode 100644
index 0000000..f3b9794
--- /dev/null
+++ b/include/stateMachineFwk/actionTable.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#include <string>
+#include <deque>
+#include "smTypes.h"
+
+#ifndef ACTIONTABLE_H_
+#define ACTIONTABLE_H_
+
+namespace SM
+{
+
+	class ControlBlock;
+	class State;
+
+	using namespace std;
+
+	class ActionTable
+	{
+   	public:
+		ActionTable();
+		virtual ~ActionTable();
+
+		virtual void display();
+
+		ActStatus executeActions(ControlBlock& cb);
+		void addAction(ActionPointer act);
+		void setNextState(State*st);
+	private:
+     		deque<ActionPointer> actionsQ;
+        	State* nextStatep;
+	};
+}
+#endif /* ACTIONTABLE_H_ */
diff --git a/include/stateMachineFwk/controlBlock.h b/include/stateMachineFwk/controlBlock.h
new file mode 100644
index 0000000..7591a1a
--- /dev/null
+++ b/include/stateMachineFwk/controlBlock.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef CONTROLBLOCK_H_
+#define CONTROLBLOCK_H_
+
+#include <mutex>
+#include <queue>
+#include <deque>
+#include <stdint.h>
+#include <time.h>
+#include "permDataBlock.h"
+#include <smTypes.h>
+#include "tempDataBlock.h"
+
+class Event;
+class State;
+
+using namespace std;
+
+namespace SM
+{
+	typedef struct debugEventInfo
+	{
+        	Event_e event;
+	        State_e state;
+        	time_t evt_time;
+
+        	debugEventInfo(Event_e evt, State_e st, time_t t)
+        	{
+        		event = evt;
+        		state = st;
+        		evt_time = t;
+        	}
+
+	}debugEventInfo;
+
+	class Event;
+	class State;
+	class ControlBlock
+	{
+   	public:
+			static const unsigned short MAX_FAST_BLOCK_IDX = 5;
+			static uint32_t controlBlockArrayIdx;
+
+      		ControlBlock();
+      		virtual ~ControlBlock();
+
+      		void reset();
+
+      		uint32_t getCBIndex();
+
+      		void addEventToProcQ(Event &event);
+	      	bool getCurrentEvent(Event &evt);
+
+	      	State* getCurrentState();
+      		void setNextState(State* state);
+
+      		PermDataBlock* getFastAccessBlock(unsigned short idx) const;
+      		void setFastAccessBlock(PermDataBlock* pdb_p, unsigned short idx);
+
+      		PermDataBlock* getPermDataBlock() const;
+      		void setPermDataBlock(PermDataBlock* pdb_p);
+
+      		TempDataBlock* getTempDataBlock() const;
+      		void setTempDataBlock(TempDataBlock* tdb_p); 
+      		void setCurrentTempDataBlock(TempDataBlock* tdb_p);
+
+      		void addDebugInfo(debugEventInfo& eventInfo);
+      		inline deque<debugEventInfo> getDebugInfoQueue()const
+			{
+      			return debugEventInfoQ;
+			}
+
+      		void* getMsgData()
+      		{
+      			return data_p;
+      		}
+
+      		void setMsgData(void* ptr)
+      		{
+      			data_p = ptr;
+      		}
+
+      		void setControlBlockState(ControlBlockState state);
+      		ControlBlockState getControlBlockState();
+
+            bool isInProcQueue();
+            void setProcQueueFlag(bool flag);
+
+      		virtual void display();
+
+   	private:
+		std::mutex mutex_m;
+		const uint32_t cbIndex_m;
+		ControlBlockState cbState_m;
+
+		// deallocated once the event is processed
+		void* data_p;
+
+      		PermDataBlock* pdb_mp;
+      		PermDataBlock* fadb_mpa[MAX_FAST_BLOCK_IDX];
+      		TempDataBlock* tdb_mp;
+
+      		queue<Event> eventQ;
+		
+	    	deque<debugEventInfo> debugEventInfoQ;
+		bool inProcQueue_m;
+	};
+}
+#endif /* CONTROLBLOCK_H_ */
diff --git a/include/stateMachineFwk/event.h b/include/stateMachineFwk/event.h
new file mode 100644
index 0000000..7ad9423
--- /dev/null
+++ b/include/stateMachineFwk/event.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef EVENT_H_
+#define EVENT_H_
+
+#include <string>
+#include <map>
+
+#include "smEnumTypes.h"
+
+using namespace std;
+
+namespace SM
+{
+	class Event
+	{
+   	public:
+		Event();
+      		Event(Event_e evtID, void* eventData);
+      		virtual ~Event();
+
+      		inline Event_e getEventId()const
+      		{
+      			return eventID;
+      		}
+
+      		void* getEventData() const;
+
+      		virtual void display();
+ 
+   	private:
+	      	Event_e eventID;
+	      	void * eventData_p;
+	};
+}
+
+#endif /* EVENT_H_ */
diff --git a/include/stateMachineFwk/permDataBlock.h b/include/stateMachineFwk/permDataBlock.h
new file mode 100644
index 0000000..0d35bd8
--- /dev/null
+++ b/include/stateMachineFwk/permDataBlock.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef PERMDATABLOCK_H_
+#define PERMDATABLOCK_H_
+
+namespace SM
+{
+class PermDataBlock
+{
+   public:
+      PermDataBlock();
+      virtual ~PermDataBlock();
+      virtual void display();
+      
+   private:
+      // Add permanant data fields here
+      unsigned int contextID;
+};
+}
+
+#endif /* PERMDATABLOCK_H_ */
diff --git a/include/stateMachineFwk/procedureQueue.h b/include/stateMachineFwk/procedureQueue.h
new file mode 100644
index 0000000..efffaf5
--- /dev/null
+++ b/include/stateMachineFwk/procedureQueue.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef PROCEDUREQUEUE_H_
+#define PROCEDUREQUEUE_H_
+
+#include <queue>
+#include <mutex>
+#include <semaphore.h>
+
+using namespace std;
+
+namespace SM
+{
+
+class ControlBlock;
+
+class ProcedureQueue
+{
+   public:
+      ProcedureQueue();
+      ~ProcedureQueue();
+
+      ControlBlock* pop();
+      bool push(ControlBlock* cb);
+
+   private:
+      queue <ControlBlock*> cbQ;
+      std::mutex mutex_m;
+      sem_t pop_semaphore;
+};
+}
+#endif /* PROCEDUREQUEUE_H_ */
diff --git a/include/stateMachineFwk/smEnumTypes.h b/include/stateMachineFwk/smEnumTypes.h
new file mode 100644
index 0000000..2b8a456
--- /dev/null
+++ b/include/stateMachineFwk/smEnumTypes.h
@@ -0,0 +1,282 @@
+/*
+ * 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.
+ */
+
+#ifndef SM_ENUMS_H
+#define SM_ENUMS_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/enum.tt>
+ **************************************/
+ 
+enum State_e
+{ 
+    attach_start, 
+    attach_wf_aia, 
+    attach_wf_att_cmp, 
+    attach_wf_auth_resp, 
+    attach_wf_auth_resp_validate, 
+    attach_wf_cs_resp, 
+    attach_wf_esm_info_check, 
+    attach_wf_esm_info_resp, 
+    attach_wf_identity_response, 
+    attach_wf_imsi_validate_action, 
+    attach_wf_init_ctxt_resp, 
+    attach_wf_init_ctxt_resp_att_cmp, 
+    attach_wf_mb_resp, 
+    attach_wf_sec_cmp, 
+    attach_wf_ula, 
+    default_mme_state, 
+    detach_start, 
+    detach_wf_del_session_resp, 
+    ni_detach_start, 
+    ni_detach_wf_del_sess_resp, 
+    ni_detach_wf_det_accpt_del_sess_resp, 
+    ni_detach_wf_detach_accept, 
+    ni_detach_wf_s1_rel_comp, 
+    paging_start, 
+    paging_wf_service_req, 
+    s1_release_start, 
+    s1_release_wf_release_access_bearer_resp, 
+    s1_release_wf_ue_ctxt_release_comp, 
+    service_request_start, 
+    service_request_wf_auth_and_sec_check_cmp, 
+    service_request_wf_init_ctxt_resp, 
+    service_request_wf_mb_resp, 
+    tau_start,
+    END_STATE
+};
+
+static constexpr const char* States[] =
+{
+    "attach_start",
+    "attach_wf_aia",
+    "attach_wf_att_cmp",
+    "attach_wf_auth_resp",
+    "attach_wf_auth_resp_validate",
+    "attach_wf_cs_resp",
+    "attach_wf_esm_info_check",
+    "attach_wf_esm_info_resp",
+    "attach_wf_identity_response",
+    "attach_wf_imsi_validate_action",
+    "attach_wf_init_ctxt_resp",
+    "attach_wf_init_ctxt_resp_att_cmp",
+    "attach_wf_mb_resp",
+    "attach_wf_sec_cmp",
+    "attach_wf_ula",
+    "default_mme_state",
+    "detach_start",
+    "detach_wf_del_session_resp",
+    "ni_detach_start",
+    "ni_detach_wf_del_sess_resp",
+    "ni_detach_wf_det_accpt_del_sess_resp",
+    "ni_detach_wf_detach_accept",
+    "ni_detach_wf_s1_rel_comp",
+    "paging_start",
+    "paging_wf_service_req",
+    "s1_release_start",
+    "s1_release_wf_release_access_bearer_resp",
+    "s1_release_wf_ue_ctxt_release_comp",
+    "service_request_start",
+    "service_request_wf_auth_and_sec_check_cmp",
+    "service_request_wf_init_ctxt_resp",
+    "service_request_wf_mb_resp",
+    "tau_start",
+    "END_STATE"
+};
+
+enum Event_e
+{
+    AIA_FROM_HSS,
+    ATT_CMP_FROM_UE,
+    ATTACH_REQ_FROM_UE,
+    AUTH_AND_SEC_CHECK_COMPLETE,
+    AUTH_RESP_FAILURE,
+    AUTH_RESP_FROM_UE,
+    AUTH_RESP_SUCCESS,
+    AUTH_RESP_SYNC_FAILURE,
+    CLR_FROM_HSS,
+    CS_RESP_FROM_SGW,
+    DDN_FROM_SGW,
+    DEL_SESSION_RESP_FROM_SGW,
+    DETACH_ACCEPT_FROM_UE,
+    DETACH_REQ_FROM_UE,
+    ESM_INFO_NOT_REQUIRED,
+    ESM_INFO_REQUIRED,
+    ESM_INFO_RESP_FROM_UE,
+    IDENTITY_RESPONSE_FROM_UE,
+    IMSI_VALIDATION_FAILURE,
+    IMSI_VALIDATION_SUCCESS,
+    INIT_CTXT_RESP_FROM_UE,
+    MB_RESP_FROM_SGW,
+    REL_AB_RESP_FROM_SGW,
+    S1_REL_REQ_FROM_UE,
+    SEC_MODE_RESP_FROM_UE,
+    SERVICE_REQUEST_FROM_UE,
+    TAU_REQUEST_FROM_UE,
+    UE_CTXT_REL_COMP_FROM_ENB,
+    ULA_FROM_HSS,
+    VALIDATE_IMSI,
+    END_EVENT
+};
+
+static constexpr const char* Events[] =
+{
+    "AIA_FROM_HSS",
+    "ATT_CMP_FROM_UE",
+    "ATTACH_REQ_FROM_UE",
+    "AUTH_AND_SEC_CHECK_COMPLETE",
+    "AUTH_RESP_FAILURE",
+    "AUTH_RESP_FROM_UE",
+    "AUTH_RESP_SUCCESS",
+    "AUTH_RESP_SYNC_FAILURE",
+    "CLR_FROM_HSS",
+    "CS_RESP_FROM_SGW",
+    "DDN_FROM_SGW",
+    "DEL_SESSION_RESP_FROM_SGW",
+    "DETACH_ACCEPT_FROM_UE",
+    "DETACH_REQ_FROM_UE",
+    "ESM_INFO_NOT_REQUIRED",
+    "ESM_INFO_REQUIRED",
+    "ESM_INFO_RESP_FROM_UE",
+    "IDENTITY_RESPONSE_FROM_UE",
+    "IMSI_VALIDATION_FAILURE",
+    "IMSI_VALIDATION_SUCCESS",
+    "INIT_CTXT_RESP_FROM_UE",
+    "MB_RESP_FROM_SGW",
+    "REL_AB_RESP_FROM_SGW",
+    "S1_REL_REQ_FROM_UE",
+    "SEC_MODE_RESP_FROM_UE",
+    "SERVICE_REQUEST_FROM_UE",
+    "TAU_REQUEST_FROM_UE",
+    "UE_CTXT_REL_COMP_FROM_ENB",
+    "ULA_FROM_HSS",
+    "VALIDATE_IMSI",
+    "END_EVENT"
+};
+
+enum Action_e
+{
+    ATTACH_DONE,
+    AUTH_REQ_TO_UE,
+    AUTH_RESPONSE_VALIDATE,
+    CHECK_ESM_INFO_REQ_REQUIRED,
+    CS_REQ_TO_SGW,
+    DEFAULT_ATTACH_REQ_HANDLER,
+    DEFAULT_CANCEL_LOC_REQ_HANDLER,
+    DEFAULT_DDN_HANDLER,
+    DEFAULT_DETACH_REQ_HANDLER,
+    DEFAULT_S1_RELEASE_REQ_HANDLER,
+    DEFAULT_SERVICE_REQ_HANDLER,
+    DEFAULT_TAU_REQ_HANDLER,
+    DEL_SESSION_REQ,
+    DETACH_ACCEPT_TO_UE,
+    NI_DETACH_REQ_TO_UE,
+    PERFORM_AUTH_AND_SEC_CHECK,
+    PROCESS_AIA,
+    PROCESS_ATTACH_CMP_FROM_UE,
+    PROCESS_CS_RESP,
+    PROCESS_DEL_SESSION_RESP,
+    PROCESS_DETACH_ACCEPT_FROM_UE,
+    PROCESS_ESM_INFO_RESP,
+    PROCESS_IDENTITY_RESPONSE,
+    PROCESS_INIT_CTXT_RESP,
+    PROCESS_INIT_CTXT_RESP_SVC_REQ,
+    PROCESS_MB_RESP,
+    PROCESS_MB_RESP_SVC_REQ,
+    PROCESS_REL_AB_RESP_FROM_SGW,
+    PROCESS_SEC_MODE_RESP,
+    PROCESS_SERVICE_REQUEST,
+    PROCESS_UE_CTXT_REL_COMP,
+    PROCESS_UE_CTXT_REL_COMP_FOR_DETACH,
+    PROCESS_ULA,
+    SEC_MODE_CMD_TO_UE,
+    SEND_AIR_TO_HSS,
+    SEND_AUTH_REJECT,
+    SEND_DDN_ACK_TO_SGW,
+    SEND_ESM_INFO_REQ_TO_UE,
+    SEND_IDENTITY_REQUEST_TO_UE,
+    SEND_INIT_CTXT_REQ_TO_UE,
+    SEND_INIT_CTXT_REQ_TO_UE_SVC_REQ,
+    SEND_MB_REQ_TO_SGW,
+    SEND_MB_REQ_TO_SGW_SVC_REQ,
+    SEND_PAGING_REQ_TO_UE,
+    SEND_REL_AB_REQ_TO_SGW,
+    SEND_S1_REL_CMD_TO_UE,
+    SEND_S1_REL_CMD_TO_UE_FOR_DETACH,
+    SEND_TAU_RESPONSE_TO_UE,
+    SEND_ULR_TO_HSS,
+    VALIDATE_IMSI_IN_UE_CONTEXT,
+    END_ACTION
+};
+
+static constexpr const char* Actions[] =
+{
+    "ATTACH_DONE",
+    "AUTH_REQ_TO_UE",
+    "AUTH_RESPONSE_VALIDATE",
+    "CHECK_ESM_INFO_REQ_REQUIRED",
+    "CS_REQ_TO_SGW",
+    "DEFAULT_ATTACH_REQ_HANDLER",
+    "DEFAULT_CANCEL_LOC_REQ_HANDLER",
+    "DEFAULT_DDN_HANDLER",
+    "DEFAULT_DETACH_REQ_HANDLER",
+    "DEFAULT_S1_RELEASE_REQ_HANDLER",
+    "DEFAULT_SERVICE_REQ_HANDLER",
+    "DEFAULT_TAU_REQ_HANDLER",
+    "DEL_SESSION_REQ",
+    "DETACH_ACCEPT_TO_UE",
+    "NI_DETACH_REQ_TO_UE",
+    "PERFORM_AUTH_AND_SEC_CHECK",
+    "PROCESS_AIA",
+    "PROCESS_ATTACH_CMP_FROM_UE",
+    "PROCESS_CS_RESP",
+    "PROCESS_DEL_SESSION_RESP",
+    "PROCESS_DETACH_ACCEPT_FROM_UE",
+    "PROCESS_ESM_INFO_RESP",
+    "PROCESS_IDENTITY_RESPONSE",
+    "PROCESS_INIT_CTXT_RESP",
+    "PROCESS_INIT_CTXT_RESP_SVC_REQ",
+    "PROCESS_MB_RESP",
+    "PROCESS_MB_RESP_SVC_REQ",
+    "PROCESS_REL_AB_RESP_FROM_SGW",
+    "PROCESS_SEC_MODE_RESP",
+    "PROCESS_SERVICE_REQUEST",
+    "PROCESS_UE_CTXT_REL_COMP",
+    "PROCESS_UE_CTXT_REL_COMP_FOR_DETACH",
+    "PROCESS_ULA",
+    "SEC_MODE_CMD_TO_UE",
+    "SEND_AIR_TO_HSS",
+    "SEND_AUTH_REJECT",
+    "SEND_DDN_ACK_TO_SGW",
+    "SEND_ESM_INFO_REQ_TO_UE",
+    "SEND_IDENTITY_REQUEST_TO_UE",
+    "SEND_INIT_CTXT_REQ_TO_UE",
+    "SEND_INIT_CTXT_REQ_TO_UE_SVC_REQ",
+    "SEND_MB_REQ_TO_SGW",
+    "SEND_MB_REQ_TO_SGW_SVC_REQ",
+    "SEND_PAGING_REQ_TO_UE",
+    "SEND_REL_AB_REQ_TO_SGW",
+    "SEND_S1_REL_CMD_TO_UE",
+    "SEND_S1_REL_CMD_TO_UE_FOR_DETACH",
+    "SEND_TAU_RESPONSE_TO_UE",
+    "SEND_ULR_TO_HSS",
+    "VALIDATE_IMSI_IN_UE_CONTEXT",
+    "END_ACTION"
+};
+
+#endif
\ No newline at end of file
diff --git a/include/stateMachineFwk/smTypes.h b/include/stateMachineFwk/smTypes.h
new file mode 100644
index 0000000..cb3c31f
--- /dev/null
+++ b/include/stateMachineFwk/smTypes.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef INCLUDE_STATEMACHFWK_SMTYPES_H_
+#define INCLUDE_STATEMACHFWK_SMTYPES_H_
+
+#include <map>
+#include <smEnumTypes.h>
+
+using namespace std;
+
+namespace SM{
+
+class ControlBlock;
+class State;
+class ActionTable;
+
+enum ActStatus
+{
+	PROCEED,
+	HALT,
+};
+
+enum ControlBlockState
+{
+    FREE,
+    ALLOCATED,
+    MAX_STATE
+};
+
+using ActionPointer = ActStatus(*)(ControlBlock&);
+using EventToActionTableMap = std::map <Event_e, ActionTable>;
+
+};
+
+#endif /* INCLUDE_STATEMACHFWK_SMTYPES_H_ */
diff --git a/include/stateMachineFwk/state.h b/include/stateMachineFwk/state.h
new file mode 100644
index 0000000..c928d6c
--- /dev/null
+++ b/include/stateMachineFwk/state.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef STATE_H_
+#define STATE_H_
+
+#include <string>
+#include <map>
+#include "smTypes.h"
+
+using namespace std;
+
+namespace SM
+{
+	class State
+	{
+  	public:
+		State(State_e sID);
+      		virtual ~State();
+
+	      	virtual void display();
+
+      		ActStatus executeActions(Event_e evtId,ControlBlock& cb);
+
+	      	inline State_e getStateId()const
+      		{
+			return stateID;
+      		}
+
+   	protected:
+      		State_e stateID;
+	      	EventToActionTableMap eventToActionsMap;
+	};
+}
+#endif /* STATE_H_ */
diff --git a/include/stateMachineFwk/stateMachineEngine.h b/include/stateMachineFwk/stateMachineEngine.h
new file mode 100644
index 0000000..2a47c85
--- /dev/null
+++ b/include/stateMachineFwk/stateMachineEngine.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef STATEMACHINEENGINE_H_
+#define STATEMACHINEENGINE_H_
+
+#include <map>
+#include "smTypes.h"
+#include "procedureQueue.h"
+
+namespace SM
+{
+	class State;
+	class StateMachineEngine
+	{
+	public:
+		~StateMachineEngine();
+		static StateMachineEngine* Instance();
+	    void run();
+      	bool addCBToProcQ(ControlBlock* cb);
+	
+   	private:
+		StateMachineEngine();
+
+		ProcedureQueue procQ_m;
+	};
+}
+
+#endif /* STATEMACHINEENGINE_H_ */
diff --git a/include/stateMachineFwk/tempDataBlock.h b/include/stateMachineFwk/tempDataBlock.h
new file mode 100644
index 0000000..5971b1c
--- /dev/null
+++ b/include/stateMachineFwk/tempDataBlock.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * 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.
+ */
+
+#ifndef TEMPDATABLOCK_H_
+#define TEMPDATABLOCK_H_
+
+namespace SM
+{
+class State;
+class TempDataBlock
+{
+   public:
+      TempDataBlock();
+      virtual ~TempDataBlock();
+
+      virtual void display();
+
+      State* getCurrentState();
+      void setNextState(State* state);
+
+      TempDataBlock* getNextTempDataBlock();
+      void setNextTempDataBlock(TempDataBlock* tdb_p);
+
+   protected:
+      State* currentStatep;
+      TempDataBlock* next;
+};
+}
+
+#endif /* TEMPDATABLOCK_H_ */
+
