diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..c0ab82c
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.0.1-dev
diff --git a/omci_anig.go b/omci_anig.go
index 99ebca7..49734a7 100644
--- a/omci_anig.go
+++ b/omci_anig.go
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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.
+ */
+
 package core
 
 type AniGAttributes int
@@ -165,4 +181,4 @@
 	pkt[*pos] = 0x81
 	*pos++
 	return pkt, nil
-}
\ No newline at end of file
+}
diff --git a/omci_handlers.go b/omci_handlers.go
index c766c1a..67a57e7 100644
--- a/omci_handlers.go
+++ b/omci_handlers.go
@@ -46,6 +46,7 @@
 		"IntfId": key.IntfId,
 		"OnuId": key.OnuId,
 	}).Tracef("Omci MibReset")
+	OnuOmciStateMapLock.RLock()
 	if state, ok := OnuOmciStateMap[key]; ok {
 		log.WithFields(log.Fields{
 		"IntfId": key.IntfId,
@@ -53,6 +54,7 @@
 	}).Tracef("Reseting OnuOmciState")
 		state.ResetOnuOmciState()
 	}
+	OnuOmciStateMapLock.RUnlock()
 
 	pkt = []byte{
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
@@ -88,9 +90,9 @@
 
 func mibUploadNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
 	var pkt []byte
-
+	OnuOmciStateMapLock.RLock()
 	state := OnuOmciStateMap[key]
-
+	OnuOmciStateMapLock.RUnlock()
 	// commandNumber is the "Command number" attribute received in "MIB Upload Next" OMCI message
 	commandNumber := (uint16(content[1])) | (uint16(content[0])<<8)
 	log.WithFields(log.Fields{
@@ -407,6 +409,8 @@
 	var pkt []byte
 
 	if class == GEMPortNetworkCTP {
+		OnuOmciStateMapLock.RLock()
+		defer OnuOmciStateMapLock.RUnlock()
 		if onuOmciState, ok := OnuOmciStateMap[key]; !ok {
 			log.WithFields(log.Fields{
 				"IntfId": key.IntfId,
diff --git a/omci_pm_history_data.go b/omci_pm_history_data.go
index 15188fa..60ddd80 100644
--- a/omci_pm_history_data.go
+++ b/omci_pm_history_data.go
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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.
+ */
+
 package core
 
 type PerformanceMonitoringHistoryData int
diff --git a/omci_sim.go b/omci_sim.go
index 6cc0708..a792911 100644
--- a/omci_sim.go
+++ b/omci_sim.go
@@ -51,9 +51,11 @@
 	}).Tracef("Processing OMCI pakcet")
 
 	key := OnuKey{intfId, onuId}
+	OnuOmciStateMapLock.Lock()
 	if _, ok := OnuOmciStateMap[key]; !ok {
 		OnuOmciStateMap[key] = NewOnuOmciState()
 	}
+	OnuOmciStateMapLock.Unlock()
 
 	if _, ok := Handlers[msgType]; !ok {
 		log.WithFields(log.Fields{
@@ -111,4 +113,4 @@
 	}).Tracef("OMCI-SIM Response")
 
 	return resp, nil
-}
\ No newline at end of file
+}
diff --git a/omci_state.go b/omci_state.go
index 34d5b5e..eb923ba 100644
--- a/omci_state.go
+++ b/omci_state.go
@@ -18,6 +18,7 @@
 import (
 	"errors"
 	"fmt"
+	"sync"
 	log "github.com/sirupsen/logrus"
 )
 
@@ -43,6 +44,7 @@
 )
 
 var OnuOmciStateMap = map[OnuKey]*OnuOmciState{}
+var OnuOmciStateMapLock = sync.RWMutex{}
 
 func NewOnuOmciState() *OnuOmciState {
 	return &OnuOmciState{gemPortId: 0, mibUploadCtr: 0, uniGInstance: 1, tcontInstance: 0, pptpInstance: 1}
@@ -60,6 +62,8 @@
 }
 func GetOnuOmciState(intfId uint32, onuId uint32) istate {
 	key := OnuKey{intfId, onuId}
+	OnuOmciStateMapLock.RLock()
+	defer OnuOmciStateMapLock.RUnlock()
 	if onu, ok := OnuOmciStateMap[key]; ok {
 		return onu.state
 	} else {
@@ -69,6 +73,8 @@
 
 func GetGemPortId(intfId uint32, onuId uint32) (uint16, error) {
 	key := OnuKey{intfId, onuId}
+	OnuOmciStateMapLock.RLock()
+	defer OnuOmciStateMapLock.RUnlock()
 	if OnuOmciState, ok := OnuOmciStateMap[key]; ok {
 		if OnuOmciState.state != DONE {
 			errmsg := fmt.Sprintf("ONU {intfid:%d, onuid:%d} - Not DONE (GemportID is not set)", intfId, onuId)
