diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
index d5971436e0f029acc4218bbc5dd73ac80cd75442..2bdef4ac16218fb6244f0e30223df0beb729da67 100644
--- a/src/myaktion/service/campaign.go
+++ b/src/myaktion/service/campaign.go
@@ -1,8 +1,6 @@
 package service
 
 import (
-	"fmt"
-
 	log "github.com/sirupsen/logrus"
 
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/db"
@@ -31,14 +29,16 @@ func CreateCampaign(campaign *model.Campaign) error {
 }
 
 func GetCampaign(id uint) (*model.Campaign, error) {
-	if campaign, ok := campaignStore[id]; !ok {
-		log.Info("Campaign with ID %d not found.", id)
-		return nil, fmt.Errorf("campaign with id %d not found", id)
-	} else {
-		log.Infof("Successfully retrieved campaign with ID %v.", campaign.ID)
-		log.Tracef("Retrieved: ", *campaign)
-		return campaign, nil
+	var campaign model.Campaign
+	result := db.DB.Preload("Donations").First(&campaign, id)
+	if result.Error != nil {
+		log.Info("Campaign retrieving failed.")
+		return nil, result.Error
 	}
+	log.Infof("Successfully retrieved campaign with ID %v.", campaign.ID)
+	log.Tracef("Retrieved: ", campaign)
+
+	return &campaign, nil
 }
 
 func GetCampaigns() ([]model.Campaign, error) {
@@ -54,25 +54,30 @@ func GetCampaigns() ([]model.Campaign, error) {
 }
 
 func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
-	if storeCampaign, ok := campaignStore[id]; !ok {
-		log.Info("Campaign with ID %d not found.", id)
-		return nil, fmt.Errorf("campaign with id %d not found", id)
-	} else {
-		*storeCampaign = *campaign
-		storeCampaign.ID = id
-		log.Infof("Successfully updated campaign with ID %d.", id)
-		log.Tracef("Updated: %v", storeCampaign)
-		return storeCampaign, nil
+	var campaignData model.Campaign
+	result := db.DB.Preload("Donations").First(&campaignData, id)
+	if result.Error != nil {
+		log.Info("Campaign retrieving failed.")
+		return nil, result.Error
+	}
+	result = db.DB.Model(&campaignData).Updates(&campaign)
+	if result.Error != nil {
+		log.Info("Campaign updating failed.")
+		return nil, result.Error
 	}
+	log.Infof("Successfully updated campaign with ID %d.", id)
+	log.Tracef("Updated: %v", campaignData)
+
+	return &campaignData, nil
 }
 
 func DeleteCampaign(id uint) error {
-	if campaign, ok := campaignStore[id]; !ok {
-		log.Info("Campaign with ID %d not found.", id)
-		return fmt.Errorf("campaign with id %d not found", id)
-	} else {
-		delete(campaignStore, id)
-		log.Infof("Successfully deleted campaign with ID %v.", campaign.ID)
-		return nil
+	result := db.DB.Preload("Donations").Delete(&model.Campaign{}, id)
+	if result.Error != nil {
+		log.Info("Campaign delete failed.")
+		return result.Error
 	}
+
+	log.Infof("Successfully deleted campaign with ID %v.", id)
+	return nil
 }
diff --git a/src/myaktion/service/donation.go b/src/myaktion/service/donation.go
index 5a7bb0978290c0977975470f64f818a8348a8843..bb438f2810bca595f6ecf4e82a6aee74fd636ac9 100644
--- a/src/myaktion/service/donation.go
+++ b/src/myaktion/service/donation.go
@@ -1,22 +1,20 @@
 package service
 
 import (
-	"fmt"
-
 	log "github.com/sirupsen/logrus"
+	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/db"
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
 )
 
 func AddDonation(campaignId uint, donation *model.Donation) error {
-	campaign, err := GetCampaign(campaignId)
-	if err != nil {
-		log.Info("Campaign with ID %d not found.", campaignId)
-		return fmt.Errorf("campaign with id %d not found", campaignId)
-	}
-	if campaign.Donations == nil {
-		campaign.Donations = []model.Donation{}
+	donation.CampaignID = campaignId
+	result := db.DB.Create(donation)
+	if result.Error != nil {
+		log.Info("Donation creation failed.")
+		return result.Error
 	}
-	campaign.Donations = append(campaign.Donations, *donation)
+	log.Info("Successfully stored new donation")
+	log.Tracef("Stored: %v", donation)
 
 	return nil
 }