diff --git a/go.work.sum b/go.work.sum
index 53c2f4bf2b1624c1fe582fd0161efbfd39f07d31..537ca644d7c487f6a9a2be7a24fb98ec9a9ce754 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -3,3 +3,4 @@ cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbC
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
+google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
diff --git a/src/highlanderticketing/go.sum b/src/highlanderticketing/go.sum
index e5f612623a9416bc9a8659010bc25bc8008afec4..2e4506c29499569d6d8fe7131d2390352119830c 100644
--- a/src/highlanderticketing/go.sum
+++ b/src/highlanderticketing/go.sum
@@ -89,8 +89,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao=
-google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
diff --git a/src/highlanderticketing/handler/order.go b/src/highlanderticketing/handler/order.go
index f40eb690f5ae6f67da73cfe56246bff6eedfb739..4bcef0f148dd84ecdd14768084d5b74b5a95e601 100644
--- a/src/highlanderticketing/handler/order.go
+++ b/src/highlanderticketing/handler/order.go
@@ -52,48 +52,6 @@ func AddMatchOrder(w http.ResponseWriter, r *http.Request) {
 	}
 	sendJson(w, order)
 
-}
-func AddTravelOrder(w http.ResponseWriter, r *http.Request) {
-	if err := CheckAccessToken(w, r, false); err != nil {
-		log.Errorf("Eror checking AccessToken: %v", err)
-		http.Error(w, err.Error(), http.StatusUnauthorized)
-		return
-	}
-	id, err := getID(r)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusBadRequest)
-		return
-	}
-	order, err := getOrder(r)
-	if err != nil {
-		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)
-	if err != nil {
-		log.Errorf("Failure loading internal user Info %v", err)
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-	}
-	order.User = *internalUser
-
-	err = service.AddTravelOrder(id, order)
-	if err != nil {
-		log.Errorf("Failure adding donation to campaign with ID %v: %v", id, err)
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	sendJson(w, order)
-
 }
 func CancelOrder(w http.ResponseWriter, r *http.Request) {
 	if err := CheckAccessToken(w, r, false); err != nil {
diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go
index f807dbcbe6f06b48b83298b2885968262d6bb9c0..28adca4848444479162e5ed4e20929ef6d29b90c 100644
--- a/src/highlanderticketing/main.go
+++ b/src/highlanderticketing/main.go
@@ -1,7 +1,6 @@
 package main
 
 import (
-	"fmt"
 	"net/http"
 	"os"
 
@@ -9,20 +8,18 @@ import (
 	"github.com/joho/godotenv"
 	"github.com/nats-io/nats.go"
 	log "github.com/sirupsen/logrus"
-	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/api"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/db"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/handler"
-	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/service"
 )
 
 func main() {
-	service.DeleteAllUsers()
+	/*service.DeleteAllUsers()
 	var userArray []model.User
 	userArray, _ = service.GetAllUsers()
 	fmt.Println(userArray)
 	service.DeleteAllMatches()
-	api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")
+	api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")*/
 
 	if err := godotenv.Load(".env"); err != nil {
 		log.Fatalf("Error loading .env file")
@@ -53,7 +50,6 @@ func main() {
 	router.HandleFunc("/match/{id}", handler.UpdateMatch).Methods("PUT")
 	router.HandleFunc("/match/{id}", handler.DeleteMatch).Methods("DELETE")
 	router.HandleFunc("/match/{id}/matchorder", handler.AddMatchOrder).Methods("POST")
-	router.HandleFunc("/match/{id}/travelorder", handler.AddTravelOrder).Methods("POST")
 	router.HandleFunc("/match/{id}/cancelorder/{orderid}", handler.CancelOrder).Methods("PUT")
 	if err := http.ListenAndServe(":8000", router); err != nil {
 		log.Fatal(err)
diff --git a/src/highlanderticketing/model/match.go b/src/highlanderticketing/model/match.go
index 27af56fd223e36da8f6affbf1fe23eab70b2b9fa..68974878b1640913b66bd7cce6cc3af49d03a790 100644
--- a/src/highlanderticketing/model/match.go
+++ b/src/highlanderticketing/model/match.go
@@ -11,7 +11,6 @@ type Match struct {
 	AwayMatch             bool               `bson:"away_match"`
 	Location              string             `bson:"location"`
 	Date                  string             `bson:"date, omitempty"`
-	Travel                Travel             `bson:"travel"`
 	OrderAmount           int32              `bson:"orderamount, omitempty"`
 	Orders                []Order            `bson:"orders"`
 }
diff --git a/src/highlanderticketing/model/travel.go b/src/highlanderticketing/model/travel.go
deleted file mode 100644
index c04f21be5a5e522d23babb7ee6ca21c9c7e61a28..0000000000000000000000000000000000000000
--- a/src/highlanderticketing/model/travel.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package model
-
-import (
-	"go.mongodb.org/mongo-driver/bson/primitive"
-	"google.golang.org/genproto/googleapis/type/date"
-)
-
-type Travel struct {
-	ID                  primitive.ObjectID `bson:"_id, omitempty"`
-	TravelType          TravelType
-	InitialSeatAmount   int32
-	AvailableSeatAmount int32
-	StartLocation       string
-	EndLocation         string
-	StartDate           date.Date
-	Orders              []Order
-}
-
-type TravelType string
-
-const (
-	CAR   TravelType = "CAR"
-	BUS   TravelType = "BUS"
-	PLANE TravelType = "PLANE"
-)
-
-// Funktion ins Modell (siehe
-//Myaktion), welche den available_ Ticket_Amount berechnet
diff --git a/src/highlanderticketing/service/match.go b/src/highlanderticketing/service/match.go
index 983ea1825869ca7d33a6f6355336d831fe5764f8..533a6e66f6618d5682f8a057eed8689ba0c372ab 100644
--- a/src/highlanderticketing/service/match.go
+++ b/src/highlanderticketing/service/match.go
@@ -14,8 +14,6 @@ import (
 func CreateMatch(match *model.Match) error {
 	match.ID = primitive.NewObjectID()
 	match.Orders = []model.Order{}
-	match.Travel.ID = primitive.NewObjectID()
-	match.Travel.Orders = []model.Order{}
 	client, err := db.GetMongoClient()
 	if err != nil {
 		return err
diff --git a/src/highlanderticketing/service/order.go b/src/highlanderticketing/service/order.go
index 5a5b2c619efea6ba73a68e7314b1c0e2580d5216..fca41f42081a7f24b1b202e1488b601ddbaafe71 100644
--- a/src/highlanderticketing/service/order.go
+++ b/src/highlanderticketing/service/order.go
@@ -14,45 +14,13 @@ import (
 func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 	filter := bson.D{primitive.E{Key: "_id", Value: matchID}}
 	order.ID = primitive.NewObjectID()
-	matchToFind := model.Match{}
+	matchToFind := &model.Match{}
+	emailContent := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: matchToFind.ID.String()}
 
 	updater := bson.D{primitive.E{Key: "$push", Value: bson.D{
 		primitive.E{Key: "orders", Value: order},
 	}}}
 
-	client, err := db.GetMongoClient()
-	if err != nil {
-		return err
-	}
-
-	collection := client.Database(db.DB).Collection(db.MATCHES)
-
-	err = collection.FindOne(context.TODO(), filter).Decode(&matchToFind)
-	if err != nil {
-		return err
-	}
-
-	updateResult, err := collection.UpdateOne(context.TODO(), filter, updater)
-	if err != nil {
-		return err
-	}
-
-	if updateResult.ModifiedCount == 0 {
-		return fmt.Errorf("no document was updated, please send order again")
-	}
-
-	natsServer, err := ConnectToNats()
-	defer natsServer.Nc.Close()
-
-	emailContent := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: matchToFind.ID.String()}
-	if err := natsServer.ConfirmOrder(&emailContent); err != nil {
-		// hier warten und nochmal versuchen zu senden
-		order.Ordernotified = false
-		return fmt.Errorf("error sending confirm email: %v", err)
-	} else {
-		order.Ordernotified = true
-	}
-
 	updaterNotification := bson.D{primitive.E{Key: "$set", Value: bson.D{
 		primitive.E{Key: "orders.$[element]", Value: order},
 	}}}
@@ -63,25 +31,6 @@ func AddMatchOrder(matchID primitive.ObjectID, order *model.Order) error {
 		},
 	})
 
-	updateNotification, err := collection.UpdateOne(context.TODO(), filter, updaterNotification, options)
-	if err != nil {
-		return fmt.Errorf("no document was updated, please send order again")
-	}
-
-	if updateNotification.ModifiedCount == 0 {
-		return fmt.Errorf("no document was updated, please send order again")
-	}
-
-	return nil
-}
-
-func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error {
-	filter := bson.D{primitive.E{Key: "_id", Value: matchID}}
-	order.ID = primitive.NewObjectID()
-	matchToFind := model.Match{}
-
-	updater := bson.M{"$push": bson.M{"travel.orders": order}}
-
 	client, err := db.GetMongoClient()
 	if err != nil {
 		return err
@@ -93,57 +42,78 @@ func AddTravelOrder(matchID primitive.ObjectID, order *model.Order) error {
 	if err != nil {
 		return err
 	}
+	if matchToFind.AvailableTicketAmount < order.Amount {
+		return fmt.Errorf("ticket amount not available")
+	} else {
+		matchToFind.AvailableTicketAmount = matchToFind.AvailableTicketAmount - order.Amount
+	}
 
 	updateResult, err := collection.UpdateOne(context.TODO(), filter, updater)
 	if err != nil {
 		return err
 	}
-
 	if updateResult.ModifiedCount == 0 {
 		return fmt.Errorf("no document was updated, please send order again")
 	}
 
+	_, errUpdate := UpdateMatch(matchToFind.ID, matchToFind)
+	if errUpdate != nil {
+		errUpdate = fmt.Errorf("can not update match amount, please send order again")
+		err := deleteOrder(order.ID, matchToFind.ID)
+		natsServer, err := ConnectToNats()
+		if err != nil {
+			return err
+		}
+		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)
+			return err
+		}
+	}
+
 	natsServer, err := ConnectToNats()
+	if err != nil {
+		return err
+	}
+
 	defer natsServer.Nc.Close()
 
-	emailContent := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: matchToFind.ID.String()}
 	if err := natsServer.ConfirmOrder(&emailContent); err != nil {
 		// hier warten und nochmal versuchen zu senden
 		order.Ordernotified = false
-		return fmt.Errorf("error sending confirm email %v", err)
+		err = fmt.Errorf("error sending confirm email: %v", err)
+		return err
 	} else {
 		order.Ordernotified = true
 	}
 
-	updaterNotification := bson.D{primitive.E{Key: "$set", Value: bson.D{
-		primitive.E{Key: "orders.$[element]", Value: order},
-	}}}
-
-	options := options.Update().SetArrayFilters(options.ArrayFilters{
-		Filters: []interface{}{
-			bson.D{{Key: "element._id", Value: order.ID}},
-		},
-	})
-
 	updateNotification, err := collection.UpdateOne(context.TODO(), filter, updaterNotification, options)
 	if err != nil {
-		return fmt.Errorf("no document was updated, please send order again")
+		err = fmt.Errorf("no document was updated, please send order again")
+		return err
 	}
 
 	if updateNotification.ModifiedCount == 0 {
-		return fmt.Errorf("no document was updated, please send order again")
+		err = fmt.Errorf("no document was updated, please send order again")
+		return err
 	}
 
 	return nil
 }
 
-var isMatchOrder bool = true
-
 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}}
 	matchToFind, err := GetMatchByID(matchID)
 	if err != nil {
 		return err
+	} else {
+		matchToFind.AvailableTicketAmount = matchToFind.AvailableTicketAmount + order.Amount
 	}
 
 	client, err := db.GetMongoClient()
@@ -159,10 +129,6 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 		primitive.E{Key: "orders.$[element]", Value: order},
 	}}}
 
-	updaterTravelCancel := bson.D{primitive.E{Key: "$set", Value: bson.D{
-		primitive.E{Key: "travel.orders.$[element]", Value: order},
-	}}}
-
 	options := options.Update().SetArrayFilters(options.ArrayFilters{
 		Filters: []interface{}{
 			bson.D{{Key: "element._id", Value: order.ID}},
@@ -174,15 +140,22 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 		return err
 	}
 	if updateMatchCancel.ModifiedCount == 0 {
-		isMatchOrder = false
-		updateTravelCancel, err := collection.UpdateOne(context.TODO(), filter, updaterTravelCancel, options)
+		return fmt.Errorf("not updated")
+
+	}
+
+	_, errUpdateAmount := UpdateMatch(matchToFind.ID, matchToFind)
+	if errUpdateAmount != nil {
+		order.Canceled = false
+		updateMatchCancel, err := collection.UpdateOne(context.TODO(), filter, updaterMatchCancel, options)
 		if err != nil {
 			return err
 		}
-		if updateTravelCancel.ModifiedCount == 0 {
-			return fmt.Errorf("orderid not in system")
-		}
+		if updateMatchCancel.ModifiedCount == 0 {
+			return fmt.Errorf("not updated")
 
+		}
+		return fmt.Errorf("error canceling match internal, please try again %v", err)
 	}
 
 	natsServer, err := ConnectToNats()
@@ -191,41 +164,40 @@ func CancelOrder(matchID primitive.ObjectID, order *model.Order) error {
 	emailContent := model.EmialContent{Name: order.User.Name, AwayMatch: matchToFind.AwayMatch, Location: matchToFind.Location, Date: matchToFind.Date, Emailadress: order.User.Email, OrderID: order.ID.String()}
 	if err := natsServer.ConfirmCancel(&emailContent); err != nil {
 		return fmt.Errorf("error sending confirm email %v", err)
+	} else {
+		order.Cancelnotified = true
 	}
 
-	order.Cancelnotified = true
-
-	if isMatchOrder == false {
-		updateTravelCancelNotifi, err := collection.UpdateOne(context.TODO(), filter, updaterTravelCancel, options)
-		if err != nil {
-			return err
-		}
-		if updateTravelCancelNotifi.ModifiedCount == 0 {
-			return fmt.Errorf("orderid not in system")
-		}
-		isMatchOrder = true
-	} else {
-		updateMatchCancelNotifi, err := collection.UpdateOne(context.TODO(), filter, updaterMatchCancel, options)
-		if err != nil {
-			return err
-		}
-		if updateMatchCancelNotifi.ModifiedCount == 0 {
-			return fmt.Errorf("orderid not in system")
-		}
+	updateMatchCancelNotifi, err := collection.UpdateOne(context.TODO(), filter, updaterMatchCancel, options)
+	if err != nil {
+		return err
+	}
+	if updateMatchCancelNotifi.ModifiedCount == 0 {
+		return fmt.Errorf("orderid not in system")
 	}
 	return nil
 
 }
-func deleteOrder(orderID primitive.ObjectID) error {
-	filter := bson.D{primitive.E{Key: "_id", Value: orderID}}
+
+func deleteOrder(matchID primitive.ObjectID, orderID primitive.ObjectID) error {
+	filter := bson.D{primitive.E{Key: "_id", Value: matchID}}
+	updater := bson.D{primitive.E{Key: "$pull", Value: bson.D{
+		primitive.E{Key: "orders", Value: bson.D{
+			primitive.E{Key: "_id", Value: orderID},
+		}},
+	}}}
+
 	client, err := db.GetMongoClient()
 	if err != nil {
 		return err
 	}
+
 	collection := client.Database(db.DB).Collection(db.MATCHES)
-	_, err = collection.DeleteOne(context.TODO(), filter)
+
+	_, err = collection.UpdateOne(context.TODO(), filter, updater)
 	if err != nil {
 		return err
 	}
+
 	return nil
 }