diff --git a/auth/callback.go b/auth/callback.go
index 76b017b7a1262995e4988048979231a92b54b421..e0ca30af415d7842049326bcab8870b860716fcf 100644
--- a/auth/callback.go
+++ b/auth/callback.go
@@ -26,7 +26,6 @@ import (
 	"gitlab.com/elixxir/primitives/fact"
 	"gitlab.com/elixxir/primitives/format"
 	"strings"
-	util "gitlab.com/elixxir/client/storage/utility"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/xx_network/crypto/csprng"
 )
@@ -181,31 +180,66 @@ func (m *Manager) handleRequest(cmixMsg format.Message,
 				jww.INFO.Printf("Received AuthRequest from %s,"+
 					" msgDigest: %s which has been requested, auto-confirming",
 					partnerID, cmixMsg.Digest())
-				// Note that our sent request SIDH key needs to
-				// change to be compatible
+
+				// Verify this request is legit
+				ownership := ecrFmt.GetOwnership()
+				if !cAuth.VerifyOwnershipProof(
+					myHistoricalPrivKey, partnerPubKey, grp,
+					ownership) {
+						jww.WARN.Printf("Invalid ownership proof from %s received, discarding msdDigest: %s",
+							partnerID, cmixMsg.Digest())
+				}
+
+				// Check if I need to resend by comparing the
+				// SIDH Keys
+				mySIDH := sr2.GetMySIDHPubKey()
+				theirSIDH := partnerSIDHPubKey
+				myBytes := make([]byte, mySIDH.Size())
+				theirBytes := make([]byte, theirSIDH.Size())
+				mySIDH.Export(myBytes)
+				theirSIDH.Export(theirBytes)
+				for i := 0; i < len(myBytes); i++ {
+					if myBytes[i] > theirBytes[i] {
+						// OK, this side is dropping
+						// the request
+						// Do we need to delete
+						// something here?
+						// No, because we will
+						// now wait to receive
+						// confirmation.
+						return
+					} else if myBytes[i] < theirBytes[i] {
+						break
+					}
+				}
+
+				// If I do, delete my request on disk
+				_, _, partnerContact, _ := m.storage.Auth().GetRequest(partnerID)
+				m.storage.Auth().Delete(partnerID)
+
+				// add a confirmation to disk
+				if err = m.storage.Auth().AddReceived(partnerContact,
+					partnerSIDHPubKey); err != nil {
+						em := fmt.Sprintf("failed to store contact Auth "+
+							"Request: %s", err)
+						jww.WARN.Print(em)
+						events.Report(10, "Auth", "RequestError", em)
+					}
+
+				// Call ConfirmRequestAuth to send confirmation
 				rngGen := fastRNG.NewStreamGenerator(1, 1,
 					csprng.NewSystemRNG)
 				rng := rngGen.GetStream()
-				myVariant := util.GetCompatibleSIDHVariant(
-					partnerSIDHPubKey.Variant())
-				myPriv, myPub := util.GenerateSIDHKeyPair(
-					myVariant, rng)
-				sr2.OverwriteSIDHKeys(myPriv, myPub)
-				rng.Close()
-
-				// do the confirmation
-				if err := m.doConfirm(sr2, grp, partnerPubKey,
-					m.storage.E2e().GetDHPrivateKey(),
-					sr2.GetPartnerHistoricalPubKey(),
-					ecrFmt.GetOwnership(),
-					partnerSIDHPubKey); err != nil {
-					em := fmt.Sprintf("Auto Confirmation with %s failed: %s",
-						partnerID, err)
-					jww.WARN.Print(em)
-					events.Report(10, "Auth",
-						"RequestError", em)
+				rndNum, err := ConfirmRequestAuth(partnerContact,
+					rng, m.storage, m.net)
+				if err != nil {
+					jww.ERROR.Printf("Could not ConfirmRequestAuth: %+v",
+						err)
+					return
 				}
-				//exit
+
+				jww.INFO.Printf("ConfirmRequestAuth to %s on round %d",
+					partnerID, rndNum)
 				return
 			}
 		}