diff --git a/src/highlanderticketing/handler/match.go b/src/highlanderticketing/handler/match.go
index cc410d9a335caf08dd7f4a306c1ea2175eb94717..3ef79c80c0cba4694cde131765719ea888934fac 100644
--- a/src/highlanderticketing/handler/match.go
+++ b/src/highlanderticketing/handler/match.go
@@ -12,7 +12,7 @@ import (
 
 func CreateMatch(w http.ResponseWriter, r *http.Request) {
 	var match *model.Match
-	if err := CheckAccessToken(w, r, true); err != nil {
+	if err, _ := CheckAccessToken(w, r, true); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -32,7 +32,7 @@ func CreateMatch(w http.ResponseWriter, r *http.Request) {
 }
 
 func UpdateMatch(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, true); err != nil {
+	if err, _ := CheckAccessToken(w, r, true); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -58,7 +58,7 @@ func UpdateMatch(w http.ResponseWriter, r *http.Request) {
 }
 
 func GetAllMatches(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, false); err != nil {
+	if err, _ := CheckAccessToken(w, r, false); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -73,7 +73,7 @@ func GetAllMatches(w http.ResponseWriter, r *http.Request) {
 }
 
 func GetMatchByID(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, false); err != nil {
+	if err, _ := CheckAccessToken(w, r, false); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -92,7 +92,7 @@ func GetMatchByID(w http.ResponseWriter, r *http.Request) {
 }
 
 func DeleteMatch(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, true); err != nil {
+	if err, _ := CheckAccessToken(w, r, true); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -118,7 +118,7 @@ func DeleteMatch(w http.ResponseWriter, r *http.Request) {
 }
 
 func UpdateTickets(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, true); err != nil {
+	if err, _ := CheckAccessToken(w, r, true); err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
diff --git a/src/highlanderticketing/handler/oauth.go b/src/highlanderticketing/handler/oauth.go
index a861404d7894c3a3e183be98cb325e8710946163..001792f70cec833bc0a84228dc8935f7e11f7653 100644
--- a/src/highlanderticketing/handler/oauth.go
+++ b/src/highlanderticketing/handler/oauth.go
@@ -57,7 +57,7 @@ func HandleCallbackLogin(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, "Fehler beim Authentifizieren", http.StatusInternalServerError)
 		return
 	}
-	// den teil in eine routine packen
+
 	user, err := service.GetUserInfoByToken(token.AccessToken)
 	if err != nil {
 		sendJson(w, err)
@@ -85,10 +85,10 @@ func HandleCallbackLogin(w http.ResponseWriter, r *http.Request) {
 	sendJson(w, tokenString)
 }
 
-func CheckAccessToken(w http.ResponseWriter, r *http.Request, needAdmin bool) error {
+func CheckAccessToken(w http.ResponseWriter, r *http.Request, needAdmin bool) (error, string) {
 	tokenString, err := getBearerToken(r)
 	if err != nil {
-		return err
+		return err, ""
 	}
 
 	token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
@@ -98,7 +98,7 @@ func CheckAccessToken(w http.ResponseWriter, r *http.Request, needAdmin bool) er
 	if err != nil {
 		w.WriteHeader(http.StatusUnauthorized)
 		fmt.Fprint(w, "Ungültiges Authorization-Token")
-		return err
+		return err, ""
 	}
 	var username string
 	if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
@@ -110,10 +110,10 @@ func CheckAccessToken(w http.ResponseWriter, r *http.Request, needAdmin bool) er
 	if needAdmin {
 		err := checkAdmin(username)
 		if err != nil {
-			return err
+			return err, ""
 		}
 	}
-	return nil
+	return nil, username
 }
 
 func checkAdmin(userEmail string) error {
diff --git a/src/highlanderticketing/handler/order.go b/src/highlanderticketing/handler/order.go
index 19c0be04225fc079a49b62cc23e3a6c32b167fbc..7d9106223cecdeaa22191ee05a6edc6277d67b54 100644
--- a/src/highlanderticketing/handler/order.go
+++ b/src/highlanderticketing/handler/order.go
@@ -11,7 +11,8 @@ import (
 )
 
 func AddMatchOrder(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, false); err != nil {
+	err, userOfOrder := CheckAccessToken(w, r, false)
+	if err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -26,19 +27,8 @@ func AddMatchOrder(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, err.Error(), http.StatusBadRequest)
 		return
 	}
-	reqToken, err := getBearerToken(r)
-	if err != nil {
-		log.Errorf("Failure loading bearer token  %v", err)
-		http.Error(w, err.Error(), http.StatusBadRequest)
-	}
-	fmt.Println(reqToken, "reqToken")
-	userOfOrder, err := service.GetUserInfoByToken(reqToken)
-	if err != nil {
-		log.Errorf("Failure loading user Info %v", err)
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-	}
 	fmt.Println(userOfOrder, "userOfOrder")
-	internalUser, err := service.GetUserByEmail(userOfOrder.Email)
+	internalUser, err := service.GetUserByEmail(userOfOrder)
 	if err != nil {
 		log.Errorf("Failure loading internal user Info %v", err)
 		http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -54,7 +44,8 @@ func AddMatchOrder(w http.ResponseWriter, r *http.Request) {
 
 }
 func CancelOrder(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, false); err != nil {
+	err, userOfOrder := CheckAccessToken(w, r, false)
+	if err != nil {
 		log.Errorf("Eror checking AccessToken: %v", err)
 		http.Error(w, err.Error(), http.StatusUnauthorized)
 		return
@@ -76,17 +67,7 @@ func CancelOrder(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, err.Error(), http.StatusBadRequest)
 		return
 	}
-	reqToken, err := getBearerToken(r)
-	if err != nil {
-		log.Errorf("Failure loading bearer token  %v", err)
-		http.Error(w, err.Error(), http.StatusBadRequest)
-	}
-	userOfOrder, err := service.GetUserInfoByToken(reqToken)
-	if err != nil {
-		log.Errorf("Failure loading user Info %v", err)
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-	}
-	internalUser, err := service.GetUserByEmail(userOfOrder.Email)
+	internalUser, err := service.GetUserByEmail(userOfOrder)
 	if err != nil {
 		log.Errorf("Failure loading internal user Info %v", err)
 		http.Error(w, err.Error(), http.StatusInternalServerError)
diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go
index 3ab68eed61cff691d23a58d6b34eda80657fd627..02f9fd253c8f234d66f51716362090b78327d0bf 100644
--- a/src/highlanderticketing/main.go
+++ b/src/highlanderticketing/main.go
@@ -32,7 +32,7 @@ func main() {
 			if err != nil {
 				log.Println("Fehler beim Abrufen der Matches:", err)
 			}
-			time.Sleep(1 * time.Minute)
+			time.Sleep(3 * time.Minute)
 		}
 	}()
 
diff --git a/src/highlanderticketing/model/match.go b/src/highlanderticketing/model/match.go
index 772ae0b469d605aeffe91907d14a7afd1c0649bb..7c063dd0ae4f401c958eacd0b79658cde7cbc438 100644
--- a/src/highlanderticketing/model/match.go
+++ b/src/highlanderticketing/model/match.go
@@ -17,6 +17,5 @@ type Match struct {
 	AwayMatch             bool               `bson:"away_match"`
 	Location              string             `bson:"location"`
 	Date                  time.Time          `bson:"date"`
-	OrderAmount           int32              `bson:"orderamount"`
 	Orders                []Order            `bson:"orders"`
 }
diff --git a/src/highlanderticketing/service/nats.go b/src/highlanderticketing/service/nats.go
index d4c7e379e6391295f558f1471b3b3f57f244c38d..7c0576c7586d9d63c34fbf5d35679df9b47fdc8e 100644
--- a/src/highlanderticketing/service/nats.go
+++ b/src/highlanderticketing/service/nats.go
@@ -33,43 +33,43 @@ func ConnectToNats() (NatsServer, error) {
 
 }
 
-func (s NatsServer) ConfirmOrder(e *model.EmialContent) error {
+func (s NatsServer) ConfirmOrder(e *model.EmialContent) (error, bool) {
 	var res *model.Response
 	emailContenct, errMarshal := json.Marshal(e)
 	if errMarshal != nil {
 		fmt.Println(errMarshal)
-		return fmt.Errorf(errMarshal.Error())
+		return fmt.Errorf(errMarshal.Error()), false
 	}
 	response, err := s.Nc.Request("confirmOrder."+string(e.OrderID), []byte(emailContenct), 2*time.Second)
 	if err != nil {
 		log.Println("Error making NATS request:", err)
-		return fmt.Errorf(err.Error())
+		return fmt.Errorf(err.Error()), false
 	}
 
 	if err := json.Unmarshal(response.Data, &res); err != nil {
-		return fmt.Errorf(err.Error())
+		return fmt.Errorf(err.Error()), false
 	}
 	fmt.Println("hier die nats response", *res)
-	return nil
+	return nil, true
 }
 
-func (s NatsServer) ConfirmCancel(e *model.EmialContent) error {
+func (s NatsServer) ConfirmCancel(e *model.EmialContent) (error, bool) {
 	var res *model.Response
 	emailContenct, errMarshal := json.Marshal(e)
 	if errMarshal != nil {
 		fmt.Println(errMarshal)
-		return fmt.Errorf(errMarshal.Error())
+		return fmt.Errorf(errMarshal.Error()), false
 	}
 	response, err := s.Nc.Request("confirmCancel."+string(e.OrderID), []byte(emailContenct), 2*time.Second)
 	if err != nil {
 		log.Println("Error making NATS request:", err)
-		return fmt.Errorf(err.Error())
+		return fmt.Errorf(err.Error()), false
 	}
 
 	if err := json.Unmarshal(response.Data, &res); err != nil {
-		return fmt.Errorf(err.Error())
+		return fmt.Errorf(err.Error()), false
 	}
 
 	fmt.Println("hier die nats response", *res)
-	return nil
+	return nil, true
 }
diff --git a/src/highlanderticketing/service/order.go b/src/highlanderticketing/service/order.go
index d43f22720ca3adf6d9b0f809c7ac5a2ffa12f6d9..09100c0abefb6981708dc8b9223a63a055b577a7 100644
--- a/src/highlanderticketing/service/order.go
+++ b/src/highlanderticketing/service/order.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"errors"
 	"fmt"
+	"time"
 
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/db"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
@@ -38,7 +39,7 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	}
 
 	collection := client.Database(db.DB).Collection(db.MATCHES)
-
+	// find match
 	err = collection.FindOne(context.TODO(), filter).Decode(&matchToFind)
 	if err != nil {
 		return err
@@ -48,7 +49,7 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	} else {
 		matchToFind.AvailableTicketAmount = matchToFind.AvailableTicketAmount - order.Amount
 	}
-
+	// push order
 	updateResult, err := collection.UpdateOne(context.TODO(), filter, updater)
 	if err != nil {
 		return err
@@ -56,7 +57,7 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	if updateResult.ModifiedCount == 0 {
 		return fmt.Errorf("no document was updated, please send order again")
 	}
-
+	// update match with new available ticketamount
 	_, errUpdate := UpdateMatch(matchToFind.ID, matchToFind)
 	if errUpdate != nil {
 		errUpdate = fmt.Errorf("can not update match amount, please send order again")
@@ -65,11 +66,16 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 		if err != nil {
 			return err
 		}
+		// send email cancel notification
 		defer natsServer.Nc.Close()
-		if err := natsServer.ConfirmCancel(&emailContent); err != nil {
-			// hier warten und nochmal versuchen zu senden
-			order.Cancelnotified = false
-			err := fmt.Errorf("error sending confirm email: %v", err)
+		order.Cancelnotified = true
+		if err, _ := natsServer.ConfirmCancel(&emailContent); err != nil {
+			time.Sleep(1 * time.Second)
+			err, _ := natsServer.ConfirmCancel(&emailContent)
+			if err != nil {
+				order.Ordernotified = false
+				err = fmt.Errorf("error sending cancel email: %v", err)
+			}
 			return err
 		}
 	}
@@ -80,16 +86,19 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	}
 
 	defer natsServer.Nc.Close()
-
-	if err := natsServer.ConfirmOrder(&emailContent); err != nil {
-		// hier warten und nochmal versuchen zu senden
-		order.Ordernotified = false
-		err = fmt.Errorf("error sending confirm email: %v", err)
+	// send confirm email
+	if err, _ := natsServer.ConfirmOrder(&emailContent); err != nil {
+		time.Sleep(1 * time.Second)
+		err, _ := natsServer.ConfirmOrder(&emailContent)
+		if err != nil {
+			order.Ordernotified = false
+			err = fmt.Errorf("error sending confirm email: %v", err)
+		}
 		return err
 	} else {
 		order.Ordernotified = true
 	}
-
+	// update order notification to true
 	updateNotification, err := collection.UpdateOne(context.TODO(), filter, updaterNotification, options)
 	if err != nil {
 		err = fmt.Errorf("no document was updated, please send order again")
@@ -97,7 +106,7 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	}
 
 	if updateNotification.ModifiedCount == 0 {
-		err = fmt.Errorf("no document was updated, please send order again")
+		err = fmt.Errorf("notification was not updated")
 		return err
 	}
 
@@ -105,11 +114,11 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 }
 
 func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
-	fmt.Println("order", order)
 	if order.Canceled == true {
 		return fmt.Errorf("order already canceled")
 	}
 	filter := bson.D{primitive.E{Key: "_id", Value: matchID}}
+	// find match with id
 	matchToFind, err := GetMatchByID(matchID)
 	if err != nil {
 		return err
@@ -135,7 +144,7 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 			bson.D{{Key: "element._id", Value: order.ID}},
 		},
 	})
-
+	// update order to canceled
 	updateMatchCancel, err := collection.UpdateOne(context.TODO(), filter, updaterMatchCancel, options)
 	if err != nil {
 		return err
@@ -144,7 +153,7 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 		return fmt.Errorf("not updated")
 
 	}
-
+	// update match with new available tickets
 	_, errUpdateAmount := UpdateMatch(matchToFind.ID, matchToFind)
 	if errUpdateAmount != nil {
 		order.Canceled = false
@@ -161,14 +170,19 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 
 	natsServer, err := ConnectToNats()
 	defer natsServer.Nc.Close()
-
+	// send notification mail
 	emailContent := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date.String(), Emailadress: order.User.Email, OrderID: order.ID.String()}
-	if err := natsServer.ConfirmCancel(&emailContent); err != nil {
-		return fmt.Errorf("error sending confirm email %v", err)
+	if err, _ := natsServer.ConfirmCancel(&emailContent); err != nil {
+		time.Sleep(1 * time.Second)
+		err, _ := natsServer.ConfirmOrder(&emailContent)
+		if err != nil {
+			order.Ordernotified = false
+			err = fmt.Errorf("error sending confirm email: %v", err)
+		}
 	} else {
 		order.Cancelnotified = true
 	}
-
+	// update cancel notification
 	updateMatchCancelNotifi, err := collection.UpdateOne(context.TODO(), filter, updaterMatchCancel, options)
 	if err != nil {
 		return err