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
+}
