diff --git a/pkg/model/nats.go b/pkg/model/nats.go
index 6add04f..832c340 100644
--- a/pkg/model/nats.go
+++ b/pkg/model/nats.go
@@ -5,6 +5,18 @@ package model
 
 // Requests are sent from maps-service to validator
 
+type CreateSubmissionRequest struct {
+	// operation_id is passed back in the response message
+	OperationID   int32
+	ModelID       int64
+}
+
+type CreateMapfixRequest struct {
+	OperationID   int32
+	ModelID       int64
+	TargetAssetID int64
+}
+
 type ValidateSubmissionRequest struct {
 	// submission_id is passed back in the response message
 	SubmissionID     int64
diff --git a/pkg/service/mapfixes.go b/pkg/service/mapfixes.go
index ba38707..25cb15e 100644
--- a/pkg/service/mapfixes.go
+++ b/pkg/service/mapfixes.go
@@ -46,7 +46,7 @@ var (
 )
 
 // POST /mapfixes
-func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate) (*api.ID, error) {
+func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixTriggerCreate) (*api.OperationID, error) {
 	userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
 	if !ok {
 		return nil, ErrUserInfo
@@ -74,42 +74,29 @@ func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate)
 			return nil, ErrCreationPhaseMapfixesLimit
 		}
 	}
-
-	// Check if an active mapfix with the same asset id exists
-	{
-		filter := datastore.Optional()
-		filter.Add("asset_id", request.AssetID)
-		filter.Add("asset_version", request.AssetVersion)
-		filter.Add("status_id", ActiveMapfixStatuses)
-		active_mapfixes, err := svc.DB.Mapfixes().List(ctx, filter, model.Page{
-			Number: 1,
-			Size:   1,
-		},datastore.ListSortDisabled)
-		if err != nil {
-			return nil, err
-		}
-		if len(active_mapfixes) != 0{
-			return nil, ErrActiveMapfixSameAssetID
-		}
-	}
-
-	mapfix, err := svc.DB.Mapfixes().Create(ctx, model.Mapfix{
-		ID:            0,
-		DisplayName:   request.DisplayName,
-		Creator:       request.Creator,
-		GameID:        request.GameID,
-		Submitter:     int64(userId),
-		AssetID:       request.AssetID,
-		AssetVersion:  request.AssetVersion,
-		Completed:     false,
-		TargetAssetID: request.TargetAssetID,
-		StatusID:      model.MapfixStatusUnderConstruction,
+	operation, err := svc.DB.Operations().Create(ctx, model.Operation{
+		Owner:         int64(userId),
+		StatusID:      model.OperationStatusCreated,
 	})
 	if err != nil {
 		return nil, err
 	}
-	return &api.ID{
-		ID: mapfix.ID,
+
+	create_request := model.CreateMapfixRequest{
+		OperationID:   operation.ID,
+		ModelID:       request.AssetID,
+		TargetAssetID: request.TargetAssetID,
+	}
+
+	j, err := json.Marshal(create_request)
+	if err != nil {
+		return nil, err
+	}
+
+	svc.Nats.Publish("maptest.mapfixes.create", []byte(j))
+
+	return &api.OperationID{
+		OperationID: operation.ID,
 	}, nil
 }
 
diff --git a/pkg/service/submissions.go b/pkg/service/submissions.go
index 5944eff..515fb59 100644
--- a/pkg/service/submissions.go
+++ b/pkg/service/submissions.go
@@ -49,7 +49,7 @@ var (
 )
 
 // POST /submissions
-func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionCreate) (*api.ID, error) {
+func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionTriggerCreate) (*api.OperationID, error) {
 	userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
 	if !ok {
 		return nil, ErrUserInfo
@@ -77,41 +77,28 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *api.Submissio
 			return nil, ErrCreationPhaseSubmissionsLimit
 		}
 	}
-
-	// Check if an active submission with the same asset id exists
-	{
-		filter := datastore.Optional()
-		filter.Add("asset_id", request.AssetID)
-		filter.Add("asset_version", request.AssetVersion)
-		filter.Add("status_id", ActiveSubmissionStatuses)
-		active_submissions, err := svc.DB.Submissions().List(ctx, filter, model.Page{
-			Number: 1,
-			Size:   1,
-		},datastore.ListSortDisabled)
-		if err != nil {
-			return nil, err
-		}
-		if len(active_submissions) != 0{
-			return nil, ErrActiveSubmissionSameAssetID
-		}
-	}
-
-	submission, err := svc.DB.Submissions().Create(ctx, model.Submission{
-		ID:            0,
-		DisplayName:   request.DisplayName,
-		Creator:       request.Creator,
-		GameID:        request.GameID,
-		Submitter:     int64(userId),
-		AssetID:       request.AssetID,
-		AssetVersion:  request.AssetVersion,
-		Completed:     false,
-		StatusID:      model.SubmissionStatusUnderConstruction,
+	operation, err := svc.DB.Operations().Create(ctx, model.Operation{
+		Owner:         int64(userId),
+		StatusID:      model.OperationStatusCreated,
 	})
 	if err != nil {
 		return nil, err
 	}
-	return &api.ID{
-		ID: submission.ID,
+
+	create_request := model.CreateSubmissionRequest{
+		OperationID:   operation.ID,
+		ModelID:       request.AssetID,
+	}
+
+	j, err := json.Marshal(create_request)
+	if err != nil {
+		return nil, err
+	}
+
+	svc.Nats.Publish("maptest.submissions.create", []byte(j))
+
+	return &api.OperationID{
+		OperationID: operation.ID,
 	}, nil
 }