diff --git a/VERSION b/VERSION
index 209873d..7a1a884 100755
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.2-dev252
+2.1.2-dev253
diff --git a/internal/pkg/common/interfaces.go b/internal/pkg/common/interfaces.go
index d842350..a4612f7 100755
--- a/internal/pkg/common/interfaces.go
+++ b/internal/pkg/common/interfaces.go
@@ -92,7 +92,7 @@
 	IsReconciling() bool
 	IsSkipOnuConfigReconciling() bool
 	PrepareReconcilingWithActiveAdapter(context.Context)
-	ReconcileDeviceTechProf(context.Context)
+	ReconcileDeviceTechProf(context.Context) bool
 	ReconcileDeviceFlowConfig(context.Context)
 	GetReconcileExpiryVlanConfigAbort() time.Duration
 	SendChUniVlanConfigFinished(value uint16)
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 4274e90..27c0f52 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -843,16 +843,16 @@
 	_ = dh.createInterface(ctx, &onuIndication)
 }
 
-func (dh *deviceHandler) ReconcileDeviceTechProf(ctx context.Context) {
+func (dh *deviceHandler) ReconcileDeviceTechProf(ctx context.Context) bool {
 	logger.Debugw(ctx, "reconciling - trigger tech profile config", log.Fields{"device-id": dh.DeviceID})
 
+	continueWithFlowConfig := false
+
 	pDevEntry := dh.GetOnuDeviceEntry(ctx, true)
 	if pDevEntry == nil {
 		logger.Errorw(ctx, "No valid OnuDevice - aborting", log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
-		}
-		return
+		dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
+		return continueWithFlowConfig
 	}
 	dh.pOnuTP.LockTpProcMutex()
 	defer dh.pOnuTP.UnlockTpProcMutex()
@@ -863,10 +863,8 @@
 		pDevEntry.MutexPersOnuConfig.RUnlock()
 		logger.Debugw(ctx, "reconciling - no uni-configs have been stored before adapter restart - terminate reconcilement",
 			log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
-		}
-		return
+		dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
+		return continueWithFlowConfig
 	}
 	flowsFound := false
 	techProfsFound := false
@@ -874,7 +872,7 @@
 outerLoop:
 	for _, uniData := range pDevEntry.SOnuPersistentData.PersUniConfig {
 		//TODO: check for uni-port specific reconcilement in case of multi-uni-port-per-onu-support
-		if len(uniData.PersTpPathMap) == 0 {
+		if !dh.anyTpPathExists(uniData.PersTpPathMap) {
 			logger.Debugw(ctx, "reconciling - no TPs stored for uniID",
 				log.Fields{"uni-id": uniData.PersUniID, "device-id": dh.DeviceID})
 			continue
@@ -898,11 +896,16 @@
 					UniId:          uint32(uniData.PersUniID),
 				})
 			if err != nil || iaTechTpInst == nil {
+				// TODO: During the absence of the ONU adapter there seem to have been TP specific configurations!
+				// The no longer available TPs and the associated flows must be deleted from the ONU KV store
+				// and after a MIB reset a new reconciling attempt with OMCI configuration must be started.
 				logger.Errorw(ctx, "error fetching tp instance",
-					log.Fields{"tp-id": tpID, "tpPath": uniData.PersTpPathMap[tpID], "uni-id": uniData.PersUniID, "device-id": dh.DeviceID, "err": err})
+					log.Fields{"tp-id": tpID, "tpPath": uniData.PersTpPathMap[tpID], "uni-id": uniData.PersUniID,
+						"device-id": dh.DeviceID, "err": err})
 				techProfInstLoadFailed = true // stop loading tp instance as soon as we hit failure
 				break outerLoop
 			}
+			continueWithFlowConfig = true // valid TP found - try flow configuration later
 			var tpInst tech_profile.TechProfileInstance
 			switch techTpInst := iaTechTpInst.TechTpInstance.(type) {
 			case *ia.TechProfileDownloadMessage_TpInstance: // supports only GPON, XGPON, XGS-PON
@@ -944,6 +947,8 @@
 
 	//had to move techProf/flow result evaluation into separate function due to SCA complexity limit
 	dh.updateReconcileStates(ctx, techProfsFound, techProfInstLoadFailed, flowsFound)
+
+	return continueWithFlowConfig
 }
 
 func (dh *deviceHandler) updateReconcileStates(ctx context.Context,
@@ -951,9 +956,7 @@
 	if !abTechProfsFound {
 		logger.Debugw(ctx, "reconciling - no TPs have been stored before adapter restart - terminate reconcilement",
 			log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
-		}
+		dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
 		return
 	}
 	if abTechProfInstLoadFailed {
@@ -966,9 +969,7 @@
 	if !abFlowsFound {
 		logger.Debugw(ctx, "reconciling - no flows have been stored before adapter restart - terminate reconcilement",
 			log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
-		}
+		dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
 	}
 }
 
@@ -978,14 +979,7 @@
 	pDevEntry := dh.GetOnuDeviceEntry(ctx, true)
 	if pDevEntry == nil {
 		logger.Errorw(ctx, "No valid OnuDevice - aborting", log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
-		}
-		//else we don't stop the device handler reconciling in constellation with omci configuration
-		//  to avoid unintented state update to rwCore due to still running background processes
-		//  such is e.g. possible in TT scenarios with multiple techProfiles as currently the end of processing
-		//  of all techProfiles is not awaited (ready on first TP done event)
-		//  (applicable to all according code points below)
+		dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
 		return
 	}
 
@@ -994,9 +988,7 @@
 		pDevEntry.MutexPersOnuConfig.RUnlock()
 		logger.Debugw(ctx, "reconciling - no uni-configs have been stored before adapter restart - terminate reconcilement",
 			log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
-		}
+		dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
 		return
 	}
 	flowsFound := false
@@ -1010,7 +1002,7 @@
 				log.Fields{"uni-id": uniData.PersUniID, "device-id": dh.DeviceID})
 			continue
 		}
-		if len(uniData.PersTpPathMap) == 0 {
+		if !dh.anyTpPathExists(uniData.PersTpPathMap) {
 			logger.Warnw(ctx, "reconciling flows - but no TPs stored for uniID, abort",
 				log.Fields{"uni-id": uniData.PersUniID, "device-id": dh.DeviceID})
 			// It doesn't make sense to configure any flows if no TPs are available
@@ -1027,9 +1019,7 @@
 		if uniPort, exist = dh.uniEntityMap[uniNo]; !exist {
 			logger.Errorw(ctx, "reconciling - OnuUniPort data not found  - terminate reconcilement",
 				log.Fields{"uniNo": uniNo, "device-id": dh.DeviceID})
-			if !dh.IsSkipOnuConfigReconciling() {
-				dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
-			}
+			dh.stopReconciling(ctx, false, cWaitReconcileFlowNoActivity)
 			return
 		}
 		//needed to split up function due to sca complexity
@@ -1049,9 +1039,7 @@
 	if !flowsFound {
 		logger.Debugw(ctx, "reconciling - no flows have been stored before adapter restart - terminate reconcilement",
 			log.Fields{"device-id": dh.DeviceID})
-		if !dh.IsSkipOnuConfigReconciling() {
-			dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
-		}
+		dh.stopReconciling(ctx, true, cWaitReconcileFlowNoActivity)
 		return
 	}
 
@@ -4418,3 +4406,13 @@
 func (dh *deviceHandler) GetUniPortMask() int {
 	return dh.pOpenOnuAc.config.UniPortMask
 }
+
+func (dh *deviceHandler) anyTpPathExists(aTpPathMap map[uint8]string) bool {
+	tpPathFound := false
+	for _, tpPath := range aTpPathMap {
+		if tpPath != "" {
+			tpPathFound = true
+		}
+	}
+	return tpPathFound
+}
diff --git a/internal/pkg/mib/mib_sync.go b/internal/pkg/mib/mib_sync.go
index 5c15ea7..6e2378e 100755
--- a/internal/pkg/mib/mib_sync.go
+++ b/internal/pkg/mib/mib_sync.go
@@ -324,38 +324,6 @@
 				}
 			}
 		}
-
-		// no need to reconcile additional data for MibDownloadFsm, LockStateFsm, or UnlockStateFsm
-		oo.baseDeviceHandler.ReconcileDeviceTechProf(ctx)
-
-		// start go routine with select() on reconciling flow channel before
-		// starting flow reconciling process to prevent loss of any signal
-		go func() {
-			// In multi-ONU/multi-flow environment stopping reconcilement has to be delayed until
-			// we get a signal that the processing of the last step to rebuild the adapter internal
-			// flow data is finished.
-			expiry := oo.baseDeviceHandler.GetReconcileExpiryVlanConfigAbort()
-			oo.setReconcilingFlows(true)
-			select {
-			case success := <-oo.chReconcilingFlowsFinished:
-				if success {
-					logger.Debugw(ctx, "reconciling flows has been finished in time",
-						log.Fields{"device-id": oo.deviceID})
-					_ = oo.PMibUploadFsm.PFsm.Event(UlEvSuccess)
-
-				} else {
-					logger.Debugw(ctx, "wait for reconciling flows aborted",
-						log.Fields{"device-id": oo.deviceID})
-				}
-			case <-time.After(expiry):
-				logger.Errorw(ctx, "timeout waiting for reconciling flows to be finished!",
-					log.Fields{"device-id": oo.deviceID, "expiry": expiry})
-				_ = oo.PMibUploadFsm.PFsm.Event(UlEvMismatch)
-			}
-			oo.setReconcilingFlows(false)
-		}()
-		oo.baseDeviceHandler.ReconcileDeviceFlowConfig(ctx)
-
 		oo.MutexPersOnuConfig.RLock()
 		if oo.SOnuPersistentData.PersUniDisableDone {
 			oo.MutexPersOnuConfig.RUnlock()
@@ -365,6 +333,38 @@
 			oo.MutexPersOnuConfig.RUnlock()
 			oo.baseDeviceHandler.EnableUniPortStateUpdate(ctx)
 		}
+
+		// no need to reconcile additional data for MibDownloadFsm, LockStateFsm, or UnlockStateFsm
+
+		if oo.baseDeviceHandler.ReconcileDeviceTechProf(ctx) {
+			// start go routine with select() on reconciling flow channel before
+			// starting flow reconciling process to prevent loss of any signal
+			go func() {
+				// In multi-ONU/multi-flow environment stopping reconcilement has to be delayed until
+				// we get a signal that the processing of the last step to rebuild the adapter internal
+				// flow data is finished.
+				expiry := oo.baseDeviceHandler.GetReconcileExpiryVlanConfigAbort()
+				oo.setReconcilingFlows(true)
+				select {
+				case success := <-oo.chReconcilingFlowsFinished:
+					if success {
+						logger.Debugw(ctx, "reconciling flows has been finished in time",
+							log.Fields{"device-id": oo.deviceID})
+						_ = oo.PMibUploadFsm.PFsm.Event(UlEvSuccess)
+
+					} else {
+						logger.Debugw(ctx, "wait for reconciling flows aborted",
+							log.Fields{"device-id": oo.deviceID})
+					}
+				case <-time.After(expiry):
+					logger.Errorw(ctx, "timeout waiting for reconciling flows to be finished!",
+						log.Fields{"device-id": oo.deviceID, "expiry": expiry})
+					_ = oo.PMibUploadFsm.PFsm.Event(UlEvMismatch)
+				}
+				oo.setReconcilingFlows(false)
+			}()
+			oo.baseDeviceHandler.ReconcileDeviceFlowConfig(ctx)
+		}
 	} else {
 		logger.Debugw(ctx, "MibSync FSM",
 			log.Fields{"Getting MIB from template not successful": e.FSM.Current(), "device-id": oo.deviceID})
