diff --git a/cmd/dbGarbageCollector/main.go b/cmd/dbGarbageCollector/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..5c5f9774357ad9ee1cdb5bd52fc906145416ca16
--- /dev/null
+++ b/cmd/dbGarbageCollector/main.go
@@ -0,0 +1,29 @@
+package main
+
+import (
+	"log"
+
+	"github.com/zachmann/mytoken/internal/config"
+	"github.com/zachmann/mytoken/internal/db"
+)
+
+func main() {
+	config.Load()
+	if err := db.Connect(); err != nil {
+		log.Fatal(err)
+	}
+	deleteExpiredPollingCodes()
+	deleteExpiredAuthInfo()
+}
+
+func deleteExpiredPollingCodes() {
+	if _, err := db.DB().Exec(`DELETE FROM PollingCodes WHERE expires_at < CURRENT_TIMESTAMP()`); err != nil {
+		log.Printf("%s", err)
+	}
+}
+
+func deleteExpiredAuthInfo() {
+	if _, err := db.DB().Exec(`DELETE FROM AuthInfo WHERE expires_at < CURRENT_TIMESTAMP()`); err != nil {
+		log.Printf("%s", err)
+	}
+}
diff --git a/cmd/mytoken/main.go b/cmd/mytoken/main.go
index 687e662d66e75f541497725d72444189256af331..4e6009ef3db4b4b3a02fba373661942d70648be6 100644
--- a/cmd/mytoken/main.go
+++ b/cmd/mytoken/main.go
@@ -3,7 +3,7 @@ package main
 import (
 	"github.com/zachmann/mytoken/internal/config"
 	"github.com/zachmann/mytoken/internal/db"
-	"github.com/zachmann/mytoken/internal/endpoints/configuration"
+	configurationEndpoint "github.com/zachmann/mytoken/internal/endpoints/configuration"
 	"github.com/zachmann/mytoken/internal/jws"
 	"github.com/zachmann/mytoken/internal/oidc/authcode"
 	"github.com/zachmann/mytoken/internal/server"
@@ -11,10 +11,9 @@ import (
 
 func main() {
 	config.Load()
-	configuration.Init()
+	configurationEndpoint.Init()
 	authcode.Init()
-	err := db.Connect()
-	if err != nil {
+	if err := db.Connect(); err != nil {
 		panic(err)
 	}
 	jws.LoadKey()