diff --git a/network/message/handler.go b/network/message/handler.go
index 7aa63e6ad85293b57d716d9bdf894736a3fd4bed..0e999a3a4acc35d917904407d6837d8a5211ebdf 100644
--- a/network/message/handler.go
+++ b/network/message/handler.go
@@ -161,3 +161,137 @@ func (m *Manager) handleMessage(ecrMsg format.Message, bundle Bundle, edge *edge
 		}
 	}
 }
+
+
+func (m *Manager) handleMessage2(ecrMsg format.Message, bundle Bundle) {
+	fingerprint := ecrMsg.GetKeyFP()
+	msgDigest := ecrMsg.Digest()
+	identity := bundle.Identity
+
+	round := bundle.RoundInfo
+	newID := // todo use new id systme from ticket
+		{
+		ID id.ID
+		ephID ephemeral.Id
+	}
+
+	// If we have a fingerprint, process it.
+	messageProc, exists := m.fingerprints.Pop(fingerprint) {
+		// note scope here is all broken, fix...
+		m.fingers.Lock()
+		defer m.fingersUnlock()
+		mp, ok := m.fingers[fingerprint]
+		if ok {
+			mp.MarkFingerprintUsed(fingerprint)
+			delete(m.fingers, fingerprint)
+			return mp, true
+		}
+		return nil, false
+	}
+	if exists {
+		// in progress is a future project. 
+		// m.inprogress.Add({fingerprint, ecrMsg, newID, round})
+		go messageProc.Process(ecrMsg, newID, round)
+		return
+	}
+
+	triggerProc, trigger, exists := m.triggers.Lookup(
+		ecrMsg.GetIdentityFP(), ecrMsgContents)
+	if exists {
+		go triggerProc.Process(ecrMsg, newID, round, trigger)
+		return
+	} else {
+		// TODO: delete this else block because it should not be needed.
+		jww.INFO.Printf("checking backup %v", preimage.MakeDefault(identity.Source))
+		// //if it doesnt exist, check against the default fingerprint for the identity
+		// forMe = fingerprint2.CheckIdentityFP(ecrMsg.GetIdentityFP(),
+		// 	ecrMsgContents, preimage.MakeDefault(identity.Source))
+	}
+
+	if jww.GetLogThreshold() == jww.LevelTrace {
+		expectedFP := fingerprint2.IdentityFP(ecrMsgContents,
+			preimage.MakeDefault(identity.Source))
+		jww.TRACE.Printf("Message for %d (%s) failed identity "+
+			"check: %v (expected-default) vs %v (received)",
+			identity.EphId,
+			identity.Source, expectedFP, ecrMsg.GetIdentityFP())
+	}
+	im := fmt.Sprintf("Garbled/RAW Message: keyFP: %v, round: %d"+
+		"msgDigest: %s, not determined to be for client", ecrMsg.GetKeyFP(), bundle.Round, ecrMsg.Digest())
+	m.Internal.Events.Report(1, "MessageReception", "Garbled", im)
+	m.Session.GetGarbledMessages().Add(ecrMsg)
+}
+
+func (m *Manager) handleMessage2(ecrMsg format.Message, bundle Bundle) {
+	fingerprint := ecrMsg.GetKeyFP()
+	msgDigest := ecrMsg.Digest()
+	identity := bundle.Identity
+
+	round := bundle.RoundInfo
+	newID := // todo use new id systme from ticket
+		{
+		ID id.ID
+		ephID ephemeral.Id
+	}
+
+	fpLock := m.getFPLock(fingerprint) {
+		m.superLock.Lock()
+		defer m.superLock.Unlock()
+		fpLock, ok := m.fpLocks[fingerprint]
+		if !ok {
+			m.fpLocks[fingerprint] = &sync.Mutex{}
+			return m.fpLocks[fingerprint]
+		}
+	}
+	fpLock.Lock()
+
+	// If we have a fingerprint, process it.
+	messageProc, exists := m.fingerprints.Lookup(fingerprint)//  {
+	// 	// note scope here is all broken, fix...
+	// 	m.fingers.Lock()
+	// 	defer m.fingersUnlock()
+	// 	mp, ok := m.fingers[fingerprint]
+	// 	if ok {
+	// 		mp.MarkFingerprintUsed(fingerprint)
+	// 		delete(m.fingers, fingerprint)
+	// 		return mp, true
+	// 	}
+	// 	return nil, false
+	// }
+	if exists {
+		// in progress is a future project. 
+		// m.inprogress.Add({fingerprint, ecrMsg, newID, round})
+		m.fingerprints.Delete(fingerprint)
+		messageProc.Process(ecrMsg, newID, round)
+		messageProc.MarkUsed(fingerprint)
+		fpLock.Unlock()
+		// delete from fpLocks as well.
+		return
+	}
+
+	triggerProc, trigger, exists := m.triggers.Lookup(
+		ecrMsg.GetIdentityFP(), ecrMsgContents)
+	if exists {
+		go triggerProc.Process(ecrMsg, newID, round, trigger)
+		return
+	} else {
+		// TODO: delete this else block because it should not be needed.
+		jww.INFO.Printf("checking backup %v", preimage.MakeDefault(identity.Source))
+		// //if it doesnt exist, check against the default fingerprint for the identity
+		// forMe = fingerprint2.CheckIdentityFP(ecrMsg.GetIdentityFP(),
+		// 	ecrMsgContents, preimage.MakeDefault(identity.Source))
+	}
+
+	if jww.GetLogThreshold() == jww.LevelTrace {
+		expectedFP := fingerprint2.IdentityFP(ecrMsgContents,
+			preimage.MakeDefault(identity.Source))
+		jww.TRACE.Printf("Message for %d (%s) failed identity "+
+			"check: %v (expected-default) vs %v (received)",
+			identity.EphId,
+			identity.Source, expectedFP, ecrMsg.GetIdentityFP())
+	}
+	im := fmt.Sprintf("Garbled/RAW Message: keyFP: %v, round: %d"+
+		"msgDigest: %s, not determined to be for client", ecrMsg.GetKeyFP(), bundle.Round, ecrMsg.Digest())
+	m.Internal.Events.Report(1, "MessageReception", "Garbled", im)
+	m.Session.GetGarbledMessages().Add(ecrMsg)
+}