diff --git a/E2Manager/configuration/configuration.go b/E2Manager/configuration/configuration.go
index b0611b8..7d8992a 100644
--- a/E2Manager/configuration/configuration.go
+++ b/E2Manager/configuration/configuration.go
@@ -36,6 +36,8 @@
 	NotificationResponseBuffer int
 	BigRedButtonTimeoutSec     int
 	MaxConnectionAttempts      int
+	MaxRnibConnectionAttempts  int
+	RnibRetryIntervalMs		   int
 }
 
 func ParseConfiguration() *Configuration{
@@ -58,6 +60,8 @@
 	config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer")
 	config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec")
 	config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts")
+	config.MaxConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts")
+	config.MaxConnectionAttempts = viper.GetInt("rnibRetryIntervalMs")
 	return &config
 }
 
diff --git a/E2Manager/controllers/controller.go b/E2Manager/controllers/controller.go
index f9a7bb3..12ade63 100644
--- a/E2Manager/controllers/controller.go
+++ b/E2Manager/controllers/controller.go
@@ -24,10 +24,8 @@
 	"e2mgr/managers"
 	"e2mgr/models"
 	"e2mgr/providers/httpmsghandlerprovider"
-	"e2mgr/rNibWriter"
 	"e2mgr/services"
 	"encoding/json"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"github.com/gorilla/mux"
 	"io"
 	"io/ioutil"
@@ -53,10 +51,10 @@
 	handlerProvider *httpmsghandlerprovider.IncomingRequestHandlerProvider
 }
 
-func NewController(logger *logger.Logger, rmrService *services.RmrService, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
+func NewController(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService,
 	config *configuration.Configuration, ranSetupManager *managers.RanSetupManager) *Controller {
 
-	provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider, ranSetupManager)
+	provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rnibDataService, ranSetupManager)
 	return &Controller{
 		logger:          logger,
 		handlerProvider: provider,
diff --git a/E2Manager/controllers/controller_test.go b/E2Manager/controllers/controller_test.go
index f14d830..cf5ae71 100644
--- a/E2Manager/controllers/controller_test.go
+++ b/E2Manager/controllers/controller_test.go
@@ -29,6 +29,7 @@
 	"e2mgr/providers/httpmsghandlerprovider"
 	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"e2mgr/tests"
 	"encoding/json"
 	"fmt"
@@ -46,17 +47,29 @@
 	"testing"
 )
 
-func TestX2SetupInvalidBody(t *testing.T) {
-
-	readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
+func setupControllerTest(t *testing.T) (*Controller, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock){
 	log := initLog(t)
+	config := configuration.ParseConfiguration()
 
+	rmrMessengerMock := &mocks.RmrMessengerMock{}
+	readerMock := &mocks.RnibReaderMock{}
 	readerProvider := func() reader.RNibReader {
 		return readerMock
 	}
+	writerMock := &mocks.RnibWriterMock{}
 	writerProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+
+	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rnibDataService)
+	controller := NewController(log, getRmrService(rmrMessengerMock, log), rnibDataService, config, ranSetupManager)
+	return controller, readerMock, writerMock, rmrMessengerMock
+}
+
+func TestX2SetupInvalidBody(t *testing.T) {
+
+	controller, _, _, _ := setupControllerTest(t)
 
 	header := http.Header{}
 	header.Set("Content-Type", "application/json")
@@ -64,8 +77,6 @@
 	httpRequest.Header = header
 
 	writer := httptest.NewRecorder()
-	config := configuration.ParseConfiguration()
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	controller.X2SetupHandler(writer, httpRequest)
 
 	var errorResponse = parseJsonRequest(t, writer.Body)
@@ -76,15 +87,7 @@
 
 func TestX2SetupSuccess(t *testing.T) {
 
-	readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
-	log := initLog(t)
-
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t)
 
 	ranName := "test"
 	nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
@@ -105,8 +108,6 @@
 	httpRequest.Header = header
 
 	writer := httptest.NewRecorder()
-	config := configuration.ParseConfiguration()
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	controller.X2SetupHandler(writer, httpRequest)
 
 	assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
@@ -114,15 +115,7 @@
 
 func TestEndcSetupSuccess(t *testing.T) {
 
-	readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
-	log := initLog(t)
-
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t)
 
 	ranName := "test"
 	nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
@@ -143,34 +136,20 @@
 	httpRequest.Header = header
 
 	writer := httptest.NewRecorder()
-	config := configuration.ParseConfiguration()
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	controller.EndcSetupHandler(writer, httpRequest)
 
 	assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 }
 
 func TestShutdownHandlerRnibError(t *testing.T) {
-	log := initLog(t)
-	config := configuration.ParseConfiguration()
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, readerMock, _, _:= setupControllerTest(t)
 
 	rnibErr := &common.ResourceNotFoundError{}
 	var nbIdentityList []*entities.NbIdentity
 	readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibErr)
 
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
+
 	controller.ShutdownHandler(writer, tests.GetHttpRequest())
 
 	var errorResponse = parseJsonRequest(t, writer.Body)
@@ -180,22 +159,9 @@
 }
 
 func TestHeaderValidationFailed(t *testing.T) {
-	log := initLog(t)
-	config := configuration.ParseConfiguration()
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, _, _, _ := setupControllerTest(t)
 
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 
 	header := &http.Header{}
 
@@ -210,48 +176,22 @@
 }
 
 func TestShutdownStatusNoContent(t *testing.T) {
-	log := initLog(t)
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	config := configuration.ParseConfiguration()
+	controller, readerMock, _, _ := setupControllerTest(t)
 
 	var rnibError error
 	nbIdentityList := []*entities.NbIdentity{}
 	readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibError)
 
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	controller.ShutdownHandler(writer, tests.GetHttpRequest())
 
 	assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 }
 
 func TestHandleInternalError(t *testing.T) {
-	log := initLog(t)
-	config := configuration.ParseConfiguration()
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, _, _, _ := setupControllerTest(t)
 
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	err := e2managererrors.NewInternalError()
 
 	controller.handleErrorResponse(err, writer)
@@ -263,21 +203,8 @@
 }
 
 func TestHandleCommandAlreadyInProgressError(t *testing.T) {
-	log := initLog(t)
-	config := configuration.ParseConfiguration()
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
+	controller, _, _, _ := setupControllerTest(t)
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 	err := e2managererrors.NewCommandAlreadyInProgressError()
 
 	controller.handleErrorResponse(err, writer)
@@ -289,20 +216,7 @@
 }
 
 func TestValidateHeaders(t *testing.T) {
-	log := initLog(t)
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	config := configuration.ParseConfiguration()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
+	controller, _, _, _ := setupControllerTest(t)
 
 	header := http.Header{}
 	header.Set("Content-Type", "application/json")
@@ -332,30 +246,15 @@
 }
 
 func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) {
-	log := initLog(t)
+	controller, readerMock, _, rmrMessengerMock := setupControllerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
 	payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-	config := configuration.ParseConfiguration()
-	rmrService := getRmrService(rmrMessengerMock, log)
-
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -372,31 +271,16 @@
 }
 
 func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) {
-	log := initLog(t)
+	controller, readerMock, _, rmrMessengerMock := setupControllerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
 	// o&m intervention
 	payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-	config := configuration.ParseConfiguration()
-	rmrService := getRmrService(rmrMessengerMock, log)
-
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -412,26 +296,11 @@
 }
 
 func TestX2ResetHandleFailureInvalidBody(t *testing.T) {
-	log := initLog(t)
+	controller, _, _, _ := setupControllerTest(t)
 
 	ranName := "test1"
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	config := configuration.ParseConfiguration()
-	rmrService := getRmrService(rmrMessengerMock, log)
-
 	writer := httptest.NewRecorder()
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
 	// Invalid json: attribute name without quotes (should be "cause":).
 	b := strings.NewReader("{cause:\"protocol:transfer-syntax-error\"")
@@ -444,22 +313,7 @@
 }
 
 func TestHandleErrorResponse(t *testing.T) {
-	log := initLog(t)
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	config := configuration.ParseConfiguration()
-	rmrService := getRmrService(rmrMessengerMock, log)
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
+	controller, _, _, _ := setupControllerTest(t)
 
 	writer := httptest.NewRecorder()
 	controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer)
@@ -492,21 +346,4 @@
 	writer = httptest.NewRecorder()
 	controller.handleErrorResponse(fmt.Errorf("ErrorError"), writer)
 	assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
-}
-
-func initTest(t *testing.T)(*mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *managers.RanSetupManager) {
-	log := initLog(t)
-
-	readerMock := &mocks.RnibReaderMock{}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	rmrService := getRmrService(rmrMessengerMock, log)
-
-	ranSetupManager := managers.NewRanSetupManager(log, rmrService, writerProvider)
-
-	return readerMock, writerMock, rmrMessengerMock, ranSetupManager
 }
\ No newline at end of file
diff --git a/E2Manager/controllers/nodeb_controller.go b/E2Manager/controllers/nodeb_controller.go
index cdb76a9..28b713e 100644
--- a/E2Manager/controllers/nodeb_controller.go
+++ b/E2Manager/controllers/nodeb_controller.go
@@ -20,12 +20,10 @@
 import (
 	"e2mgr/logger"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
 	"e2mgr/services"
 	"e2mgr/utils"
 	"encoding/json"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"github.com/golang/protobuf/jsonpb"
 	"github.com/gorilla/mux"
 	"net/http"
@@ -53,25 +51,22 @@
 type NodebController struct {
 	rmrService         *services.RmrService
 	Logger             *logger.Logger
-	rnibReaderProvider func() reader.RNibReader
-	rnibWriterProvider func() rNibWriter.RNibWriter
+	rnibDataService services.RNibDataService
 }
 
-func NewNodebController(logger *logger.Logger, rmrService *services.RmrService, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NodebController {
+func NewNodebController(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService) *NodebController {
 	messageChannel = make(chan *models.E2RequestMessage)
 	errorChannel = make(chan error)
 	return &NodebController{
 		rmrService:         rmrService,
 		Logger:             logger,
-		rnibReaderProvider: rnibReaderProvider,
-		rnibWriterProvider: rnibWriterProvider,
+		rnibDataService: rnibDataService,
 	}
 }
 
 func (rc NodebController) GetNodebIdList (writer http.ResponseWriter, request *http.Request) {
 	startTime := time.Now()
-	rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
-	nodebIdList, rnibError := rnibReaderService.GetNodebIdList()
+	nodebIdList, rnibError := rc.rnibDataService.GetListNodebIds()
 
 	if rnibError != nil {
 		rc.Logger.Errorf("%v", rnibError);
@@ -98,9 +93,7 @@
 	startTime := time.Now()
 	vars := mux.Vars(request)
 	ranName := vars["ranName"]
-	// WAS: respondingNode, rnibError := reader.GetRNibReader().GetNodeb(ranName)
-	rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
-	respondingNode, rnibError := rnibReaderService.GetNodeb(ranName)
+	respondingNode, rnibError := rc.rnibDataService.GetNodeb(ranName)
 	if rnibError != nil {
 		rc.Logger.Errorf("%v", rnibError)
 		httpStatusCode, errorCode, errorMessage := rnibErrorToHttpError(rnibError)
diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go
index 812d7dc..f49cd8c 100644
--- a/E2Manager/controllers/nodeb_controller_test.go
+++ b/E2Manager/controllers/nodeb_controller_test.go
@@ -18,6 +18,7 @@
 package controllers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/logger"
 	"e2mgr/mocks"
 	"e2mgr/models"
@@ -37,19 +38,30 @@
 	"testing"
 )
 
-func TestNewRequestController(t *testing.T) {
+func setupNodebControllerTest(t *testing.T) (*logger.Logger, services.RNibDataService, *mocks.RnibReaderMock){
+	logger, err := logger.InitLogger(logger.DebugLevel)
+	if err != nil {
+		t.Errorf("#... - failed to initialize logger, error: %s", err)
+	}
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+	readerMock := &mocks.RnibReaderMock{}
 	rnibReaderProvider := func() reader.RNibReader {
-		return &mocks.RnibReaderMock{}
+		return readerMock
 	}
 	rnibWriterProvider := func() rNibWriter.RNibWriter {
 		return &mocks.RnibWriterMock{}
 	}
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	return logger, rnibDataService, readerMock
+}
 
-	assert.NotNil(t, NewNodebController(&logger.Logger{}, &services.RmrService{}, rnibReaderProvider, rnibWriterProvider))
+func TestNewRequestController(t *testing.T) {
+	logger, rnibDataService, _ := setupNodebControllerTest(t)
+	assert.NotNil(t, NewNodebController(logger, &services.RmrService{}, rnibDataService))
 }
 
 func TestHandleHealthCheckRequest(t *testing.T) {
-	rc := NewNodebController(nil, nil, nil, nil)
+	rc := NewNodebController(nil, nil, nil)
 	writer := httptest.NewRecorder()
 	rc.HandleHealthCheckRequest(writer, nil)
 	assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
@@ -62,96 +74,62 @@
 	return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
 }
 
-func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
+func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
 	req, _ := http.NewRequest("GET", "/nodeb", nil)
 	req = mux.SetURLVars(req, map[string]string{"ranName": "testNode"})
 
-	NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodeb(writer, req)
+	NewNodebController(logger, nil, rnibDataService).GetNodeb(writer, req)
 }
 
 func TestNodebController_GetNodeb_Success(t *testing.T) {
-	log, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_Success - failed to initialize logger, error: %s", err)
-	}
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
 
 	var rnibError error
 	rnibReaderMock.On("GetNodeb", "testNode").Return(&entities.NodebInfo{}, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
-
-	executeGetNodeb(log, writer, rnibReaderProvider)
+	executeGetNodeb(logger, writer, rnibDataService)
 
 	assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
 }
 
 func TestNodebController_GetNodeb_NotFound(t *testing.T) {
-	log, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_NotFound - failed to initialize logger, error: %s", err)
-	}
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
 	rnibError := common.NewResourceNotFoundErrorf("#reader.GetNodeb - responding node %s not found", "testNode")
 	var nodebInfo *entities.NodebInfo
 	rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
-
-	executeGetNodeb(log, writer, rnibReaderProvider)
+	executeGetNodeb(logger, writer, rnibDataService)
 	assert.Equal(t, writer.Result().StatusCode, http.StatusNotFound)
 }
 
 func TestNodebController_GetNodeb_InternalError(t *testing.T) {
-	log, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_InternalError - failed to initialize logger, error: %s", err)
-	}
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
-
 	rnibError := common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error"))
 	var nodebInfo *entities.NodebInfo
 	rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
-
-	executeGetNodeb(log, writer, rnibReaderProvider)
+	executeGetNodeb(logger, writer, rnibDataService)
 	assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
 }
 
-func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
+func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
 	req, _ := http.NewRequest("GET", "/nodeb-ids", nil)
-	NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodebIdList(writer, req)
+	NewNodebController(logger, nil, rnibDataService).GetNodebIdList(writer,req)
 }
 
 func TestNodebController_GetNodebIdList_Success(t *testing.T) {
-	logger, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_Success - failed to initialize logger, error: %s", err)
-	}
-
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
 	var rnibError error
 
 	nbList := []*entities.NbIdentity{
@@ -161,61 +139,38 @@
 	}
 	rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
-
-	executeGetNodebIdList(logger, writer, rnibReaderProvider)
+	executeGetNodebIdList(logger, writer, rnibDataService)
 	assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
-	bodyBytes, err := ioutil.ReadAll(writer.Body)
+	bodyBytes, _ := ioutil.ReadAll(writer.Body)
 	assert.Equal(t, "[{\"inventoryName\":\"test1\",\"globalNbId\":{\"plmnId\":\"plmnId1\",\"nbId\":\"nbId1\"}},{\"inventoryName\":\"test2\",\"globalNbId\":{\"plmnId\":\"plmnId2\",\"nbId\":\"nbId2\"}},{\"inventoryName\":\"test3\",\"globalNbId\":{}}]", string(bodyBytes))
 }
 
 func TestNodebController_GetNodebIdList_EmptyList(t *testing.T) {
-	log, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_EmptyList - failed to initialize logger, error: %s", err)
-	}
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
-
 	var rnibError error
 	nbList := []*entities.NbIdentity{}
 	rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
 
-	executeGetNodebIdList(log, writer, rnibReaderProvider)
+	executeGetNodebIdList(logger, writer, rnibDataService)
 
 	assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
-	bodyBytes, err := ioutil.ReadAll(writer.Body)
+	bodyBytes, _ := ioutil.ReadAll(writer.Body)
 	assert.Equal(t, "[]", string(bodyBytes))
 }
 
 func TestNodebController_GetNodebIdList_InternalError(t *testing.T) {
-	logger, err := logger.InitLogger(logger.InfoLevel)
-
-	if err != nil {
-		t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_InternalError - failed to initialize logger, error: %s", err)
-	}
+	logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
 	writer := httptest.NewRecorder()
 
-	rnibReaderMock := mocks.RnibReaderMock{}
-
 	rnibError := common.NewInternalError(errors.New("#reader.GetEnbIdList - Internal Error"))
 	var nbList []*entities.NbIdentity
 	rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-	rnibReaderProvider := func() reader.RNibReader {
-		return &rnibReaderMock
-	}
-
-	executeGetNodebIdList(logger, writer, rnibReaderProvider)
+	executeGetNodebIdList(logger, writer, rnibDataService)
 	assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
 }
diff --git a/E2Manager/converters/endc_x2setupFailureResponseToProtobuf_test.go b/E2Manager/converters/endc_x2setupFailureResponseToProtobuf_test.go
index f51b987..cdd2f25 100644
--- a/E2Manager/converters/endc_x2setupFailureResponseToProtobuf_test.go
+++ b/E2Manager/converters/endc_x2setupFailureResponseToProtobuf_test.go
@@ -20,7 +20,6 @@
 import (
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
-	"e2mgr/rNibWriter"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"strings"
@@ -35,14 +34,12 @@
 	logger, _ := logger.InitLogger(logger.InfoLevel)
 
 	var testCases = []struct {
-		saveToRNib bool
-		response   string
-		packedPdu  string
-		failure    error
+		response  string
+		packedPdu string
+		failure   error
 	}{
 		{
-			saveToRNib: false, //TODO: use MOCK?
-			response:   "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+			response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 				E2AP-PDU:
 				 unsuccessfulOutcome_t
@@ -77,7 +74,6 @@
 		/**** shares the same code with x2setup failure response to protobuf ****/
 	}
 
-	initDb_f := true
 	for _, tc := range testCases {
 		t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -113,23 +109,6 @@
 					t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
 				}
 
-				// Save to rNib
-				if tc.saveToRNib {
-					if initDb_f {
-						rNibWriter.Init("e2Manager", 1)
-						initDb_f = false
-					}
-					nbIdentity := &entities.NbIdentity{InventoryName: "RanName"}
-					if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-						if tc.failure == nil {
-							t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-						} else {
-							if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-								t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-							}
-						}
-					}
-				}
 			}
 		})
 	}
diff --git a/E2Manager/converters/endc_x2setupResponseToProtobuf_test.go b/E2Manager/converters/endc_x2setupResponseToProtobuf_test.go
index 60b7e6d..e3de6b3 100644
--- a/E2Manager/converters/endc_x2setupResponseToProtobuf_test.go
+++ b/E2Manager/converters/endc_x2setupResponseToProtobuf_test.go
@@ -20,7 +20,6 @@
 import (
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
-	"e2mgr/rNibWriter"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"strings"
@@ -35,16 +34,14 @@
 	logger, _ := logger.InitLogger(logger.InfoLevel)
 
 	var testCases = []struct {
-		saveToRNib       bool
-		key              *entities.GlobalNbId
-		gnb              string
-		packedPdu        string
-		failure          error
+		key       *entities.GlobalNbId
+		gnb       string
+		packedPdu string
+		failure   error
 	}{
 		{
-			saveToRNib: false, //TODO: use MOCK?
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-			gnb: 			 "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+			gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
 			/*
 		E2AP-PDU:
 			 successfulOutcome_t
@@ -152,9 +149,8 @@
 			*/
 			packedPdu: "202400808e00000100f600808640000200fc00090002f829504a952a0a00fd007200010c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000211e148033e4e5e4c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a00021a0044033e4e5e000000002c001e3f271f2e3d4ff0031e3f274400010000150400000a00020000"},
 		{
-			saveToRNib: false,
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-			gnb: 			"CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+			gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
 			/*
 			E2AP-PDU:
 			 successfulOutcome_t
@@ -234,8 +230,7 @@
 			packedPdu: "2024006500000100f6005e40000200fc00090002f829504a952a0a00fd004a00004c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000209e040033e4e5e000000002c001e3f271f2e3d4ff0031e3f274400050000150400000a00061820"},
 
 		{
-			saveToRNib: false,
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
 			gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:8 cell_id:\"2e3f45:1f2e3d4ff0\" stac5g:\"4faa3c\" configured_stac:\"1a2f\" served_plmns:\"50321e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:4 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:7 supported_sul_bands:3 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
 			/*
 			E2AP-PDU:
@@ -344,9 +339,8 @@
 			packedPdu: "202400808e00000100f600808640000200fc00090002f829504a952a0a00fd007200010c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000211e148033e4e5e4c0008002e3f451f2e3d4ff04faa3c1a2f0050321e4400040000060400000200081a00440350321e000000002c001e3f271f2e3d4ff0031e3f274400010000150400000a00020000"},
 
 		{
-			saveToRNib: false,
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-			gnb: 			"CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" served_plmns:\"3e4e5e\" nr_mode:FDD choice_nr_mode:<fdd:<ul_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:44 supported_sul_bands:33 > > dl_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > ul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB11 > dl_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB135 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:FDD choice_nr_mode:<fdd:<ular_fcn_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > dlar_fcn_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+			gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" served_plmns:\"3e4e5e\" nr_mode:FDD choice_nr_mode:<fdd:<ul_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:44 supported_sul_bands:33 > > dl_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > ul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB11 > dl_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB135 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:FDD choice_nr_mode:<fdd:<ular_fcn_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > dlar_fcn_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
 			/*
 			E2AP-PDU:
 			 successfulOutcome_t
@@ -435,9 +429,8 @@
 
 
 		{
-			saveToRNib: false,
-			key:             &entities.GlobalNbId{PlmnId:"04a5c1", NbId:"4fc52bff"},
-			gnb:			"CONNECTED [served_nr_cell_information:<nr_pci:9 cell_id:\"aeafa7:2a3e3b4cd0\" stac5g:\"7d4773\" configured_stac:\"477f\" served_plmns:\"7e7e7e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:8 sulInformation:<sul_ar_fcn:9 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB18 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"5a5ff1:2a3e3b4cd0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:4 supported_sul_bands:3 > > > > > nr_neighbour_infos:<nr_pci:9 nr_cgi:\"5d5caa:af3e354ac0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:7 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB25 > > frequency_bands:<nr_frequency_band:3 supported_sul_bands:1 > > > > > ]",
+			key: &entities.GlobalNbId{PlmnId: "04a5c1", NbId: "4fc52bff"},
+			gnb: "CONNECTED [served_nr_cell_information:<nr_pci:9 cell_id:\"aeafa7:2a3e3b4cd0\" stac5g:\"7d4773\" configured_stac:\"477f\" served_plmns:\"7e7e7e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:8 sulInformation:<sul_ar_fcn:9 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB18 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"5a5ff1:2a3e3b4cd0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:4 supported_sul_bands:3 > > > > > nr_neighbour_infos:<nr_pci:9 nr_cgi:\"5d5caa:af3e354ac0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:7 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB25 > > frequency_bands:<nr_frequency_band:3 supported_sul_bands:1 > > > > > ]",
 			/*
 			E2AP-PDU:
 			 successfulOutcome_t
@@ -536,7 +529,7 @@
 			*/
 			packedPdu: "202400808200000100f6007b40000200fc00090004a5c1504fc52bff00fd006700004c000900aeafa72a3e3b4cd07d4773477f007e7e7e4400080000150400000a0009020204037e7e7e000100002c005a5ff12a3e3b4cd0035a5ff144000500000304000002000608200009005d5caaaf3e354ac0035d5caa4400070000020400000000081860"},
 
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952aaa"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952aaa"},
 			/*
 			E2AP-PDU:
 			 successfulOutcome_t
@@ -562,7 +555,6 @@
 			failure: fmt.Errorf("getList for path [successfulOutcome_t ENDCX2SetupResponse protocolIEs_t ProtocolIE_Container_elm RespondingNodeType-EndcX2Setup respond_en_gNB_t ProtocolIE_Container_elm ServedNRcellsENDCX2ManagementList ServedNRcellsENDCX2ManagementList_elm servedNRCellInfo_t nrpCI_t] failed, rc = 1" /*NO_ITEMS*/),},
 	}
 
-    initDb_f := true
 	for _, tc := range testCases {
 		t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -580,9 +572,9 @@
 				if tc.failure == nil {
 					t.Errorf("want: success, got: error: %v\n", err)
 				} else {
-						if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
-							t.Errorf("want: %s, got: %s", tc.failure, err)
-						}
+					if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
+						t.Errorf("want: %s, got: %s", tc.failure, err)
+					}
 				}
 			}
 
@@ -591,7 +583,7 @@
 					t.Errorf("want: key=%v, got: empty key", tc.key)
 				}
 			} else {
-				if strings.Compare(key.PlmnId, tc.key.PlmnId) != 0 || strings.Compare(key.NbId, tc.key.NbId) != 0{
+				if strings.Compare(key.PlmnId, tc.key.PlmnId) != 0 || strings.Compare(key.NbId, tc.key.NbId) != 0 {
 					t.Errorf("want: key=%v, got: %v", tc.key, key)
 				}
 			}
@@ -603,31 +595,13 @@
 			} else {
 				nb := &entities.NodebInfo{}
 				nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-				nb.Configuration = &entities.NodebInfo_Gnb{Gnb:gnb}
+				nb.Configuration = &entities.NodebInfo_Gnb{Gnb: gnb}
 				gnbStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, gnb.ServedNrCells)
 				if !strings.EqualFold(gnbStr, tc.gnb) {
 					t.Errorf("want: enb=%s, got: %s", tc.gnb, gnbStr)
 				}
 
-				// Save to rNib
-				if tc.saveToRNib {
-					if initDb_f {
-						rNibWriter.Init("e2Manager", 1)
-						initDb_f = false
-					}
-					nbIdentity := &entities.NbIdentity{InventoryName:"RanName", GlobalNbId:key}
-					if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-						if tc.failure == nil {
-							t.Errorf("rNibWriter failed to save ENB. Error: %v\n", rNibErr.Error())
-						} else {
-							if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-								t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-							}
-						}
-					}
-				}
 			}
 		})
 	}
 }
-
diff --git a/E2Manager/converters/x2setupFailureResponseToProtobuf_test.go b/E2Manager/converters/x2setupFailureResponseToProtobuf_test.go
index 3bc099b..787dd19 100644
--- a/E2Manager/converters/x2setupFailureResponseToProtobuf_test.go
+++ b/E2Manager/converters/x2setupFailureResponseToProtobuf_test.go
@@ -20,7 +20,6 @@
 import (
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
-	"e2mgr/rNibWriter"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"strings"
@@ -35,14 +34,12 @@
 	logger, _ := logger.InitLogger(logger.InfoLevel)
 
 	var testCases = []struct {
-		saveToRNib       bool
-		response              string
-		packedPdu        string
-		failure          error
+		response  string
+		packedPdu string
+		failure   error
 	}{
 		{
-			saveToRNib: false, //TODO: use MOCK?
-			response: 	"CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+			response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -74,8 +71,7 @@
 			*/
 			packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+			response: "CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -103,8 +99,7 @@
 			*/
 			packedPdu: "400600140000020005400120001140087821a00000008040"},
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:<triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+			response: "CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:<triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -132,8 +127,7 @@
 			packedPdu: "400600130000020005400144001140073a800000008040"},
 
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+			response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -160,8 +154,7 @@
 			packedPdu: "400600120000020005400168001140061a0000008040"},
 
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > information_element_criticality_diagnostics:<ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD > > ",
+			response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > information_element_criticality_diagnostics:<ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD > > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -192,8 +185,7 @@
 
 
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
+			response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -215,8 +207,7 @@
 			packedPdu: "4006000e0000020005400168001140024021"},
 
 		{
-			saveToRNib: false,
-			response: 	"CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
+			response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
 			/*
 			E2AP-PDU:
 			 unsuccessfulOutcome_t
@@ -232,7 +223,6 @@
 			*/
 			packedPdu: "400600080000010005400168"},
 		{
-			saveToRNib: false,
 			response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
 			/*
 				E2AP-PDU:
@@ -268,7 +258,6 @@
 		},
 	}
 
-    initDb_f := true
 	for _, tc := range testCases {
 		t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -297,32 +286,14 @@
 			} else {
 				nb := &entities.NodebInfo{}
 				nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
-				nb.SetupFailure  = response
+				nb.SetupFailure = response
 				nb.FailureType = entities.Failure_X2_SETUP_FAILURE
 				respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
 				if !strings.EqualFold(respStr, tc.response) {
 					t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
 				}
 
-				// Save to rNib
-				if tc.saveToRNib {
-					if initDb_f {
-						rNibWriter.Init("e2Manager", 1)
-						initDb_f = false
-					}
-					nbIdentity := &entities.NbIdentity{InventoryName:"RanName"}
-					if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-						if tc.failure == nil {
-							t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-						} else {
-							if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-								t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-							}
-						}
-					}
-				}
 			}
 		})
 	}
 }
-
diff --git a/E2Manager/converters/x2setupResponseToProtobuf_test.go b/E2Manager/converters/x2setupResponseToProtobuf_test.go
index 7ab91d1..1cd3f20 100644
--- a/E2Manager/converters/x2setupResponseToProtobuf_test.go
+++ b/E2Manager/converters/x2setupResponseToProtobuf_test.go
@@ -20,7 +20,6 @@
 import (
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
-	"e2mgr/rNibWriter"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"strings"
@@ -35,16 +34,14 @@
 	logger, _ := logger.InitLogger(logger.InfoLevel)
 
 	var testCases = []struct {
-		saveToRNib       bool
-		key              *entities.GlobalNbId
-		enb              string
-		packedPdu        string
-		failure          error
+		key       *entities.GlobalNbId
+		enb       string
+		packedPdu string
+		failure   error
 	}{
 		{
-			saveToRNib: false, //TODO: use MOCK?
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
-			enb: 			 "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
+			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
 				 successfulOutcome_t
@@ -81,7 +78,7 @@
 			*/
 			packedPdu: "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829000001000133"},
 		{
-			key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+			key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
@@ -135,7 +132,7 @@
 			*/
 			packedPdu: "20060043000002001500080002f82900007a8000140030010000630002f8290007ab50102002f8290000010001330000640002f9290007ac50203202f82902f929000002000344"},
 
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
@@ -177,7 +174,7 @@
 				            EARFCNExtension = 0x2
 			*/
 			packedPdu: "20060033000002001500080002f82900007a8000140020000000630002f8290007ab50102002f8291000010001330000005f0003800102"},
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] [02f729:0203 02f929:0304]",
 			/*
 				X2AP-PDU:
@@ -225,7 +222,7 @@
 			*/
 			packedPdu: "2006003a000003001500080002f82900007a8000140017000000630002f8290007ab50102002f8290000010001330018000c1002f72902030002f9290304"},
 
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > > > eutra_mode:TDD ] []",
 			/*
 				X2AP-PDU:
@@ -265,7 +262,7 @@
 				           cyclicPrefixUL_t = 0x1
 			*/
 			packedPdu: "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829400001320820"},
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_info:<additional_special_subframe_patterns:SSP9 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > > > eutra_mode:TDD ] []",
 			/*
 				X2AP-PDU:
@@ -314,7 +311,7 @@
 			*/
 			packedPdu: "20060032000002001500080002f82900007a800014001f000000630002f8290007ab50102002f8295000013208800000006140021220"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:2 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
 			/*
 				X2AP-PDU:
@@ -360,7 +357,7 @@
 			*/
 			packedPdu: "20060033000002001500080002f82900007a8000140020000000630002f8290007ab50102002f8295000013208800000005e0003800102"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_extension_info:<additional_special_subframe_patterns_extension:SSP10 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
 			/*
 				X2AP-PDU:
@@ -409,7 +406,7 @@
 			*/
 			packedPdu: "20060031000002001500080002f82900007a800014001e000000630002f8290007ab50102002f829500001320880000000b3400100"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:2 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_info:<additional_special_subframe_patterns:SSP9 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > additional_special_subframe_extension_info:<additional_special_subframe_patterns_extension:SSP10 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
 			/*
 				X2AP-PDU:
@@ -470,7 +467,7 @@
 			*/
 			packedPdu: "2006003e000002001500080002f82900007a800014002b000000630002f8290007ab50102002f829500001320880000200b3400100006140021220005e0003800102"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80b0"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80b0"},
 			enb: "CONNECTED HOME_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
@@ -530,144 +527,144 @@
 			*/
 			packedPdu: "2006004b000002001500090002f82940007a80b000140037010800630002f8290007ab50102002f829000001000133000000294001000000640002f9290007ac50203202f82902f929000002000344"},
 
-		{key:  &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
-		enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 > ] []",
-		/*
-			X2AP-PDU:
-			 successfulOutcome_t
-			  procedureCode_t = 0x6
-			  criticality_t = 0
-			  X2SetupResponse
-			   protocolIEs_t:
-			    ProtocolIE_Container_elm
-			     id_t = 0x15
-			     criticality_t = 0
-			     GlobalENB-ID
-			      pLMN_Identity_t = 02 f8 29
-			      eNB_ID_t:
-			       short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
-			    ProtocolIE_Container_elm
-			     id_t = 0x14
-			     criticality_t = 0
-			     ServedCells:
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x63
-			        cellId_t
-			         pLMN_Identity_t = 02 f8 29
-			         eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-			        tAC_t = 01 02
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x1
-			          dL_EARFCN_t = 0x1
-			          uL_Transmission_Bandwidth_t = 0x3
-			          dL_Transmission_Bandwidth_t = 0x3
-			        iE_Extensions_t:
-			         ProtocolExtensionContainer_elm
-			          id_t = 0x29
-			          criticality_t = 0x1
-			          Number-of-Antennaports = 0
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x64
-			        cellId_t
-			         pLMN_Identity_t = 02 f9 29
-			         eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-			        tAC_t = 02 03
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			         BroadcastPLMNs_Item_elm = 02 f9 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x2
-			          dL_EARFCN_t = 0x3
-			          uL_Transmission_Bandwidth_t = 0x4
-			          dL_Transmission_Bandwidth_t = 0x4
-			        iE_Extensions_t:
-			         ProtocolExtensionContainer_elm
-			          id_t = 0x37
-			          criticality_t = 0x1
-			          PRACH-Configuration
-			           rootSequenceIndex_t = 0xf
-			           zeroCorrelationIndex_t = 0x7
-			           highSpeedFlag_t = true
-			           prach_FreqOffset_t = 0x1e
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
+			enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 > ] []",
+			/*
+				X2AP-PDU:
+				 successfulOutcome_t
+				  procedureCode_t = 0x6
+				  criticality_t = 0
+				  X2SetupResponse
+				   protocolIEs_t:
+					ProtocolIE_Container_elm
+					 id_t = 0x15
+					 criticality_t = 0
+					 GlobalENB-ID
+					  pLMN_Identity_t = 02 f8 29
+					  eNB_ID_t:
+					   short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
+					ProtocolIE_Container_elm
+					 id_t = 0x14
+					 criticality_t = 0
+					 ServedCells:
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x63
+						cellId_t
+						 pLMN_Identity_t = 02 f8 29
+						 eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+						tAC_t = 01 02
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x1
+						  dL_EARFCN_t = 0x1
+						  uL_Transmission_Bandwidth_t = 0x3
+						  dL_Transmission_Bandwidth_t = 0x3
+						iE_Extensions_t:
+						 ProtocolExtensionContainer_elm
+						  id_t = 0x29
+						  criticality_t = 0x1
+						  Number-of-Antennaports = 0
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x64
+						cellId_t
+						 pLMN_Identity_t = 02 f9 29
+						 eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+						tAC_t = 02 03
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						 BroadcastPLMNs_Item_elm = 02 f9 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x2
+						  dL_EARFCN_t = 0x3
+						  uL_Transmission_Bandwidth_t = 0x4
+						  dL_Transmission_Bandwidth_t = 0x4
+						iE_Extensions_t:
+						 ProtocolExtensionContainer_elm
+						  id_t = 0x37
+						  criticality_t = 0x1
+						  PRACH-Configuration
+						   rootSequenceIndex_t = 0xf
+						   zeroCorrelationIndex_t = 0x7
+						   highSpeedFlag_t = true
+						   prach_FreqOffset_t = 0x1e
 
-		*/
-		packedPdu: "20060056000002001500090002f8298003007a4000140042010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f92900000200034400000037400500000f79e0"},
+			*/
+			packedPdu: "20060056000002001500090002f8298003007a4000140042010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f92900000200034400000037400500000f79e0"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
-		enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME > ] []",
-		/*
-			X2AP-PDU:
-			 successfulOutcome_t
-			  procedureCode_t = 0x6
-			  criticality_t = 0
-			  X2SetupResponse
-			   protocolIEs_t:
-			    ProtocolIE_Container_elm
-			     id_t = 0x15
-			     criticality_t = 0
-			     GlobalENB-ID
-			      pLMN_Identity_t = 02 f8 29
-			      eNB_ID_t:
-			       short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
-			    ProtocolIE_Container_elm
-			     id_t = 0x14
-			     criticality_t = 0
-			     ServedCells:
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x63
-			        cellId_t
-			         pLMN_Identity_t = 02 f8 29
-			         eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-			        tAC_t = 01 02
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x1
-			          dL_EARFCN_t = 0x1
-			          uL_Transmission_Bandwidth_t = 0x3
-			          dL_Transmission_Bandwidth_t = 0x3
-			        iE_Extensions_t:
-			         ProtocolExtensionContainer_elm
-			          id_t = 0x29
-			          criticality_t = 0x1
-			          Number-of-Antennaports = 0
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x64
-			        cellId_t
-			         pLMN_Identity_t = 02 f9 29
-			         eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-			        tAC_t = 02 03
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			         BroadcastPLMNs_Item_elm = 02 f9 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x2
-			          dL_EARFCN_t = 0x3
-			          uL_Transmission_Bandwidth_t = 0x4
-			          dL_Transmission_Bandwidth_t = 0x4
-			        iE_Extensions_t:
-			         ProtocolExtensionContainer_elm
-			          id_t = 0x38
-			          criticality_t = 0x1
-			          MBSFN-Subframe-Infolist:
-			           MBSFN_Subframe_Infolist_elm
-			            radioframeAllocationPeriod_t = 0x3
-			            radioframeAllocationOffset_t = 0x3
-			            subframeAllocation_t:
-			             oneframe_t = 28 (6 bits)
-		*/
-		packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f929000002000344000000384003019850"},
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
+			enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME > ] []",
+			/*
+				X2AP-PDU:
+				 successfulOutcome_t
+				  procedureCode_t = 0x6
+				  criticality_t = 0
+				  X2SetupResponse
+				   protocolIEs_t:
+					ProtocolIE_Container_elm
+					 id_t = 0x15
+					 criticality_t = 0
+					 GlobalENB-ID
+					  pLMN_Identity_t = 02 f8 29
+					  eNB_ID_t:
+					   short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
+					ProtocolIE_Container_elm
+					 id_t = 0x14
+					 criticality_t = 0
+					 ServedCells:
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x63
+						cellId_t
+						 pLMN_Identity_t = 02 f8 29
+						 eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+						tAC_t = 01 02
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x1
+						  dL_EARFCN_t = 0x1
+						  uL_Transmission_Bandwidth_t = 0x3
+						  dL_Transmission_Bandwidth_t = 0x3
+						iE_Extensions_t:
+						 ProtocolExtensionContainer_elm
+						  id_t = 0x29
+						  criticality_t = 0x1
+						  Number-of-Antennaports = 0
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x64
+						cellId_t
+						 pLMN_Identity_t = 02 f9 29
+						 eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+						tAC_t = 02 03
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						 BroadcastPLMNs_Item_elm = 02 f9 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x2
+						  dL_EARFCN_t = 0x3
+						  uL_Transmission_Bandwidth_t = 0x4
+						  dL_Transmission_Bandwidth_t = 0x4
+						iE_Extensions_t:
+						 ProtocolExtensionContainer_elm
+						  id_t = 0x38
+						  criticality_t = 0x1
+						  MBSFN-Subframe-Infolist:
+						   MBSFN_Subframe_Infolist_elm
+							radioframeAllocationPeriod_t = 0x3
+							radioframeAllocationOffset_t = 0x3
+							subframeAllocation_t:
+							 oneframe_t = 28 (6 bits)
+			*/
+			packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f929000002000344000000384003019850"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
 			enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1 mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
@@ -734,7 +731,7 @@
 				          dL_Transmission_Bandwidth_t = 0x4
 			*/
 			packedPdu: "20060052000002001500090002f8298003007a400014003e010800630002f8290007ab50102002f82900000100013300010029400100003840030198500000640002f9290007ac50203202f82902f929000002000344"},
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
 			enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1 prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
 			/*
 				X2AP-PDU:
@@ -800,72 +797,72 @@
 				          dL_Transmission_Bandwidth_t = 0x4
 			*/
 			packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000100294001000037400500000f79e00000640002f9290007ac50203202f82902f929000002000344"},
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a08"},
-		enb: "CONNECTED LONG_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 prach_configuration_index:60 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
-		/*
-			X2AP-PDU:
-			 successfulOutcome_t
-			  procedureCode_t = 0x6
-			  criticality_t = 0
-			  X2SetupResponse
-			   protocolIEs_t:
-			    ProtocolIE_Container_elm
-			     id_t = 0x15
-			     criticality_t = 0
-			     GlobalENB-ID
-			      pLMN_Identity_t = 02 f8 29
-			      eNB_ID_t:
-			       long_Macro_eNB_ID_t = 00 7a 08 (21 bits)
-			    ProtocolIE_Container_elm
-			     id_t = 0x14
-			     criticality_t = 0
-			     ServedCells:
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x63
-			        cellId_t
-			         pLMN_Identity_t = 02 f8 29
-			         eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-			        tAC_t = 01 02
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x1
-			          dL_EARFCN_t = 0x1
-			          uL_Transmission_Bandwidth_t = 0x3
-			          dL_Transmission_Bandwidth_t = 0x3
-			        iE_Extensions_t:
-			         ProtocolExtensionContainer_elm
-			          id_t = 0x37
-			          criticality_t = 0x1
-			          PRACH-Configuration
-			           rootSequenceIndex_t = 0xf
-			           zeroCorrelationIndex_t = 0x7
-			           highSpeedFlag_t = true
-			           prach_FreqOffset_t = 0x1e
-			           prach_ConfigIndex_t = 0x3c
-			      ServedCells_elm
-			       servedCellInfo_t
-			        pCI_t = 0x64
-			        cellId_t
-			         pLMN_Identity_t = 02 f9 29
-			         eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-			        tAC_t = 02 03
-			        broadcastPLMNs_t:
-			         BroadcastPLMNs_Item_elm = 02 f8 29
-			         BroadcastPLMNs_Item_elm = 02 f9 29
-			        eUTRA_Mode_Info_t:
-			         fDD_t
-			          uL_EARFCN_t = 0x2
-			          dL_EARFCN_t = 0x3
-			          uL_Transmission_Bandwidth_t = 0x4
-			          dL_Transmission_Bandwidth_t = 0x4
-		*/
-		//packedPdu: "20060050000002001500090002f8298103007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
-		packedPdu: "20060050000002001500090002f829c003007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a08"},
+			enb: "CONNECTED LONG_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 prach_configuration_index:60 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
+			/*
+				X2AP-PDU:
+				 successfulOutcome_t
+				  procedureCode_t = 0x6
+				  criticality_t = 0
+				  X2SetupResponse
+				   protocolIEs_t:
+					ProtocolIE_Container_elm
+					 id_t = 0x15
+					 criticality_t = 0
+					 GlobalENB-ID
+					  pLMN_Identity_t = 02 f8 29
+					  eNB_ID_t:
+					   long_Macro_eNB_ID_t = 00 7a 08 (21 bits)
+					ProtocolIE_Container_elm
+					 id_t = 0x14
+					 criticality_t = 0
+					 ServedCells:
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x63
+						cellId_t
+						 pLMN_Identity_t = 02 f8 29
+						 eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+						tAC_t = 01 02
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x1
+						  dL_EARFCN_t = 0x1
+						  uL_Transmission_Bandwidth_t = 0x3
+						  dL_Transmission_Bandwidth_t = 0x3
+						iE_Extensions_t:
+						 ProtocolExtensionContainer_elm
+						  id_t = 0x37
+						  criticality_t = 0x1
+						  PRACH-Configuration
+						   rootSequenceIndex_t = 0xf
+						   zeroCorrelationIndex_t = 0x7
+						   highSpeedFlag_t = true
+						   prach_FreqOffset_t = 0x1e
+						   prach_ConfigIndex_t = 0x3c
+					  ServedCells_elm
+					   servedCellInfo_t
+						pCI_t = 0x64
+						cellId_t
+						 pLMN_Identity_t = 02 f9 29
+						 eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+						tAC_t = 02 03
+						broadcastPLMNs_t:
+						 BroadcastPLMNs_Item_elm = 02 f8 29
+						 BroadcastPLMNs_Item_elm = 02 f9 29
+						eUTRA_Mode_Info_t:
+						 fDD_t
+						  uL_EARFCN_t = 0x2
+						  dL_EARFCN_t = 0x3
+						  uL_Transmission_Bandwidth_t = 0x4
+						  dL_Transmission_Bandwidth_t = 0x4
+			*/
+			//packedPdu: "20060050000002001500090002f8298103007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
+			packedPdu: "20060050000002001500090002f829c003007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
 
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD csg_id:\"0007aba0\" freq_band_indicator_priority:BROADCASTED bandwidth_reduced_si:SCHEDULED ] []",
 			/*
 				X2AP-PDU:
@@ -916,7 +913,7 @@
 			*/
 			packedPdu: "2006003e000002001500080002f82900007a800014002b000800630002f8290007ab50102002f8290000010001330002004640040007aba000a040014000b4400100"},
 
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD mbms_service_area_identities:\"02f8\" mbms_service_area_identities:\"03f9\" multiband_infos:1 multiband_infos:2 multiband_infos:3 freq_band_indicator_priority:NOT_BROADCASTED ] []",
 			/*
 				X2AP-PDU:
@@ -974,7 +971,7 @@
 				            freqBandIndicator_t = 0x3
 			*/
 			packedPdu: "20060044000002001500080002f82900007a8000140031000800630002f8290007ab50102002f8290000010001330002004f40050102f803f900a040010000544006200000010002"},
-		{ key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:2 > ] []",
 			/*
 				X2AP-PDU:
@@ -1025,7 +1022,7 @@
 			*/
 			packedPdu: "20060044000002001500080002f82900007a8000140031004000630002f8290007ab50102002f82900000100013300020002f8290007ab50006300010003f9300008bc5000640002"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 tac:\"0102\" > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:3 > ] []",
 			/*
 				X2AP-PDU:
@@ -1086,7 +1083,7 @@
 			*/
 			packedPdu: "20060055000002001500080002f82900007a8000140042004000630002f8290007ab50102002f82900000100013300024002f8290007ab50006300010000004c400201024003f9300008bc50006400020000005e0003800103"},
 
-		{key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+		{key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
 			enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 tac:\"0102\" > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:3 > ] []",
 			/*
 				X2AP-PDU:
@@ -1146,10 +1143,9 @@
 				           EARFCNExtension = 0x3
 			*/
 			packedPdu: "20060055000002001500080002f82900007a8000140042004000630002f8290007ab50102002f82900000100013300024002f8290007ab50006300010000004c400201024003f9300008bc50006400020000005e0003800103",
-			/*failure: fmt.Errorf("getAtom for path [successfulOutcome_t X2SetupResponse protocolIEs_t ProtocolIE_Container_elm GlobalENB-ID pLMN_Identity_t] failed, rc = 2" /NO_SPACE_LEFT),*/},
+			/*failure: fmt.Errorf("getAtom for path [successfulOutcome_t X2SetupResponse protocolIEs_t ProtocolIE_Container_elm GlobalENB-ID pLMN_Identity_t] failed, rc = 2" /NO_SPACE_LEFT),*/ },
 	}
 
-    initDb_f := true
 	for _, tc := range testCases {
 		t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -1188,31 +1184,12 @@
 			} else {
 				nb := &entities.NodebInfo{}
 				nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-				nb.Configuration = &entities.NodebInfo_Enb{Enb:enb}
+				nb.Configuration = &entities.NodebInfo_Enb{Enb: enb}
 				embStr := fmt.Sprintf("%s %s %s %s", nb.ConnectionStatus, enb.EnbType, enb.ServedCells, enb.GuGroupIds)
 				if !strings.EqualFold(embStr, tc.enb) {
 					t.Errorf("want: enb=%s, got: %s", tc.enb, embStr)
 				}
-
-				// Save to rNib
-				if tc.saveToRNib {
-					if initDb_f {
-						rNibWriter.Init("e2Manager", 1)
-						initDb_f = false
-					}
-					nbIdentity := &entities.NbIdentity{InventoryName:"RanName", GlobalNbId:key}
-					if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-						if tc.failure == nil {
-							t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-						} else {
-							if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-								t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-							}
-						}
-					}
-				}
 			}
 		})
 	}
 }
-
diff --git a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go
index c25235c..ba77075 100644
--- a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go
+++ b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go
@@ -23,29 +23,24 @@
 	"e2mgr/e2managererrors"
 	"e2mgr/logger"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
 	"e2mgr/services"
 	"e2mgr/stateMachine"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"time"
 )
 
 type DeleteAllRequestHandler struct {
-	readerProvider func() reader.RNibReader
-	writerProvider func() rNibWriter.RNibWriter
-	rmrService     *services.RmrService
-	config         *configuration.Configuration
+	rnibDataService services.RNibDataService
+	rmrService *services.RmrService
+	config *configuration.Configuration
 	logger         *logger.Logger
 }
 
-func NewDeleteAllRequestHandler(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, writerProvider func() rNibWriter.RNibWriter,
-	readerProvider func() reader.RNibReader) *DeleteAllRequestHandler {
+func NewDeleteAllRequestHandler(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rnibDataService services.RNibDataService) *DeleteAllRequestHandler {
 	return &DeleteAllRequestHandler{
 		logger:         logger,
-		readerProvider: readerProvider,
-		writerProvider: writerProvider,
+		rnibDataService: rnibDataService,
 		rmrService:     rmrService,
 		config:         config,
 	}
@@ -81,7 +76,7 @@
 }
 
 func (handler *DeleteAllRequestHandler) updateNodebStates(timeoutExpired bool) (error, bool) {
-	nbIdentityList, err := handler.readerProvider().GetListNodebIds()
+	nbIdentityList, err := handler.rnibDataService.GetListNodebIds()
 
 	if err != nil {
 		handler.logger.Errorf("#DeleteAllRequestHandler.updateNodebStates - failed to get nodes list from RNIB. Error: %s", err.Error())
@@ -95,7 +90,7 @@
 	numOfRanToShutDown := 0
 	for _, nbIdentity := range nbIdentityList {
 
-		node, err := handler.readerProvider().GetNodeb((*nbIdentity).GetInventoryName())
+		node, err := handler.rnibDataService.GetNodeb((*nbIdentity).GetInventoryName())
 
 		if err != nil {
 			handler.logger.Errorf("#DeleteAllRequestHandler.updateNodebStates - failed to get nodeB entity for ran name: %v from RNIB. Error: %s",
@@ -138,7 +133,7 @@
 
 	node.ConnectionStatus = nextStatus
 
-	err := handler.writerProvider().SaveNodeb(nbIdentity, node)
+	err := handler.rnibDataService.SaveNodeb(nbIdentity, node)
 
 	if err != nil {
 		handler.logger.Errorf("#DeleteAllRequestHandler.saveNodebNextState - failed to save nodeB entity for inventory name: %v to RNIB. Error: %s",
@@ -166,7 +161,7 @@
 
 	node.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
 
-	err := handler.writerProvider().SaveNodeb(nbIdentity, node)
+	err := handler.rnibDataService.SaveNodeb(nbIdentity, node)
 
 	if err != nil {
 		handler.logger.Errorf("#DeleteAllRequestHandler.saveNodebShutDownState - failed to save nodeB entity for inventory name: %v to RNIB. Error: %s",
diff --git a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go
index be1cd25..6e16766 100644
--- a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go
+++ b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go
@@ -37,8 +37,9 @@
 	"testing"
 )
 
-func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T) {
+func setupTest(t *testing.T) (*logger.Logger, *configuration.Configuration, *mocks.RnibReaderMock, *mocks.RnibWriterMock, services.RNibDataService, *mocks.RmrMessengerMock) {
 	log := initLog(t)
+	config := configuration.ParseConfiguration()
 
 	readerMock := &mocks.RnibReaderMock{}
 	readerProvider := func() reader.RNibReader {
@@ -48,11 +49,15 @@
 	writerProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
 	rmrMessengerMock := &mocks.RmrMessengerMock{}
+	return log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock
+}
 
-	config := configuration.ParseConfiguration()
+func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T){
+	log, config, readerMock, _, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	rnibErr := &common.ResourceNotFoundError{}
 	var nbIdentityList []*entities.NbIdentity
@@ -65,22 +70,12 @@
 	}
 }
 
-func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
 
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	rnibErr := &common.ResourceNotFoundError{}
 	//Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
@@ -108,21 +103,11 @@
 	}
 }
 
-func TestHandleSuccessFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleSuccessFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	//Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
 	nbIdentityList := createIdentityList()
@@ -163,21 +148,11 @@
 	assert.Nil(t, actual)
 }
 
-func TestHandleSuccessGetNextStatusFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleSuccessGetNextStatusFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
 	readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
@@ -205,21 +180,11 @@
 	assert.Nil(t, actual)
 }
 
-func TestHandleShuttingDownStatusFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleShuttingDownStatusFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
 	readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
@@ -244,21 +209,11 @@
 	assert.Nil(t, actual)
 }
 
-func TestHandleGetNodebFailedFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleGetNodebFailedFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	//Before timer: Disconnected->ShutDown(will fail), ShuttingDown->Ignore, Connected->ShuttingDown
 	nbIdentityList := createIdentityList()
@@ -300,21 +255,11 @@
 	assert.Nil(t, actual)
 }
 
-func TestHandleSaveFailedFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleSaveFailedFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	//Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
 	nbIdentityList := createIdentityList()
@@ -356,21 +301,11 @@
 	assert.Nil(t, actual)
 }
 
-func TestHandleSendRmrFailedFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleSendRmrFailedFlow(t *testing.T){
+	log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
 	config.BigRedButtonTimeoutSec = 1
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	//Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
 	nbIdentityList := createIdentityList()
@@ -414,21 +349,10 @@
 	}
 }
 
-func TestHandleGetListEnbIdsEmptyFlow(t *testing.T) {
-	log := initLog(t)
+func TestHandleGetListEnbIdsEmptyFlow(t *testing.T){
+	log, config, readerMock, _, rnibDataService, rmrMessengerMock := setupTest(t)
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	config := configuration.ParseConfiguration()
-
-	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+	handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
 	var rnibError error
 	nbIdentityList := []*entities.NbIdentity{}
diff --git a/E2Manager/handlers/httpmsghandlers/setup_request_handler.go b/E2Manager/handlers/httpmsghandlers/setup_request_handler.go
index a792a45..36df7bf 100644
--- a/E2Manager/handlers/httpmsghandlers/setup_request_handler.go
+++ b/E2Manager/handlers/httpmsghandlers/setup_request_handler.go
@@ -21,11 +21,10 @@
 	"e2mgr/logger"
 	"e2mgr/managers"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
 	"e2mgr/rnibBuilders"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"github.com/go-ozzo/ozzo-validation"
 	"github.com/go-ozzo/ozzo-validation/is"
 )
@@ -36,19 +35,17 @@
 )
 
 type SetupRequestHandler struct {
-	readerProvider  func() reader.RNibReader
-	writerProvider  func() rNibWriter.RNibWriter
+	rNibDataService services.RNibDataService
 	logger          *logger.Logger
 	ranSetupManager *managers.RanSetupManager
 	protocol        entities.E2ApplicationProtocol
 }
 
-func NewSetupRequestHandler(logger *logger.Logger, writerProvider func() rNibWriter.RNibWriter, readerProvider func() reader.RNibReader,
+func NewSetupRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService,
 	ranSetupManager *managers.RanSetupManager, protocol entities.E2ApplicationProtocol) *SetupRequestHandler {
 	return &SetupRequestHandler{
 		logger:          logger,
-		readerProvider:  readerProvider,
-		writerProvider:  writerProvider,
+		rNibDataService:  rNibDataService,
 		ranSetupManager: ranSetupManager,
 		protocol:        protocol,
 	}
@@ -63,7 +60,7 @@
 		return err
 	}
 
-	nodebInfo, err := handler.readerProvider().GetNodeb(setupRequest.RanName)
+	nodebInfo, err := handler.rNibDataService.GetNodeb(setupRequest.RanName)
 	if err != nil {
 		_, ok := err.(*common.ResourceNotFoundError)
 		if !ok {
@@ -101,7 +98,7 @@
 
 	nodebInfo, nodebIdentity := rnibBuilders.CreateInitialNodeInfo(request, protocol)
 
-	rNibErr := handler.writerProvider().SaveNodeb(nodebIdentity, nodebInfo)
+	rNibErr := handler.rNibDataService.SaveNodeb(nodebIdentity, nodebInfo)
 	if rNibErr != nil {
 		handler.logger.Errorf("#SetupRequestHandler.connectNewRan - failed to initial nodeb entity for ran name: %v in RNIB. Error: %s", request.RanName, rNibErr.Error())
 		return e2managererrors.NewRnibDbError()
diff --git a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go
index 8783389..a545cff 100644
--- a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go
+++ b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go
@@ -17,6 +17,7 @@
 package httpmsghandlers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/e2managererrors"
 	"e2mgr/e2pdus"
 	"e2mgr/managers"
@@ -25,6 +26,7 @@
 	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
 	"e2mgr/rnibBuilders"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
@@ -283,6 +285,7 @@
 
 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol)(*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock) {
 	log := initLog(t)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
 	readerMock := &mocks.RnibReaderMock{}
 	readerProvider := func() reader.RNibReader {
@@ -296,8 +299,10 @@
 	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrService := getRmrService(rmrMessengerMock, log)
 
-	ranSetupManager := managers.NewRanSetupManager(log, rmrService, writerProvider)
-	handler := NewSetupRequestHandler(log, writerProvider, readerProvider, ranSetupManager, protocol)
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+
+	ranSetupManager := managers.NewRanSetupManager(log, rmrService, rnibDataService)
+	handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol)
 
 	return readerMock, writerMock, handler, rmrMessengerMock
 }
\ No newline at end of file
diff --git a/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler.go b/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler.go
index 72f7ccb..3d02272 100644
--- a/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler.go
+++ b/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler.go
@@ -22,12 +22,10 @@
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
 	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 const (
@@ -35,17 +33,14 @@
 )
 
 type X2ResetRequestHandler struct {
-	readerProvider func() reader.RNibReader
-	writerProvider func() rNibWriter.RNibWriter
+	rNibDataService services.RNibDataService
 	rmrService     *services.RmrService
 	logger         *logger.Logger
 }
 
-func NewX2ResetRequestHandler(logger *logger.Logger, rmrService *services.RmrService, writerProvider func() rNibWriter.RNibWriter,
-	readerProvider func() reader.RNibReader) *X2ResetRequestHandler {
+func NewX2ResetRequestHandler(logger *logger.Logger, rmrService *services.RmrService, rNibDataService services.RNibDataService) *X2ResetRequestHandler {
 	return &X2ResetRequestHandler{
-		readerProvider: readerProvider,
-		writerProvider: writerProvider,
+		rNibDataService: rNibDataService,
 		rmrService:     rmrService,
 		logger:         logger,
 	}
@@ -63,7 +58,7 @@
 		return e2managererrors.NewRequestValidationError()
 	}
 
-	nodeb, err := handler.readerProvider().GetNodeb(resetRequest.RanName)
+	nodeb, err := handler.rNibDataService.GetNodeb(resetRequest.RanName)
 	if err != nil {
 		handler.logger.Errorf("#reset_request_handler.Handle - failed to get status of RAN: %s from RNIB. Error: %s", resetRequest.RanName, err.Error())
 		_, ok := err.(*common.ResourceNotFoundError)
diff --git a/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler_test.go
index 864e824..64e0c10 100644
--- a/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler_test.go
+++ b/E2Manager/handlers/httpmsghandlers/x2_reset_request_handler_test.go
@@ -1,11 +1,13 @@
 package httpmsghandlers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/e2managererrors"
 	"e2mgr/mocks"
 	"e2mgr/models"
 	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -15,11 +17,9 @@
 	"testing"
 )
 
-func TestHandleSuccessfulDefaultCause(t *testing.T) {
+func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock){
 	log := initLog(t)
-
-	ranName := "test1"
-
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 	readerMock := &mocks.RnibReaderMock{}
 	readerProvider := func() reader.RNibReader {
 		return readerMock
@@ -28,15 +28,23 @@
 	writerProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+	rmrMessengerMock := &mocks.RmrMessengerMock{}
+	rmrService := getRmrService(rmrMessengerMock, log)
+	handler := NewX2ResetRequestHandler(log, rmrService, rnibDataService)
+
+	return handler, rmrMessengerMock, readerMock
+}
+func TestHandleSuccessfulDefaultCause(t *testing.T) {
+	handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
+
+	ranName := "test1"
 	// o&m intervention
 	payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
+	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -47,28 +55,14 @@
 }
 
 func TestHandleSuccessfulRequestedCause(t *testing.T) {
-	log := initLog(t)
+	handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
 	payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -78,24 +72,9 @@
 }
 
 func TestHandleFailureUnknownCause(t *testing.T) {
-	log := initLog(t)
+	handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-	
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -106,24 +85,9 @@
 }
 
 func TestHandleFailureWrongState(t *testing.T) {
-	log := initLog(t)
+	handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -133,24 +97,10 @@
 }
 
 func TestHandleFailureRanNotFound(t *testing.T) {
-	log := initLog(t)
+	handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
 	readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
 
 	actual := handler.Handle(models.ResetRequest{RanName: ranName})
@@ -159,24 +109,10 @@
 }
 
 func TestHandleFailureRnibError(t *testing.T) {
-	log := initLog(t)
+	handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
 
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
 	readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
 
 	actual := handler.Handle(models.ResetRequest{RanName: ranName})
@@ -185,28 +121,15 @@
 }
 
 func TestHandleFailureRmrError(t *testing.T) {
-	log := initLog(t)
+	handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
 
 	ranName := "test1"
-
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
 	// o&m intervention
 	payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
 
-	rmrService := getRmrService(rmrMessengerMock, log)
-	handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
 	var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
 	readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
index 73e86bd..783f714 100644
--- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
+++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
@@ -21,27 +21,27 @@
 	"e2mgr/logger"
 	"e2mgr/managers"
 	"e2mgr/models"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type E2TermInitNotificationHandler struct {
-	rnibReaderProvider     func() reader.RNibReader
+	rnibDataService        services.RNibDataService
 	ranReconnectionManager *managers.RanReconnectionManager
 }
 
-func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibReaderProvider func() reader.RNibReader) E2TermInitNotificationHandler {
+func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibDataService services.RNibDataService) E2TermInitNotificationHandler {
 	return E2TermInitNotificationHandler{
-		rnibReaderProvider:     rnibReaderProvider,
+		rnibDataService:        rnibDataService,
 		ranReconnectionManager: ranReconnectionManager,
 	}
 }
 
 func (handler E2TermInitNotificationHandler) Handle(logger *logger.Logger, request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
 
-logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
+	logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
 
-	nbIdentityList, err := handler.rnibReaderProvider().GetListNodebIds()
+	nbIdentityList, err := handler.rnibDataService.GetListNodebIds()
 	if err != nil {
 		logger.Errorf("#E2TermInitNotificationHandler.Handle - Failed to get nodes list from RNIB. Error: %s", err.Error())
 		return
diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
index 8bb8a05..308d970 100644
--- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
+++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
@@ -19,9 +19,10 @@
 	"testing"
 )
 
-func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *managers.RanReconnectionManager) {
+func initRanLostConnectionTest(t *testing.T) (*logger.Logger, E2TermInitNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock) {
 
 	logger := initLog(t)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
 	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrService := getRmrService(rmrMessengerMock, logger)
@@ -34,19 +35,17 @@
 	rnibWriterProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
-	ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibWriterProvider)
-	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-	return logger, readerMock, writerMock, rmrMessengerMock, ranReconnectionManager
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+	handler := NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService)
+	return logger, handler, readerMock, writerMock, rmrMessengerMock
 }
 
 func TestE2TerminInitHandlerSuccessOneRan(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	ids := []*entities.NbIdentity{{InventoryName: "test1"}}
 	readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -62,7 +61,6 @@
 
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
@@ -70,13 +68,9 @@
 }
 
 func TestE2TerminInitHandlerSuccessTwoRans(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}}
 	readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -94,7 +88,6 @@
 
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
@@ -102,13 +95,9 @@
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
 	readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -135,7 +124,6 @@
 
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, fmt.Errorf("RMR Error"))
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	//test1 (before send +1, after failure +1), test2 (0) test3 (0)
@@ -145,13 +133,9 @@
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
 	readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -183,7 +167,6 @@
 
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, nil)
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
@@ -194,13 +177,9 @@
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
 	readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -232,7 +211,6 @@
 
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, nil)
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	readerMock.AssertNumberOfCalls(t, "GetNodeb", 2)
@@ -243,16 +221,11 @@
 }
 
 func TestE2TerminInitHandlerSuccessZeroRans(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 	var rnibErr error
 
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
 	readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, rnibErr)
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
@@ -260,15 +233,10 @@
 }
 
 func TestE2TerminInitHandlerFailureGetListNodebIds(t *testing.T) {
-	log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
-
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
+	log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 
 	readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, common.NewInternalError(fmt.Errorf("internal error")))
 
-	handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
 	handler.Handle(log, nil, nil)
 
 	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
diff --git a/E2Manager/handlers/rmrmsghandlers/enb_load_information_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/enb_load_information_notification_handler.go
index 2185e2b..88763a3 100644
--- a/E2Manager/handlers/rmrmsghandlers/enb_load_information_notification_handler.go
+++ b/E2Manager/handlers/rmrmsghandlers/enb_load_information_notification_handler.go
@@ -6,18 +6,18 @@
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 	"time"
 )
 
 type EnbLoadInformationNotificationHandler struct {
-	rnibWriterProvider func() rNibWriter.RNibWriter
+	rnibDataService services.RNibDataService
 }
 
-func NewEnbLoadInformationNotificationHandler(rnibWriterProvider func() rNibWriter.RNibWriter) EnbLoadInformationNotificationHandler {
+func NewEnbLoadInformationNotificationHandler(rnibDataService services.RNibDataService) EnbLoadInformationNotificationHandler {
 	return EnbLoadInformationNotificationHandler{
-		rnibWriterProvider: rnibWriterProvider,
+		rnibDataService: rnibDataService,
 	}
 }
 
@@ -47,7 +47,7 @@
 
 	logger.Debugf("#EnbLoadInformationNotificationHandler.Handle - RAN name: %s - Successfully done with extracting and building RAN load information. elapsed: %f ms", request.RanName, elapsed(request.StartTime))
 
-	rnibErr := src.rnibWriterProvider().SaveRanLoadInformation(request.RanName, ranLoadInformation)
+	rnibErr := src.rnibDataService.SaveRanLoadInformation(request.RanName, ranLoadInformation)
 
 	if rnibErr != nil {
 		logger.Errorf("#EnbLoadInformationNotificationHandler.Handle - RAN name: %s - Failed saving RAN load information. Error: %v", request.RanName, rnibErr)
diff --git a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go
index 3595741..f6b63f3 100644
--- a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go
+++ b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go
@@ -20,22 +20,19 @@
 	"e2mgr/logger"
 	"e2mgr/managers"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type SetupResponseNotificationHandler struct {
-	rnibReaderProvider   func() reader.RNibReader
-	rnibWriterProvider   func() rNibWriter.RNibWriter
+	rnibDataService      services.RNibDataService
 	setupResponseManager managers.ISetupResponseManager
 	notificationType     string
 }
 
-func NewSetupResponseNotificationHandler(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, setupResponseManager managers.ISetupResponseManager, notificationType string) SetupResponseNotificationHandler {
+func NewSetupResponseNotificationHandler(rnibDataService services.RNibDataService, setupResponseManager managers.ISetupResponseManager, notificationType string) SetupResponseNotificationHandler {
 	return SetupResponseNotificationHandler{
-		rnibReaderProvider:   rnibReaderProvider,
-		rnibWriterProvider:   rnibWriterProvider,
+		rnibDataService:      rnibDataService,
 		setupResponseManager: setupResponseManager,
 		notificationType:     notificationType,
 	}
@@ -46,7 +43,7 @@
 
 	inventoryName := request.RanName
 
-	nodebInfo, rnibErr := h.rnibReaderProvider().GetNodeb(inventoryName)
+	nodebInfo, rnibErr := h.rnibDataService.GetNodeb(inventoryName)
 
 	if rnibErr != nil {
 		logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error fetching RAN from rNib: %v", request.RanName, rnibErr)
@@ -66,7 +63,7 @@
 		return
 	}
 
-	rnibErr = h.rnibWriterProvider().SaveNodeb(nbIdentity, nodebInfo)
+	rnibErr = h.rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
 
 	if rnibErr != nil {
 		logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error saving RAN to rNib: %v", request.RanName, rnibErr)
diff --git a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go
index 04358a6..d4503b8 100644
--- a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go
+++ b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go
@@ -18,11 +18,13 @@
 package rmrmsghandlers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/logger"
 	"e2mgr/managers"
 	"e2mgr/mocks"
 	"e2mgr/models"
 	"e2mgr/rNibWriter"
+	"e2mgr/services"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -45,26 +47,28 @@
 	logger               *logger.Logger
 	readerMock           *mocks.RnibReaderMock
 	writerMock           *mocks.RnibWriterMock
-	rnibReaderProvider   func() reader.RNibReader
-	rnibWriterProvider   func() rNibWriter.RNibWriter
+	rnibDataService      services.RNibDataService
 	setupResponseManager managers.ISetupResponseManager
 }
 
 func NewSetupResponseTestContext(manager managers.ISetupResponseManager) *setupResponseTestContext {
 	logger, _ := logger.InitLogger(logger.InfoLevel)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 	readerMock := &mocks.RnibReaderMock{}
 	writerMock := &mocks.RnibWriterMock{}
+	rnibReaderProvider := func() reader.RNibReader {
+		return readerMock
+	}
+	rnibWriterProvider := func() rNibWriter.RNibWriter {
+		return writerMock
+	}
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
 
 	return &setupResponseTestContext{
-		logger:     logger,
-		readerMock: readerMock,
-		writerMock: writerMock,
-		rnibReaderProvider: func() reader.RNibReader {
-			return readerMock
-		},
-		rnibWriterProvider: func() rNibWriter.RNibWriter {
-			return writerMock
-		},
+		logger:               logger,
+		readerMock:           readerMock,
+		writerMock:           writerMock,
+		rnibDataService:      rnibDataService,
 		setupResponseManager: manager,
 	}
 }
@@ -72,7 +76,7 @@
 func TestSetupResponseGetNodebFailure(t *testing.T) {
 	notificationRequest := models.NotificationRequest{RanName: RanName}
 	testContext := NewSetupResponseTestContext(nil)
-	handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+	handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
 	testContext.readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewInternalError(errors.New("Error")))
 	handler.Handle(testContext.logger, &notificationRequest, nil)
 	testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
@@ -83,7 +87,7 @@
 	ranName := "test"
 	notificationRequest := models.NotificationRequest{RanName: ranName}
 	testContext := NewSetupResponseTestContext(nil)
-	handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+	handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
 	var rnibErr error
 	testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN}, rnibErr)
 	handler.Handle(testContext.logger, &notificationRequest, nil)
@@ -101,7 +105,7 @@
 	notificationRequest := models.NotificationRequest{RanName: RanName, Payload: payload}
 	testContext := NewSetupResponseTestContext(setupResponseManager)
 
-	handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, testContext.setupResponseManager, notificationType)
+	handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, testContext.setupResponseManager, notificationType)
 
 	var rnibErr error
 
@@ -173,7 +177,7 @@
 	ranName := "test"
 	notificationRequest := models.NotificationRequest{RanName: ranName, Payload: []byte("123")}
 	testContext := NewSetupResponseTestContext(nil)
-	handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+	handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
 	var rnibErr error
 	testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 1}, rnibErr)
 	handler.Handle(testContext.logger, &notificationRequest, nil)
diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler.go
index e1f6841..622a338 100644
--- a/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler.go
+++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler.go
@@ -27,18 +27,18 @@
 	"e2mgr/logger"
 	"e2mgr/models"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"unsafe"
 )
 
 type X2ResetRequestNotificationHandler struct {
-	rnibReaderProvider func() reader.RNibReader
+	rnibDataService services.RNibDataService
 }
 
-func NewX2ResetRequestNotificationHandler(rnibReaderProvider func() reader.RNibReader) X2ResetRequestNotificationHandler {
+func NewX2ResetRequestNotificationHandler(rnibDataService services.RNibDataService) X2ResetRequestNotificationHandler {
 	return X2ResetRequestNotificationHandler{
-		rnibReaderProvider: rnibReaderProvider,
+		rnibDataService: rnibDataService,
 	}
 }
 
@@ -46,7 +46,7 @@
 
 	logger.Debugf("#X2ResetRequestNotificationHandler.Handle - Ran name: %s", request.RanName)
 
-	nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName)
+	nb, rNibErr := src.rnibDataService.GetNodeb(request.RanName)
 	if rNibErr != nil {
 		logger.Errorf("#X2ResetRequestNotificationHandler.Handle - failed to retrieve nodeB entity. RanName: %s. Error: %s", request.RanName, rNibErr.Error())
 		printHandlingSetupResponseElapsedTimeInMs(logger, "#X2ResetRequestNotificationHandler.Handle - Summary: Elapsed time for receiving and handling reset request message from E2 terminator", request.StartTime)
diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler_test.go
index 3e32c36..309a57e 100644
--- a/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler_test.go
+++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler_test.go
@@ -18,9 +18,12 @@
 package rmrmsghandlers
 
 import (
+	"e2mgr/configuration"
+	"e2mgr/logger"
 	"e2mgr/mocks"
 	"e2mgr/models"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"e2mgr/tests"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,15 +33,23 @@
 	"time"
 )
 
-func TestX2ResetRequestNotifSuccess(t *testing.T) {
+func initX2ResetRequestNotifHandlerTest(t *testing.T) (*logger.Logger, X2ResetRequestNotificationHandler, *mocks.RnibReaderMock) {
 	log := initLog(t)
-	payload := []byte("payload")
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 	readerMock := &mocks.RnibReaderMock{}
 	readerProvider := func() reader.RNibReader {
 		return readerMock
 	}
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, nil)
 
-	h := NewX2ResetRequestNotificationHandler(readerProvider)
+	h := NewX2ResetRequestNotificationHandler(rnibDataService)
+	return log, h, readerMock
+}
+
+func TestX2ResetRequestNotifSuccess(t *testing.T) {
+	log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+
+	payload := []byte("payload")
 
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -59,14 +70,8 @@
 }
 
 func TestHandleX2ResetRequestNotifShuttingDownStatus(t *testing.T) {
-	log := initLog(t)
+	log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
 	var payload []byte
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
-	h := NewX2ResetRequestNotificationHandler(readerProvider)
 
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -82,14 +87,8 @@
 }
 
 func TestHandleX2ResetRequestNotifDisconnectStatus(t *testing.T) {
-	log := initLog(t)
+	log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
 	var payload []byte
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
-	h := NewX2ResetRequestNotificationHandler(readerProvider)
 
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -106,14 +105,8 @@
 
 func TestHandleX2ResetRequestNotifGetNodebFailed(t *testing.T) {
 
-	log := initLog(t)
+	log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
 	var payload []byte
-	readerMock := &mocks.RnibReaderMock{}
-	readerProvider := func() reader.RNibReader {
-		return readerMock
-	}
-
-	h := NewX2ResetRequestNotificationHandler(readerProvider)
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
 	notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler.go
index cd1556d..1ad7d98 100644
--- a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler.go
+++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler.go
@@ -26,16 +26,16 @@
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
 	"e2mgr/models"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+	"e2mgr/services"
 )
 
 type X2ResetResponseHandler struct {
-	rnibReaderProvider func() reader.RNibReader
+	rnibDataService services.RNibDataService
 }
 
-func NewX2ResetResponseHandler(rnibReaderProvider func() reader.RNibReader) X2ResetResponseHandler {
+func NewX2ResetResponseHandler(rnibDataService services.RNibDataService) X2ResetResponseHandler {
 	return X2ResetResponseHandler{
-		rnibReaderProvider: rnibReaderProvider,
+		rnibDataService: rnibDataService,
 	}
 }
 
@@ -43,11 +43,11 @@
 
 	logger.Infof("#x2ResetResponseHandler.Handle - received reset response. Payload: %x", request.Payload)
 
-	if nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
+	if nb, rNibErr := src.rnibDataService.GetNodeb(request.RanName); rNibErr != nil {
 		logger.Errorf("#x2ResetResponseHandler.Handle - failed to retrieve nb entity. RanName: %s. Error: %s", request.RanName, rNibErr.Error())
 	} else {
 		logger.Debugf("#x2ResetResponseHandler.Handle - nb entity retrieved. RanName %s, ConnectionStatus %s", nb.RanName, nb.ConnectionStatus)
-		refinedMessage, err := converters.UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize , request.Len, request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
+		refinedMessage, err := converters.UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize, request.Len, request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
 		if err != nil {
 			logger.Errorf("#x2ResetResponseHandler.Handle - failed to unpack reset response message. RanName %s, Payload: %s", request.RanName, request.Payload)
 		} else {
diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go
index 0134399..26f0ade 100644
--- a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go
+++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go
@@ -18,10 +18,12 @@
 package rmrmsghandlers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/logger"
 	"e2mgr/mocks"
 	"e2mgr/models"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"e2mgr/tests"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,12 +32,9 @@
 	"time"
 )
 
-func TestX2ResetResponseSuccess(t *testing.T) {
-	payload, err := tests.BuildPackedX2ResetResponse()
-	if err != nil {
-		t.Errorf("#x2_reset_response_handler_test.TestX2resetResponse - failed to build and pack X2ResetResponse. Error %x", err)
-	}
+func initX2ResetResponseHandlerTest(t *testing.T) (*logger.Logger, X2ResetResponseHandler, *mocks.RnibReaderMock) {
 	log, err := logger.InitLogger(logger.DebugLevel)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 	if err!=nil{
 		t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
 	}
@@ -43,8 +42,20 @@
 	rnibReaderProvider := func() reader.RNibReader {
 		return readerMock
 	}
+	rnibDataService := services.NewRnibDataService(log, config, rnibReaderProvider, nil)
 
-	h := NewX2ResetResponseHandler(rnibReaderProvider)
+	h := NewX2ResetResponseHandler(rnibDataService)
+	return log, h, readerMock
+}
+
+func TestX2ResetResponseSuccess(t *testing.T) {
+	log, h, readerMock := initX2ResetResponseHandlerTest(t)
+
+	payload, err := tests.BuildPackedX2ResetResponse()
+	if err != nil {
+		t.Errorf("#x2_reset_response_handler_test.TestX2resetResponse - failed to build and pack X2ResetResponse. Error %x", err)
+	}
+
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
 	notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -61,17 +72,9 @@
 }
 
 func TestX2ResetResponseReaderFailure(t *testing.T) {
-	var payload []byte
-	log, err := logger.InitLogger(logger.DebugLevel)
-	if err!=nil{
-		t.Errorf("#sctp_errors_notification_handler_test.TestX2ResetResponseReaderFailure - failed to initialize logger, error: %s", err)
-	}
-	readerMock :=&mocks.RnibReaderMock{}
-	rnibReaderProvider := func() reader.RNibReader {
-		return readerMock
-	}
+	log, h, readerMock := initX2ResetResponseHandlerTest(t)
 
-	h := NewX2ResetResponseHandler(rnibReaderProvider)
+	var payload []byte
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
 	notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -88,17 +91,9 @@
 }
 
 func TestX2ResetResponseUnpackFailure(t *testing.T) {
-	payload := []byte("not valid payload")
-	log, err := logger.InitLogger(logger.DebugLevel)
-	if err!=nil{
-		t.Errorf("#sctp_errors_notification_handler_test.TestX2ResetResponseUnpackFailure - failed to initialize logger, error: %s", err)
-	}
-	readerMock :=&mocks.RnibReaderMock{}
-	rnibReaderProvider := func() reader.RNibReader {
-		return readerMock
-	}
+	log, h, readerMock := initX2ResetResponseHandlerTest(t)
 
-	h := NewX2ResetResponseHandler(rnibReaderProvider)
+	payload := []byte("not valid payload")
 	xaction := []byte("RanName")
 	mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
 	notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
diff --git a/E2Manager/main/http_server.go b/E2Manager/main/http_server.go
index cbad8ce..7cd6e39 100644
--- a/E2Manager/main/http_server.go
+++ b/E2Manager/main/http_server.go
@@ -53,19 +53,20 @@
 	reader.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
 	defer reader.Close()
 
+	rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter)
 	rmrResponseChannel := make(chan *models.NotificationResponse, config.NotificationResponseBuffer)
 	rmrService := services.NewRmrService(rmrConfig, msgImpl, rmrResponseChannel)
-	var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, rNibWriter.GetRNibWriter)
-	var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter, ranSetupManager)
-	var nManager = notificationmanager.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter, ranReconnectionManager)
+	var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+	var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, rnibDataService, ranSetupManager)
+	var nManager = notificationmanager.NewNotificationManager(rnibDataService, ranReconnectionManager)
 
 	rmrServiceReceiver := receivers.NewRmrServiceReceiver(*rmrService, nManager)
 	defer rmrService.CloseContext()
 	go rmrServiceReceiver.ListenAndHandle()
 	go rmrService.SendResponse()
 
-	controller := controllers.NewNodebController(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter)
-	newController := controllers.NewController(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter, config, ranSetupManager)
+	controller := controllers.NewNodebController(logger, rmrService, rnibDataService)
+	newController := controllers.NewController(logger, rmrService, rnibDataService, config, ranSetupManager)
 	runServer(config.Http.Port, controller, newController)
 }
 
diff --git a/E2Manager/managers/notificationmanager/notification_manager.go b/E2Manager/managers/notificationmanager/notification_manager.go
index 319dde7..70b81ed 100644
--- a/E2Manager/managers/notificationmanager/notification_manager.go
+++ b/E2Manager/managers/notificationmanager/notification_manager.go
@@ -22,10 +22,9 @@
 	"e2mgr/managers"
 	"e2mgr/models"
 	"e2mgr/providers/rmrmsghandlerprovider"
-	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"fmt"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"time"
 )
 
@@ -33,8 +32,8 @@
 	notificationHandlerProvider *rmrmsghandlerprovider.NotificationHandlerProvider
 }
 
-func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
-	notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+func NewNotificationManager(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
+	notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
 
 	return &NotificationManager{
 		notificationHandlerProvider: notificationHandlerProvider,
diff --git a/E2Manager/managers/ran_reconnection_manager.go b/E2Manager/managers/ran_reconnection_manager.go
index f42986c..f27f810 100644
--- a/E2Manager/managers/ran_reconnection_manager.go
+++ b/E2Manager/managers/ran_reconnection_manager.go
@@ -20,9 +20,8 @@
 import (
 	"e2mgr/configuration"
 	"e2mgr/logger"
-	"e2mgr/rNibWriter"
+	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type IRanReconnectionManager interface {
@@ -30,26 +29,23 @@
 }
 
 type RanReconnectionManager struct {
-	logger             *logger.Logger
-	config             *configuration.Configuration
-	rnibReaderProvider func() reader.RNibReader
-	rnibWriterProvider func() rNibWriter.RNibWriter
-	ranSetupManager    *RanSetupManager
+	logger          *logger.Logger
+	config          *configuration.Configuration
+	rnibDataService services.RNibDataService
+	ranSetupManager *RanSetupManager
 }
 
-func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader,
-	rnibWriterProvider func() rNibWriter.RNibWriter, ranSetupManager *RanSetupManager) *RanReconnectionManager {
+func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, ranSetupManager *RanSetupManager) *RanReconnectionManager {
 	return &RanReconnectionManager{
-		logger:             logger,
-		config:             config,
-		rnibReaderProvider: rnibReaderProvider,
-		rnibWriterProvider: rnibWriterProvider,
-		ranSetupManager:    ranSetupManager,
+		logger:          logger,
+		config:          config,
+		rnibDataService: rnibDataService,
+		ranSetupManager: ranSetupManager,
 	}
 }
 
 func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
-	nodebInfo, rnibErr := m.rnibReaderProvider().GetNodeb(inventoryName)
+	nodebInfo, rnibErr := m.rnibDataService.GetNodeb(inventoryName)
 
 	if rnibErr != nil {
 		m.logger.Errorf("#RanReconnectionManager.ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
@@ -84,7 +80,7 @@
 	}
 
 	nodebInfo.ConnectionStatus = connectionStatus;
-	err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+	err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
 
 	if err != nil {
 		m.logger.Errorf("#RanReconnectionManager.updateNodebInfoStatus - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
diff --git a/E2Manager/managers/ran_reconnection_manager_test.go b/E2Manager/managers/ran_reconnection_manager_test.go
index 7679473..d8e169d 100644
--- a/E2Manager/managers/ran_reconnection_manager_test.go
+++ b/E2Manager/managers/ran_reconnection_manager_test.go
@@ -40,6 +40,7 @@
 	if err != nil {
 		t.Errorf("#... - failed to initialize logger, error: %s", err)
 	}
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
 	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrService := getRmrService(rmrMessengerMock, logger)
@@ -52,8 +53,9 @@
 	rnibWriterProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
-	ranSetupManager := NewRanSetupManager(logger, rmrService, rnibWriterProvider)
-	ranReconnectionManager := NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	ranSetupManager := NewRanSetupManager(logger, rmrService, rnibDataService)
+	ranReconnectionManager := NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
 	return logger, rmrMessengerMock, readerMock, writerMock, ranReconnectionManager
 }
 
diff --git a/E2Manager/managers/ran_setup_manager.go b/E2Manager/managers/ran_setup_manager.go
index ef4a642..7500069 100644
--- a/E2Manager/managers/ran_setup_manager.go
+++ b/E2Manager/managers/ran_setup_manager.go
@@ -22,7 +22,6 @@
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
 	"e2mgr/models"
-	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
 	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,14 +29,14 @@
 
 type RanSetupManager struct {
 	logger             *logger.Logger
-	rnibWriterProvider func() rNibWriter.RNibWriter
+	rnibDataService services.RNibDataService
 	rmrService         *services.RmrService
 }
 
-func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibWriterProvider func() rNibWriter.RNibWriter) *RanSetupManager {
+func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService) *RanSetupManager {
 	return &RanSetupManager{
 		logger:             logger,
-		rnibWriterProvider: rnibWriterProvider,
+		rnibDataService: rnibDataService,
 		rmrService:         rmrService,
 	}
 }
@@ -47,7 +46,7 @@
 	// Update retries and connection status
 	nodebInfo.ConnectionStatus = status
 	nodebInfo.ConnectionAttempts++
-	err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+	err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
 	if err != nil {
 		m.logger.Errorf("#RanSetupManager.updateConnectionStatus - Ran name: %s - Failed updating RAN's connection status to %v : %s", nodebInfo.RanName, status, err)
 	} else {
@@ -61,7 +60,7 @@
 	// Update retries and connection status
 	nodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
 	nodebInfo.ConnectionAttempts--
-	err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+	err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
 	if err != nil {
 		m.logger.Errorf("#RanSetupManager.updateConnectionStatusDisconnected - Ran name: %s - Failed updating RAN's connection status to DISCONNECTED : %s", nodebInfo.RanName, err)
 	} else {
diff --git a/E2Manager/managers/ran_setup_manager_test.go b/E2Manager/managers/ran_setup_manager_test.go
index 58ca166..20f3d59 100644
--- a/E2Manager/managers/ran_setup_manager_test.go
+++ b/E2Manager/managers/ran_setup_manager_test.go
@@ -18,29 +18,50 @@
 package managers
 
 import (
+	"e2mgr/configuration"
 	"e2mgr/e2managererrors"
 	"e2mgr/e2pdus"
 	"e2mgr/logger"
 	"e2mgr/mocks"
 	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"fmt"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/mock"
 	"testing"
 )
 
-func TestExecuteSetupConnectingX2Setup(t *testing.T) {
-	log := initLog(t)
+func initRanSetupManagerTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibWriterMock, *RanSetupManager) {
+	logger, err := logger.InitLogger(logger.DebugLevel)
+	if err != nil {
+		t.Errorf("#... - failed to initialize logger, error: %s", err)
+	}
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
-	ranName := "test1"
+	rmrMessengerMock := &mocks.RmrMessengerMock{}
+	rmrService := getRmrService(rmrMessengerMock, logger)
 
+	readerMock := &mocks.RnibReaderMock{}
+	rnibReaderProvider := func() reader.RNibReader {
+		return readerMock
+	}
 	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
+	rnibWriterProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	ranSetupManager := NewRanSetupManager(logger, rmrService, rnibDataService)
+	return rmrMessengerMock, writerMock, ranSetupManager
+}
+
+func TestExecuteSetupConnectingX2Setup(t *testing.T) {
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
+
+	ranName := "test1"
 
 	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
@@ -50,11 +71,8 @@
 	payload := e2pdus.PackedX2setupRequest
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err != nil {
 		t.Errorf("want: success, got: error: %s", err)
 	}
@@ -64,16 +82,11 @@
 }
 
 func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
-	log := initLog(t)
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
 	ranName := "test1"
 
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
-	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
+		var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
 	var rnibErr error
 	writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
@@ -81,11 +94,8 @@
 	payload := e2pdus.PackedEndcX2setupRequest
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err != nil {
 		t.Errorf("want: success, got: error: %s", err)
 	}
@@ -95,15 +105,10 @@
 }
 
 func TestExecuteSetupDisconnected(t *testing.T) {
-	log := initLog(t)
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
 	ranName := "test1"
 
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
 	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
 	var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -114,11 +119,8 @@
 	payload := []byte{0}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
 		t.Errorf("want: failure, got: success")
 	}
@@ -128,15 +130,10 @@
 }
 
 func TestExecuteSetupConnectingRnibError(t *testing.T) {
-	log := initLog(t)
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
 	ranName := "test1"
 
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
 	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
 	var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -147,11 +144,8 @@
 	payload := []byte{0}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
 		t.Errorf("want: failure, got: success")
 	} else {
@@ -163,15 +157,10 @@
 }
 
 func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
-	log := initLog(t)
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
 	ranName := "test1"
 
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
 	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
 	var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -182,11 +171,8 @@
 	payload := []byte{0}
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
 		t.Errorf("want: failure, got: success")
 	} else {
@@ -198,15 +184,10 @@
 }
 
 func TestExecuteSetupUnsupportedProtocol(t *testing.T) {
-	log := initLog(t)
+	rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
 	ranName := "test1"
 
-	writerMock := &mocks.RnibWriterMock{}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return writerMock
-	}
-
 	var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL}
 	var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL, ConnectionAttempts: 1}
 	var rnibErr error
@@ -215,11 +196,8 @@
 	payload := e2pdus.PackedX2setupRequest
 	xaction := []byte(ranName)
 	msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
 	rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-	rmrService := getRmrService(rmrMessengerMock, log)
 
-	mgr := NewRanSetupManager(log, rmrService, writerProvider)
 	if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
 		t.Errorf("want: error, got: success")
 	}
diff --git a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
index 7891d8c..23493cd 100644
--- a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
+++ b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
@@ -23,10 +23,8 @@
 	"e2mgr/handlers/httpmsghandlers"
 	"e2mgr/logger"
 	"e2mgr/managers"
-	"e2mgr/rNibWriter"
 	"e2mgr/services"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type IncomingRequest string
@@ -43,23 +41,21 @@
 	logger     *logger.Logger
 }
 
-func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
-	rNibReaderProvider func() reader.RNibReader, ranSetupManager *managers.RanSetupManager) *IncomingRequestHandlerProvider {
+func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibDataService services.RNibDataService, ranSetupManager *managers.RanSetupManager) *IncomingRequestHandlerProvider {
 
 	return &IncomingRequestHandlerProvider{
-		requestMap: initRequestHandlerMap(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider, ranSetupManager),
+		requestMap: initRequestHandlerMap(logger, rmrService, config, rNibDataService, ranSetupManager),
 		logger:     logger,
 	}
 }
 
-func initRequestHandlerMap(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
-	rNibReaderProvider func() reader.RNibReader, ranSetupManager *managers.RanSetupManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
+func initRequestHandlerMap(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibDataService services.RNibDataService, ranSetupManager *managers.RanSetupManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
 
 	return map[IncomingRequest]httpmsghandlers.RequestHandler{
-		ShutdownRequest: httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
-		ResetRequest:    httpmsghandlers.NewX2ResetRequestHandler(logger, rmrService, rNibWriterProvider, rNibReaderProvider),
-		X2SetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibWriterProvider, rNibReaderProvider, ranSetupManager, entities.E2ApplicationProtocol_X2_SETUP_REQUEST),
-		EndcSetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibWriterProvider, rNibReaderProvider, ranSetupManager, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST), //TODO change to pointer
+		ShutdownRequest: httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrService, config, rNibDataService), //TODO change to pointer
+		ResetRequest:    httpmsghandlers.NewX2ResetRequestHandler(logger, rmrService, rNibDataService),
+		X2SetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibDataService, ranSetupManager, entities.E2ApplicationProtocol_X2_SETUP_REQUEST),
+		EndcSetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibDataService, ranSetupManager, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST), //TODO change to pointer
 	}
 }
 
diff --git a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
index d0e13f3..393b800 100644
--- a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
+++ b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
@@ -42,36 +42,29 @@
 	return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
 }
 
-func TestNewIncomingRequestHandlerProvider(t *testing.T) {
+func setupTest(t *testing.T) *IncomingRequestHandlerProvider {
 	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
 	log := initLog(t)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 	readerProvider := func() reader.RNibReader {
 		return &mocks.RnibReaderMock{}
 	}
 	writerProvider := func() rNibWriter.RNibWriter {
 		return &mocks.RnibWriterMock{}
 	}
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
+	rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rnibDataService)
+	return NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+}
+
+func TestNewIncomingRequestHandlerProvider(t *testing.T) {
+	provider := setupTest(t)
 
 	assert.NotNil(t, provider)
 }
 
 func TestShutdownRequestHandler(t *testing.T) {
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	log := initLog(t)
-	readerProvider := func() reader.RNibReader {
-		return &mocks.RnibReaderMock{}
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return &mocks.RnibWriterMock{}
-	}
-
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+	provider := setupTest(t)
 	handler, err := provider.GetHandler(ShutdownRequest)
 
 	assert.NotNil(t, provider)
@@ -83,19 +76,7 @@
 }
 
 func TestX2SetupRequestHandler(t *testing.T) {
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	log := initLog(t)
-	readerProvider := func() reader.RNibReader {
-		return &mocks.RnibReaderMock{}
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return &mocks.RnibWriterMock{}
-	}
-
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+	provider := setupTest(t)
 	handler, err := provider.GetHandler(X2SetupRequest)
 
 	assert.NotNil(t, provider)
@@ -107,19 +88,7 @@
 }
 
 func TestEndcSetupRequestHandler(t *testing.T) {
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-	log := initLog(t)
-	readerProvider := func() reader.RNibReader {
-		return &mocks.RnibReaderMock{}
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return &mocks.RnibWriterMock{}
-	}
-
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+	provider := setupTest(t)
 	handler, err := provider.GetHandler(EndcSetupRequest)
 
 	assert.NotNil(t, provider)
@@ -131,18 +100,7 @@
 }
 
 func TestGetShutdownHandlerFailure(t *testing.T) {
-	rmrMessengerMock := &mocks.RmrMessengerMock{}
-	log := initLog(t)
-	readerProvider := func() reader.RNibReader {
-		return &mocks.RnibReaderMock{}
-	}
-	writerProvider := func() rNibWriter.RNibWriter {
-		return &mocks.RnibWriterMock{}
-	}
-
-	ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-	provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+	provider := setupTest(t)
 	_, actual := provider.GetHandler("test")
 	expected := &e2managererrors.InternalError{}
 
diff --git a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
index 0a01b76..d85bf95 100644
--- a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
+++ b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
@@ -20,36 +20,35 @@
 import (
 	"e2mgr/handlers/rmrmsghandlers"
 	"e2mgr/managers"
-	"e2mgr/rNibWriter"
 	"e2mgr/rmrCgo"
+	"e2mgr/services"
 	"fmt"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type NotificationHandlerProvider struct {
 	notificationHandlers map[int]rmrmsghandlers.NotificationHandler
 }
 
-func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
+func NewNotificationHandlerProvider(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
 	return &NotificationHandlerProvider{
-		notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager),
+		notificationHandlers: initNotificationHandlersMap(rnibDataService, ranReconnectionManager),
 	}
 }
 
 //TODO change handlers.NotificationHandler to *handlers.NotificationHandler
-func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) map[int]rmrmsghandlers.NotificationHandler {
+func initNotificationHandlersMap(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) map[int]rmrmsghandlers.NotificationHandler {
 	return map[int]rmrmsghandlers.NotificationHandler{
-		rmrCgo.RIC_X2_SETUP_RESP:           rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupResponseManager(), "X2 Setup Response"),
-		rmrCgo.RIC_X2_SETUP_FAILURE:        rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response"),
-		rmrCgo.RIC_ENDC_X2_SETUP_RESP:      rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupResponseManager(), "ENDC Setup Response"),
-		rmrCgo.RIC_ENDC_X2_SETUP_FAILURE:   rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),
+		rmrCgo.RIC_X2_SETUP_RESP:           rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupResponseManager(), "X2 Setup Response"),
+		rmrCgo.RIC_X2_SETUP_FAILURE:        rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response"),
+		rmrCgo.RIC_ENDC_X2_SETUP_RESP:      rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupResponseManager(), "ENDC Setup Response"),
+		rmrCgo.RIC_ENDC_X2_SETUP_FAILURE:   rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),
 		rmrCgo.RIC_SCTP_CONNECTION_FAILURE: rmrmsghandlers.NewRanLostConnectionHandler(ranReconnectionManager),
-		rmrCgo.RIC_ENB_LOAD_INFORMATION:    rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider),
+		rmrCgo.RIC_ENB_LOAD_INFORMATION:    rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibDataService),
 		rmrCgo.RIC_ENB_CONF_UPDATE:         rmrmsghandlers.NewX2EnbConfigurationUpdateHandler(),
 		rmrCgo.RIC_ENDC_CONF_UPDATE:        rmrmsghandlers.NewEndcConfigurationUpdateHandler(),
-		rmrCgo.RIC_X2_RESET_RESP:           rmrmsghandlers.NewX2ResetResponseHandler(rnibReaderProvider),
-		rmrCgo.RIC_X2_RESET:                rmrmsghandlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
-		rmrCgo.RIC_E2_TERM_INIT:            rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibReaderProvider),
+		rmrCgo.RIC_X2_RESET_RESP:           rmrmsghandlers.NewX2ResetResponseHandler(rnibDataService),
+		rmrCgo.RIC_X2_RESET:                rmrmsghandlers.NewX2ResetRequestNotificationHandler(rnibDataService),
+		rmrCgo.RIC_E2_TERM_INIT:            rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService),
 	}
 }
 
diff --git a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
index b3e7c24..463259a 100644
--- a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
+++ b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
@@ -39,9 +39,9 @@
  * Verify support for known providers.
  */
 
-func TestGetNotificationHandlerSuccess(t *testing.T) {
-
+func initTestCase(t *testing.T) (services.RNibDataService, *managers.RanReconnectionManager) {
 	logger := initLog(t)
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
 	readerMock := &mocks.RnibReaderMock{}
 	rnibReaderProvider := func() reader.RNibReader {
@@ -51,27 +51,34 @@
 	rnibWriterProvider := func() rNibWriter.RNibWriter {
 		return writerMock
 	}
-	ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rNibWriter.GetRNibWriter)
-	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rnibDataService)
+	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+	return rnibDataService, ranReconnectionManager
+}
+
+func TestGetNotificationHandlerSuccess(t *testing.T) {
+
+	rnibDataService, ranReconnectionManager := initTestCase(t)
 
 	var testCases = []struct {
 		msgType int
 		handler rmrmsghandlers.NotificationHandler
 	}{
-		{rmrCgo.RIC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupResponseManager(), "X2 Setup Response")},
-		{rmrCgo.RIC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response")},
-		{rmrCgo.RIC_ENDC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupResponseManager(), "ENDC Setup Response")},
-		{rmrCgo.RIC_ENDC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),},
+		{rmrCgo.RIC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupResponseManager(), "X2 Setup Response")},
+		{rmrCgo.RIC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response")},
+		{rmrCgo.RIC_ENDC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupResponseManager(), "ENDC Setup Response")},
+		{rmrCgo.RIC_ENDC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),},
 		{rmrCgo.RIC_SCTP_CONNECTION_FAILURE, rmrmsghandlers.NewRanLostConnectionHandler(ranReconnectionManager)},
-		{rmrCgo.RIC_ENB_LOAD_INFORMATION, rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider)},
+		{rmrCgo.RIC_ENB_LOAD_INFORMATION, rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibDataService)},
 		{rmrCgo.RIC_ENB_CONF_UPDATE, rmrmsghandlers.X2EnbConfigurationUpdateHandler{}},
 		{rmrCgo.RIC_ENDC_CONF_UPDATE, rmrmsghandlers.EndcConfigurationUpdateHandler{}},
-		{rmrCgo.RIC_E2_TERM_INIT, rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibReaderProvider)},
+		{rmrCgo.RIC_E2_TERM_INIT, rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService)},
 	}
 
 	for _, tc := range testCases {
 
-		provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+		provider := NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
 		t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
 			handler, err := provider.GetNotificationHandler(tc.msgType)
 			if err != nil {
@@ -92,8 +99,6 @@
 
 func TestGetNotificationHandlerFailure(t *testing.T) {
 
-	logger := initLog(t)
-
 	var testCases = []struct {
 		msgType   int
 		errorText string
@@ -101,19 +106,9 @@
 		{9999 /*unknown*/, "notification handler not found"},
 	}
 	for _, tc := range testCases {
-		readerMock := &mocks.RnibReaderMock{}
-		rnibReaderProvider := func() reader.RNibReader {
-			return readerMock
-		}
-		writerMock := &mocks.RnibWriterMock{}
-		rnibWriterProvider := func() rNibWriter.RNibWriter {
-			return writerMock
-		}
 
-		ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rNibWriter.GetRNibWriter)
-		ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-
-		provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+		rnibDataService, ranReconnectionManager := initTestCase(t)
+		provider := NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
 		t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
 			_, err := provider.GetNotificationHandler(tc.msgType)
 			if err == nil {
diff --git a/E2Manager/resources/configuration.yaml b/E2Manager/resources/configuration.yaml
index 0e16ecd..4dabf92 100644
--- a/E2Manager/resources/configuration.yaml
+++ b/E2Manager/resources/configuration.yaml
@@ -8,3 +8,5 @@
 notificationResponseBuffer: 100
 bigRedButtonTimeoutSec: 5
 maxConnectionAttempts: 3
+maxRnibConnectionAttempts: 3
+rnibRetryIntervalMs: 10
diff --git a/E2Manager/services/receivers/rmr_service_receiver_test.go b/E2Manager/services/receivers/rmr_service_receiver_test.go
index 15e9857..1482085 100644
--- a/E2Manager/services/receivers/rmr_service_receiver_test.go
+++ b/E2Manager/services/receivers/rmr_service_receiver_test.go
@@ -58,6 +58,8 @@
 }
 
 func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, logger *logger.Logger) *RmrServiceReceiver {
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+
 	readerMock := &mocks.RnibReaderMock{}
 	rnibReaderProvider := func() reader.RNibReader {
 		return readerMock
@@ -67,10 +69,11 @@
 		return writerMock
 	}
 
+	rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
 	rmrService := getRmrService(rmrMessengerMock, logger)
-	ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rNibWriter.GetRNibWriter)
-	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-	nManager := notificationmanager.NewNotificationManager(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+	ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+	ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+	nManager := notificationmanager.NewNotificationManager(rnibDataService, ranReconnectionManager)
 
 	return NewRmrServiceReceiver(*rmrService, nManager)
 }
diff --git a/E2Manager/services/rnib_data_service.go b/E2Manager/services/rnib_data_service.go
new file mode 100644
index 0000000..8a91894
--- /dev/null
+++ b/E2Manager/services/rnib_data_service.go
@@ -0,0 +1,128 @@
+package services
+
+import (
+	"e2mgr/configuration"
+	"e2mgr/logger"
+	"e2mgr/rNibWriter"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+	"net"
+	"time"
+)
+
+type RNibDataService interface {
+	SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+	UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
+	SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
+	GetNodeb(ranName string) (*entities.NodebInfo, error)
+	GetListNodebIds() ([]*entities.NbIdentity, error)
+}
+
+type rNibDataService struct {
+	logger             *logger.Logger
+	rnibReaderProvider func() reader.RNibReader
+	rnibWriterProvider func() rNibWriter.RNibWriter
+	maxAttempts        int
+	retryInterval      time.Duration
+}
+
+func NewRnibDataService(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *rNibDataService {
+	return &rNibDataService{
+		logger:             logger,
+		rnibReaderProvider: rnibReaderProvider,
+		rnibWriterProvider: rnibWriterProvider,
+		maxAttempts:        config.MaxRnibConnectionAttempts,
+		retryInterval:      time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
+	}
+}
+
+func (w *rNibDataService) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+	w.logger.Infof("#RnibDataService.UpdateNodebInfo - nodebInfo: %s", nodebInfo)
+
+	err := w.retry("UpdateNodebInfo", func() (err error) {
+		err = w.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+		return
+	})
+
+	return err
+}
+
+func (w *rNibDataService) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
+	w.logger.Infof("#RnibDataService.SaveNodeb - nbIdentity: %s, nodebInfo: %s", nbIdentity, nb)
+
+	err := w.retry("SaveNodeb", func() (err error) {
+		err = w.rnibWriterProvider().SaveNodeb(nbIdentity, nb)
+		return
+	})
+
+	return err
+}
+
+func (w *rNibDataService) SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error {
+	w.logger.Infof("#RnibDataService.SaveRanLoadInformation - inventoryName: %s, ranLoadInformation: %s", inventoryName, ranLoadInformation)
+
+	err := w.retry("SaveRanLoadInformation", func() (err error) {
+		err = w.rnibWriterProvider().SaveRanLoadInformation(inventoryName, ranLoadInformation)
+		return
+	})
+
+	return err
+}
+
+func (w *rNibDataService) GetNodeb(ranName string) (*entities.NodebInfo, error) {
+	w.logger.Infof("#RnibDataService.GetNodeb - ranName: %s", ranName)
+
+	var nodeb *entities.NodebInfo = nil
+
+	err := w.retry("GetNodeb", func() (err error) {
+		nodeb, err = w.rnibReaderProvider().GetNodeb(ranName)
+		return
+	})
+
+	return nodeb, err
+}
+
+func (w *rNibDataService) GetListNodebIds() ([]*entities.NbIdentity, error) {
+	w.logger.Infof("#RnibDataService.GetListNodebIds")
+
+	var nodeIds []*entities.NbIdentity = nil
+
+	err := w.retry("GetListNodebIds", func() (err error) {
+		nodeIds, err = w.rnibReaderProvider().GetListNodebIds()
+		return
+	})
+
+	return nodeIds, err
+}
+
+func (w *rNibDataService) retry(rnibFunc string, f func() error) (err error) {
+	attempts := w.maxAttempts
+
+	for i := 1; ; i++ {
+		err = f()
+		if err == nil {
+			return
+		}
+		if !w.isConnError(err) {
+			return err
+		}
+		if i >= attempts {
+			w.logger.Errorf("#RnibDataService.retry - after %d attempts of %s, last error: %s", attempts, rnibFunc, err)
+			return err
+		}
+		time.Sleep(w.retryInterval)
+
+		w.logger.Infof("#RnibDataService.retry - retrying %d %s after error: %s", i, rnibFunc, err)
+	}
+}
+
+func (w *rNibDataService) isConnError(err error) bool {
+	internalErr, ok := err.(common.InternalError)
+	if !ok {
+		return false
+	}
+	_, ok = internalErr.Err.(*net.OpError)
+
+	return ok
+}
diff --git a/E2Manager/services/rnib_data_service_test.go b/E2Manager/services/rnib_data_service_test.go
new file mode 100644
index 0000000..7a96310
--- /dev/null
+++ b/E2Manager/services/rnib_data_service_test.go
@@ -0,0 +1,186 @@
+package services
+
+import (
+	"e2mgr/configuration"
+	"e2mgr/logger"
+	"e2mgr/mocks"
+	"e2mgr/rNibWriter"
+	"fmt"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+	"github.com/stretchr/testify/assert"
+	"net"
+	"strings"
+	"testing"
+)
+
+func setupTest(t *testing.T) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
+	logger, err := logger.InitLogger(logger.DebugLevel)
+	if err != nil {
+		t.Errorf("#... - failed to initialize logger, error: %s", err)
+	}
+
+	config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+
+	readerMock := &mocks.RnibReaderMock{}
+	rnibReaderProvider := func() reader.RNibReader {
+		return readerMock
+	}
+
+	writerMock := &mocks.RnibWriterMock{}
+	rnibWriterProvider := func() rNibWriter.RNibWriter {
+		return writerMock
+	}
+
+	rnibDataService := NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+	assert.NotNil(t, rnibDataService)
+
+	return rnibDataService, readerMock, writerMock
+}
+
+func TestSuccessfulSaveNodeb(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	nodebInfo := &entities.NodebInfo{}
+	nbIdentity := &entities.NbIdentity{}
+	writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+
+	rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+	writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
+}
+
+func TestConnFailureSaveNodeb(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	nodebInfo := &entities.NodebInfo{}
+	nbIdentity := &entities.NbIdentity{}
+	mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+	writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+
+	rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+	writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
+}
+
+func TestNonConnFailureSaveNodeb(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	nodebInfo := &entities.NodebInfo{}
+	nbIdentity := &entities.NbIdentity{}
+	mockErr := common.InternalError{Err: fmt.Errorf("non connection failure")}
+	writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+
+	rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+	writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
+}
+
+func TestSuccessfulUpdateNodebInfo(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	nodebInfo := &entities.NodebInfo{}
+	writerMock.On("UpdateNodebInfo", nodebInfo).Return(nil)
+
+	rnibDataService.UpdateNodebInfo(nodebInfo)
+	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+}
+
+func TestConnFailureUpdateNodebInfo(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	nodebInfo := &entities.NodebInfo{}
+	mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+	writerMock.On("UpdateNodebInfo", nodebInfo).Return(mockErr)
+
+	rnibDataService.UpdateNodebInfo(nodebInfo)
+	writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 3)
+}
+
+func TestSuccessfulSaveRanLoadInformation(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	var ranName string = "abcd"
+	ranLoadInformation := &entities.RanLoadInformation{}
+	writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(nil)
+
+	rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
+	writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 1)
+}
+
+func TestConnFailureSaveRanLoadInformation(t *testing.T) {
+	rnibDataService, _, writerMock := setupTest(t)
+
+	var ranName string = "abcd"
+	ranLoadInformation := &entities.RanLoadInformation{}
+	mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+	writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(mockErr)
+
+	rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
+	writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 3)
+}
+
+func TestSuccessfulGetNodeb(t *testing.T) {
+	rnibDataService, readerMock, _ := setupTest(t)
+
+	invName := "abcd"
+	nodebInfo := &entities.NodebInfo{}
+	readerMock.On("GetNodeb", invName).Return(nodebInfo, nil)
+
+	res, err := rnibDataService.GetNodeb(invName)
+	readerMock.AssertNumberOfCalls(t, "GetNodeb", 1)
+	assert.Equal(t, nodebInfo, res)
+	assert.Nil(t, err)
+}
+
+func TestConnFailureGetNodeb(t *testing.T) {
+	rnibDataService, readerMock, _ := setupTest(t)
+
+	invName := "abcd"
+	var nodeb *entities.NodebInfo = nil
+	mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+	readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
+
+	res, err := rnibDataService.GetNodeb(invName)
+	readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
+	assert.True(t, strings.Contains(err.Error(), "connection error", ))
+	assert.Equal(t, nodeb, res)
+}
+
+func TestSuccessfulGetNodebIdList(t *testing.T) {
+	rnibDataService, readerMock, _ := setupTest(t)
+
+	nodeIds := []*entities.NbIdentity{}
+	readerMock.On("GetListNodebIds").Return(nodeIds, nil)
+
+	res, err := rnibDataService.GetListNodebIds()
+	readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
+	assert.Equal(t, nodeIds, res)
+	assert.Nil(t, err)
+}
+
+func TestConnFailureGetNodebIdList(t *testing.T) {
+	rnibDataService, readerMock, _ := setupTest(t)
+
+	var nodeIds []*entities.NbIdentity = nil
+	mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+	readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
+
+	res, err := rnibDataService.GetListNodebIds()
+	readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
+	assert.True(t, strings.Contains(err.Error(), "connection error", ))
+	assert.Equal(t, nodeIds, res)
+}
+
+//func TestConnFailureThenSuccessGetNodebIdList(t *testing.T) {
+//	rnibDataService, readerMock, _ := setupTest(t)
+//
+//	var nilNodeIds []*entities.NbIdentity = nil
+//	nodeIds := []*entities.NbIdentity{}
+//	mockErr := common.InternalError{Err: &net.OpError{Err:fmt.Errorf("connection error")}}
+//	//readerMock.On("GetListNodebIds").Return(nilNodeIds, mockErr)
+//	//readerMock.On("GetListNodebIds").Return(nodeIds, nil)
+//
+//	res, err := rnibDataService.GetListNodebIds()
+//	readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 2)
+//	assert.True(t, strings.Contains(err.Error(),"connection failure", ))
+//	assert.Equal(t, nodeIds, res)
+//}
diff --git a/E2Manager/services/rnib_reader_service.go b/E2Manager/services/rnib_reader_service.go
deleted file mode 100644
index 4b014d7..0000000
--- a/E2Manager/services/rnib_reader_service.go
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
-//
-// 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 services
-
-import (
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
-)
-
-type RnibReaderService struct {
-	rnibReaderProvider func() reader.RNibReader
-}
-
-func NewRnibReaderService(rnibReaderProvider func() reader.RNibReader) *RnibReaderService{
-	return &RnibReaderService{rnibReaderProvider}
-}
-
-func (s RnibReaderService) GetNodeb(ranName string) (*entities.NodebInfo, error) {
-	return s.rnibReaderProvider().GetNodeb(ranName)
-}
-
-func (s  RnibReaderService) GetNodebIdList()([]*entities.NbIdentity, error) {
-	return s.rnibReaderProvider().GetListNodebIds()
-}
-
-
