Repository: ory/kratos
Pull request #981 (2021-01-12 10:30:01)

Refactorings and code improvements
## Related issue

<!--
Please link the GitHub issue this pull request resolves in the format of `#1234`. If you discussed this change
with a maintainer, please mention her/him using the `@` syntax (e.g. `@aeneasr`).

If this change neither resolves an existing issue nor has sign-off from one of the maintainers, there is a
chance substantial changes will be requested or that the changes will be rejected.

You can discuss changes with maintainers either in the Github Discusssions in this repository or
join the [ORY Chat](https://www.ory.sh/chat).
-->

## Proposed changes

<!--
Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request.
-->

## Checklist

<!--
Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of
them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.
-->

- [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md).
- [ ] I have read the [security policy](../security/policy).
- [ ] I confirm that this pull request does not address a security
      vulnerability. If this pull request addresses a security. vulnerability, I
      confirm that I got green light (please contact
      [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push
      the changes.
- [ ] I have added tests that prove my fix is effective or that my feature
      works.
- [ ] I have added or changed [the documentation](docs/docs).

## Further comments

<!--
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution
you did and what alternatives you considered, etc...
-->



Patch:
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2c6e26ffc..2b59f1497 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -4,7 +4,7 @@ orbs:
   changelog: ory/changelog@0.1.4
   goreleaser: ory/goreleaser@0.1.20
   slack: circleci/slack@3.4.2
-  sdk: ory/sdk@0.1.38
+  sdk: ory/sdk@0.1.39
   docs: ory/docs@0.0.8
   nancy: ory/nancy@0.0.13
   golangci: ory/golangci@0.0.9
diff --git a/.schema/api.swagger.json b/.schema/api.swagger.json
index 0dd886219..17b60731f 100755
--- a/.schema/api.swagger.json
+++ b/.schema/api.swagger.json
@@ -1672,7 +1672,7 @@
   },
   "definitions": {
     "CompleteSelfServiceLoginFlowWithPasswordMethod": {
-      "description": "CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod complete self service login flow with password method",
+      "description": "CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod complete self service login flow with password method",
       "type": "object",
       "properties": {
         "csrf_token": {
@@ -1690,7 +1690,7 @@
       }
     },
     "CompleteSelfServiceSettingsFlowWithPasswordMethod": {
-      "description": "CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod complete self service settings flow with password method",
+      "description": "CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod complete self service settings flow with password method",
       "type": "object",
       "required": [
         "password"
@@ -1707,7 +1707,7 @@
       }
     },
     "CreateIdentity": {
-      "description": "CreateIdentity CreateIdentity CreateIdentity CreateIdentity create identity",
+      "description": "CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity create identity",
       "type": "object",
       "required": [
         "schema_id",
@@ -1725,7 +1725,7 @@
       }
     },
     "CreateRecoveryLink": {
-      "description": "CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink create recovery link",
+      "description": "CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink create recovery link",
       "type": "object",
       "required": [
         "identity_id"
@@ -1747,12 +1747,12 @@
       "title": "CredentialsType  represents several different credential types, like password credentials, passwordless credentials,"
     },
     "ID": {
-      "description": "ID ID ID ID ID",
+      "description": "ID ID ID ID ID ID ID ID ID",
       "type": "integer",
       "format": "int64"
     },
     "Identity": {
-      "description": "Identity Identity Identity Identity identity",
+      "description": "Identity Identity Identity Identity Identity Identity Identity Identity identity",
       "type": "object",
       "required": [
         "id",
@@ -1794,7 +1794,7 @@
       }
     },
     "Message": {
-      "description": "Message Message Message Message message",
+      "description": "Message Message Message Message Message Message Message Message message",
       "type": "object",
       "properties": {
         "context": {
@@ -1814,7 +1814,7 @@
       }
     },
     "Messages": {
-      "description": "Messages Messages Messages Messages messages",
+      "description": "Messages Messages Messages Messages Messages Messages Messages Messages messages",
       "type": "array",
       "items": {
         "$ref": "#/definitions/Message"
@@ -1826,7 +1826,7 @@
       "title": "NullTime implements sql.NullTime functionality."
     },
     "RecoveryAddress": {
-      "description": "RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress recovery address",
+      "description": "RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress recovery address",
       "type": "object",
       "required": [
         "id",
@@ -1846,15 +1846,15 @@
       }
     },
     "RecoveryAddressType": {
-      "description": "RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType recovery address type",
+      "description": "RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType recovery address type",
       "type": "string"
     },
     "State": {
-      "description": "State State State State state",
+      "description": "State State State State State State State State state",
       "type": "string"
     },
     "Traits": {
-      "description": "Traits Traits Traits Traits traits",
+      "description": "Traits Traits Traits Traits Traits Traits Traits Traits traits",
       "type": "object"
     },
     "Type": {
@@ -1867,7 +1867,7 @@
       "format": "uuid4"
     },
     "UpdateIdentity": {
-      "description": "UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity update identity",
+      "description": "UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity update identity",
       "type": "object",
       "required": [
         "traits"
@@ -1884,7 +1884,7 @@
       }
     },
     "VerifiableAddress": {
-      "description": "VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress verifiable address",
+      "description": "VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress verifiable address",
       "type": "object",
       "required": [
         "id",
@@ -1915,15 +1915,15 @@
       }
     },
     "VerifiableAddressStatus": {
-      "description": "VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus verifiable address status",
+      "description": "VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus verifiable address status",
       "type": "string"
     },
     "VerifiableAddressType": {
-      "description": "VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType verifiable address type",
+      "description": "VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType verifiable address type",
       "type": "string"
     },
     "completeSelfServiceRecoveryFlowWithLinkMethod": {
-      "description": "CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod complete self service recovery flow with link method",
+      "description": "CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod complete self service recovery flow with link method",
       "type": "object",
       "properties": {
         "csrf_token": {
@@ -1937,7 +1937,7 @@
       }
     },
     "completeSelfServiceVerificationFlowWithLinkMethod": {
-      "description": "CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod complete self service verification flow with link method",
+      "description": "CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod complete self service verification flow with link method",
       "type": "object",
       "properties": {
         "csrf_token": {
@@ -1951,10 +1951,11 @@
       }
     },
     "errorContainer": {
+      "description": "ErrorContainer error container",
       "type": "object",
       "required": [
-        "errors",
-        "id"
+        "id",
+        "errors"
       ],
       "properties": {
         "errors": {
@@ -2004,7 +2005,7 @@
       }
     },
     "formFields": {
-      "description": "Fields contains multiple fields",
+      "description": "FormFields Fields contains multiple fields",
       "type": "array",
       "items": {
         "$ref": "#/definitions/formField"
@@ -2013,7 +2014,7 @@
     "genericError": {
       "description": "Error responses are sent when an error (e.g. unauthorized, bad request, ...) occurred.",
       "type": "object",
-      "title": "GenericError Error response",
+      "title": "GenericError GenericError Error response",
       "properties": {
         "error": {
           "$ref": "#/definitions/genericErrorPayload"
@@ -2021,7 +2022,7 @@
       }
     },
     "genericErrorPayload": {
-      "description": "GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload generic error payload",
+      "description": "GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload generic error payload",
       "type": "object",
       "properties": {
         "code": {
@@ -2059,7 +2060,7 @@
       }
     },
     "healthNotReadyStatus": {
-      "description": "HealthNotReadyStatus HealthNotReadyStatus HealthNotReadyStatus health not ready status",
+      "description": "HealthNotReadyStatus HealthNotReadyStatus health not ready status",
       "type": "object",
       "properties": {
         "errors": {
@@ -2072,7 +2073,6 @@
       }
     },
     "healthStatus": {
-      "description": "HealthStatus health status",
       "type": "object",
       "properties": {
         "status": {
@@ -2084,13 +2084,13 @@
     "loginFlow": {
       "description": "This object represents a login flow. A login flow is initiated at the \"Initiate Login API / Browser Flow\"\nendpoint by a client.\n\nOnce a login flow is completed successfully, a session cookie or session token will be issued.",
       "type": "object",
-      "title": "LoginFlow LoginFlow Login Flow",
+      "title": "Login Flow",
       "required": [
-        "id",
         "expires_at",
+        "id",
         "issued_at",
-        "request_url",
-        "methods"
+        "methods",
+        "request_url"
       ],
       "properties": {
         "active": {
@@ -2148,12 +2148,11 @@
       }
     },
     "loginFlowMethodConfig": {
-      "description": "LoginFlowMethodConfig LoginFlowMethodConfig login flow method config",
       "type": "object",
       "required": [
         "action",
-        "method",
-        "fields"
+        "fields",
+        "method"
       ],
       "properties": {
         "action": {
@@ -2180,11 +2179,11 @@
       }
     },
     "loginViaApiResponse": {
-      "description": "LoginViaAPIResponse The Response for Login Flows via API",
+      "description": "The Response for Login Flows via API",
       "type": "object",
       "required": [
-        "session_token",
-        "session"
+        "session",
+        "session_token"
       ],
       "properties": {
         "session": {
@@ -2249,11 +2248,10 @@
       }
     },
     "recoveryFlowMethod": {
-      "description": "RecoveryFlowMethod RecoveryFlowMethod RecoveryFlowMethod RecoveryFlowMethod recovery flow method",
       "type": "object",
       "required": [
-        "method",
-        "config"
+        "config",
+        "method"
       ],
       "properties": {
         "config": {
@@ -2266,7 +2264,7 @@
       }
     },
     "recoveryFlowMethodConfig": {
-      "description": "RecoveryFlowMethodConfig RecoveryFlowMethodConfig recovery flow method config",
+      "description": "RecoveryFlowMethodConfig RecoveryFlowMethodConfig RecoveryFlowMethodConfig recovery flow method config",
       "type": "object",
       "required": [
         "action",
@@ -2291,13 +2289,14 @@
       }
     },
     "recoveryLink": {
+      "description": "RecoveryLink recovery link",
       "type": "object",
       "required": [
         "recovery_link"
       ],
       "properties": {
         "expires_at": {
-          "description": "Recovery Link Expires At\n\nThe timestamp when the recovery link expires.",
+          "description": "Recovery Link Expires At\n\nThe timestamp when the recovery link expires.\nFormat: date-time",
           "type": "string",
           "format": "date-time"
         },
@@ -2308,13 +2307,14 @@
       }
     },
     "registrationFlow": {
+      "description": "RegistrationFlow registration flow",
       "type": "object",
       "required": [
-        "expires_at",
         "id",
+        "expires_at",
         "issued_at",
-        "methods",
-        "request_url"
+        "request_url",
+        "methods"
       ],
       "properties": {
         "active": {
@@ -2368,12 +2368,11 @@
       }
     },
     "registrationFlowMethodConfig": {
-      "description": "RegistrationFlowMethodConfig RegistrationFlowMethodConfig RegistrationFlowMethodConfig registration flow method config",
       "type": "object",
       "required": [
         "action",
-        "method",
-        "fields"
+        "fields",
+        "method"
       ],
       "properties": {
         "action": {
@@ -2420,7 +2419,7 @@
       }
     },
     "revokeSession": {
-      "description": "RevokeSession RevokeSession RevokeSession RevokeSession revoke session",
+      "description": "RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession revoke session",
       "type": "object",
       "required": [
         "session_token"
@@ -2523,11 +2522,10 @@
       }
     },
     "settingsFlowMethod": {
-      "description": "SettingsFlowMethod settings flow method",
       "type": "object",
       "required": [
-        "method",
-        "config"
+        "config",
+        "method"
       ],
       "properties": {
         "config": {
@@ -2564,7 +2562,7 @@
       }
     },
     "settingsViaApiResponse": {
-      "description": "SettingsViaAPIResponse SettingsViaAPIResponse The Response for Settings Flows via API",
+      "description": "The Response for Settings Flows via API",
       "type": "object",
       "required": [
         "flow",
@@ -2628,11 +2626,10 @@
       }
     },
     "verificationFlowMethod": {
-      "description": "VerificationFlowMethod VerificationFlowMethod VerificationFlowMethod VerificationFlowMethod verification flow method",
       "type": "object",
       "required": [
-        "method",
-        "config"
+        "config",
+        "method"
       ],
       "properties": {
         "config": {
@@ -2645,12 +2642,11 @@
       }
     },
     "verificationFlowMethodConfig": {
-      "description": "VerificationFlowMethodConfig verification flow method config",
       "type": "object",
       "required": [
         "action",
-        "method",
-        "fields"
+        "fields",
+        "method"
       ],
       "properties": {
         "action": {
@@ -2670,6 +2666,7 @@
       }
     },
     "version": {
+      "description": "Version Version Version version",
       "type": "object",
       "properties": {
         "version": {
diff --git a/.schema/config.schema.json b/.schema/config.schema.json
index 02348cfb0..7bc89cd94 100644
--- a/.schema/config.schema.json
+++ b/.schema/config.schema.json
@@ -643,6 +643,28 @@
                   "type": "boolean",
                   "title": "Enables Username/Email and Password Method",
                   "default": true
+                },
+                "config": {
+                  "type": "object",
+                  "title": "Password Configuration",
+                  "description": "Define how passwords are validated.",
+                  "properties": {
+                    "max_breaches": {
+                      "title": "Allow Password Breaches",
+                      "description": "Defines how often a password may have been breached before it is rejected.",
+                      "type": "integer",
+                      "minimum": 0,
+                      "maximum": 100,
+                      "default": 0
+                    },
+                    "ignore_network_errors": {
+                      "title": "Ignore Lookup Network Errors",
+                      "description": "If set to false the password validation fails when the network or the Have I Been Pwnd API is down.",
+                      "type": "boolean",
+                      "default": true
+                    }
+                  },
+                  "additionalProperties": false
                 }
               }
             },
@@ -1020,28 +1042,6 @@
       ],
       "additionalProperties": false
     },
-    "password": {
-      "type": "object",
-      "title": "Password Configuration",
-      "description": "Define how passwords are validated.",
-      "properties": {
-        "max_breaches": {
-          "title": "Allow Password Breaches",
-          "description": "Defines how often a password may have been breached before it is rejected.",
-          "type": "integer",
-          "minimum": 0,
-          "maximum": 100,
-          "default": 0
-        },
-        "ignore_network_errors": {
-          "title": "Ignore Lookup Network Errors",
-          "description": "If set to false the password validation fails when the network or the Have I Been Pwnd API is down.",
-          "type": "boolean",
-          "default": true
-        }
-      },
-      "additionalProperties": false
-    },
     "secrets": {
       "type": "object",
       "properties": {
diff --git a/cmd/cliclient/migrate.go b/cmd/cliclient/migrate.go
index 3fc2c881a..25807074f 100644
--- a/cmd/cliclient/migrate.go
+++ b/cmd/cliclient/migrate.go
@@ -31,7 +31,7 @@ func (h *MigrateHandler) MigrateSQL(cmd *cobra.Command, args []string) {
 			cmd.Context(),
 			configx.WithFlags(cmd.Flags()),
 			configx.SkipValidation())
-		if len(d.Configuration(cmd.Context()).DSN()) == 0 {
+		if len(d.Config(cmd.Context()).DSN()) == 0 {
 			fmt.Println(cmd.UsageString())
 			fmt.Println("")
 			fmt.Println("When using flag -e, environment variable DSN must be set")
diff --git a/cmd/daemon/serve.go b/cmd/daemon/serve.go
index 800ed7efb..bbaa5e49f 100644
--- a/cmd/daemon/serve.go
+++ b/cmd/daemon/serve.go
@@ -67,7 +67,7 @@ func ServePublic(r driver.Registry, wg *sync.WaitGroup, cmd *cobra.Command, args
 	defer wg.Done()
 	modifiers := newOptions(opts)
 
-	c := r.Configuration(cmd.Context())
+	c := r.Config(cmd.Context())
 	l := r.Logger()
 	n := negroni.New()
 	for _, mw := range modifiers.mwf {
@@ -97,7 +97,7 @@ func ServePublic(r driver.Registry, wg *sync.WaitGroup, cmd *cobra.Command, args
 	}
 
 	var handler http.Handler = n
-	options, enabled := r.Configuration(cmd.Context()).CORS("public")
+	options, enabled := r.Config(cmd.Context()).CORS("public")
 	if enabled {
 		handler = cors.New(options).Handler(handler)
 	}
@@ -118,7 +118,7 @@ func ServeAdmin(r driver.Registry, wg *sync.WaitGroup, cmd *cobra.Command, args
 	defer wg.Done()
 	modifiers := newOptions(opts)
 
-	c := r.Configuration(cmd.Context())
+	c := r.Config(cmd.Context())
 	l := r.Logger()
 	n := negroni.New()
 	for _, mw := range modifiers.mwf {
@@ -154,17 +154,17 @@ func sqa(cmd *cobra.Command, d driver.Registry) *metricsx.Service {
 	return metricsx.New(
 		cmd,
 		d.Logger(),
-		d.Configuration(cmd.Context()).Source(),
+		d.Config(cmd.Context()).Source(),
 		&metricsx.Options{
 			Service: "ory-kratos",
 			ClusterID: metricsx.Hash(
 				strings.Join([]string{
-					d.Configuration(cmd.Context()).DSN(),
-					d.Configuration(cmd.Context()).SelfPublicURL().String(),
-					d.Configuration(cmd.Context()).SelfAdminURL().String(),
+					d.Config(cmd.Context()).DSN(),
+					d.Config(cmd.Context()).SelfPublicURL().String(),
+					d.Config(cmd.Context()).SelfAdminURL().String(),
 				}, "|"),
 			),
-			IsDevelopment: d.Configuration(cmd.Context()).IsInsecureDevMode(),
+			IsDevelopment: d.Config(cmd.Context()).IsInsecureDevMode(),
 			WriteKey:      "qQlI6q8Q4WvkzTjKQSor4sHYOikHIvvi",
 			WhitelistedPaths: []string{
 				"/",
diff --git a/cmd/hashers/argon2/calibrate.go b/cmd/hashers/argon2/calibrate.go
index 9300bc3e9..f2d09db74 100644
--- a/cmd/hashers/argon2/calibrate.go
+++ b/cmd/hashers/argon2/calibrate.go
@@ -17,15 +17,15 @@ import (
 
 type (
 	argon2Config struct {
-		c config.HasherArgon2Config
+		c config.Argon2
 	}
 )
 
-func (c *argon2Config) Configuration(_ context.Context) *config.Provider {
+func (c *argon2Config) Config(_ context.Context) *config.Config {
 	panic("not supposed to be called")
 }
 
-func (c *argon2Config) HasherArgon2() *config.HasherArgon2Config {
+func (c *argon2Config) HasherArgon2() *config.Argon2 {
 	return &c.c
 }
 
@@ -56,7 +56,7 @@ func newCalibrateCmd() *cobra.Command {
 	)
 
 	aconfig := &argon2Config{
-		c: config.HasherArgon2Config{},
+		c: config.Argon2{},
 	}
 
 	cmd := &cobra.Command{
diff --git a/cmd/serve/root.go b/cmd/serve/root.go
index cf55998c0..7f92db297 100644
--- a/cmd/serve/root.go
+++ b/cmd/serve/root.go
@@ -31,7 +31,7 @@ var serveCmd = &cobra.Command{
 	Run: func(cmd *cobra.Command, args []string) {
 		d := driver.New(cmd.Context(), configx.WithFlags(cmd.Flags()))
 
-		if d.Configuration(cmd.Context()).IsInsecureDevMode() {
+		if d.Config(cmd.Context()).IsInsecureDevMode() {
 			d.Logger().Warn(`
 
 YOU ARE RUNNING ORY KRATOS IN DEV MODE.
@@ -41,7 +41,7 @@ DON'T DO THIS IN PRODUCTION!
 `)
 		}
 
-		configVersion := d.Configuration(cmd.Context()).ConfigVersion()
+		configVersion := d.Config(cmd.Context()).ConfigVersion()
 		if configVersion == config.UnknownVersion {
 			d.Logger().Warn("The config has no version specified. Add the version to improve your development experience.")
 		} else if config.Version != "" &&
diff --git a/corp/context.go b/corp/context.go
index f0faa3592..e89305585 100644
--- a/corp/context.go
+++ b/corp/context.go
@@ -17,6 +17,6 @@ func ContextualizeMiddleware(_ context.Context) func(rw http.ResponseWriter, r *
 	}
 }
 
-func ContextualizeConfig(ctx context.Context, fb *config.Provider) *config.Provider {
+func ContextualizeConfig(ctx context.Context, fb *config.Config) *config.Config {
 	return fb
 }
diff --git a/courier/courier.go b/courier/courier.go
index 0e5d74b54..c8f000749 100644
--- a/courier/courier.go
+++ b/courier/courier.go
@@ -27,14 +27,14 @@ type (
 	Courier struct {
 		Dialer *gomail.Dialer
 		d      smtpDependencies
-		c      *config.Provider
+		c      *config.Config
 	}
 	Provider interface {
 		Courier() *Courier
 	}
 )
 
-func NewSMTP(d smtpDependencies, c *config.Provider) *Courier {
+func NewSMTP(d smtpDependencies, c *config.Config) *Courier {
 	uri := c.CourierSMTPURL()
 	password, _ := uri.User.Password()
 	port, _ := strconv.ParseInt(uri.Port(), 10, 64)
diff --git a/courier/template/recovery_invalid.go b/courier/template/recovery_invalid.go
index 3917631b9..3e5d3e499 100644
--- a/courier/template/recovery_invalid.go
+++ b/courier/template/recovery_invalid.go
@@ -8,7 +8,7 @@ import (
 
 type (
 	RecoveryInvalid struct {
-		c *config.Provider
+		c *config.Config
 		m *RecoveryInvalidModel
 	}
 	RecoveryInvalidModel struct {
@@ -16,7 +16,7 @@ type (
 	}
 )
 
-func NewRecoveryInvalid(c *config.Provider, m *RecoveryInvalidModel) *RecoveryInvalid {
+func NewRecoveryInvalid(c *config.Config, m *RecoveryInvalidModel) *RecoveryInvalid {
 	return &RecoveryInvalid{c: c, m: m}
 }
 
diff --git a/courier/template/recovery_valid.go b/courier/template/recovery_valid.go
index 572cd4943..c360f8d85 100644
--- a/courier/template/recovery_valid.go
+++ b/courier/template/recovery_valid.go
@@ -8,7 +8,7 @@ import (
 
 type (
 	RecoveryValid struct {
-		c *config.Provider
+		c *config.Config
 		m *RecoveryValidModel
 	}
 	RecoveryValidModel struct {
@@ -17,7 +17,7 @@ type (
 	}
 )
 
-func NewRecoveryValid(c *config.Provider, m *RecoveryValidModel) *RecoveryValid {
+func NewRecoveryValid(c *config.Config, m *RecoveryValidModel) *RecoveryValid {
 	return &RecoveryValid{c: c, m: m}
 }
 
diff --git a/courier/template/stub.go b/courier/template/stub.go
index 3e6db200e..457741309 100644
--- a/courier/template/stub.go
+++ b/courier/template/stub.go
@@ -7,7 +7,7 @@ import (
 )
 
 type TestStub struct {
-	c *config.Provider
+	c *config.Config
 	m *TestStubModel
 }
 
@@ -17,7 +17,7 @@ type TestStubModel struct {
 	Body    string
 }
 
-func NewTestStub(c *config.Provider, m *TestStubModel) *TestStub {
+func NewTestStub(c *config.Config, m *TestStubModel) *TestStub {
 	return &TestStub{c: c, m: m}
 }
 
diff --git a/courier/template/verification_invalid.go b/courier/template/verification_invalid.go
index 32b89b784..173e97cdc 100644
--- a/courier/template/verification_invalid.go
+++ b/courier/template/verification_invalid.go
@@ -8,7 +8,7 @@ import (
 
 type (
 	VerificationInvalid struct {
-		c *config.Provider
+		c *config.Config
 		m *VerificationInvalidModel
 	}
 	VerificationInvalidModel struct {
@@ -16,7 +16,7 @@ type (
 	}
 )
 
-func NewVerificationInvalid(c *config.Provider, m *VerificationInvalidModel) *VerificationInvalid {
+func NewVerificationInvalid(c *config.Config, m *VerificationInvalidModel) *VerificationInvalid {
 	return &VerificationInvalid{c: c, m: m}
 }
 
diff --git a/courier/template/verification_valid.go b/courier/template/verification_valid.go
index db20580ca..bd579f3e6 100644
--- a/courier/template/verification_valid.go
+++ b/courier/template/verification_valid.go
@@ -8,7 +8,7 @@ import (
 
 type (
 	VerificationValid struct {
-		c *config.Provider
+		c *config.Config
 		m *VerificationValidModel
 	}
 	VerificationValidModel struct {
@@ -17,7 +17,7 @@ type (
 	}
 )
 
-func NewVerificationValid(c *config.Provider, m *VerificationValidModel) *VerificationValid {
+func NewVerificationValid(c *config.Config, m *VerificationValidModel) *VerificationValid {
 	return &VerificationValid{c: c, m: m}
 }
 
diff --git a/driver/config/provider_viper.go b/driver/config/config.go
similarity index 79%
rename from driver/config/provider_viper.go
rename to driver/config/config.go
index c121c7461..46d0bab7b 100644
--- a/driver/config/provider_viper.go
+++ b/driver/config/config.go
@@ -82,8 +82,8 @@ const (
 	ViperKeyHasherArgon2ConfigParallelism                           = "hashers.argon2.parallelism"
 	ViperKeyHasherArgon2ConfigSaltLength                            = "hashers.argon2.salt_length"
 	ViperKeyHasherArgon2ConfigKeyLength                             = "hashers.argon2.key_length"
-	ViperKeyPasswordMaxBreaches                                     = "password.max_breaches"
-	ViperKeyIgnoreNetworkErrors                                     = "password.ignore_network_errors"
+	ViperKeyPasswordMaxBreaches                                     = "selfservice.methods.password.config.max_breaches"
+	ViperKeyIgnoreNetworkErrors                                     = "selfservice.methods.password.config.ignore_network_errors"
 	ViperKeyVersion                                                 = "version"
 	Argon2DefaultMemory                                      uint32 = 4 * 1024 * 1024
 	Argon2DefaultIterations                                  uint32 = 4
@@ -92,7 +92,7 @@ const (
 )
 
 type (
-	HasherArgon2Config struct {
+	Argon2 struct {
 		Memory      uint32 `json:"memory"`
 		Iterations  uint32 `json:"iterations"`
 		Parallelism uint8  `json:"parallelism"`
@@ -107,22 +107,22 @@ type (
 		Enabled bool            `json:"enabled"`
 		Config  json.RawMessage `json:"config"`
 	}
-	SchemaConfig struct {
+	Schema struct {
 		ID  string `json:"id"`
 		URL string `json:"url"`
 	}
-	PasswordPolicyConfig struct {
+	PasswordPolicy struct {
 		MaxBreaches         uint `json:"max_breaches"`
 		IgnoreNetworkErrors bool `json:"ignore_network_errors"`
 	}
-	SchemaConfigs []SchemaConfig
-	Provider      struct {
+	Schemas []Schema
+	Config  struct {
 		l *logrusx.Logger
 		p *configx.Provider
 	}
 
-	Providers interface {
-		Configuration(ctx context.Context) *Provider
+	Provider interface {
+		Config(ctx context.Context) *Config
 	}
 )
 
@@ -132,7 +132,7 @@ func HookStrategyKey(key, strategy string) string {
 	return fmt.Sprintf("%s.%s.hooks", key, strategy)
 }
 
-func (s SchemaConfigs) FindSchemaByID(id string) (*SchemaConfig, error) {
+func (s Schemas) FindSchemaByID(id string) (*Schema, error) {
 	for _, sc := range s {
 		if sc.ID == id {
 			return &sc, nil
@@ -142,7 +142,7 @@ func (s SchemaConfigs) FindSchemaByID(id string) (*SchemaConfig, error) {
 	return nil, errors.Errorf("could not find schema with id \"%s\"", id)
 }
 
-func MustNew(l *logrusx.Logger, opts ...configx.OptionModifier) *Provider {
+func MustNew(l *logrusx.Logger, opts ...configx.OptionModifier) *Config {
 	p, err := New(l, opts...)
 	if err != nil {
 		l.WithError(err).Fatalf("Unable to load config.")
@@ -150,7 +150,7 @@ func MustNew(l *logrusx.Logger, opts ...configx.OptionModifier) *Provider {
 	return p
 }
 
-func New(l *logrusx.Logger, opts ...configx.OptionModifier) (*Provider, error) {
+func New(l *logrusx.Logger, opts ...configx.OptionModifier) (*Config, error) {
 	f, err := pkger.Open("github.com/ory/kratos:/.schema/config.schema.json")
 	if err != nil {
 		return nil, err
@@ -174,14 +174,14 @@ func New(l *logrusx.Logger, opts ...configx.OptionModifier) (*Provider, error) {
 	}
 
 	l.UseConfig(p)
-	return &Provider{l: l, p: p}, nil
+	return &Config{l: l, p: p}, nil
 }
 
-func (p *Provider) Source() *configx.Provider {
+func (p *Config) Source() *configx.Provider {
 	return p.p
 }
 
-func (p *Provider) CORS(iface string) (cors.Options, bool) {
+func (p *Config) CORS(iface string) (cors.Options, bool) {
 	switch iface {
 	case "admin":
 		return p.cors("serve.admin")
@@ -192,7 +192,7 @@ func (p *Provider) CORS(iface string) (cors.Options, bool) {
 	}
 }
 
-func (p *Provider) cors(prefix string) (cors.Options, bool) {
+func (p *Config) cors(prefix string) (cors.Options, bool) {
 	return p.p.CORS(prefix, cors.Options{
 		AllowedMethods:   []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
 		AllowedHeaders:   []string{"Authorization", "Content-Type", "Cookie"},
@@ -201,28 +201,28 @@ func (p *Provider) cors(prefix string) (cors.Options, bool) {
 	})
 }
 
-func (p *Provider) Set(key string, value interface{}) error {
+func (p *Config) Set(key string, value interface{}) error {
 	return p.p.Set(key, value)
 }
 
-func (p *Provider) MustSet(key string, value interface{}) {
+func (p *Config) MustSet(key string, value interface{}) {
 	if err := p.p.Set(key, value); err != nil {
 		p.l.WithError(err).Fatalf("Unable to set \"%s\" to \"%s\".", key, value)
 	}
 }
 
-func (p *Provider) SessionDomain() string {
+func (p *Config) SessionDomain() string {
 	return p.p.String(ViperKeySessionDomain)
 }
 
-func (p *Provider) SessionPath() string {
+func (p *Config) SessionPath() string {
 	return p.p.String(ViperKeySessionPath)
 }
 
-func (p *Provider) HasherArgon2() *HasherArgon2Config {
+func (p *Config) HasherArgon2() *Argon2 {
 	// warn about usage of default values and point to the docs
 	// warning will require https://github.com/ory/viper/issues/19
-	return &HasherArgon2Config{
+	return &Argon2{
 		Memory:      uint32(p.p.IntF(ViperKeyHasherArgon2ConfigMemory, int(Argon2DefaultMemory))),
 		Iterations:  uint32(p.p.IntF(ViperKeyHasherArgon2ConfigIterations, int(Argon2DefaultIterations))),
 		Parallelism: uint8(p.p.IntF(ViperKeyHasherArgon2ConfigParallelism, int(Argon2DefaultParallelism))),
@@ -231,7 +231,7 @@ func (p *Provider) HasherArgon2() *HasherArgon2Config {
 	}
 }
 
-func (p *Provider) listenOn(key string) string {
+func (p *Config) listenOn(key string) string {
 	fb := 4433
 	if key == "admin" {
 		fb = 4434
@@ -245,49 +245,49 @@ func (p *Provider) listenOn(key string) string {
 	return fmt.Sprintf("%s:%d", p.p.String("serve."+key+".host"), port)
 }
 
-func (p *Provider) DefaultIdentityTraitsSchemaURL() *url.URL {
+func (p *Config) DefaultIdentityTraitsSchemaURL() *url.URL {
 	return p.parseURIOrFail(ViperKeyDefaultIdentitySchemaURL)
 }
 
-func (p *Provider) IdentityTraitsSchemas() SchemaConfigs {
-	ds := SchemaConfig{
+func (p *Config) IdentityTraitsSchemas() Schemas {
+	ds := Schema{
 		ID:  DefaultIdentityTraitsSchemaID,
 		URL: p.DefaultIdentityTraitsSchemaURL().String(),
 	}
 
 	if !p.p.Exists(ViperKeyIdentitySchemas) {
-		return SchemaConfigs{ds}
+		return Schemas{ds}
 	}
 
-	var ss SchemaConfigs
+	var ss Schemas
 	out, err := p.p.Marshal(kjson.Parser())
 	if err != nil {
 		p.l.WithError(err).Fatalf("Unable to dencode values from %s.", ViperKeyIdentitySchemas)
-		return SchemaConfigs{ds}
+		return Schemas{ds}
 	}
 
 	config := gjson.GetBytes(out, ViperKeyIdentitySchemas).Raw
 	if len(config) == 0 {
-		return SchemaConfigs{ds}
+		return Schemas{ds}
 	}
 
 	if err := json.NewDecoder(bytes.NewBufferString(config)).Decode(&ss); err != nil {
 		p.l.WithError(err).Fatalf("Unable to encode values from %s.", ViperKeyIdentitySchemas)
-		return SchemaConfigs{ds}
+		return Schemas{ds}
 	}
 
 	return append(ss, ds)
 }
 
-func (p *Provider) AdminListenOn() string {
+func (p *Config) AdminListenOn() string {
 	return p.listenOn("admin")
 }
 
-func (p *Provider) PublicListenOn() string {
+func (p *Config) PublicListenOn() string {
 	return p.listenOn("public")
 }
 
-func (p *Provider) DSN() string {
+func (p *Config) DSN() string {
 	dsn := p.p.String(ViperKeyDSN)
 
 	if dsn == "memory" {
@@ -302,7 +302,7 @@ func (p *Provider) DSN() string {
 	return ""
 }
 
-func (p *Provider) DisableAPIFlowEnforcement() bool {
+func (p *Config) DisableAPIFlowEnforcement() bool {
 	if p.IsInsecureDevMode() && os.Getenv("DEV_DISABLE_API_FLOW_ENFORCEMENT") == "true" {
 		p.l.Warn("Because \"DEV_DISABLE_API_FLOW_ENFORCEMENT=true\" and the \"--dev\" flag are set, self-service API flows will no longer check if the interaction is actually a browser flow. This is very dangerous as it allows bypassing of anti-CSRF measures, leaving the deployment highly vulnerable. This option should only be used for automated testing and never come close to real user data anywhere.")
 		return true
@@ -310,23 +310,23 @@ func (p *Provider) DisableAPIFlowEnforcement() bool {
 	return false
 }
 
-func (p *Provider) SelfServiceFlowVerificationEnabled() bool {
+func (p *Config) SelfServiceFlowVerificationEnabled() bool {
 	return p.p.Bool(ViperKeySelfServiceVerificationEnabled)
 }
 
-func (p *Provider) SelfServiceFlowRecoveryEnabled() bool {
+func (p *Config) SelfServiceFlowRecoveryEnabled() bool {
 	return p.p.Bool(ViperKeySelfServiceRecoveryEnabled)
 }
 
-func (p *Provider) SelfServiceFlowLoginBeforeHooks() []SelfServiceHook {
+func (p *Config) SelfServiceFlowLoginBeforeHooks() []SelfServiceHook {
 	return p.selfServiceHooks(ViperKeySelfServiceLoginBeforeHooks)
 }
 
-func (p *Provider) SelfServiceFlowRegistrationBeforeHooks() []SelfServiceHook {
+func (p *Config) SelfServiceFlowRegistrationBeforeHooks() []SelfServiceHook {
 	return p.selfServiceHooks(ViperKeySelfServiceRegistrationBeforeHooks)
 }
 
-func (p *Provider) selfServiceHooks(key string) []SelfServiceHook {
+func (p *Config) selfServiceHooks(key string) []SelfServiceHook {
 	var hooks []SelfServiceHook
 	if !p.p.Exists(key) {
 		return []SelfServiceHook{}
@@ -355,19 +355,19 @@ func (p *Provider) selfServiceHooks(key string) []SelfServiceHook {
 	return hooks
 }
 
-func (p *Provider) SelfServiceFlowLoginAfterHooks(strategy string) []SelfServiceHook {
+func (p *Config) SelfServiceFlowLoginAfterHooks(strategy string) []SelfServiceHook {
 	return p.selfServiceHooks(HookStrategyKey(ViperKeySelfServiceLoginAfter, strategy))
 }
 
-func (p *Provider) SelfServiceFlowSettingsAfterHooks(strategy string) []SelfServiceHook {
+func (p *Config) SelfServiceFlowSettingsAfterHooks(strategy string) []SelfServiceHook {
 	return p.selfServiceHooks(HookStrategyKey(ViperKeySelfServiceSettingsAfter, strategy))
 }
 
-func (p *Provider) SelfServiceFlowRegistrationAfterHooks(strategy string) []SelfServiceHook {
+func (p *Config) SelfServiceFlowRegistrationAfterHooks(strategy string) []SelfServiceHook {
 	return p.selfServiceHooks(HookStrategyKey(ViperKeySelfServiceRegistrationAfter, strategy))
 }
 
-func (p *Provider) SelfServiceStrategy(strategy string) *SelfServiceStrategy {
+func (p *Config) SelfServiceStrategy(strategy string) *SelfServiceStrategy {
 	config := "{}"
 	out, err := p.p.Marshal(kjson.Parser())
 	if err != nil {
@@ -403,7 +403,7 @@ func (p *Provider) SelfServiceStrategy(strategy string) *SelfServiceStrategy {
 	return s
 }
 
-func (p *Provider) SecretsDefault() [][]byte {
+func (p *Config) SecretsDefault() [][]byte {
 	secrets := p.p.Strings(ViperKeySecretsDefault)
 
 	if len(secrets) == 0 {
@@ -419,7 +419,7 @@ func (p *Provider) SecretsDefault() [][]byte {
 	return result
 }
 
-func (p *Provider) SecretsSession() [][]byte {
+func (p *Config) SecretsSession() [][]byte {
 	secrets := p.p.Strings(ViperKeySecretsCookie)
 	if len(secrets) == 0 {
 		return p.SecretsDefault()
@@ -433,11 +433,11 @@ func (p *Provider) SecretsSession() [][]byte {
 	return result
 }
 
-func (p *Provider) SelfServiceBrowserDefaultReturnTo() *url.URL {
+func (p *Config) SelfServiceBrowserDefaultReturnTo() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceBrowserDefaultReturnTo)
 }
 
-func (p *Provider) guessBaseURL(keyHost, keyPort string, defaultPort int) *url.URL {
+func (p *Config) guessBaseURL(keyHost, keyPort string, defaultPort int) *url.URL {
 	port := p.p.IntF(keyPort, defaultPort)
 
 	host := p.p.String(keyHost)
@@ -458,7 +458,7 @@ func (p *Provider) guessBaseURL(keyHost, keyPort string, defaultPort int) *url.U
 	return &guess
 }
 
-func (p *Provider) baseURL(keyURL, keyHost, keyPort string, defaultPort int) *url.URL {
+func (p *Config) baseURL(keyURL, keyHost, keyPort string, defaultPort int) *url.URL {
 	switch t := p.p.Get(keyURL).(type) {
 	case *url.URL:
 		return t
@@ -477,48 +477,48 @@ func (p *Provider) baseURL(keyURL, keyHost, keyPort string, defaultPort int) *ur
 	return p.guessBaseURL(keyHost, keyPort, defaultPort)
 }
 
-func (p *Provider) SelfPublicURL() *url.URL {
+func (p *Config) SelfPublicURL() *url.URL {
 	return p.baseURL(ViperKeyPublicBaseURL, ViperKeyPublicHost, ViperKeyPublicPort, 4433)
 }
 
-func (p *Provider) SelfAdminURL() *url.URL {
+func (p *Config) SelfAdminURL() *url.URL {
 	return p.baseURL(ViperKeyAdminBaseURL, ViperKeyAdminHost, ViperKeyAdminPort, 4434)
 }
 
-func (p *Provider) CourierSMTPURL() *url.URL {
+func (p *Config) CourierSMTPURL() *url.URL {
 	return p.parseURIOrFail(ViperKeyCourierSMTPURL)
 }
 
-func (p *Provider) SelfServiceFlowLoginUI() *url.URL {
+func (p *Config) SelfServiceFlowLoginUI() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceLoginUI)
 }
 
-func (p *Provider) SelfServiceFlowSettingsUI() *url.URL {
+func (p *Config) SelfServiceFlowSettingsUI() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceSettingsURL)
 }
 
-func (p *Provider) SelfServiceFlowErrorURL() *url.URL {
+func (p *Config) SelfServiceFlowErrorURL() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceErrorUI)
 }
 
-func (p *Provider) SelfServiceFlowRegistrationUI() *url.URL {
+func (p *Config) SelfServiceFlowRegistrationUI() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceRegistrationUI)
 }
 
-func (p *Provider) SelfServiceFlowRecoveryUI() *url.URL {
+func (p *Config) SelfServiceFlowRecoveryUI() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceRecoveryUI)
 }
 
 // SessionLifespan returns nil when the value is not set.
-func (p *Provider) SessionLifespan() time.Duration {
+func (p *Config) SessionLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySessionLifespan, time.Hour*24)
 }
 
-func (p *Provider) SessionPersistentCookie() bool {
+func (p *Config) SessionPersistentCookie() bool {
 	return p.p.Bool(ViperKeySessionPersistentCookie)
 }
 
-func (p *Provider) SelfServiceBrowserWhitelistedReturnToDomains() (us []url.URL) {
+func (p *Config) SelfServiceBrowserWhitelistedReturnToDomains() (us []url.URL) {
 	src := p.p.Strings(ViperKeyURLsWhitelistedReturnToDomains)
 	for k, u := range src {
 		if len(u) == 0 {
@@ -537,31 +537,31 @@ func (p *Provider) SelfServiceBrowserWhitelistedReturnToDomains() (us []url.URL)
 	return us
 }
 
-func (p *Provider) SelfServiceFlowLoginRequestLifespan() time.Duration {
+func (p *Config) SelfServiceFlowLoginRequestLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceLoginRequestLifespan, time.Hour)
 }
 
-func (p *Provider) SelfServiceFlowSettingsFlowLifespan() time.Duration {
+func (p *Config) SelfServiceFlowSettingsFlowLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceSettingsRequestLifespan, time.Hour)
 }
 
-func (p *Provider) SelfServiceFlowRegistrationRequestLifespan() time.Duration {
+func (p *Config) SelfServiceFlowRegistrationRequestLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceRegistrationRequestLifespan, time.Hour)
 }
 
-func (p *Provider) SelfServiceFlowLogoutRedirectURL() *url.URL {
+func (p *Config) SelfServiceFlowLogoutRedirectURL() *url.URL {
 	return p.p.RequestURIF(ViperKeySelfServiceLogoutBrowserDefaultReturnTo, p.SelfServiceBrowserDefaultReturnTo())
 }
 
-func (p *Provider) CourierSMTPFrom() string {
+func (p *Config) CourierSMTPFrom() string {
 	return p.p.StringF(ViperKeyCourierSMTPFrom, "noreply@kratos.ory.sh")
 }
 
-func (p *Provider) CourierTemplatesRoot() string {
+func (p *Config) CourierTemplatesRoot() string {
 	return p.p.StringF(ViperKeyCourierTemplatesPath, "/courier/template/templates")
 }
 
-func (p *Provider) parseURIOrFail(key string) *url.URL {
+func (p *Config) parseURIOrFail(key string) *url.URL {
 	u, err := url.ParseRequestURI(p.p.String(key))
 	if err != nil {
 		p.l.WithError(errors.WithStack(err)).
@@ -570,39 +570,39 @@ func (p *Provider) parseURIOrFail(key string) *url.URL {
 	return u
 }
 
-func (p *Provider) Tracing() *tracing.Config {
+func (p *Config) Tracing() *tracing.Config {
 	return p.p.TracingConfig("ORY Kratos")
 }
 
-func (p *Provider) IsInsecureDevMode() bool {
+func (p *Config) IsInsecureDevMode() bool {
 	return p.Source().Bool("dev")
 }
 
-func (p *Provider) SelfServiceFlowVerificationUI() *url.URL {
+func (p *Config) SelfServiceFlowVerificationUI() *url.URL {
 	return p.parseURIOrFail(ViperKeySelfServiceVerificationUI)
 }
 
-func (p *Provider) SelfServiceFlowVerificationRequestLifespan() time.Duration {
+func (p *Config) SelfServiceFlowVerificationRequestLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceVerificationRequestLifespan, time.Hour)
 }
 
-func (p *Provider) SelfServiceFlowVerificationReturnTo(defaultReturnTo *url.URL) *url.URL {
+func (p *Config) SelfServiceFlowVerificationReturnTo(defaultReturnTo *url.URL) *url.URL {
 	return p.p.RequestURIF(ViperKeySelfServiceVerificationBrowserDefaultReturnTo, defaultReturnTo)
 }
 
-func (p *Provider) SelfServiceFlowRecoveryReturnTo() *url.URL {
+func (p *Config) SelfServiceFlowRecoveryReturnTo() *url.URL {
 	return p.p.RequestURIF(ViperKeySelfServiceRecoveryBrowserDefaultReturnTo, p.SelfServiceBrowserDefaultReturnTo())
 }
 
-func (p *Provider) SelfServiceFlowRecoveryRequestLifespan() time.Duration {
+func (p *Config) SelfServiceFlowRecoveryRequestLifespan() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceRecoveryRequestLifespan, time.Hour)
 }
 
-func (p *Provider) SelfServiceFlowSettingsPrivilegedSessionMaxAge() time.Duration {
+func (p *Config) SelfServiceFlowSettingsPrivilegedSessionMaxAge() time.Duration {
 	return p.p.DurationF(ViperKeySelfServiceSettingsPrivilegedAuthenticationAfter, time.Hour)
 }
 
-func (p *Provider) SessionSameSiteMode() http.SameSite {
+func (p *Config) SessionSameSiteMode() http.SameSite {
 	switch p.p.StringF(ViperKeySessionSameSite, "Lax") {
 	case "Lax":
 		return http.SameSiteLaxMode
@@ -614,15 +614,15 @@ func (p *Provider) SessionSameSiteMode() http.SameSite {
 	return http.SameSiteDefaultMode
 }
 
-func (p *Provider) SelfServiceFlowLoginReturnTo(strategy string) *url.URL {
+func (p *Config) SelfServiceFlowLoginReturnTo(strategy string) *url.URL {
 	return p.selfServiceReturnTo(ViperKeySelfServiceLoginAfter, strategy)
 }
 
-func (p *Provider) SelfServiceFlowRegistrationReturnTo(strategy string) *url.URL {
+func (p *Config) SelfServiceFlowRegistrationReturnTo(strategy string) *url.URL {
 	return p.selfServiceReturnTo(ViperKeySelfServiceRegistrationAfter, strategy)
 }
 
-func (p *Provider) SelfServiceFlowSettingsReturnTo(strategy string, defaultReturnTo *url.URL) *url.URL {
+func (p *Config) SelfServiceFlowSettingsReturnTo(strategy string, defaultReturnTo *url.URL) *url.URL {
 	return p.p.RequestURIF(
 		ViperKeySelfServiceSettingsAfter+"."+strategy+"."+DefaultBrowserReturnURL,
 		p.p.RequestURIF(ViperKeySelfServiceSettingsAfter+"."+DefaultBrowserReturnURL,
@@ -631,7 +631,7 @@ func (p *Provider) SelfServiceFlowSettingsReturnTo(strategy string, defaultRetur
 	)
 }
 
-func (p *Provider) selfServiceReturnTo(key string, strategy string) *url.URL {
+func (p *Config) selfServiceReturnTo(key string, strategy string) *url.URL {
 	return p.p.RequestURIF(
 		key+"."+strategy+"."+DefaultBrowserReturnURL,
 		p.p.RequestURIF(key+"."+DefaultBrowserReturnURL,
@@ -640,12 +640,12 @@ func (p *Provider) selfServiceReturnTo(key string, strategy string) *url.URL {
 	)
 }
 
-func (p *Provider) ConfigVersion() string {
+func (p *Config) ConfigVersion() string {
 	return p.p.StringF(ViperKeyVersion, UnknownVersion)
 }
 
-func (p *Provider) PasswordPolicyConfig() *PasswordPolicyConfig {
-	return &PasswordPolicyConfig{
+func (p *Config) PasswordPolicyConfig() *PasswordPolicy {
+	return &PasswordPolicy{
 		MaxBreaches:         uint(p.p.Int(ViperKeyPasswordMaxBreaches)),
 		IgnoreNetworkErrors: p.p.BoolF(ViperKeyIgnoreNetworkErrors, true),
 	}
diff --git a/driver/registry.go b/driver/registry.go
index 673b60d17..178da8029 100644
--- a/driver/registry.go
+++ b/driver/registry.go
@@ -58,8 +58,8 @@ type Registry interface {
 	PrometheusManager() *prometheus.MetricsManager
 	Tracer(context.Context) *tracing.Tracer
 
-	config.Providers
-	WithConfig(c *config.Provider) Registry
+	config.Provider
+	WithConfig(c *config.Config) Registry
 
 	x.CSRFProvider
 	x.WriterProvider
@@ -131,7 +131,7 @@ type Registry interface {
 	x.CSRFTokenGeneratorProvider
 }
 
-func NewRegistryFromDSN(c *config.Provider, l *logrusx.Logger) (Registry, error) {
+func NewRegistryFromDSN(c *config.Config, l *logrusx.Logger) (Registry, error) {
 	driver, err := dbal.GetDriverFor(c.DSN())
 	if err != nil {
 		return nil, errors.WithStack(err)
diff --git a/driver/registry_default.go b/driver/registry_default.go
index 036f3867a..8c806ea02 100644
--- a/driver/registry_default.go
+++ b/driver/registry_default.go
@@ -57,7 +57,7 @@ type RegistryDefault struct {
 	rwl sync.RWMutex
 	l   *logrusx.Logger
 	a   *logrusx.Logger
-	c   *config.Provider
+	c   *config.Config
 
 	injectedSelfserviceHooks map[string]func(config.SelfServiceHook) interface{}
 
@@ -232,7 +232,7 @@ func (m *RegistryDefault) CSRFHandler() x.CSRFHandler {
 	return m.nosurf
 }
 
-func (m *RegistryDefault) Configuration(ctx context.Context) *config.Provider {
+func (m *RegistryDefault) Config(ctx context.Context) *config.Config {
 	if m.c == nil {
 		panic("configuration not set")
 	}
@@ -307,7 +307,7 @@ func (m *RegistryDefault) IdentityValidator() *identity.Validator {
 	return m.identityValidator
 }
 
-func (m *RegistryDefault) WithConfig(c *config.Provider) Registry {
+func (m *RegistryDefault) WithConfig(c *config.Config) Registry {
 	m.c = c
 	return m
 }
@@ -397,8 +397,8 @@ func (m *RegistryDefault) CookieManager() sessions.Store {
 
 func (m *RegistryDefault) ContinuityCookieManager(ctx context.Context) sessions.Store {
 	// To support hot reloading, this can not be instantiated only once.
-	cs := sessions.NewCookieStore(m.Configuration(ctx).SecretsSession()...)
-	cs.Options.Secure = !m.Configuration(ctx).IsInsecureDevMode()
+	cs := sessions.NewCookieStore(m.Config(ctx).SecretsSession()...)
+	cs.Options.Secure = !m.Config(ctx).IsInsecureDevMode()
 	cs.Options.HttpOnly = true
 	cs.Options.SameSite = http.SameSiteLaxMode
 	return cs
@@ -407,7 +407,7 @@ func (m *RegistryDefault) ContinuityCookieManager(ctx context.Context) sessions.
 func (m *RegistryDefault) Tracer(ctx context.Context) *tracing.Tracer {
 	if m.trc == nil {
 		// Tracing is initialized only once so it can not be hot reloaded or context-aware.
-		t, err := tracing.New(m.l, m.Configuration(ctx).Tracing())
+		t, err := tracing.New(m.l, m.Config(ctx).Tracing())
 		if err != nil {
 			m.Logger().WithError(err).Fatalf("Unable to initialize Tracer.")
 		}
@@ -454,7 +454,7 @@ func (m *RegistryDefault) Init(ctx context.Context) error {
 	bc.Reset()
 	return errors.WithStack(
 		backoff.Retry(func() error {
-			pool, idlePool, connMaxLifetime, cleanedDSN := sqlcon.ParseConnectionOptions(m.l, m.Configuration(ctx).DSN())
+			pool, idlePool, connMaxLifetime, cleanedDSN := sqlcon.ParseConnectionOptions(m.l, m.Config(ctx).DSN())
 			c, err := pop.NewConnection(&pop.ConnectionDetails{
 				URL:             sqlcon.FinalizeDSN(m.l, cleanedDSN),
 				IdlePool:        idlePool,
diff --git a/driver/registry_default_schemas.go b/driver/registry_default_schemas.go
index 1c9b8882d..fef57a799 100644
--- a/driver/registry_default_schemas.go
+++ b/driver/registry_default_schemas.go
@@ -8,7 +8,7 @@ import (
 )
 
 func (m *RegistryDefault) IdentityTraitsSchemas(ctx context.Context) schema.Schemas {
-	ms := m.Configuration(ctx).IdentityTraitsSchemas()
+	ms := m.Config(ctx).IdentityTraitsSchemas()
 	var ss schema.Schemas
 
 	for _, s := range ms {
diff --git a/hash/hasher_argon2.go b/hash/hasher_argon2.go
index 25fc1f911..f3e2505ea 100644
--- a/hash/hasher_argon2.go
+++ b/hash/hasher_argon2.go
@@ -26,7 +26,7 @@ type Argon2 struct {
 }
 
 type Argon2Configuration interface {
-	config.Providers
+	config.Provider
 }
 
 func NewHasherArgon2(c Argon2Configuration) *Argon2 {
@@ -34,7 +34,7 @@ func NewHasherArgon2(c Argon2Configuration) *Argon2 {
 }
 
 func (h *Argon2) Generate(ctx context.Context, password []byte) ([]byte, error) {
-	p := h.c.Configuration(ctx).HasherArgon2()
+	p := h.c.Config(ctx).HasherArgon2()
 
 	salt := make([]byte, p.SaltLength)
 	if _, err := rand.Read(salt); err != nil {
@@ -80,7 +80,7 @@ func (h *Argon2) Compare(ctx context.Context, password []byte, hash []byte) erro
 	return ErrMismatchedHashAndPassword
 }
 
-func decodeHash(encodedHash string) (p *config.HasherArgon2Config, salt, hash []byte, err error) {
+func decodeHash(encodedHash string) (p *config.Argon2, salt, hash []byte, err error) {
 	parts := strings.Split(encodedHash, "$")
 	if len(parts) != 6 {
 		return nil, nil, nil, ErrInvalidHash
@@ -95,7 +95,7 @@ func decodeHash(encodedHash string) (p *config.HasherArgon2Config, salt, hash []
 		return nil, nil, nil, ErrIncompatibleVersion
 	}
 
-	p = new(config.HasherArgon2Config)
+	p = new(config.Argon2)
 	_, err = fmt.Sscanf(parts[3], "m=%d,t=%d,p=%d", &p.Memory, &p.Iterations, &p.Parallelism)
 	if err != nil {
 		return nil, nil, nil, err
diff --git a/identity/handler.go b/identity/handler.go
index a154d0578..908165b58 100644
--- a/identity/handler.go
+++ b/identity/handler.go
@@ -23,7 +23,7 @@ type (
 		PrivilegedPoolProvider
 		ManagementProvider
 		x.WriterProvider
-		config.Providers
+		config.Provider
 	}
 	HandlerProvider interface {
 		IdentityHandler() *Handler
@@ -119,7 +119,7 @@ func (h *Handler) list(w http.ResponseWriter, r *http.Request, _ httprouter.Para
 		return
 	}
 
-	x.PaginationHeader(w, urlx.AppendPaths(h.r.Configuration(r.Context()).SelfAdminURL(), RouteBase), total, page, itemsPerPage)
+	x.PaginationHeader(w, urlx.AppendPaths(h.r.Config(r.Context()).SelfAdminURL(), RouteBase), total, page, itemsPerPage)
 	h.r.Writer().Write(w, r, is)
 }
 
@@ -221,7 +221,7 @@ func (h *Handler) create(w http.ResponseWriter, r *http.Request, _ httprouter.Pa
 
 	h.r.Writer().WriteCreated(w, r,
 		urlx.AppendPaths(
-			h.r.Configuration(r.Context()).SelfAdminURL(),
+			h.r.Config(r.Context()).SelfAdminURL(),
 			"identities",
 			i.ID.String(),
 		).String(),
diff --git a/identity/pool.go b/identity/pool.go
index 4297f968c..71e967008 100644
--- a/identity/pool.go
+++ b/identity/pool.go
@@ -86,7 +86,7 @@ type (
 	}
 )
 
-func TestPool(conf *config.Provider, p interface {
+func TestPool(conf *config.Config, p interface {
 	PrivilegedPool
 }) func(t *testing.T) {
 	ctx := context.Background()
@@ -104,7 +104,7 @@ func TestPool(conf *config.Provider, p interface {
 			RawURL: "file://./stub/identity-2.schema.json",
 		}
 		conf.MustSet(config.ViperKeyDefaultIdentitySchemaURL, defaultSchema.RawURL)
-		conf.MustSet(config.ViperKeyIdentitySchemas, []config.SchemaConfig{{
+		conf.MustSet(config.ViperKeyIdentitySchemas, []config.Schema{{
 			ID:  altSchema.ID,
 			URL: altSchema.RawURL,
 		}})
diff --git a/identity/validator.go b/identity/validator.go
index c066c3ade..365bfabf2 100644
--- a/identity/validator.go
+++ b/identity/validator.go
@@ -12,7 +12,7 @@ import (
 type (
 	validatorDependencies interface {
 		IdentityTraitsSchemas(ctx context.Context) schema.Schemas
-		config.Providers
+		config.Provider
 	}
 	Validator struct {
 		v *schema.Validator
@@ -49,7 +49,7 @@ func (v *Validator) ValidateWithRunner(ctx context.Context, i *Identity, runners
 func (v *Validator) Validate(ctx context.Context, i *Identity) error {
 	return v.ValidateWithRunner(ctx, i,
 		NewSchemaExtensionCredentials(i),
-		NewSchemaExtensionVerification(i, v.d.Configuration(ctx).SelfServiceFlowVerificationRequestLifespan()),
+		NewSchemaExtensionVerification(i, v.d.Config(ctx).SelfServiceFlowVerificationRequestLifespan()),
 		NewSchemaExtensionRecovery(i),
 	)
 }
diff --git a/internal/driver.go b/internal/driver.go
index 62b4852fc..8c327041a 100644
--- a/internal/driver.go
+++ b/internal/driver.go
@@ -26,7 +26,7 @@ func init() {
 	})
 }
 
-func NewConfigurationWithDefaults() *config.Provider {
+func NewConfigurationWithDefaults() *config.Config {
 	c := config.MustNew(logrusx.New("", ""),
 		configx.WithValues(map[string]interface{}{
 			"log.level":                                      "trace",
@@ -47,7 +47,7 @@ func NewConfigurationWithDefaults() *config.Provider {
 
 // NewFastRegistryWithMocks returns a registry with several mocks and an SQLite in memory database that make testing
 // easier and way faster. This suite does not work for e2e or advanced integration tests.
-func NewFastRegistryWithMocks(t *testing.T) (*config.Provider, *driver.RegistryDefault) {
+func NewFastRegistryWithMocks(t *testing.T) (*config.Config, *driver.RegistryDefault) {
 	conf, reg := NewRegistryDefaultWithDSN(t, "")
 	reg.WithCSRFTokenGenerator(x.FakeCSRFTokenGenerator)
 	reg.WithCSRFHandler(x.NewFakeCSRFHandler(""))
@@ -62,13 +62,13 @@ func NewFastRegistryWithMocks(t *testing.T) (*config.Provider, *driver.RegistryD
 }
 
 // NewRegistryDefaultWithDSN returns a more standard registry without mocks. Good for e2e and advanced integration testing!
-func NewRegistryDefaultWithDSN(t *testing.T, dsn string) (*config.Provider, *driver.RegistryDefault) {
+func NewRegistryDefaultWithDSN(t *testing.T, dsn string) (*config.Config, *driver.RegistryDefault) {
 	c := NewConfigurationWithDefaults()
 	c.MustSet(config.ViperKeyDSN, stringsx.Coalesce(dsn, dbal.InMemoryDSN))
 
 	reg, err := driver.NewRegistryFromDSN(c, logrusx.New("", ""))
 	require.NoError(t, err)
-	reg.Configuration(context.Background()).MustSet("dev", true)
+	reg.Config(context.Background()).MustSet("dev", true)
 	require.NoError(t, reg.Init(context.Background()))
 	return c, reg.(*driver.RegistryDefault)
 }
diff --git a/internal/httpclient/client/admin/create_identity_responses.go b/internal/httpclient/client/admin/create_identity_responses.go
index 5369302dc..5ad478a57 100644
--- a/internal/httpclient/client/admin/create_identity_responses.go
+++ b/internal/httpclient/client/admin/create_identity_responses.go
@@ -49,7 +49,7 @@ func (o *CreateIdentityReader) ReadResponse(response runtime.ClientResponse, con
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/create_recovery_link_responses.go b/internal/httpclient/client/admin/create_recovery_link_responses.go
index 196a9adab..cdc7b9a3f 100644
--- a/internal/httpclient/client/admin/create_recovery_link_responses.go
+++ b/internal/httpclient/client/admin/create_recovery_link_responses.go
@@ -49,7 +49,7 @@ func (o *CreateRecoveryLinkReader) ReadResponse(response runtime.ClientResponse,
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/delete_identity_responses.go b/internal/httpclient/client/admin/delete_identity_responses.go
index 90b2522bf..eeb8be28f 100644
--- a/internal/httpclient/client/admin/delete_identity_responses.go
+++ b/internal/httpclient/client/admin/delete_identity_responses.go
@@ -43,7 +43,7 @@ func (o *DeleteIdentityReader) ReadResponse(response runtime.ClientResponse, con
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/get_identity_responses.go b/internal/httpclient/client/admin/get_identity_responses.go
index 84830370e..89ce7c120 100644
--- a/internal/httpclient/client/admin/get_identity_responses.go
+++ b/internal/httpclient/client/admin/get_identity_responses.go
@@ -43,7 +43,7 @@ func (o *GetIdentityReader) ReadResponse(response runtime.ClientResponse, consum
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/list_identities_responses.go b/internal/httpclient/client/admin/list_identities_responses.go
index fbd5661a1..a0c151c13 100644
--- a/internal/httpclient/client/admin/list_identities_responses.go
+++ b/internal/httpclient/client/admin/list_identities_responses.go
@@ -37,7 +37,7 @@ func (o *ListIdentitiesReader) ReadResponse(response runtime.ClientResponse, con
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/prometheus_responses.go b/internal/httpclient/client/admin/prometheus_responses.go
index 5fbd6ed70..aee4fb328 100644
--- a/internal/httpclient/client/admin/prometheus_responses.go
+++ b/internal/httpclient/client/admin/prometheus_responses.go
@@ -28,7 +28,7 @@ func (o *PrometheusReader) ReadResponse(response runtime.ClientResponse, consume
 		return result, nil
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/admin/update_identity_responses.go b/internal/httpclient/client/admin/update_identity_responses.go
index e2e431ed2..05c7f6a20 100644
--- a/internal/httpclient/client/admin/update_identity_responses.go
+++ b/internal/httpclient/client/admin/update_identity_responses.go
@@ -49,7 +49,7 @@ func (o *UpdateIdentityReader) ReadResponse(response runtime.ClientResponse, con
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/health/is_instance_alive_responses.go b/internal/httpclient/client/health/is_instance_alive_responses.go
index 5b1962970..6a877735a 100644
--- a/internal/httpclient/client/health/is_instance_alive_responses.go
+++ b/internal/httpclient/client/health/is_instance_alive_responses.go
@@ -37,7 +37,7 @@ func (o *IsInstanceAliveReader) ReadResponse(response runtime.ClientResponse, co
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/health/is_instance_ready_responses.go b/internal/httpclient/client/health/is_instance_ready_responses.go
index 7567a925a..44fc28620 100644
--- a/internal/httpclient/client/health/is_instance_ready_responses.go
+++ b/internal/httpclient/client/health/is_instance_ready_responses.go
@@ -37,7 +37,7 @@ func (o *IsInstanceReadyReader) ReadResponse(response runtime.ClientResponse, co
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_browser_settings_o_id_c_settings_flow_responses.go b/internal/httpclient/client/public/complete_self_service_browser_settings_o_id_c_settings_flow_responses.go
index 817fd4f63..4a758ae18 100644
--- a/internal/httpclient/client/public/complete_self_service_browser_settings_o_id_c_settings_flow_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_browser_settings_o_id_c_settings_flow_responses.go
@@ -37,7 +37,7 @@ func (o *CompleteSelfServiceBrowserSettingsOIDCSettingsFlowReader) ReadResponse(
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_login_flow_with_password_method_responses.go b/internal/httpclient/client/public/complete_self_service_login_flow_with_password_method_responses.go
index 72cc863af..e1ac560e8 100644
--- a/internal/httpclient/client/public/complete_self_service_login_flow_with_password_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_login_flow_with_password_method_responses.go
@@ -49,7 +49,7 @@ func (o *CompleteSelfServiceLoginFlowWithPasswordMethodReader) ReadResponse(resp
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_recovery_flow_with_link_method_responses.go b/internal/httpclient/client/public/complete_self_service_recovery_flow_with_link_method_responses.go
index 9c2aba5a8..eb47699cf 100644
--- a/internal/httpclient/client/public/complete_self_service_recovery_flow_with_link_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_recovery_flow_with_link_method_responses.go
@@ -43,7 +43,7 @@ func (o *CompleteSelfServiceRecoveryFlowWithLinkMethodReader) ReadResponse(respo
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_registration_flow_with_password_method_responses.go b/internal/httpclient/client/public/complete_self_service_registration_flow_with_password_method_responses.go
index ae09dcc7b..ff49c9296 100644
--- a/internal/httpclient/client/public/complete_self_service_registration_flow_with_password_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_registration_flow_with_password_method_responses.go
@@ -49,7 +49,7 @@ func (o *CompleteSelfServiceRegistrationFlowWithPasswordMethodReader) ReadRespon
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_settings_flow_with_password_method_responses.go b/internal/httpclient/client/public/complete_self_service_settings_flow_with_password_method_responses.go
index 9c5d39f3a..4f59b8e92 100644
--- a/internal/httpclient/client/public/complete_self_service_settings_flow_with_password_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_settings_flow_with_password_method_responses.go
@@ -61,7 +61,7 @@ func (o *CompleteSelfServiceSettingsFlowWithPasswordMethodReader) ReadResponse(r
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_settings_flow_with_profile_method_responses.go b/internal/httpclient/client/public/complete_self_service_settings_flow_with_profile_method_responses.go
index 402652f97..04411685b 100644
--- a/internal/httpclient/client/public/complete_self_service_settings_flow_with_profile_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_settings_flow_with_profile_method_responses.go
@@ -61,7 +61,7 @@ func (o *CompleteSelfServiceSettingsFlowWithProfileMethodReader) ReadResponse(re
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/complete_self_service_verification_flow_with_link_method_responses.go b/internal/httpclient/client/public/complete_self_service_verification_flow_with_link_method_responses.go
index 1dd39260f..ebe7d2293 100644
--- a/internal/httpclient/client/public/complete_self_service_verification_flow_with_link_method_responses.go
+++ b/internal/httpclient/client/public/complete_self_service_verification_flow_with_link_method_responses.go
@@ -43,7 +43,7 @@ func (o *CompleteSelfServiceVerificationFlowWithLinkMethodReader) ReadResponse(r
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_schema_responses.go b/internal/httpclient/client/public/get_schema_responses.go
index d8262af61..c2db66aeb 100644
--- a/internal/httpclient/client/public/get_schema_responses.go
+++ b/internal/httpclient/client/public/get_schema_responses.go
@@ -43,7 +43,7 @@ func (o *GetSchemaReader) ReadResponse(response runtime.ClientResponse, consumer
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_error_responses.go b/internal/httpclient/client/public/get_self_service_error_responses.go
index 03aa290c7..9964a2036 100644
--- a/internal/httpclient/client/public/get_self_service_error_responses.go
+++ b/internal/httpclient/client/public/get_self_service_error_responses.go
@@ -49,7 +49,7 @@ func (o *GetSelfServiceErrorReader) ReadResponse(response runtime.ClientResponse
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_login_flow_responses.go b/internal/httpclient/client/public/get_self_service_login_flow_responses.go
index dd46573ba..3a6db9f53 100644
--- a/internal/httpclient/client/public/get_self_service_login_flow_responses.go
+++ b/internal/httpclient/client/public/get_self_service_login_flow_responses.go
@@ -55,7 +55,7 @@ func (o *GetSelfServiceLoginFlowReader) ReadResponse(response runtime.ClientResp
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_recovery_flow_responses.go b/internal/httpclient/client/public/get_self_service_recovery_flow_responses.go
index dfd1c4571..334da4095 100644
--- a/internal/httpclient/client/public/get_self_service_recovery_flow_responses.go
+++ b/internal/httpclient/client/public/get_self_service_recovery_flow_responses.go
@@ -49,7 +49,7 @@ func (o *GetSelfServiceRecoveryFlowReader) ReadResponse(response runtime.ClientR
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_registration_flow_responses.go b/internal/httpclient/client/public/get_self_service_registration_flow_responses.go
index e7b6910ed..80501824a 100644
--- a/internal/httpclient/client/public/get_self_service_registration_flow_responses.go
+++ b/internal/httpclient/client/public/get_self_service_registration_flow_responses.go
@@ -55,7 +55,7 @@ func (o *GetSelfServiceRegistrationFlowReader) ReadResponse(response runtime.Cli
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_settings_flow_responses.go b/internal/httpclient/client/public/get_self_service_settings_flow_responses.go
index 192118af0..c0bfa849c 100644
--- a/internal/httpclient/client/public/get_self_service_settings_flow_responses.go
+++ b/internal/httpclient/client/public/get_self_service_settings_flow_responses.go
@@ -55,7 +55,7 @@ func (o *GetSelfServiceSettingsFlowReader) ReadResponse(response runtime.ClientR
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/get_self_service_verification_flow_responses.go b/internal/httpclient/client/public/get_self_service_verification_flow_responses.go
index 4a7a09918..f3ffd237a 100644
--- a/internal/httpclient/client/public/get_self_service_verification_flow_responses.go
+++ b/internal/httpclient/client/public/get_self_service_verification_flow_responses.go
@@ -49,7 +49,7 @@ func (o *GetSelfServiceVerificationFlowReader) ReadResponse(response runtime.Cli
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_browser_logout_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_browser_logout_flow_responses.go
index 2bc3bd263..ab3a5a9f4 100644
--- a/internal/httpclient/client/public/initialize_self_service_browser_logout_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_browser_logout_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceBrowserLogoutFlowReader) ReadResponse(response run
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_login_via_api_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_login_via_api_flow_responses.go
index fdf98e94d..58ec1b2e9 100644
--- a/internal/httpclient/client/public/initialize_self_service_login_via_api_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_login_via_api_flow_responses.go
@@ -43,7 +43,7 @@ func (o *InitializeSelfServiceLoginViaAPIFlowReader) ReadResponse(response runti
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_login_via_browser_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_login_via_browser_flow_responses.go
index ee0b46025..aa2934712 100644
--- a/internal/httpclient/client/public/initialize_self_service_login_via_browser_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_login_via_browser_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceLoginViaBrowserFlowReader) ReadResponse(response r
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_recovery_via_api_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_recovery_via_api_flow_responses.go
index e234231f4..44b062ade 100644
--- a/internal/httpclient/client/public/initialize_self_service_recovery_via_api_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_recovery_via_api_flow_responses.go
@@ -43,7 +43,7 @@ func (o *InitializeSelfServiceRecoveryViaAPIFlowReader) ReadResponse(response ru
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_recovery_via_browser_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_recovery_via_browser_flow_responses.go
index f40c1957c..48c9e9714 100644
--- a/internal/httpclient/client/public/initialize_self_service_recovery_via_browser_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_recovery_via_browser_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceRecoveryViaBrowserFlowReader) ReadResponse(respons
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_registration_via_api_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_registration_via_api_flow_responses.go
index 88d3021ff..2e12cf173 100644
--- a/internal/httpclient/client/public/initialize_self_service_registration_via_api_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_registration_via_api_flow_responses.go
@@ -43,7 +43,7 @@ func (o *InitializeSelfServiceRegistrationViaAPIFlowReader) ReadResponse(respons
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_registration_via_browser_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_registration_via_browser_flow_responses.go
index 7dcd4faef..a9bc4f6db 100644
--- a/internal/httpclient/client/public/initialize_self_service_registration_via_browser_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_registration_via_browser_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceRegistrationViaBrowserFlowReader) ReadResponse(res
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_settings_via_api_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_settings_via_api_flow_responses.go
index 6d9574393..c2a26fefa 100644
--- a/internal/httpclient/client/public/initialize_self_service_settings_via_api_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_settings_via_api_flow_responses.go
@@ -43,7 +43,7 @@ func (o *InitializeSelfServiceSettingsViaAPIFlowReader) ReadResponse(response ru
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_settings_via_browser_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_settings_via_browser_flow_responses.go
index f854fbaa6..0fce7fb30 100644
--- a/internal/httpclient/client/public/initialize_self_service_settings_via_browser_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_settings_via_browser_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceSettingsViaBrowserFlowReader) ReadResponse(respons
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_verification_via_api_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_verification_via_api_flow_responses.go
index f7fc422af..871bc337b 100644
--- a/internal/httpclient/client/public/initialize_self_service_verification_via_api_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_verification_via_api_flow_responses.go
@@ -43,7 +43,7 @@ func (o *InitializeSelfServiceVerificationViaAPIFlowReader) ReadResponse(respons
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/initialize_self_service_verification_via_browser_flow_responses.go b/internal/httpclient/client/public/initialize_self_service_verification_via_browser_flow_responses.go
index fe0cc1891..549b8d792 100644
--- a/internal/httpclient/client/public/initialize_self_service_verification_via_browser_flow_responses.go
+++ b/internal/httpclient/client/public/initialize_self_service_verification_via_browser_flow_responses.go
@@ -37,7 +37,7 @@ func (o *InitializeSelfServiceVerificationViaBrowserFlowReader) ReadResponse(res
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/revoke_session_responses.go b/internal/httpclient/client/public/revoke_session_responses.go
index 4e135d111..e6b5ed4cf 100644
--- a/internal/httpclient/client/public/revoke_session_responses.go
+++ b/internal/httpclient/client/public/revoke_session_responses.go
@@ -43,7 +43,7 @@ func (o *RevokeSessionReader) ReadResponse(response runtime.ClientResponse, cons
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/public/whoami_responses.go b/internal/httpclient/client/public/whoami_responses.go
index 23a1862e6..b367c4289 100644
--- a/internal/httpclient/client/public/whoami_responses.go
+++ b/internal/httpclient/client/public/whoami_responses.go
@@ -43,7 +43,7 @@ func (o *WhoamiReader) ReadResponse(response runtime.ClientResponse, consumer ru
 		return nil, result
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/client/version/get_version_responses.go b/internal/httpclient/client/version/get_version_responses.go
index 7a78ee417..6d22a417d 100644
--- a/internal/httpclient/client/version/get_version_responses.go
+++ b/internal/httpclient/client/version/get_version_responses.go
@@ -31,7 +31,7 @@ func (o *GetVersionReader) ReadResponse(response runtime.ClientResponse, consume
 		return result, nil
 
 	default:
-		return nil, runtime.NewAPIError("unknown error", response, response.Code())
+		return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
 	}
 }
 
diff --git a/internal/httpclient/go.sum b/internal/httpclient/go.sum
deleted file mode 100644
index 4b696fb5e..000000000
--- a/internal/httpclient/go.sum
+++ /dev/null
@@ -1,278 +0,0 @@
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
-github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
-github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
-github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
-github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
-github.com/go-openapi/analysis v0.19.16 h1:Ub9e++M8sDwtHD+S587TYi+6ANBG1NRYGZDihqk0SaY=
-github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk=
-github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/errors v0.19.9 h1:9SnKdGhiPZHF3ttwFMiCBEb8jQ4IDdrK+5+a0oTygA4=
-github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
-github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
-github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
-github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
-github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
-github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
-github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
-github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
-github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
-github.com/go-openapi/loads v0.20.0 h1:Pymw1O8zDmWeNv4kVsHd0W3cvgdp8juRa4U/U/8D/Pk=
-github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4=
-github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
-github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98=
-github.com/go-openapi/runtime v0.19.24 h1:TqagMVlRAOTwllE/7hNKx6rQ10O6T8ZzeJdMjSTKaD4=
-github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk=
-github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
-github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
-github.com/go-openapi/spec v0.20.0 h1:HGLc8AJ7ynOxwv0Lq4TsnwLsWMawHAYiJIFzbcML86I=
-github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
-github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
-github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
-github.com/go-openapi/strfmt v0.19.11 h1:0+YvbNh05rmBkgztd6zHp4OCFn7Mtu30bn46NQo2ZRw=
-github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc=
-github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/swag v0.19.12 h1:Bc0bnY2c3AoF7Gc+IMIAQQsD8fLHjHpc19wXvYuayQI=
-github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
-github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
-github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
-github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4=
-github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI=
-github.com/go-openapi/validate v0.20.0 h1:pzutNCCBZGZlE+u8HD3JZyWdc/TVbtVwlWUp8/vgUKk=
-github.com/go-openapi/validate v0.20.0/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0=
-github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
-github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
-github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
-github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
-github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
-github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
-github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
-github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
-github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
-github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
-github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
-github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
-github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
-github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
-github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
-github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
-github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
-github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
-github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
-github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
-github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
-github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
-github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
-github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
-github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
-github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
-go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
-go.mongodb.org/mongo-driver v1.4.4 h1:bsPHfODES+/yx2PCWzUYMH8xj6PVniPI8DQrsJuSXSs=
-go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
-golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
-golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal/httpclient/models/complete_self_service_login_flow_with_password_method.go b/internal/httpclient/models/complete_self_service_login_flow_with_password_method.go
index ef375e4a9..bfb2dba11 100644
--- a/internal/httpclient/models/complete_self_service_login_flow_with_password_method.go
+++ b/internal/httpclient/models/complete_self_service_login_flow_with_password_method.go
@@ -10,7 +10,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod complete self service login flow with password method
+// CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod CompleteSelfServiceLoginFlowWithPasswordMethod complete self service login flow with password method
 //
 // swagger:model CompleteSelfServiceLoginFlowWithPasswordMethod
 type CompleteSelfServiceLoginFlowWithPasswordMethod struct {
diff --git a/internal/httpclient/models/complete_self_service_recovery_flow_with_link_method.go b/internal/httpclient/models/complete_self_service_recovery_flow_with_link_method.go
index 1057f0394..d23146a82 100644
--- a/internal/httpclient/models/complete_self_service_recovery_flow_with_link_method.go
+++ b/internal/httpclient/models/complete_self_service_recovery_flow_with_link_method.go
@@ -10,7 +10,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod complete self service recovery flow with link method
+// CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod CompleteSelfServiceRecoveryFlowWithLinkMethod complete self service recovery flow with link method
 //
 // swagger:model completeSelfServiceRecoveryFlowWithLinkMethod
 type CompleteSelfServiceRecoveryFlowWithLinkMethod struct {
diff --git a/internal/httpclient/models/complete_self_service_settings_flow_with_password_method.go b/internal/httpclient/models/complete_self_service_settings_flow_with_password_method.go
index 8e8659178..312b3478b 100644
--- a/internal/httpclient/models/complete_self_service_settings_flow_with_password_method.go
+++ b/internal/httpclient/models/complete_self_service_settings_flow_with_password_method.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod complete self service settings flow with password method
+// CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod CompleteSelfServiceSettingsFlowWithPasswordMethod complete self service settings flow with password method
 //
 // swagger:model CompleteSelfServiceSettingsFlowWithPasswordMethod
 type CompleteSelfServiceSettingsFlowWithPasswordMethod struct {
diff --git a/internal/httpclient/models/complete_self_service_verification_flow_with_link_method.go b/internal/httpclient/models/complete_self_service_verification_flow_with_link_method.go
index 032ec228b..a9caa0fab 100644
--- a/internal/httpclient/models/complete_self_service_verification_flow_with_link_method.go
+++ b/internal/httpclient/models/complete_self_service_verification_flow_with_link_method.go
@@ -10,7 +10,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod complete self service verification flow with link method
+// CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod CompleteSelfServiceVerificationFlowWithLinkMethod complete self service verification flow with link method
 //
 // swagger:model completeSelfServiceVerificationFlowWithLinkMethod
 type CompleteSelfServiceVerificationFlowWithLinkMethod struct {
diff --git a/internal/httpclient/models/create_identity.go b/internal/httpclient/models/create_identity.go
index 93a71be91..8d71ad139 100644
--- a/internal/httpclient/models/create_identity.go
+++ b/internal/httpclient/models/create_identity.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// CreateIdentity CreateIdentity CreateIdentity CreateIdentity create identity
+// CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity CreateIdentity create identity
 //
 // swagger:model CreateIdentity
 type CreateIdentity struct {
diff --git a/internal/httpclient/models/create_recovery_link.go b/internal/httpclient/models/create_recovery_link.go
index 781471260..d7148b20e 100644
--- a/internal/httpclient/models/create_recovery_link.go
+++ b/internal/httpclient/models/create_recovery_link.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink create recovery link
+// CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink CreateRecoveryLink create recovery link
 //
 // swagger:model CreateRecoveryLink
 type CreateRecoveryLink struct {
diff --git a/internal/httpclient/models/form_field.go b/internal/httpclient/models/form_field.go
index a51875d7f..89b99485f 100644
--- a/internal/httpclient/models/form_field.go
+++ b/internal/httpclient/models/form_field.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// FormField Field represents a HTML Form Field
+// FormField FormField Field represents a HTML Form Field
 //
 // swagger:model formField
 type FormField struct {
diff --git a/internal/httpclient/models/form_fields.go b/internal/httpclient/models/form_fields.go
index 9a28d1c13..89cb25d23 100644
--- a/internal/httpclient/models/form_fields.go
+++ b/internal/httpclient/models/form_fields.go
@@ -13,7 +13,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// FormFields Fields contains multiple fields
+// FormFields FormFields Fields contains multiple fields
 //
 // swagger:model formFields
 type FormFields []*FormField
diff --git a/internal/httpclient/models/generic_error.go b/internal/httpclient/models/generic_error.go
index 0582f957a..31b9bdc2c 100644
--- a/internal/httpclient/models/generic_error.go
+++ b/internal/httpclient/models/generic_error.go
@@ -11,7 +11,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// GenericError Error response
+// GenericError GenericError GenericError Error response
 //
 // Error responses are sent when an error (e.g. unauthorized, bad request, ...) occurred.
 //
diff --git a/internal/httpclient/models/generic_error_payload.go b/internal/httpclient/models/generic_error_payload.go
index 0064493a2..9289f3a4a 100644
--- a/internal/httpclient/models/generic_error_payload.go
+++ b/internal/httpclient/models/generic_error_payload.go
@@ -10,7 +10,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload generic error payload
+// GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload GenericErrorPayload generic error payload
 //
 // swagger:model genericErrorPayload
 type GenericErrorPayload struct {
diff --git a/internal/httpclient/models/id.go b/internal/httpclient/models/id.go
index 348e9e097..b97d7d977 100644
--- a/internal/httpclient/models/id.go
+++ b/internal/httpclient/models/id.go
@@ -9,7 +9,7 @@ import (
 	"github.com/go-openapi/strfmt"
 )
 
-// ID ID ID ID ID
+// ID ID ID ID ID ID ID ID ID ID
 //
 // swagger:model ID
 type ID int64
diff --git a/internal/httpclient/models/identity.go b/internal/httpclient/models/identity.go
index 8522d2508..d36b8f852 100644
--- a/internal/httpclient/models/identity.go
+++ b/internal/httpclient/models/identity.go
@@ -14,7 +14,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// Identity Identity Identity Identity identity
+// Identity Identity Identity Identity Identity Identity Identity Identity Identity identity
 //
 // swagger:model Identity
 type Identity struct {
diff --git a/internal/httpclient/models/login_flow.go b/internal/httpclient/models/login_flow.go
index f3fe88ff0..fca3208d5 100644
--- a/internal/httpclient/models/login_flow.go
+++ b/internal/httpclient/models/login_flow.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// LoginFlow LoginFlow Login Flow
+// LoginFlow Login Flow
 //
 // This object represents a login flow. A login flow is initiated at the "Initiate Login API / Browser Flow"
 // endpoint by a client.
diff --git a/internal/httpclient/models/login_flow_method.go b/internal/httpclient/models/login_flow_method.go
index 65ecd685b..0682ff812 100644
--- a/internal/httpclient/models/login_flow_method.go
+++ b/internal/httpclient/models/login_flow_method.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// LoginFlowMethod LoginFlowMethod LoginFlowMethod login flow method
+// LoginFlowMethod login flow method
 //
 // swagger:model loginFlowMethod
 type LoginFlowMethod struct {
diff --git a/internal/httpclient/models/login_flow_method_config.go b/internal/httpclient/models/login_flow_method_config.go
index 6c51d8d32..0968f14b8 100644
--- a/internal/httpclient/models/login_flow_method_config.go
+++ b/internal/httpclient/models/login_flow_method_config.go
@@ -14,7 +14,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// LoginFlowMethodConfig LoginFlowMethodConfig login flow method config
+// LoginFlowMethodConfig login flow method config
 //
 // swagger:model loginFlowMethodConfig
 type LoginFlowMethodConfig struct {
diff --git a/internal/httpclient/models/message.go b/internal/httpclient/models/message.go
index f3a7f3144..0c7659cd7 100644
--- a/internal/httpclient/models/message.go
+++ b/internal/httpclient/models/message.go
@@ -11,7 +11,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// Message Message Message Message message
+// Message Message Message Message Message Message Message Message Message message
 //
 // swagger:model Message
 type Message struct {
diff --git a/internal/httpclient/models/messages.go b/internal/httpclient/models/messages.go
index f8cdd8044..ff5f361ce 100644
--- a/internal/httpclient/models/messages.go
+++ b/internal/httpclient/models/messages.go
@@ -13,7 +13,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// Messages Messages Messages Messages messages
+// Messages Messages Messages Messages Messages Messages Messages Messages Messages messages
 //
 // swagger:model Messages
 type Messages []*Message
diff --git a/internal/httpclient/models/recovery_address.go b/internal/httpclient/models/recovery_address.go
index f03e6612e..76313dd39 100644
--- a/internal/httpclient/models/recovery_address.go
+++ b/internal/httpclient/models/recovery_address.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress recovery address
+// RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress RecoveryAddress recovery address
 //
 // swagger:model RecoveryAddress
 type RecoveryAddress struct {
diff --git a/internal/httpclient/models/recovery_address_type.go b/internal/httpclient/models/recovery_address_type.go
index 498a23e44..eb3b24c1b 100644
--- a/internal/httpclient/models/recovery_address_type.go
+++ b/internal/httpclient/models/recovery_address_type.go
@@ -9,7 +9,7 @@ import (
 	"github.com/go-openapi/strfmt"
 )
 
-// RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType recovery address type
+// RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType RecoveryAddressType recovery address type
 //
 // swagger:model RecoveryAddressType
 type RecoveryAddressType string
diff --git a/internal/httpclient/models/recovery_flow.go b/internal/httpclient/models/recovery_flow.go
index 7322e8abe..8c75ef44f 100644
--- a/internal/httpclient/models/recovery_flow.go
+++ b/internal/httpclient/models/recovery_flow.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RecoveryFlow RecoveryFlow A Recovery Flow
+// RecoveryFlow A Recovery Flow
 //
 // This request is used when an identity wants to recover their account.
 //
diff --git a/internal/httpclient/models/recovery_flow_method.go b/internal/httpclient/models/recovery_flow_method.go
index 7f3c414c2..e93df2082 100644
--- a/internal/httpclient/models/recovery_flow_method.go
+++ b/internal/httpclient/models/recovery_flow_method.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RecoveryFlowMethod RecoveryFlowMethod RecoveryFlowMethod RecoveryFlowMethod recovery flow method
+// RecoveryFlowMethod recovery flow method
 //
 // swagger:model recoveryFlowMethod
 type RecoveryFlowMethod struct {
diff --git a/internal/httpclient/models/recovery_flow_method_config.go b/internal/httpclient/models/recovery_flow_method_config.go
index fe03fe9ad..38014cc3f 100644
--- a/internal/httpclient/models/recovery_flow_method_config.go
+++ b/internal/httpclient/models/recovery_flow_method_config.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RecoveryFlowMethodConfig RecoveryFlowMethodConfig recovery flow method config
+// RecoveryFlowMethodConfig RecoveryFlowMethodConfig RecoveryFlowMethodConfig RecoveryFlowMethodConfig recovery flow method config
 //
 // swagger:model recoveryFlowMethodConfig
 type RecoveryFlowMethodConfig struct {
diff --git a/internal/httpclient/models/recovery_link.go b/internal/httpclient/models/recovery_link.go
index 5991ffc5f..1b75ceac2 100644
--- a/internal/httpclient/models/recovery_link.go
+++ b/internal/httpclient/models/recovery_link.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RecoveryLink recovery link
+// RecoveryLink RecoveryLink recovery link
 //
 // swagger:model recoveryLink
 type RecoveryLink struct {
@@ -21,6 +21,7 @@ type RecoveryLink struct {
 	//
 	// The timestamp when the recovery link expires.
 	// Format: date-time
+	// Format: date-time
 	ExpiresAt strfmt.DateTime `json:"expires_at,omitempty"`
 
 	// Recovery Link
diff --git a/internal/httpclient/models/registration_flow_method_config.go b/internal/httpclient/models/registration_flow_method_config.go
index f083ec81a..ad59c703f 100644
--- a/internal/httpclient/models/registration_flow_method_config.go
+++ b/internal/httpclient/models/registration_flow_method_config.go
@@ -14,7 +14,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RegistrationFlowMethodConfig RegistrationFlowMethodConfig RegistrationFlowMethodConfig registration flow method config
+// RegistrationFlowMethodConfig registration flow method config
 //
 // swagger:model registrationFlowMethodConfig
 type RegistrationFlowMethodConfig struct {
diff --git a/internal/httpclient/models/registration_via_api_response.go b/internal/httpclient/models/registration_via_api_response.go
index b2ab4f250..df08c20f4 100644
--- a/internal/httpclient/models/registration_via_api_response.go
+++ b/internal/httpclient/models/registration_via_api_response.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RegistrationViaAPIResponse RegistrationViaAPIResponse The Response for Registration Flows via API
+// RegistrationViaAPIResponse RegistrationViaAPIResponse RegistrationViaAPIResponse The Response for Registration Flows via API
 //
 // swagger:model registrationViaApiResponse
 type RegistrationViaAPIResponse struct {
diff --git a/internal/httpclient/models/revoke_session.go b/internal/httpclient/models/revoke_session.go
index c4349499c..dae35d7d9 100644
--- a/internal/httpclient/models/revoke_session.go
+++ b/internal/httpclient/models/revoke_session.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// RevokeSession RevokeSession RevokeSession RevokeSession revoke session
+// RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession RevokeSession revoke session
 //
 // swagger:model revokeSession
 type RevokeSession struct {
diff --git a/internal/httpclient/models/session.go b/internal/httpclient/models/session.go
index 18d01d09f..fd84a7c0a 100644
--- a/internal/httpclient/models/session.go
+++ b/internal/httpclient/models/session.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// Session Session Session Session session
+// Session session
 //
 // swagger:model session
 type Session struct {
diff --git a/internal/httpclient/models/settings_flow.go b/internal/httpclient/models/settings_flow.go
index 521dfb9bf..700f7d16a 100644
--- a/internal/httpclient/models/settings_flow.go
+++ b/internal/httpclient/models/settings_flow.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// SettingsFlow Flow represents a Settings Flow
+// SettingsFlow SettingsFlow Flow represents a Settings Flow
 //
 // This flow is used when an identity wants to update settings
 // (e.g. profile data, passwords, ...) in a selfservice manner.
diff --git a/internal/httpclient/models/settings_via_api_response.go b/internal/httpclient/models/settings_via_api_response.go
index 83a82b52f..67f3f9517 100644
--- a/internal/httpclient/models/settings_via_api_response.go
+++ b/internal/httpclient/models/settings_via_api_response.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// SettingsViaAPIResponse SettingsViaAPIResponse The Response for Settings Flows via API
+// SettingsViaAPIResponse The Response for Settings Flows via API
 //
 // swagger:model settingsViaApiResponse
 type SettingsViaAPIResponse struct {
diff --git a/internal/httpclient/models/state.go b/internal/httpclient/models/state.go
index 601bc17e5..15d19066d 100644
--- a/internal/httpclient/models/state.go
+++ b/internal/httpclient/models/state.go
@@ -9,7 +9,7 @@ import (
 	"github.com/go-openapi/strfmt"
 )
 
-// State State State State state
+// State State State State State State State State State state
 //
 // swagger:model State
 type State string
diff --git a/internal/httpclient/models/traits.go b/internal/httpclient/models/traits.go
index 2791c1fcb..915de56dd 100644
--- a/internal/httpclient/models/traits.go
+++ b/internal/httpclient/models/traits.go
@@ -5,7 +5,7 @@ package models
 // This file was generated by the swagger tool.
 // Editing this file might prove futile when you re-run the swagger generate command
 
-// Traits Traits Traits Traits traits
+// Traits Traits Traits Traits Traits Traits Traits Traits Traits traits
 //
 // swagger:model Traits
 type Traits interface{}
diff --git a/internal/httpclient/models/update_identity.go b/internal/httpclient/models/update_identity.go
index 9364861e2..a9f049682 100644
--- a/internal/httpclient/models/update_identity.go
+++ b/internal/httpclient/models/update_identity.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity update identity
+// UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity UpdateIdentity update identity
 //
 // swagger:model UpdateIdentity
 type UpdateIdentity struct {
diff --git a/internal/httpclient/models/verifiable_address.go b/internal/httpclient/models/verifiable_address.go
index 60abd704a..5d48a07b0 100644
--- a/internal/httpclient/models/verifiable_address.go
+++ b/internal/httpclient/models/verifiable_address.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress verifiable address
+// VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress VerifiableAddress verifiable address
 //
 // swagger:model VerifiableAddress
 type VerifiableAddress struct {
diff --git a/internal/httpclient/models/verifiable_address_status.go b/internal/httpclient/models/verifiable_address_status.go
index b1d81cd97..6cf60476d 100644
--- a/internal/httpclient/models/verifiable_address_status.go
+++ b/internal/httpclient/models/verifiable_address_status.go
@@ -9,7 +9,7 @@ import (
 	"github.com/go-openapi/strfmt"
 )
 
-// VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus verifiable address status
+// VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus VerifiableAddressStatus verifiable address status
 //
 // swagger:model VerifiableAddressStatus
 type VerifiableAddressStatus string
diff --git a/internal/httpclient/models/verifiable_address_type.go b/internal/httpclient/models/verifiable_address_type.go
index 3b34f6f63..c1518ef67 100644
--- a/internal/httpclient/models/verifiable_address_type.go
+++ b/internal/httpclient/models/verifiable_address_type.go
@@ -9,7 +9,7 @@ import (
 	"github.com/go-openapi/strfmt"
 )
 
-// VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType verifiable address type
+// VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType VerifiableAddressType verifiable address type
 //
 // swagger:model VerifiableAddressType
 type VerifiableAddressType string
diff --git a/internal/httpclient/models/verification_flow.go b/internal/httpclient/models/verification_flow.go
index 17e4285cc..8a29f8ba0 100644
--- a/internal/httpclient/models/verification_flow.go
+++ b/internal/httpclient/models/verification_flow.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// VerificationFlow VerificationFlow VerificationFlow A Verification Flow
+// VerificationFlow A Verification Flow
 //
 // Used to verify an out-of-band communication
 // channel such as an email address or a phone number.
@@ -29,8 +29,6 @@ type VerificationFlow struct {
 	// ExpiresAt is the time (UTC) when the request expires. If the user still wishes to verify the address,
 	// a new request has to be initiated.
 	// Format: date-time
-	// Format: date-time
-	// Format: date-time
 	ExpiresAt strfmt.DateTime `json:"expires_at,omitempty"`
 
 	// id
@@ -39,8 +37,6 @@ type VerificationFlow struct {
 
 	// IssuedAt is the time (UTC) when the request occurred.
 	// Format: date-time
-	// Format: date-time
-	// Format: date-time
 	IssuedAt strfmt.DateTime `json:"issued_at,omitempty"`
 
 	// messages
diff --git a/internal/httpclient/models/verification_flow_method.go b/internal/httpclient/models/verification_flow_method.go
index 94f07c277..ae4bf2b20 100644
--- a/internal/httpclient/models/verification_flow_method.go
+++ b/internal/httpclient/models/verification_flow_method.go
@@ -12,7 +12,7 @@ import (
 	"github.com/go-openapi/validate"
 )
 
-// VerificationFlowMethod VerificationFlowMethod VerificationFlowMethod VerificationFlowMethod verification flow method
+// VerificationFlowMethod verification flow method
 //
 // swagger:model verificationFlowMethod
 type VerificationFlowMethod struct {
diff --git a/internal/httpclient/models/version.go b/internal/httpclient/models/version.go
index 8e687bcb2..8fef4a202 100644
--- a/internal/httpclient/models/version.go
+++ b/internal/httpclient/models/version.go
@@ -10,7 +10,7 @@ import (
 	"github.com/go-openapi/swag"
 )
 
-// Version version
+// Version Version Version Version version
 //
 // swagger:model version
 type Version struct {
diff --git a/persistence/sql/persister.go b/persistence/sql/persister.go
index 8ae479dc2..9fa0e8076 100644
--- a/persistence/sql/persister.go
+++ b/persistence/sql/persister.go
@@ -26,7 +26,7 @@ type (
 		IdentityTraitsSchemas(ctx context.Context) schema.Schemas
 		identity.ValidationProvider
 		x.LoggingProvider
-		config.Providers
+		config.Provider
 	}
 	Persister struct {
 		c        *pop.Connection
diff --git a/persistence/sql/persister_hmac.go b/persistence/sql/persister_hmac.go
index 0346af533..46cc3f55c 100644
--- a/persistence/sql/persister_hmac.go
+++ b/persistence/sql/persister_hmac.go
@@ -9,7 +9,7 @@ import (
 )
 
 func (p *Persister) hmacValue(ctx context.Context, value string) string {
-	return p.hmacValueWithSecret(value, p.r.Configuration(ctx).SecretsSession()[0])
+	return p.hmacValueWithSecret(value, p.r.Config(ctx).SecretsSession()[0])
 }
 
 func (p *Persister) hmacValueWithSecret(value string, secret []byte) string {
@@ -19,7 +19,7 @@ func (p *Persister) hmacValueWithSecret(value string, secret []byte) string {
 }
 
 func (p *Persister) hmacConstantCompare(ctx context.Context, value, hash string) bool {
-	for _, secret := range p.r.Configuration(ctx).SecretsSession() {
+	for _, secret := range p.r.Config(ctx).SecretsSession() {
 		if subtle.ConstantTimeCompare([]byte(p.hmacValueWithSecret(value, secret)), []byte(hash)) == 1 {
 			return true
 		}
diff --git a/persistence/sql/persister_identity.go b/persistence/sql/persister_identity.go
index f4647e754..3dd5be6ce 100644
--- a/persistence/sql/persister_identity.go
+++ b/persistence/sql/persister_identity.go
@@ -392,6 +392,6 @@ func (p *Persister) injectTraitsSchemaURL(ctx context.Context, i *identity.Ident
 		return errors.WithStack(herodot.ErrInternalServerError.WithReasonf(
 			`The JSON Schema "%s" for this identity's traits could not be found.`, i.SchemaID))
 	}
-	i.SchemaURL = s.SchemaURL(p.r.Configuration(ctx).SelfPublicURL()).String()
+	i.SchemaURL = s.SchemaURL(p.r.Config(ctx).SelfPublicURL()).String()
 	return nil
 }
diff --git a/persistence/sql/persister_recovery.go b/persistence/sql/persister_recovery.go
index 18e560239..beace99f2 100644
--- a/persistence/sql/persister_recovery.go
+++ b/persistence/sql/persister_recovery.go
@@ -79,7 +79,7 @@ func (p *Persister) UseRecoveryToken(ctx context.Context, token string) (*link.R
 	var err error
 	rt := new(link.RecoveryToken)
 	if err = sqlcon.HandleError(p.Transaction(ctx, func(ctx context.Context, tx *pop.Connection) (err error) {
-		for _, secret := range p.r.Configuration(ctx).SecretsSession() {
+		for _, secret := range p.r.Config(ctx).SecretsSession() {
 			if err = tx.Eager().Where("token = ? AND NOT used", p.hmacValueWithSecret(token, secret)).First(rt); err != nil {
 				if !errors.Is(sqlcon.HandleError(err), sqlcon.ErrNoRows) {
 					return err
diff --git a/persistence/sql/persister_verification.go b/persistence/sql/persister_verification.go
index d483b7820..f402e8c25 100644
--- a/persistence/sql/persister_verification.go
+++ b/persistence/sql/persister_verification.go
@@ -79,7 +79,7 @@ func (p *Persister) UseVerificationToken(ctx context.Context, token string) (*li
 	var err error
 	rt := new(link.VerificationToken)
 	if err = sqlcon.HandleError(p.Transaction(ctx, func(ctx context.Context, tx *pop.Connection) (err error) {
-		for _, secret := range p.r.Configuration(ctx).SecretsSession() {
+		for _, secret := range p.r.Config(ctx).SecretsSession() {
 			if err = tx.Eager().Where("token = ? AND NOT used", p.hmacValueWithSecret(token, secret)).First(rt); err != nil {
 				if !errors.Is(sqlcon.HandleError(err), sqlcon.ErrNoRows) {
 					return err
diff --git a/selfservice/errorx/manager.go b/selfservice/errorx/manager.go
index a27bb91f8..656b459a1 100644
--- a/selfservice/errorx/manager.go
+++ b/selfservice/errorx/manager.go
@@ -18,7 +18,7 @@ type (
 		x.LoggingProvider
 		x.WriterProvider
 		x.CSRFTokenGeneratorProvider
-		config.Providers
+		config.Provider
 	}
 
 	Manager struct {
@@ -49,7 +49,7 @@ func (m *Manager) Create(ctx context.Context, w http.ResponseWriter, r *http.Req
 	q := url.Values{}
 	q.Set("error", id.String())
 
-	return urlx.CopyWithQuery(m.d.Configuration(ctx).SelfServiceFlowErrorURL(), q).String(), nil
+	return urlx.CopyWithQuery(m.d.Config(ctx).SelfServiceFlowErrorURL(), q).String(), nil
 }
 
 // Forward is a simple helper that saves all errors in the store and forwards the HTTP Request
diff --git a/selfservice/flow/login/error.go b/selfservice/flow/login/error.go
index 6e2a0ea6b..fdf21d354 100644
--- a/selfservice/flow/login/error.go
+++ b/selfservice/flow/login/error.go
@@ -39,7 +39,7 @@ type (
 
 	ErrorHandler struct {
 		d errorHandlerDependencies
-		c *config.Provider
+		c *config.Config
 	}
 
 	FlowExpiredError struct {
@@ -59,7 +59,7 @@ func NewFlowExpiredError(at time.Time) *FlowExpiredError {
 	}
 }
 
-func NewFlowErrorHandler(d errorHandlerDependencies, c *config.Provider) *ErrorHandler {
+func NewFlowErrorHandler(d errorHandlerDependencies, c *config.Config) *ErrorHandler {
 	return &ErrorHandler{d: d, c: c}
 }
 
diff --git a/selfservice/flow/login/handler.go b/selfservice/flow/login/handler.go
index dba0ed684..948d95bf3 100644
--- a/selfservice/flow/login/handler.go
+++ b/selfservice/flow/login/handler.go
@@ -34,7 +34,7 @@ type (
 		x.WriterProvider
 		x.CSRFTokenGeneratorProvider
 		x.CSRFProvider
-		config.Providers
+		config.Provider
 	}
 	HandlerProvider interface {
 		LoginHandler() *Handler
@@ -61,7 +61,7 @@ func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
 }
 
 func (h *Handler) NewLoginFlow(w http.ResponseWriter, r *http.Request, flow flow.Type) (*Flow, error) {
-	a := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowLoginRequestLifespan(), h.d.GenerateCSRFToken(r), r, flow)
+	a := NewFlow(h.d.Config(r.Context()).SelfServiceFlowLoginRequestLifespan(), h.d.GenerateCSRFToken(r), r, flow)
 	for _, s := range h.d.LoginStrategies() {
 		if err := s.PopulateLoginMethod(r, a); err != nil {
 			return nil, err
@@ -173,7 +173,7 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps htt
 
 	// we assume an error means the user has no session
 	if _, err := h.d.SessionManager().FetchFromRequest(r.Context(), r); err != nil {
-		http.Redirect(w, r, a.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowLoginUI()).String(), http.StatusFound)
+		http.Redirect(w, r, a.AppendTo(h.d.Config(r.Context()).SelfServiceFlowLoginUI()).String(), http.StatusFound)
 		return
 	}
 
@@ -182,13 +182,13 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps htt
 			h.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 			return
 		}
-		http.Redirect(w, r, a.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowLoginUI()).String(), http.StatusFound)
+		http.Redirect(w, r, a.AppendTo(h.d.Config(r.Context()).SelfServiceFlowLoginUI()).String(), http.StatusFound)
 		return
 	}
 
-	returnTo, err := x.SecureRedirectTo(r, h.d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo(),
-		x.SecureRedirectAllowSelfServiceURLs(h.d.Configuration(r.Context()).SelfPublicURL()),
-		x.SecureRedirectAllowURLs(h.d.Configuration(r.Context()).SelfServiceBrowserWhitelistedReturnToDomains()),
+	returnTo, err := x.SecureRedirectTo(r, h.d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo(),
+		x.SecureRedirectAllowSelfServiceURLs(h.d.Config(r.Context()).SelfPublicURL()),
+		x.SecureRedirectAllowURLs(h.d.Config(r.Context()).SelfServiceBrowserWhitelistedReturnToDomains()),
 	)
 	if err != nil {
 		h.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
@@ -241,12 +241,12 @@ func (h *Handler) fetchFlow(w http.ResponseWriter, r *http.Request, _ httprouter
 		if ar.Type == flow.TypeBrowser {
 			h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 				WithReason("The login flow has expired. Redirect the user to the login flow init endpoint to initialize a new login flow.").
-				WithDetail("redirect_to", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
+				WithDetail("redirect_to", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
 			return
 		}
 		h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 			WithReason("The login flow has expired. Call the login flow init API endpoint to initialize a new login flow.").
-			WithDetail("api", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
+			WithDetail("api", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
 		return
 	}
 
diff --git a/selfservice/flow/login/hook.go b/selfservice/flow/login/hook.go
index 918cea692..a88ee77f5 100644
--- a/selfservice/flow/login/hook.go
+++ b/selfservice/flow/login/hook.go
@@ -31,7 +31,7 @@ type (
 
 type (
 	executorDependencies interface {
-		config.Providers
+		config.Provider
 		session.ManagementProvider
 		session.PersistenceProvider
 		x.WriterProvider
@@ -60,7 +60,7 @@ func NewHookExecutor(d executorDependencies) *HookExecutor {
 }
 
 func (e *HookExecutor) PostLoginHook(w http.ResponseWriter, r *http.Request, ct identity.CredentialsType, a *Flow, i *identity.Identity) error {
-	s := session.NewActiveSession(i, e.d.Configuration(r.Context()), time.Now().UTC()).Declassify()
+	s := session.NewActiveSession(i, e.d.Config(r.Context()), time.Now().UTC()).Declassify()
 
 	e.d.Logger().
 		WithRequest(r).
@@ -117,7 +117,7 @@ func (e *HookExecutor) PostLoginHook(w http.ResponseWriter, r *http.Request, ct
 		WithField("session_id", s.ID).
 		Info("Identity authenticated successfully and was issued an ORY Kratos Session Cookie.")
 	return x.SecureContentNegotiationRedirection(w, r, s.Declassify(), a.RequestURL,
-		e.d.Writer(), e.d.Configuration(r.Context()), x.SecureRedirectOverrideDefaultReturnTo(e.d.Configuration(r.Context()).SelfServiceFlowLoginReturnTo(ct.String())))
+		e.d.Writer(), e.d.Config(r.Context()), x.SecureRedirectOverrideDefaultReturnTo(e.d.Config(r.Context()).SelfServiceFlowLoginReturnTo(ct.String())))
 }
 
 func (e *HookExecutor) PreLoginHook(w http.ResponseWriter, r *http.Request, a *Flow) error {
diff --git a/selfservice/flow/logout/handler.go b/selfservice/flow/logout/handler.go
index 429a34c02..dfee7a356 100644
--- a/selfservice/flow/logout/handler.go
+++ b/selfservice/flow/logout/handler.go
@@ -26,12 +26,12 @@ type (
 		LogoutHandler() *Handler
 	}
 	Handler struct {
-		c *config.Provider
+		c *config.Config
 		d handlerDependencies
 	}
 )
 
-func NewHandler(d handlerDependencies, c *config.Provider) *Handler {
+func NewHandler(d handlerDependencies, c *config.Config) *Handler {
 	return &Handler{d: d, c: c}
 }
 
diff --git a/selfservice/flow/recovery/error.go b/selfservice/flow/recovery/error.go
index 90d5339e4..f9bb0b32e 100644
--- a/selfservice/flow/recovery/error.go
+++ b/selfservice/flow/recovery/error.go
@@ -45,7 +45,7 @@ type (
 		x.WriterProvider
 		x.LoggingProvider
 		x.CSRFTokenGeneratorProvider
-		config.Providers
+		config.Provider
 		StrategyProvider
 
 		FlowPersistenceProvider
@@ -84,7 +84,7 @@ func (s *ErrorHandler) WriteFlowError(
 
 	if e := new(FlowExpiredError); errors.As(err, &e) {
 		// create new flow because the old one is not valid
-		a, err := NewFlow(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.RecoveryStrategies(), f.Type)
+		a, err := NewFlow(s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.RecoveryStrategies(), f.Type)
 		if err != nil {
 			// failed to create a new session and redirect to it, handle that error as a new one
 			s.WriteFlowError(w, r, methodName, f, err)
@@ -98,10 +98,10 @@ func (s *ErrorHandler) WriteFlowError(
 		}
 
 		if f.Type == flow.TypeAPI {
-			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 				RouteGetFlow), url.Values{"id": {a.ID.String()}}).String(), http.StatusFound)
 		} else {
-			http.Redirect(w, r, a.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
+			http.Redirect(w, r, a.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
 		}
 		return
 	}
@@ -125,7 +125,7 @@ func (s *ErrorHandler) WriteFlowError(
 	}
 
 	if f.Type == flow.TypeBrowser {
-		http.Redirect(w, r, f.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
+		http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
 		return
 	}
 
diff --git a/selfservice/flow/recovery/handler.go b/selfservice/flow/recovery/handler.go
index 5fa8d7058..b5791bd7a 100644
--- a/selfservice/flow/recovery/handler.go
+++ b/selfservice/flow/recovery/handler.go
@@ -37,7 +37,7 @@ type (
 		x.CSRFTokenGeneratorProvider
 		x.WriterProvider
 		x.CSRFProvider
-		config.Providers
+		config.Provider
 	}
 	Handler struct {
 		d handlerDependencies
@@ -91,7 +91,7 @@ func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
 //       500: genericError
 //       400: genericError
 func (h *Handler) initAPIFlow(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
-	req, err := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.RecoveryStrategies(), flow.TypeAPI)
+	req, err := NewFlow(h.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.RecoveryStrategies(), flow.TypeAPI)
 	if err != nil {
 		h.d.Writer().WriteError(w, r, err)
 		return
@@ -123,7 +123,7 @@ func (h *Handler) initAPIFlow(w http.ResponseWriter, r *http.Request, _ httprout
 //       302: emptyResponse
 //       500: genericError
 func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
-	req, err := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.RecoveryStrategies(), flow.TypeBrowser)
+	req, err := NewFlow(h.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.RecoveryStrategies(), flow.TypeBrowser)
 	if err != nil {
 		h.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 		return
@@ -134,7 +134,7 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, _ http
 		return
 	}
 
-	http.Redirect(w, r, req.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
+	http.Redirect(w, r, req.AppendTo(h.d.Config(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
 }
 
 // nolint:deadcode,unused
@@ -180,12 +180,12 @@ func (h *Handler) fetch(w http.ResponseWriter, r *http.Request, _ httprouter.Par
 		if req.Type == flow.TypeBrowser {
 			h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 				WithReason("The recovery flow has expired. Redirect the user to the recovery flow init endpoint to initialize a new recovery flow.").
-				WithDetail("redirect_to", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
+				WithDetail("redirect_to", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
 			return
 		}
 		h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 			WithReason("The recovery flow has expired. Call the recovery flow init API endpoint to initialize a new recovery flow.").
-			WithDetail("api", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
+			WithDetail("api", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
 		return
 	}
 
diff --git a/selfservice/flow/recovery/persistence.go b/selfservice/flow/recovery/persistence.go
index 51a891812..514d9b671 100644
--- a/selfservice/flow/recovery/persistence.go
+++ b/selfservice/flow/recovery/persistence.go
@@ -28,7 +28,7 @@ type (
 	}
 )
 
-func TestFlowPersister(conf *config.Provider, p interface {
+func TestFlowPersister(conf *config.Config, p interface {
 	FlowPersister
 	identity.PrivilegedPool
 }) func(t *testing.T) {
diff --git a/selfservice/flow/registration/error.go b/selfservice/flow/registration/error.go
index 2fcd1615a..19cefaa89 100644
--- a/selfservice/flow/registration/error.go
+++ b/selfservice/flow/registration/error.go
@@ -29,7 +29,7 @@ type (
 		errorx.ManagementProvider
 		x.WriterProvider
 		x.LoggingProvider
-		config.Providers
+		config.Provider
 
 		FlowPersistenceProvider
 		HandlerProvider
@@ -96,10 +96,10 @@ func (s *ErrorHandler) WriteFlowError(
 		}
 
 		if f.Type == flow.TypeAPI {
-			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 				RouteGetFlow), url.Values{"id": {a.ID.String()}}).String(), http.StatusFound)
 		} else {
-			http.Redirect(w, r, a.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRegistrationUI()).String(), http.StatusFound)
+			http.Redirect(w, r, a.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRegistrationUI()).String(), http.StatusFound)
 		}
 		return
 	}
@@ -122,7 +122,7 @@ func (s *ErrorHandler) WriteFlowError(
 	}
 
 	if f.Type == flow.TypeBrowser {
-		http.Redirect(w, r, f.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRegistrationUI()).String(), http.StatusFound)
+		http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRegistrationUI()).String(), http.StatusFound)
 		return
 	}
 
diff --git a/selfservice/flow/registration/handler.go b/selfservice/flow/registration/handler.go
index 09c5929dd..04d3a01b5 100644
--- a/selfservice/flow/registration/handler.go
+++ b/selfservice/flow/registration/handler.go
@@ -25,7 +25,7 @@ const (
 
 type (
 	handlerDependencies interface {
-		config.Providers
+		config.Provider
 		errorx.ManagementProvider
 		session.HandlerProvider
 		session.ManagementProvider
@@ -63,7 +63,7 @@ func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
 }
 
 func (h *Handler) NewRegistrationFlow(w http.ResponseWriter, r *http.Request, ft flow.Type) (*Flow, error) {
-	a := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowRegistrationRequestLifespan(), h.d.GenerateCSRFToken(r), r, ft)
+	a := NewFlow(h.d.Config(r.Context()).SelfServiceFlowRegistrationRequestLifespan(), h.d.GenerateCSRFToken(r), r, ft)
 	for _, s := range h.d.RegistrationStrategies() {
 		if err := s.PopulateRegistrationMethod(r, a); err != nil {
 			return nil, err
@@ -149,9 +149,9 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps htt
 		return
 	}
 
-	redirTo := a.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowRegistrationUI()).String()
+	redirTo := a.AppendTo(h.d.Config(r.Context()).SelfServiceFlowRegistrationUI()).String()
 	if _, err := h.d.SessionManager().FetchFromRequest(r.Context(), r); err == nil {
-		redirTo = h.d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo().String()
+		redirTo = h.d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo().String()
 	}
 	http.Redirect(w, r, redirTo, http.StatusFound)
 }
@@ -199,12 +199,12 @@ func (h *Handler) fetchFlow(w http.ResponseWriter, r *http.Request, ps httproute
 		if ar.Type == flow.TypeBrowser {
 			h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 				WithReason("The registration flow has expired. Redirect the user to the registration flow init endpoint to initialize a new registration flow.").
-				WithDetail("redirect_to", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
+				WithDetail("redirect_to", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
 			return
 		}
 		h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 			WithReason("The registration flow has expired. Call the registration flow init API endpoint to initialize a new registration flow.").
-			WithDetail("api", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
+			WithDetail("api", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
 		return
 	}
 
diff --git a/selfservice/flow/registration/hook.go b/selfservice/flow/registration/hook.go
index b09466406..3d1168190 100644
--- a/selfservice/flow/registration/hook.go
+++ b/selfservice/flow/registration/hook.go
@@ -60,7 +60,7 @@ func (f PostHookPrePersistExecutorFunc) ExecutePostRegistrationPrePersistHook(w
 
 type (
 	executorDependencies interface {
-		config.Providers
+		config.Provider
 		identity.ManagementProvider
 		identity.ValidationProvider
 		session.PersistenceProvider
@@ -127,7 +127,7 @@ func (e *HookExecutor) PostRegistrationHook(w http.ResponseWriter, r *http.Reque
 		WithField("identity_id", i.ID).
 		Info("A new identity has registered using self-service registration.")
 
-	s := session.NewActiveSession(i, e.d.Configuration(r.Context()), time.Now().UTC())
+	s := session.NewActiveSession(i, e.d.Config(r.Context()), time.Now().UTC())
 	e.d.Logger().
 		WithRequest(r).
 		WithField("identity_id", i.ID).
@@ -170,7 +170,7 @@ func (e *HookExecutor) PostRegistrationHook(w http.ResponseWriter, r *http.Reque
 	}
 
 	return x.SecureContentNegotiationRedirection(w, r, s.Declassify(), a.RequestURL,
-		e.d.Writer(), e.d.Configuration(r.Context()), x.SecureRedirectOverrideDefaultReturnTo(e.d.Configuration(r.Context()).SelfServiceFlowRegistrationReturnTo(ct.String())))
+		e.d.Writer(), e.d.Config(r.Context()), x.SecureRedirectOverrideDefaultReturnTo(e.d.Config(r.Context()).SelfServiceFlowRegistrationReturnTo(ct.String())))
 }
 
 func (e *HookExecutor) PreRegistrationHook(w http.ResponseWriter, r *http.Request, a *Flow) error {
diff --git a/selfservice/flow/settings/error.go b/selfservice/flow/settings/error.go
index 614e901cf..7349a3060 100644
--- a/selfservice/flow/settings/error.go
+++ b/selfservice/flow/settings/error.go
@@ -25,7 +25,7 @@ var (
 
 type (
 	errorHandlerDependencies interface {
-		config.Providers
+		config.Provider
 		errorx.ManagementProvider
 		x.WriterProvider
 		x.LoggingProvider
@@ -81,8 +81,8 @@ func (s *ErrorHandler) reauthenticate(
 		return
 	}
 
-	returnTo := urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), r.URL.Path), r.URL.Query())
-	http.Redirect(w, r, urlx.AppendPaths(urlx.CopyWithQuery(s.d.Configuration(r.Context()).SelfPublicURL(),
+	returnTo := urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), r.URL.Path), r.URL.Query())
+	http.Redirect(w, r, urlx.AppendPaths(urlx.CopyWithQuery(s.d.Config(r.Context()).SelfPublicURL(),
 		url.Values{"refresh": {"true"}, "return_to": {returnTo.String()}}),
 		login.RouteInitBrowserFlow).String(), http.StatusFound)
 }
@@ -122,10 +122,10 @@ func (s *ErrorHandler) WriteFlowError(
 		}
 
 		if f.Type == flow.TypeAPI {
-			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 				RouteGetFlow), url.Values{"id": {a.ID.String()}}).String(), http.StatusFound)
 		} else {
-			http.Redirect(w, r, a.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
+			http.Redirect(w, r, a.AppendTo(s.d.Config(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
 		}
 		return
 	}
@@ -152,7 +152,7 @@ func (s *ErrorHandler) WriteFlowError(
 	}
 
 	if f.Type == flow.TypeBrowser {
-		http.Redirect(w, r, f.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
+		http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
 		return
 	}
 
diff --git a/selfservice/flow/settings/handler.go b/selfservice/flow/settings/handler.go
index 1c2f409fa..f04276d0f 100644
--- a/selfservice/flow/settings/handler.go
+++ b/selfservice/flow/settings/handler.go
@@ -38,7 +38,7 @@ type (
 		x.WriterProvider
 		x.LoggingProvider
 
-		config.Providers
+		config.Provider
 
 		continuity.ManagementProvider
 
@@ -74,7 +74,7 @@ func (h *Handler) RegisterPublicRoutes(public *x.RouterPublic) {
 	h.d.CSRFHandler().IgnorePath(RouteInitAPIFlow)
 
 	public.GET(RouteInitBrowserFlow, h.d.SessionHandler().IsAuthenticated(h.initBrowserFlow, func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
-		http.Redirect(w, r, h.d.Configuration(r.Context()).SelfServiceFlowLoginUI().String(), http.StatusFound)
+		http.Redirect(w, r, h.d.Config(r.Context()).SelfServiceFlowLoginUI().String(), http.StatusFound)
 	}))
 
 	public.GET(RouteInitAPIFlow, h.d.SessionHandler().IsAuthenticated(h.initApiFlow, nil))
@@ -87,7 +87,7 @@ func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
 }
 
 func (h *Handler) NewFlow(w http.ResponseWriter, r *http.Request, i *identity.Identity, ft flow.Type) (*Flow, error) {
-	f := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowSettingsFlowLifespan(), r, i, ft)
+	f := NewFlow(h.d.Config(r.Context()).SelfServiceFlowSettingsFlowLifespan(), r, i, ft)
 	for _, strategy := range h.d.SettingsStrategies() {
 		if err := h.d.ContinuityManager().Abort(r.Context(), w, r, ContinuityKey(strategy.SettingsStrategyID())); err != nil {
 			return nil, err
@@ -188,7 +188,7 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps htt
 		return
 	}
 
-	http.Redirect(w, r, f.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
+	http.Redirect(w, r, f.AppendTo(h.d.Config(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
 }
 
 // nolint:deadcode,unused
@@ -276,12 +276,12 @@ func (h *Handler) fetchFlow(w http.ResponseWriter, r *http.Request, checkSession
 		if pr.Type == flow.TypeBrowser {
 			h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 				WithReason("The settings flow has expired. Redirect the user to the settings flow init endpoint to initialize a new settings flow.").
-				WithDetail("redirect_to", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
+				WithDetail("redirect_to", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
 			return nil
 		}
 		h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 			WithReason("The settings flow has expired. Call the settings flow init API endpoint to initialize a new settings flow.").
-			WithDetail("api", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
+			WithDetail("api", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
 		return nil
 	}
 
diff --git a/selfservice/flow/settings/hook.go b/selfservice/flow/settings/hook.go
index 5536a7519..21ae7bd3c 100644
--- a/selfservice/flow/settings/hook.go
+++ b/selfservice/flow/settings/hook.go
@@ -30,7 +30,7 @@ type (
 	executorDependencies interface {
 		identity.ManagementProvider
 		identity.ValidationProvider
-		config.Providers
+		config.Provider
 
 		HooksProvider
 		FlowPersistenceProvider
@@ -120,7 +120,7 @@ func (e *HookExecutor) PostSettingsHook(w http.ResponseWriter, r *http.Request,
 	}
 
 	options := []identity.ManagerOption{identity.ManagerExposeValidationErrorsForInternalTypeAssertion}
-	ttl := e.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()
+	ttl := e.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()
 	if ctxUpdate.Session.AuthenticatedAt.Add(ttl).After(time.Now()) {
 		options = append(options, identity.ManagerAllowWriteProtectedTraits)
 	}
@@ -194,8 +194,8 @@ func (e *HookExecutor) PostSettingsHook(w http.ResponseWriter, r *http.Request,
 		return nil
 	}
 
-	return x.SecureContentNegotiationRedirection(w, r, ctxUpdate.Session.Declassify(), ctxUpdate.Flow.RequestURL, e.d.Writer(), e.d.Configuration(r.Context()),
+	return x.SecureContentNegotiationRedirection(w, r, ctxUpdate.Session.Declassify(), ctxUpdate.Flow.RequestURL, e.d.Writer(), e.d.Config(r.Context()),
 		x.SecureRedirectOverrideDefaultReturnTo(
-			e.d.Configuration(r.Context()).SelfServiceFlowSettingsReturnTo(settingsType,
-				ctxUpdate.Flow.AppendTo(e.d.Configuration(r.Context()).SelfServiceFlowSettingsUI()))))
+			e.d.Config(r.Context()).SelfServiceFlowSettingsReturnTo(settingsType,
+				ctxUpdate.Flow.AppendTo(e.d.Config(r.Context()).SelfServiceFlowSettingsUI()))))
 }
diff --git a/selfservice/flow/settings/persistence.go b/selfservice/flow/settings/persistence.go
index ab568c750..043724c6f 100644
--- a/selfservice/flow/settings/persistence.go
+++ b/selfservice/flow/settings/persistence.go
@@ -28,7 +28,7 @@ type (
 	}
 )
 
-func TestRequestPersister(conf *config.Provider, p interface {
+func TestRequestPersister(conf *config.Config, p interface {
 	FlowPersister
 	identity.PrivilegedPool
 }) func(t *testing.T) {
diff --git a/selfservice/flow/settings/strategy_helper.go b/selfservice/flow/settings/strategy_helper.go
index 9ce4c597d..6397c049c 100644
--- a/selfservice/flow/settings/strategy_helper.go
+++ b/selfservice/flow/settings/strategy_helper.go
@@ -111,11 +111,11 @@ func GetFlowID(r *http.Request) (uuid.UUID, error) {
 }
 
 func OnUnauthenticated(reg interface {
-	config.Providers
+	config.Provider
 	x.WriterProvider
 }) func(http.ResponseWriter, *http.Request, httprouter.Params) {
 	return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
-		handler := session.RedirectOnUnauthenticated(reg.Configuration(r.Context()).SelfServiceFlowLoginUI().String())
+		handler := session.RedirectOnUnauthenticated(reg.Config(r.Context()).SelfServiceFlowLoginUI().String())
 		if x.IsJSONRequest(r) {
 			handler = session.RespondWithJSONErrorOnAuthenticated(reg.Writer(), herodot.ErrUnauthorized.WithReasonf("A valid ORY Session Cookie or ORY Session Token is missing."))
 		}
diff --git a/selfservice/flow/verification/error.go b/selfservice/flow/verification/error.go
index aa3d790ed..507a58207 100644
--- a/selfservice/flow/verification/error.go
+++ b/selfservice/flow/verification/error.go
@@ -25,7 +25,7 @@ type (
 		x.WriterProvider
 		x.LoggingProvider
 		x.CSRFTokenGeneratorProvider
-		config.Providers
+		config.Provider
 		FlowPersistenceProvider
 		StrategyProvider
 	}
@@ -79,7 +79,7 @@ func (s *ErrorHandler) WriteFlowError(
 
 	if e := new(FlowExpiredError); errors.As(err, &e) {
 		// create new flow because the old one is not valid
-		a, err := NewFlow(s.d.Configuration(r.Context()).SelfServiceFlowVerificationRequestLifespan(),
+		a, err := NewFlow(s.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(),
 			s.d.GenerateCSRFToken(r), r, s.d.VerificationStrategies(), f.Type)
 		if err != nil {
 			// failed to create a new session and redirect to it, handle that error as a new one
@@ -94,10 +94,10 @@ func (s *ErrorHandler) WriteFlowError(
 		}
 
 		if f.Type == flow.TypeAPI {
-			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+			http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 				RouteGetFlow), url.Values{"id": {a.ID.String()}}).String(), http.StatusFound)
 		} else {
-			http.Redirect(w, r, a.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
+			http.Redirect(w, r, a.AppendTo(s.d.Config(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
 		}
 		return
 	}
@@ -121,7 +121,7 @@ func (s *ErrorHandler) WriteFlowError(
 	}
 
 	if f.Type == flow.TypeBrowser {
-		http.Redirect(w, r, f.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
+		http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
 		return
 	}
 
diff --git a/selfservice/flow/verification/handler.go b/selfservice/flow/verification/handler.go
index b4a92161d..a119e17eb 100644
--- a/selfservice/flow/verification/handler.go
+++ b/selfservice/flow/verification/handler.go
@@ -30,7 +30,7 @@ type (
 		errorx.ManagementProvider
 		identity.ManagementProvider
 		identity.PrivilegedPoolProvider
-		config.Providers
+		config.Provider
 
 		x.CSRFTokenGeneratorProvider
 		x.WriterProvider
@@ -88,7 +88,7 @@ func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
 //       500: genericError
 //       400: genericError
 func (h *Handler) initAPIFlow(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
-	req, err := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowVerificationRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.VerificationStrategies(), flow.TypeAPI)
+	req, err := NewFlow(h.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.VerificationStrategies(), flow.TypeAPI)
 	if err != nil {
 		h.d.Writer().WriteError(w, r, err)
 		return
@@ -119,7 +119,7 @@ func (h *Handler) initAPIFlow(w http.ResponseWriter, r *http.Request, _ httprout
 //       302: emptyResponse
 //       500: genericError
 func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
-	req, err := NewFlow(h.d.Configuration(r.Context()).SelfServiceFlowVerificationRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.VerificationStrategies(), flow.TypeBrowser)
+	req, err := NewFlow(h.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(), h.d.GenerateCSRFToken(r), r, h.d.VerificationStrategies(), flow.TypeBrowser)
 	if err != nil {
 		h.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 		return
@@ -130,7 +130,7 @@ func (h *Handler) initBrowserFlow(w http.ResponseWriter, r *http.Request, ps htt
 		return
 	}
 
-	http.Redirect(w, r, req.AppendTo(h.d.Configuration(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
+	http.Redirect(w, r, req.AppendTo(h.d.Config(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
 }
 
 // nolint:deadcode,unused
@@ -176,12 +176,12 @@ func (h *Handler) fetch(w http.ResponseWriter, r *http.Request, _ httprouter.Par
 		if req.Type == flow.TypeBrowser {
 			h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 				WithReason("The verification flow has expired. Redirect the user to the verification flow init endpoint to initialize a new verification flow.").
-				WithDetail("redirect_to", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
+				WithDetail("redirect_to", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitBrowserFlow).String())))
 			return
 		}
 		h.d.Writer().WriteError(w, r, errors.WithStack(x.ErrGone.
 			WithReason("The verification flow has expired. Call the verification flow init API endpoint to initialize a new verification flow.").
-			WithDetail("api", urlx.AppendPaths(h.d.Configuration(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
+			WithDetail("api", urlx.AppendPaths(h.d.Config(r.Context()).SelfPublicURL(), RouteInitAPIFlow).String())))
 		return
 	}
 
diff --git a/selfservice/flow/verification/persistence.go b/selfservice/flow/verification/persistence.go
index 4193ba4da..5da9e2686 100644
--- a/selfservice/flow/verification/persistence.go
+++ b/selfservice/flow/verification/persistence.go
@@ -28,7 +28,7 @@ type (
 	}
 )
 
-func TestFlowPersister(conf *config.Provider, p interface {
+func TestFlowPersister(conf *config.Config, p interface {
 	FlowPersister
 	identity.PrivilegedPool
 }) func(t *testing.T) {
diff --git a/selfservice/hook/verification.go b/selfservice/hook/verification.go
index 1421dfbd4..989663e37 100644
--- a/selfservice/hook/verification.go
+++ b/selfservice/hook/verification.go
@@ -18,7 +18,7 @@ type (
 	verifierDependencies interface {
 		link.SenderProvider
 		link.VerificationTokenPersistenceProvider
-		config.Providers
+		config.Provider
 	}
 	Verifier struct {
 		r verifierDependencies
@@ -47,7 +47,7 @@ func (e *Verifier) do(r *http.Request, i *identity.Identity) error {
 			continue
 		}
 
-		token := link.NewVerificationToken(address, e.r.Configuration(r.Context()).SelfServiceFlowVerificationRequestLifespan())
+		token := link.NewVerificationToken(address, e.r.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan())
 		if err := e.r.VerificationTokenPersister().CreateVerificationToken(r.Context(), token); err != nil {
 			return err
 		}
diff --git a/selfservice/mfa/questions/config.go b/selfservice/mfa/questions/config.go
deleted file mode 100644
index 384ff0f55..000000000
--- a/selfservice/mfa/questions/config.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package questions
-
-type RecoverySecurityQuestion struct {
-	ID    string `json:"id"`
-	Label string `json:"label"`
-}
diff --git a/selfservice/mfa/questions/identity.go b/selfservice/mfa/questions/identity.go
deleted file mode 100644
index 91635102b..000000000
--- a/selfservice/mfa/questions/identity.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package questions
-
-import (
-	"context"
-	"time"
-
-	"github.com/ory/kratos/corp"
-
-	"github.com/gofrs/uuid"
-)
-
-type (
-	RecoverySecurityAnswers []RecoverySecurityAnswer
-	RecoverySecurityAnswer  struct {
-		// required: true
-		ID uuid.UUID `json:"id" db:"id" faker:"-"`
-
-		Key    string `json:"key" db:"key"`
-		Answer string `json:"answer" db:"answer"`
-
-		// IdentityID is a helper struct field for gobuffalo.pop.
-		IdentityID uuid.UUID `json:"-" faker:"-" db:"identity_id"`
-		// CreatedAt is a helper struct field for gobuffalo.pop.
-		CreatedAt time.Time `json:"-" faker:"-" db:"created_at"`
-		// UpdatedAt is a helper struct field for gobuffalo.pop.
-		UpdatedAt time.Time `json:"-" faker:"-" db:"updated_at"`
-	}
-)
-
-func (a RecoverySecurityAnswers) TableName(ctx context.Context) string {
-	return corp.ContextualizeTableName(ctx, "identity_recovery_addresses")
-}
diff --git a/selfservice/mfa/questions/manager.go b/selfservice/mfa/questions/manager.go
deleted file mode 100644
index ffeb51f1a..000000000
--- a/selfservice/mfa/questions/manager.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// nolint
-package questions
-
-import (
-	"context"
-	"regexp"
-	"strings"
-
-	"github.com/ory/kratos/driver/config"
-	"github.com/ory/kratos/hash"
-	"github.com/ory/kratos/identity"
-	"github.com/ory/kratos/selfservice/form"
-)
-
-type (
-	ManagementProvider interface {
-		RecoveryManager() *Manager
-	}
-	managerDependencies interface {
-		hash.HashProvider
-	}
-	Manager struct {
-		c config.Provider
-		d managerDependencies
-	}
-)
-
-var collapseNonAlphanumeric = regexp.MustCompile(`[^a-zA-Z\d\s:]+`)
-
-func normalizeAnswer(in string) []byte {
-	return []byte(collapseNonAlphanumeric.ReplaceAllString(strings.ToLower(strings.TrimSpace(in)), " "))
-}
-
-func (m *Manager) SetSecurityFormFields(ctx context.Context, i *identity.Identity, prefix string, htmlf *form.HTMLForm) error {
-	if len(prefix) > 0 {
-		prefix = prefix + "."
-	}
-
-	// for _, question := range i.RecoverySecurityAnswers {
-	// 	htmlf.SetField(form.Field{Name: prefix + question.Key, Type: "text", Required: true})
-	// }
-	return nil
-}
-
-// func (m *Manager) CompareSecurityQuestions(ctx context.Context, question identity.RecoverySecurityAnswer, answer string) error {
-// 	return m.d.Hasher().Compare([]byte(answer), normalizeAnswer(question.Answer))
-// }
-
-func (m *Manager) HashSecurityQuestions(i *identity.Identity, answers map[string]string) error {
-	// var result identity.RecoverySecurityAnswers
-	//
-	// for key, answer := range answers {
-	// 	hashed, err := m.d.Hasher().Generate(normalizeAnswer(answer))
-	// 	if err != nil {
-	// 		return err
-	// 	}
-	//
-	// 	result = append(result,
-	// 		identity.RecoverySecurityAnswer{ID: x.NewUUID(), Key: key, Answer: string(hashed), IdentityID: i.ID})
-	// }
-	//
-	// i.RecoverySecurityAnswers = result
-	return nil
-}
-
-func (m *Manager) SetSecurityAnswers(ctx context.Context, i *identity.Identity, answers map[string]string, validationPrefix string) error {
-	// // Validation
-	// for _, question := range m.c.SelfServiceRecoverySecurityQuestions() {
-	// 	var found bool
-	// 	for id, answer := range answers {
-	// 		if id == question.ID {
-	// 			expected := 6
-	// 			answer = normalizeAnswer(answer)
-	//
-	// 			if actual := utf8.RuneCountInString(answer); actual < expected {
-	// 				return errors.WithStack(&jsonschema.ValidationError{
-	// 					Message:     fmt.Sprintf("length must be >= %d, but got %s (%d) after normalization", expected, answer, actual),
-	// 					InstancePtr: validationPrefix + id,
-	// 				})
-	// 			}
-	//
-	// 			found = true
-	// 			i.RecoverySecurityAnswers = append(i.RecoverySecurityAnswers, identity.RecoverySecurityAnswer{
-	// 				Key: id, Answer: answer,
-	// 				IdentityID: i.ID,
-	// 			})
-	// 			break
-	// 		}
-	// 	}
-	//
-	// 	if !found {
-	// 		return schema.NewRequiredError(validationPrefix, question.ID)
-	// 	}
-	// }
-
-	return nil
-}
diff --git a/selfservice/mfa/questions/recovery.go b/selfservice/mfa/questions/recovery.go
deleted file mode 100644
index ceb44f01e..000000000
--- a/selfservice/mfa/questions/recovery.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package questions
-
-// func (s *StrategyLink) answerSecurityQuestions(w http.ResponseWriter, r *http.Request, req *Request) {
-// 	for _, question := range req.RecoveredIdentity.RecoverySecurityAnswers {
-// 		answer := r.PostForm.Get(securityQuestionPrefix + "." + question.Key)
-// 		if len(answer) == 0 {
-// 			s.handleError(w, r, req, schema.NewRequiredError("#/"+securityQuestionPrefix, question.Key))
-// 			return
-// 		}
-//
-// 		s.d.RecoveryManager().CompareSecurityQuestions(r.Context(),question,answer)
-// 	}
-// }
diff --git a/selfservice/mfa/questions/text.go b/selfservice/mfa/questions/text.go
deleted file mode 100644
index 2f449bb4b..000000000
--- a/selfservice/mfa/questions/text.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package questions
-
-// func NewRecoveryAskSecurityQuestions() *Message {
-// 	return &Message{
-// 		ID:   InfoSelfServiceRecoveryAskSecurityQuestions,
-// 		Type: Info,
-// 		Text: "Please answer the following questions to verify it is really you. These are your questions set up during registration or when you updated your profile.",
-// 	}
-// }
-//
diff --git a/selfservice/strategy/link/persister_conformity.go b/selfservice/strategy/link/persister_conformity.go
index 94090183e..68bf5581c 100644
--- a/selfservice/strategy/link/persister_conformity.go
+++ b/selfservice/strategy/link/persister_conformity.go
@@ -19,7 +19,7 @@ import (
 	"github.com/ory/kratos/x"
 )
 
-func TestPersister(conf *config.Provider, p interface {
+func TestPersister(conf *config.Config, p interface {
 	RecoveryTokenPersister
 	VerificationTokenPersister
 	recovery.FlowPersister
diff --git a/selfservice/strategy/link/sender.go b/selfservice/strategy/link/sender.go
index 8475b7170..9171ea176 100644
--- a/selfservice/strategy/link/sender.go
+++ b/selfservice/strategy/link/sender.go
@@ -25,7 +25,7 @@ type (
 		identity.PoolProvider
 		identity.ManagementProvider
 		x.LoggingProvider
-		config.Providers
+		config.Provider
 
 		VerificationTokenPersistenceProvider
 		RecoveryTokenPersistenceProvider
@@ -57,7 +57,7 @@ func (s *Sender) SendRecoveryLink(ctx context.Context, f *recovery.Flow, via ide
 
 	address, err := s.r.IdentityPool().FindRecoveryAddressByValue(ctx, identity.RecoveryAddressTypeEmail, to)
 	if err != nil {
-		if err := s.send(ctx, string(via), templates.NewRecoveryInvalid(s.r.Configuration(ctx), &templates.RecoveryInvalidModel{To: to})); err != nil {
+		if err := s.send(ctx, string(via), templates.NewRecoveryInvalid(s.r.Config(ctx), &templates.RecoveryInvalidModel{To: to})); err != nil {
 			return err
 		}
 		return errors.Cause(ErrUnknownAddress)
@@ -91,7 +91,7 @@ func (s *Sender) SendVerificationLink(ctx context.Context, f *verification.Flow,
 				WithField("via", via).
 				WithSensitiveField("email_address", address).
 				Info("Sending out invalid verification email because address is unknown.")
-			if err := s.send(ctx, string(via), templates.NewVerificationInvalid(s.r.Configuration(ctx), &templates.VerificationInvalidModel{To: to})); err != nil {
+			if err := s.send(ctx, string(via), templates.NewVerificationInvalid(s.r.Config(ctx), &templates.VerificationInvalidModel{To: to})); err != nil {
 				return err
 			}
 			return errors.Cause(ErrUnknownAddress)
@@ -118,9 +118,9 @@ func (s *Sender) SendRecoveryTokenTo(ctx context.Context, address *identity.Reco
 		WithSensitiveField("email_address", address.Value).
 		WithSensitiveField("recovery_link_token", token.Token).
 		Info("Sending out recovery email with recovery link.")
-	return s.send(ctx, string(address.Via), templates.NewRecoveryValid(s.r.Configuration(ctx),
+	return s.send(ctx, string(address.Via), templates.NewRecoveryValid(s.r.Config(ctx),
 		&templates.RecoveryValidModel{To: address.Value, RecoveryURL: urlx.CopyWithQuery(
-			urlx.AppendPaths(s.r.Configuration(ctx).SelfPublicURL(), RouteRecovery),
+			urlx.AppendPaths(s.r.Config(ctx).SelfPublicURL(), RouteRecovery),
 			url.Values{"token": {token.Token}}).String()}))
 }
 
@@ -133,9 +133,9 @@ func (s *Sender) SendVerificationTokenTo(ctx context.Context, address *identity.
 		WithSensitiveField("verification_link_token", token.Token).
 		Info("Sending out verification email with verification link.")
 
-	return s.send(ctx, string(address.Via), templates.NewVerificationValid(s.r.Configuration(ctx),
+	return s.send(ctx, string(address.Via), templates.NewVerificationValid(s.r.Config(ctx),
 		&templates.VerificationValidModel{To: address.Value, VerificationURL: urlx.CopyWithQuery(
-			urlx.AppendPaths(s.r.Configuration(ctx).SelfPublicURL(), RouteVerification),
+			urlx.AppendPaths(s.r.Config(ctx).SelfPublicURL(), RouteVerification),
 			url.Values{"token": {token.Token}}).String()}))
 }
 
diff --git a/selfservice/strategy/link/strategy.go b/selfservice/strategy/link/strategy.go
index 304e1c406..d27e8c4d1 100644
--- a/selfservice/strategy/link/strategy.go
+++ b/selfservice/strategy/link/strategy.go
@@ -36,7 +36,7 @@ type (
 		x.WriterProvider
 		x.LoggingProvider
 
-		config.Providers
+		config.Provider
 
 		session.HandlerProvider
 		session.ManagementProvider
diff --git a/selfservice/strategy/link/strategy_recovery.go b/selfservice/strategy/link/strategy_recovery.go
index d7654c768..d2c8f5c14 100644
--- a/selfservice/strategy/link/strategy_recovery.go
+++ b/selfservice/strategy/link/strategy_recovery.go
@@ -50,7 +50,7 @@ func (s *Strategy) RegisterAdminRecoveryRoutes(admin *x.RouterAdmin) {
 }
 
 func (s *Strategy) PopulateRecoveryMethod(r *http.Request, req *recovery.Flow) error {
-	f := form.NewHTMLForm(req.AppendTo(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteRecovery)).String())
+	f := form.NewHTMLForm(req.AppendTo(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteRecovery)).String())
 
 	f.SetCSRF(s.d.GenerateCSRFToken(r))
 	f.SetField(form.Field{Name: "email", Type: "email", Required: true})
@@ -137,7 +137,7 @@ func (s *Strategy) createRecoveryLink(w http.ResponseWriter, r *http.Request, _
 		return
 	}
 
-	expiresIn := s.d.Configuration(r.Context()).SelfServiceFlowRecoveryRequestLifespan()
+	expiresIn := s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan()
 	if len(p.ExpiresIn) > 0 {
 		var err error
 		expiresIn, err = time.ParseDuration(p.ExpiresIn)
@@ -186,7 +186,7 @@ func (s *Strategy) createRecoveryLink(w http.ResponseWriter, r *http.Request, _
 	s.d.Writer().Write(w, r, &recoveryLink{
 		ExpiresAt: req.ExpiresAt.UTC(),
 		RecoveryLink: urlx.CopyWithQuery(
-			urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteRecovery),
+			urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteRecovery),
 			url.Values{
 				"token": {token.Token},
 				"flow":  {req.ID.String()},
@@ -323,7 +323,7 @@ func (s *Strategy) recoveryIssueSession(w http.ResponseWriter, r *http.Request,
 		return
 	}
 
-	sess := session.NewActiveSession(recovered, s.d.Configuration(r.Context()), time.Now().UTC())
+	sess := session.NewActiveSession(recovered, s.d.Config(r.Context()), time.Now().UTC())
 	if err := s.d.SessionManager().CreateAndIssueCookie(r.Context(), w, r, sess); err != nil {
 		s.handleRecoveryError(w, r, f, nil, err)
 		return
@@ -335,13 +335,13 @@ func (s *Strategy) recoveryIssueSession(w http.ResponseWriter, r *http.Request,
 		return
 	}
 
-	sf.Messages.Set(text.NewRecoverySuccessful(time.Now().Add(s.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge())))
+	sf.Messages.Set(text.NewRecoverySuccessful(time.Now().Add(s.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge())))
 	if err := s.d.SettingsFlowPersister().UpdateSettingsFlow(r.Context(), sf); err != nil {
 		s.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 		return
 	}
 
-	http.Redirect(w, r, sf.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
+	http.Redirect(w, r, sf.AppendTo(s.d.Config(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusFound)
 }
 
 func (s *Strategy) recoveryUseToken(w http.ResponseWriter, r *http.Request, body *completeSelfServiceRecoveryFlowWithLinkMethodParameters) {
@@ -387,7 +387,7 @@ func (s *Strategy) recoveryUseToken(w http.ResponseWriter, r *http.Request, body
 func (s *Strategy) retryRecoveryFlowWithMessage(w http.ResponseWriter, r *http.Request, ft flow.Type, message *text.Message) {
 	s.d.Logger().WithRequest(r).WithField("message", message).Debug("A recovery flow is being retried because a validation error occurred.")
 
-	req, err := recovery.NewFlow(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.RecoveryStrategies(), ft)
+	req, err := recovery.NewFlow(s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.RecoveryStrategies(), ft)
 	if err != nil {
 		s.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 		return
@@ -400,11 +400,11 @@ func (s *Strategy) retryRecoveryFlowWithMessage(w http.ResponseWriter, r *http.R
 	}
 
 	if ft == flow.TypeBrowser {
-		http.Redirect(w, r, req.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
+		http.Redirect(w, r, req.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
 		return
 	}
 
-	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 		recovery.RouteGetFlow), url.Values{"id": {req.ID.String()}}).String(), http.StatusFound)
 }
 
@@ -421,7 +421,7 @@ func (s *Strategy) recoveryHandleFormSubmission(w http.ResponseWriter, r *http.R
 		return
 	}
 
-	if err := flow.VerifyRequest(r, req.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, body.Body.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, req.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, body.Body.CSRFToken); err != nil {
 		s.handleRecoveryError(w, r, req, body, err)
 		return
 	}
@@ -453,7 +453,7 @@ func (s *Strategy) recoveryHandleFormSubmission(w http.ResponseWriter, r *http.R
 	}
 
 	if req.Type == flow.TypeBrowser {
-		http.Redirect(w, r, req.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
+		http.Redirect(w, r, req.AppendTo(s.d.Config(r.Context()).SelfServiceFlowRecoveryUI()).String(), http.StatusFound)
 		return
 	}
 
diff --git a/selfservice/strategy/link/strategy_verification.go b/selfservice/strategy/link/strategy_verification.go
index 1aee1060b..7c627c045 100644
--- a/selfservice/strategy/link/strategy_verification.go
+++ b/selfservice/strategy/link/strategy_verification.go
@@ -45,7 +45,7 @@ func (s *Strategy) RegisterAdminVerificationRoutes(admin *x.RouterAdmin) {
 }
 
 func (s *Strategy) PopulateVerificationMethod(r *http.Request, req *verification.Flow) error {
-	f := form.NewHTMLForm(req.AppendTo(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteVerification)).String())
+	f := form.NewHTMLForm(req.AppendTo(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteVerification)).String())
 
 	f.SetCSRF(s.d.GenerateCSRFToken(r))
 	f.SetField(form.Field{Name: "email", Type: "email", Required: true})
@@ -170,7 +170,7 @@ type completeSelfServiceVerificationFlowWithLinkMethod struct {
 //       302: emptyResponse
 //       500: genericError
 func (s *Strategy) handleVerification(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
-	if !s.d.Configuration(r.Context()).SelfServiceStrategy(s.VerificationStrategyID()).Enabled {
+	if !s.d.Config(r.Context()).SelfServiceStrategy(s.VerificationStrategyID()).Enabled {
 		s.handleVerificationError(w, r, nil, nil, errors.WithStack(herodot.ErrBadRequest.WithReasonf("Verification using this method is not allowed because it was disabled.")))
 		return
 	}
@@ -226,7 +226,7 @@ func (s *Strategy) verificationHandleFormSubmission(w http.ResponseWriter, r *ht
 		return
 	}
 
-	if err := flow.VerifyRequest(r, f.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, body.Body.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, f.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, body.Body.CSRFToken); err != nil {
 		s.handleVerificationError(w, r, f, body, err)
 		return
 	}
@@ -258,7 +258,7 @@ func (s *Strategy) verificationHandleFormSubmission(w http.ResponseWriter, r *ht
 	}
 
 	if f.Type == flow.TypeBrowser {
-		http.Redirect(w, r, f.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
+		http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
 		return
 	}
 
@@ -332,14 +332,14 @@ func (s *Strategy) verificationUseToken(w http.ResponseWriter, r *http.Request,
 		return
 	}
 
-	http.Redirect(w, r, s.d.Configuration(r.Context()).SelfServiceFlowVerificationReturnTo(f.
-		AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowVerificationUI())).String(), http.StatusFound)
+	http.Redirect(w, r, s.d.Config(r.Context()).SelfServiceFlowVerificationReturnTo(f.
+		AppendTo(s.d.Config(r.Context()).SelfServiceFlowVerificationUI())).String(), http.StatusFound)
 }
 
 func (s *Strategy) retryVerificationFlowWithMessage(w http.ResponseWriter, r *http.Request, ft flow.Type, message *text.Message) {
 	s.d.Logger().WithRequest(r).WithField("message", message).Debug("A verification flow is being retried because a validation error occurred.")
 
-	req, err := verification.NewFlow(s.d.Configuration(r.Context()).SelfServiceFlowVerificationRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.VerificationStrategies(), ft)
+	req, err := verification.NewFlow(s.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.VerificationStrategies(), ft)
 	if err != nil {
 		s.d.SelfServiceErrorManager().Forward(r.Context(), w, r, err)
 		return
@@ -352,10 +352,10 @@ func (s *Strategy) retryVerificationFlowWithMessage(w http.ResponseWriter, r *ht
 	}
 
 	if ft == flow.TypeBrowser {
-		http.Redirect(w, r, req.AppendTo(s.d.Configuration(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
+		http.Redirect(w, r, req.AppendTo(s.d.Config(r.Context()).SelfServiceFlowVerificationUI()).String(), http.StatusFound)
 		return
 	}
 
-	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 		verification.RouteGetFlow), url.Values{"id": {req.ID.String()}}).String(), http.StatusFound)
 }
diff --git a/selfservice/strategy/oidc/strategy.go b/selfservice/strategy/oidc/strategy.go
index 2f883778e..bf2b5819a 100644
--- a/selfservice/strategy/oidc/strategy.go
+++ b/selfservice/strategy/oidc/strategy.go
@@ -48,7 +48,7 @@ var _ identity.ActiveCredentialsCounter = new(Strategy)
 type dependencies interface {
 	errorx.ManagementProvider
 
-	config.Providers
+	config.Provider
 
 	x.LoggingProvider
 	x.CookieProvider
@@ -292,7 +292,7 @@ func (s *Strategy) alreadyAuthenticated(w http.ResponseWriter, r *http.Request,
 		if _, ok := req.(*settings.Flow); ok {
 			// ignore this if it's a settings flow
 		} else if !isForced(req) {
-			http.Redirect(w, r, s.d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
+			http.Redirect(w, r, s.d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
 			return true
 		}
 	}
@@ -372,7 +372,7 @@ func uid(provider, subject string) string {
 
 func (s *Strategy) authURL(ctx context.Context, flowID uuid.UUID) string {
 	return urlx.AppendPaths(
-		urlx.Copy(s.d.Configuration(ctx).SelfPublicURL()),
+		urlx.Copy(s.d.Config(ctx).SelfPublicURL()),
 		strings.Replace(
 			RouteAuth, ":flow", flowID.String(), 1,
 		),
@@ -395,7 +395,7 @@ func (s *Strategy) populateMethod(r *http.Request, flowID uuid.UUID) (*FlowMetho
 func (s *Strategy) Config(ctx context.Context) (*ConfigurationCollection, error) {
 	var c ConfigurationCollection
 
-	conf := s.d.Configuration(ctx).SelfServiceStrategy(string(s.ID())).Config
+	conf := s.d.Config(ctx).SelfServiceStrategy(string(s.ID())).Config
 	if err := jsonx.
 		NewStrictDecoder(bytes.NewBuffer(conf)).
 		Decode(&c); err != nil {
@@ -409,7 +409,7 @@ func (s *Strategy) Config(ctx context.Context) (*ConfigurationCollection, error)
 func (s *Strategy) provider(ctx context.Context, id string) (Provider, error) {
 	if c, err := s.Config(ctx); err != nil {
 		return nil, err
-	} else if provider, err := c.Provider(id, s.d.Configuration(ctx).SelfPublicURL()); err != nil {
+	} else if provider, err := c.Provider(id, s.d.Config(ctx).SelfPublicURL()); err != nil {
 		return nil, err
 	} else {
 		return provider, nil
@@ -452,7 +452,7 @@ func (s *Strategy) handleError(w http.ResponseWriter, r *http.Request, rid uuid.
 			method.Config.ResetMessages()
 
 			method.Config.SetCSRF(s.d.GenerateCSRFToken(r))
-			if errSec := method.Config.SortFields(s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String()); errSec != nil {
+			if errSec := method.Config.SortFields(s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String()); errSec != nil {
 				s.d.RegistrationFlowErrorHandler().WriteFlowError(w, r, s.ID(), rr, errors.Wrap(err, errSec.Error()))
 				return
 			}
diff --git a/selfservice/strategy/oidc/strategy_registration.go b/selfservice/strategy/oidc/strategy_registration.go
index 41b211c58..71732efd8 100644
--- a/selfservice/strategy/oidc/strategy_registration.go
+++ b/selfservice/strategy/oidc/strategy_registration.go
@@ -115,7 +115,7 @@ func (s *Strategy) processRegistration(w http.ResponseWriter, r *http.Request, a
 		WithField("mapper_jsonnet_url", provider.Config().Mapper).
 		Debug("OpenID Connect Jsonnet mapper completed.")
 
-	option, err := decoderRegistration(s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String())
+	option, err := decoderRegistration(s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String())
 	if err != nil {
 		s.handleError(w, r, a.GetID(), provider.Config().ID, nil, err)
 		return
diff --git a/selfservice/strategy/oidc/strategy_settings.go b/selfservice/strategy/oidc/strategy_settings.go
index b90eb974a..d0753efd6 100644
--- a/selfservice/strategy/oidc/strategy_settings.go
+++ b/selfservice/strategy/oidc/strategy_settings.go
@@ -74,7 +74,7 @@ func (s *Strategy) linkedProviders(ctx context.Context, conf *ConfigurationColle
 
 	var result []Provider
 	for _, p := range available.Providers {
-		prov, err := conf.Provider(p.Provider, s.d.Configuration(ctx).SelfPublicURL())
+		prov, err := conf.Provider(p.Provider, s.d.Config(ctx).SelfPublicURL())
 		if err != nil {
 			return nil, err
 		}
@@ -104,7 +104,7 @@ func (s *Strategy) linkableProviders(ctx context.Context, conf *ConfigurationCol
 		}
 
 		if !found {
-			prov, err := conf.Provider(p.ID, s.d.Configuration(ctx).SelfPublicURL())
+			prov, err := conf.Provider(p.ID, s.d.Config(ctx).SelfPublicURL())
 			if err != nil {
 				return nil, err
 			}
@@ -141,7 +141,7 @@ func (s *Strategy) PopulateSettingsMethod(r *http.Request, id *identity.Identity
 	}
 
 	f := form.NewHTMLForm(urlx.CopyWithQuery(urlx.AppendPaths(
-		s.d.Configuration(r.Context()).SelfPublicURL(), SettingsPath), url.Values{"flow": {sr.ID.String()}}).String())
+		s.d.Config(r.Context()).SelfPublicURL(), SettingsPath), url.Values{"flow": {sr.ID.String()}}).String())
 	f.SetCSRF(s.d.GenerateCSRFToken(r))
 
 	for _, l := range linkable {
@@ -301,12 +301,12 @@ func (s *Strategy) initLinkProvider(w http.ResponseWriter, r *http.Request, ctxU
 		return
 	}
 
-	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
+	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
 		s.handleSettingsError(w, r, ctxUpdate, p, errors.WithStack(settings.NewFlowNeedsReAuth()))
 		return
 	}
 
-	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(),
+	http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(),
 		strings.Replace(RouteAuth, ":flow", p.FlowID, 1)),
 		url.Values{"provider": {p.Link}}).String(), http.StatusFound)
 }
@@ -315,7 +315,7 @@ func (s *Strategy) linkProvider(w http.ResponseWriter, r *http.Request,
 	ctxUpdate *settings.UpdateContext, claims *Claims, provider Provider) {
 	p := &completeSelfServiceBrowserSettingsOIDCFlowPayload{
 		Link: provider.Config().ID, FlowID: ctxUpdate.Flow.ID.String()}
-	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
+	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
 		s.handleSettingsError(w, r, ctxUpdate, p, errors.WithStack(settings.NewFlowNeedsReAuth()))
 		return
 	}
@@ -359,7 +359,7 @@ func (s *Strategy) linkProvider(w http.ResponseWriter, r *http.Request,
 
 func (s *Strategy) unlinkProvider(w http.ResponseWriter, r *http.Request,
 	ctxUpdate *settings.UpdateContext, p *completeSelfServiceBrowserSettingsOIDCFlowPayload) {
-	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
+	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
 		s.handleSettingsError(w, r, ctxUpdate, p, errors.WithStack(settings.NewFlowNeedsReAuth()))
 		return
 	}
diff --git a/selfservice/strategy/password/login.go b/selfservice/strategy/password/login.go
index 0d87ffe24..f8729bd17 100644
--- a/selfservice/strategy/password/login.go
+++ b/selfservice/strategy/password/login.go
@@ -115,14 +115,14 @@ func (s *Strategy) handleLogin(w http.ResponseWriter, r *http.Request, _ httprou
 		return
 	}
 
-	if err := flow.VerifyRequest(r, ar.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, ar.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
 		s.handleLoginError(w, r, ar, &p, err)
 		return
 	}
 
 	if _, err := s.d.SessionManager().FetchFromRequest(r.Context(), r); err == nil && !ar.Forced {
 		if ar.Type == flow.TypeBrowser {
-			http.Redirect(w, r, s.d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
+			http.Redirect(w, r, s.d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
 			return
 		}
 
@@ -177,7 +177,7 @@ func (s *Strategy) PopulateLoginMethod(r *http.Request, sr *login.Flow) error {
 	}
 
 	f := &form.HTMLForm{
-		Action: sr.AppendTo(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteLogin)).String(),
+		Action: sr.AppendTo(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteLogin)).String(),
 		Method: "POST",
 		Fields: form.Fields{{
 			Name:     "identifier",
diff --git a/selfservice/strategy/password/registration.go b/selfservice/strategy/password/registration.go
index 285f414e1..854dc3ac1 100644
--- a/selfservice/strategy/password/registration.go
+++ b/selfservice/strategy/password/registration.go
@@ -67,7 +67,7 @@ func (s *Strategy) handleRegistrationError(w http.ResponseWriter, r *http.Reques
 
 			method.Config.SetCSRF(s.d.GenerateCSRFToken(r))
 			rr.Methods[identity.CredentialsTypePassword] = method
-			if errSec := method.Config.SortFields(s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String()); errSec != nil {
+			if errSec := method.Config.SortFields(s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String()); errSec != nil {
 				s.d.RegistrationFlowErrorHandler().WriteFlowError(w, r, identity.CredentialsTypePassword, rr, errors.Wrap(err, errSec.Error()))
 				return
 			}
@@ -79,7 +79,7 @@ func (s *Strategy) handleRegistrationError(w http.ResponseWriter, r *http.Reques
 
 func (s *Strategy) decode(p *RegistrationFormPayload, r *http.Request) error {
 	raw, err := sjson.SetBytes(pkgerx.MustRead(pkger.Open("github.com/ory/kratos:/selfservice/strategy/password/.schema/registration.schema.json")),
-		"properties.traits.$ref", s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String()+"#/properties/traits")
+		"properties.traits.$ref", s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String()+"#/properties/traits")
 	if err != nil {
 		return errors.WithStack(err)
 	}
@@ -161,7 +161,7 @@ func (s *Strategy) handleRegistration(w http.ResponseWriter, r *http.Request, _
 		return
 	}
 
-	if err := flow.VerifyRequest(r, ar.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, ar.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
 		s.handleRegistrationError(w, r, ar, &p, err)
 		return
 	}
@@ -228,9 +228,9 @@ func (s *Strategy) validateCredentials(ctx context.Context, i *identity.Identity
 }
 
 func (s *Strategy) PopulateRegistrationMethod(r *http.Request, sr *registration.Flow) error {
-	action := sr.AppendTo(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteRegistration))
+	action := sr.AppendTo(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteRegistration))
 
-	htmlf, err := form.NewHTMLFormFromJSONSchema(action.String(), s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String(), "", nil)
+	htmlf, err := form.NewHTMLFormFromJSONSchema(action.String(), s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String(), "", nil)
 	if err != nil {
 		return err
 	}
@@ -239,7 +239,7 @@ func (s *Strategy) PopulateRegistrationMethod(r *http.Request, sr *registration.
 	htmlf.SetCSRF(s.d.GenerateCSRFToken(r))
 	htmlf.SetField(form.Field{Name: "password", Type: "password", Required: true})
 
-	if err := htmlf.SortFields(s.d.Configuration(r.Context()).DefaultIdentityTraitsSchemaURL().String()); err != nil {
+	if err := htmlf.SortFields(s.d.Config(r.Context()).DefaultIdentityTraitsSchemaURL().String()); err != nil {
 		return err
 	}
 
diff --git a/selfservice/strategy/password/settings.go b/selfservice/strategy/password/settings.go
index 5edca6487..7449a5aab 100644
--- a/selfservice/strategy/password/settings.go
+++ b/selfservice/strategy/password/settings.go
@@ -156,12 +156,12 @@ func (s *Strategy) continueSettingsFlow(
 	w http.ResponseWriter, r *http.Request,
 	ctxUpdate *settings.UpdateContext, p *CompleteSelfServiceSettingsFlowWithPasswordMethod,
 ) {
-	if err := flow.VerifyRequest(r, ctxUpdate.Flow.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, ctxUpdate.Flow.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
 		s.handleSettingsError(w, r, ctxUpdate, p, err)
 		return
 	}
 
-	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Configuration(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
+	if ctxUpdate.Session.AuthenticatedAt.Add(s.d.Config(r.Context()).SelfServiceFlowSettingsPrivilegedSessionMaxAge()).Before(time.Now()) {
 		s.handleSettingsError(w, r, ctxUpdate, p, errors.WithStack(settings.NewFlowNeedsReAuth()))
 		return
 	}
@@ -211,7 +211,7 @@ func (s *Strategy) continueSettingsFlow(
 }
 
 func (s *Strategy) PopulateSettingsMethod(r *http.Request, _ *identity.Identity, f *settings.Flow) error {
-	hf := &form.HTMLForm{Action: urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteSettings),
+	hf := &form.HTMLForm{Action: urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteSettings),
 		url.Values{"flow": {f.ID.String()}}).String(), Fields: form.Fields{{Name: "password",
 		Type: "password", Required: true}}, Method: "POST"}
 	hf.SetCSRF(s.d.GenerateCSRFToken(r))
diff --git a/selfservice/strategy/password/strategy.go b/selfservice/strategy/password/strategy.go
index 4d308cda2..24c54616e 100644
--- a/selfservice/strategy/password/strategy.go
+++ b/selfservice/strategy/password/strategy.go
@@ -31,7 +31,7 @@ type registrationStrategyDependencies interface {
 	x.CSRFTokenGeneratorProvider
 	x.CSRFProvider
 
-	config.Providers
+	config.Provider
 
 	continuity.ManagementProvider
 
diff --git a/selfservice/strategy/password/validator.go b/selfservice/strategy/password/validator.go
index c3d393ad7..b10c62a2f 100644
--- a/selfservice/strategy/password/validator.go
+++ b/selfservice/strategy/password/validator.go
@@ -61,7 +61,7 @@ type DefaultPasswordValidator struct {
 }
 
 type validatorDependencies interface {
-	config.Providers
+	config.Provider
 }
 
 func NewDefaultPasswordValidatorStrategy(reg validatorDependencies) *DefaultPasswordValidator {
@@ -166,7 +166,7 @@ func (s *DefaultPasswordValidator) Validate(ctx context.Context, identifier, pas
 
 	if !ok {
 		err := s.fetch(hpw)
-		if (errors.Is(err, ErrNetworkFailure) || errors.Is(err, ErrUnexpectedStatusCode)) && s.reg.Configuration(ctx).PasswordPolicyConfig().IgnoreNetworkErrors {
+		if (errors.Is(err, ErrNetworkFailure) || errors.Is(err, ErrUnexpectedStatusCode)) && s.reg.Config(ctx).PasswordPolicyConfig().IgnoreNetworkErrors {
 			return nil
 		} else if err != nil {
 			return err
@@ -175,7 +175,7 @@ func (s *DefaultPasswordValidator) Validate(ctx context.Context, identifier, pas
 		return s.Validate(ctx, identifier, password)
 	}
 
-	if c > int64(s.reg.Configuration(ctx).PasswordPolicyConfig().MaxBreaches) {
+	if c > int64(s.reg.Config(ctx).PasswordPolicyConfig().MaxBreaches) {
 		return errors.Errorf("the password has been found in at least %d data breaches and must no longer be used.", c)
 	}
 
diff --git a/selfservice/strategy/profile/strategy.go b/selfservice/strategy/profile/strategy.go
index ff21442c2..8b576d14f 100644
--- a/selfservice/strategy/profile/strategy.go
+++ b/selfservice/strategy/profile/strategy.go
@@ -44,7 +44,7 @@ type (
 		x.WriterProvider
 		x.LoggingProvider
 
-		config.Providers
+		config.Provider
 
 		continuity.ManagementProvider
 
@@ -92,7 +92,7 @@ func (s *Strategy) RegisterSettingsRoutes(public *x.RouterPublic) {
 }
 
 func (s *Strategy) PopulateSettingsMethod(r *http.Request, id *identity.Identity, pr *settings.Flow) error {
-	traitsSchema, err := s.d.Configuration(r.Context()).IdentityTraitsSchemas().FindSchemaByID(id.SchemaID)
+	traitsSchema, err := s.d.Config(r.Context()).IdentityTraitsSchemas().FindSchemaByID(id.SchemaID)
 	if err != nil {
 		return err
 	}
@@ -101,7 +101,7 @@ func (s *Strategy) PopulateSettingsMethod(r *http.Request, id *identity.Identity
 	schemaCompiler := jsonschema.NewCompiler()
 
 	f, err := form.NewHTMLFormFromJSONSchema(urlx.CopyWithQuery(
-		urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteSettings),
+		urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteSettings),
 		url.Values{"flow": {pr.ID.String()}},
 	).String(), traitsSchema.URL, "", schemaCompiler)
 	if err != nil {
@@ -208,7 +208,7 @@ func (s *Strategy) handleSubmit(w http.ResponseWriter, r *http.Request, ps httpr
 }
 
 func (s *Strategy) continueFlow(w http.ResponseWriter, r *http.Request, ctxUpdate *settings.UpdateContext, p *CompleteSelfServiceBrowserSettingsProfileStrategyFlow) {
-	if err := flow.VerifyRequest(r, ctxUpdate.Flow.Type, s.d.Configuration(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
+	if err := flow.VerifyRequest(r, ctxUpdate.Flow.Type, s.d.Config(r.Context()).DisableAPIFlowEnforcement(), s.d.GenerateCSRFToken, p.CSRFToken); err != nil {
 		s.handleSettingsError(w, r, ctxUpdate, nil, p, err)
 		return
 	}
@@ -279,7 +279,7 @@ func (p *CompleteSelfServiceBrowserSettingsProfileStrategyFlow) SetFlowID(rid uu
 }
 
 func (s *Strategy) hydrateForm(r *http.Request, ar *settings.Flow, ss *session.Session, traits json.RawMessage) error {
-	action := urlx.CopyWithQuery(urlx.AppendPaths(s.d.Configuration(r.Context()).SelfPublicURL(), RouteSettings),
+	action := urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(), RouteSettings),
 		url.Values{"flow": {ar.ID.String()}})
 
 	ar.Methods[settings.StrategyProfile].Config.Reset()
@@ -290,7 +290,7 @@ func (s *Strategy) hydrateForm(r *http.Request, ar *settings.Flow, ss *session.S
 	}
 	ar.Methods[settings.StrategyProfile].Config.SetCSRF(s.d.GenerateCSRFToken(r))
 
-	traitsSchema, err := s.d.Configuration(r.Context()).IdentityTraitsSchemas().FindSchemaByID(ss.Identity.SchemaID)
+	traitsSchema, err := s.d.Config(r.Context()).IdentityTraitsSchemas().FindSchemaByID(ss.Identity.SchemaID)
 	if err != nil {
 		return err
 	}
diff --git a/session/handler.go b/session/handler.go
index f52a4d794..f9f8d286f 100644
--- a/session/handler.go
+++ b/session/handler.go
@@ -205,11 +205,11 @@ func (h *Handler) IsNotAuthenticated(wrap httprouter.Handle, onAuthenticated htt
 	}
 }
 
-func RedirectOnAuthenticated(d interface{ config.Providers }) httprouter.Handle {
+func RedirectOnAuthenticated(d interface{ config.Provider }) httprouter.Handle {
 	return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
-		returnTo, err := x.SecureRedirectTo(r, d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo(), x.SecureRedirectAllowSelfServiceURLs(d.Configuration(r.Context()).SelfPublicURL()))
+		returnTo, err := x.SecureRedirectTo(r, d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo(), x.SecureRedirectAllowSelfServiceURLs(d.Config(r.Context()).SelfPublicURL()))
 		if err != nil {
-			http.Redirect(w, r, d.Configuration(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
+			http.Redirect(w, r, d.Config(r.Context()).SelfServiceBrowserDefaultReturnTo().String(), http.StatusFound)
 			return
 		}
 
diff --git a/session/manager_http.go b/session/manager_http.go
index 113caf914..11a163e46 100644
--- a/session/manager_http.go
+++ b/session/manager_http.go
@@ -18,7 +18,7 @@ import (
 
 type (
 	managerHTTPDependencies interface {
-		config.Providers
+		config.Provider
 		identity.PoolProvider
 		x.CookieProvider
 		x.CSRFProvider
@@ -51,8 +51,8 @@ func (s *ManagerHTTP) CreateAndIssueCookie(ctx context.Context, w http.ResponseW
 
 func (s *ManagerHTTP) IssueCookie(ctx context.Context, w http.ResponseWriter, r *http.Request, session *Session) error {
 	cookie, _ := s.r.CookieManager().Get(r, s.cookieName)
-	if s.r.Configuration(ctx).SessionDomain() != "" {
-		cookie.Options.Domain = s.r.Configuration(ctx).SessionDomain()
+	if s.r.Config(ctx).SessionDomain() != "" {
+		cookie.Options.Domain = s.r.Config(ctx).SessionDomain()
 	}
 
 	old, err := s.FetchFromRequest(ctx, r)
@@ -64,17 +64,17 @@ func (s *ManagerHTTP) IssueCookie(ctx context.Context, w http.ResponseWriter, r
 		_ = s.r.CSRFHandler().RegenerateToken(w, r)
 	}
 
-	if s.r.Configuration(ctx).SessionPath() != "" {
-		cookie.Options.Path = s.r.Configuration(ctx).SessionPath()
+	if s.r.Config(ctx).SessionPath() != "" {
+		cookie.Options.Path = s.r.Config(ctx).SessionPath()
 	}
 
-	if s.r.Configuration(ctx).SessionSameSiteMode() != 0 {
-		cookie.Options.SameSite = s.r.Configuration(ctx).SessionSameSiteMode()
+	if s.r.Config(ctx).SessionSameSiteMode() != 0 {
+		cookie.Options.SameSite = s.r.Config(ctx).SessionSameSiteMode()
 	}
 
 	cookie.Options.MaxAge = 0
-	if s.r.Configuration(ctx).SessionPersistentCookie() {
-		cookie.Options.MaxAge = int(s.r.Configuration(ctx).SessionLifespan().Seconds())
+	if s.r.Config(ctx).SessionPersistentCookie() {
+		cookie.Options.MaxAge = int(s.r.Config(ctx).SessionLifespan().Seconds())
 	}
 
 	cookie.Values["session_token"] = session.Token
diff --git a/session/persistence.go b/session/persistence.go
index 5fda957be..407117885 100644
--- a/session/persistence.go
+++ b/session/persistence.go
@@ -47,7 +47,7 @@ type Persister interface {
 	RevokeSessionByToken(ctx context.Context, token string) error
 }
 
-func TestPersister(conf *config.Provider, p interface {
+func TestPersister(conf *config.Config, p interface {
 	Persister
 	identity.PrivilegedPool
 }) func(t *testing.T) {
diff --git a/x/http_secure_redirect.go b/x/http_secure_redirect.go
index c61d39b96..093faae1f 100644
--- a/x/http_secure_redirect.go
+++ b/x/http_secure_redirect.go
@@ -106,7 +106,7 @@ func SecureRedirectTo(r *http.Request, defaultReturnTo *url.URL, opts ...SecureR
 
 func SecureContentNegotiationRedirection(
 	w http.ResponseWriter, r *http.Request, out interface{},
-	requestURL string, writer herodot.Writer, c *config.Provider,
+	requestURL string, writer herodot.Writer, c *config.Config,
 	opts ...SecureRedirectOption,
 ) error {
 	switch httputil.NegotiateContentType(r, []string{


Test patch:
diff --git a/driver/config/provider_viper_test.go b/driver/config/config_test.go
similarity index 95%
rename from driver/config/provider_viper_test.go
rename to driver/config/config_test.go
index 15591a6f4..755b46e25 100644
--- a/driver/config/provider_viper_test.go
+++ b/driver/config/config_test.go
@@ -67,11 +67,11 @@ func TestViperProvider(t *testing.T) {
 			ss := p.IdentityTraitsSchemas()
 			assert.Equal(t, 2, len(ss))
 
-			assert.Contains(t, ss, config.SchemaConfig{
+			assert.Contains(t, ss, config.Schema{
 				ID:  "default",
 				URL: "http://test.kratos.ory.sh/default-identity.schema.json",
 			})
-			assert.Contains(t, ss, config.SchemaConfig{
+			assert.Contains(t, ss, config.Schema{
 				ID:  "other",
 				URL: "http://test.kratos.ory.sh/other-identity.schema.json",
 			})
@@ -99,7 +99,7 @@ func TestViperProvider(t *testing.T) {
 				config  string
 				enabled bool
 			}{
-				{id: "password", enabled: true, config: `{}`},
+				{id: "password", enabled: true, config: `{"ignore_network_errors":true,"max_breaches":0}`},
 				{id: "oidc", enabled: true, config: `{"providers":[{"client_id":"a","client_secret":"b","id":"github","provider":"github","mapper_url":"http://test.kratos.ory.sh/default-identity.schema.json"}]}`},
 			} {
 				strategy := p.SelfServiceStrategy(tc.id)
@@ -224,7 +224,7 @@ func TestViperProvider(t *testing.T) {
 		})
 
 		t.Run("group=hashers", func(t *testing.T) {
-			assert.Equal(t, &config.HasherArgon2Config{Memory: 1048576, Iterations: 2, Parallelism: 4,
+			assert.Equal(t, &config.Argon2{Memory: 1048576, Iterations: 2, Parallelism: 4,
 				SaltLength: 16, KeyLength: 32}, p.HasherArgon2())
 		})
 
@@ -291,29 +291,29 @@ func TestViperProvider_Defaults(t *testing.T) {
 	l := logrusx.New("", "")
 
 	for k, tc := range []struct {
-		init   func() *config.Provider
-		expect func(t *testing.T, p *config.Provider)
+		init   func() *config.Config
+		expect func(t *testing.T, p *config.Config)
 	}{
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.SkipValidation())
 			},
 		},
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.WithConfigFiles("stub/.defaults.yml"), configx.SkipValidation())
 			},
 		},
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.WithConfigFiles("stub/.defaults-password.yml"), configx.SkipValidation())
 			},
 		},
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.WithConfigFiles("../../test/e2e/profiles/recovery/.kratos.yml"), configx.SkipValidation())
 			},
-			expect: func(t *testing.T, p *config.Provider) {
+			expect: func(t *testing.T, p *config.Config) {
 				assert.True(t, p.SelfServiceFlowRecoveryEnabled())
 				assert.False(t, p.SelfServiceFlowVerificationEnabled())
 				assert.True(t, p.SelfServiceStrategy("password").Enabled)
@@ -323,10 +323,10 @@ func TestViperProvider_Defaults(t *testing.T) {
 			},
 		},
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.WithConfigFiles("../../test/e2e/profiles/verification/.kratos.yml"), configx.SkipValidation())
 			},
-			expect: func(t *testing.T, p *config.Provider) {
+			expect: func(t *testing.T, p *config.Config) {
 				assert.False(t, p.SelfServiceFlowRecoveryEnabled())
 				assert.True(t, p.SelfServiceFlowVerificationEnabled())
 				assert.True(t, p.SelfServiceStrategy("password").Enabled)
@@ -336,10 +336,10 @@ func TestViperProvider_Defaults(t *testing.T) {
 			},
 		},
 		{
-			init: func() *config.Provider {
+			init: func() *config.Config {
 				return config.MustNew(l, configx.WithConfigFiles("../../test/e2e/profiles/oidc/.kratos.yml"), configx.SkipValidation())
 			},
-			expect: func(t *testing.T, p *config.Provider) {
+			expect: func(t *testing.T, p *config.Config) {
 				assert.False(t, p.SelfServiceFlowRecoveryEnabled())
 				assert.False(t, p.SelfServiceFlowVerificationEnabled())
 				assert.True(t, p.SelfServiceStrategy("password").Enabled)
diff --git a/driver/factory_test.go b/driver/factory_test.go
index 2e74e7232..de8204e7f 100644
--- a/driver/factory_test.go
+++ b/driver/factory_test.go
@@ -19,6 +19,6 @@ func TestDriverNew(t *testing.T) {
 		configx.WithValue(config.ViperKeyDSN, config.DefaultSQLiteMemoryDSN),
 		configx.SkipValidation())
 
-	assert.EqualValues(t, config.DefaultSQLiteMemoryDSN, r.Configuration(context.Background()).DSN())
+	assert.EqualValues(t, config.DefaultSQLiteMemoryDSN, r.Config(context.Background()).DSN())
 	require.NoError(t, r.Persister().Ping())
 }
diff --git a/driver/registry_default_schemas_test.go b/driver/registry_default_schemas_test.go
index 17ee0f5de..d8c863b06 100644
--- a/driver/registry_default_schemas_test.go
+++ b/driver/registry_default_schemas_test.go
@@ -26,7 +26,7 @@ func TestRegistryDefault_IdentityTraitsSchemas(t *testing.T) {
 	}
 
 	conf.MustSet(config.ViperKeyDefaultIdentitySchemaURL, defaultSchema.RawURL)
-	conf.MustSet(config.ViperKeyIdentitySchemas, []config.SchemaConfig{{ID: altSchema.ID, URL: altSchema.RawURL}})
+	conf.MustSet(config.ViperKeyIdentitySchemas, []config.Schema{{ID: altSchema.ID, URL: altSchema.RawURL}})
 
 	ss := reg.IdentityTraitsSchemas(context.Background())
 	assert.Equal(t, 2, len(ss))
diff --git a/driver/registry_default_test.go b/driver/registry_default_test.go
index 036826ec3..e8611893d 100644
--- a/driver/registry_default_test.go
+++ b/driver/registry_default_test.go
@@ -63,16 +63,16 @@ func TestDriverDefault_Hooks(t *testing.T) {
 
 func TestDriverDefault_Strategies(t *testing.T) {
 	for k, tc := range []struct {
-		prep   func(conf *config.Provider)
+		prep   func(conf *config.Config)
 		expect []string
 	}{
-		{prep: func(conf *config.Provider) {
+		{prep: func(conf *config.Config) {
 			conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".password.enabled", false)
 		}},
-		{prep: func(conf *config.Provider) {
+		{prep: func(conf *config.Config) {
 			conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".password.enabled", true)
 		}, expect: []string{"password"}},
-		{prep: func(conf *config.Provider) {
+		{prep: func(conf *config.Config) {
 			conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".oidc.enabled", true)
 			conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".password.enabled", true)
 		}, expect: []string{"password", "oidc"}},
@@ -101,13 +101,13 @@ func TestDriverDefault_Strategies(t *testing.T) {
 
 	t.Run("case=recovery", func(t *testing.T) {
 		for k, tc := range []struct {
-			prep   func(conf *config.Provider)
+			prep   func(conf *config.Config)
 			expect []string
 		}{
-			{prep: func(conf *config.Provider) {
+			{prep: func(conf *config.Config) {
 				conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".link.enabled", false)
 			}},
-			{prep: func(conf *config.Provider) {
+			{prep: func(conf *config.Config) {
 				conf.MustSet(config.ViperKeySelfServiceStrategyConfig+".link.enabled", true)
 			}, expect: []string{"link"}},
 		} {
@@ -128,11 +128,11 @@ func TestDriverDefault_Strategies(t *testing.T) {
 		l := logrusx.New("", "")
 
 		for k, tc := range []struct {
-			prep   func(t *testing.T) *config.Provider
+			prep   func(t *testing.T) *config.Config
 			expect []string
 		}{
 			{
-				prep: func(t *testing.T) *config.Provider {
+				prep: func(t *testing.T) *config.Config {
 					c := config.MustNew(l,
 						configx.WithValues(map[string]interface{}{
 							config.ViperKeyDSN: config.DefaultSQLiteMemoryDSN,
@@ -144,7 +144,7 @@ func TestDriverDefault_Strategies(t *testing.T) {
 					return c
 				}},
 			{
-				prep: func(t *testing.T) *config.Provider {
+				prep: func(t *testing.T) *config.Config {
 					c := config.MustNew(l,
 						configx.WithValues(map[string]interface{}{
 							config.ViperKeyDSN: config.DefaultSQLiteMemoryDSN,
@@ -156,7 +156,7 @@ func TestDriverDefault_Strategies(t *testing.T) {
 				},
 				expect: []string{"profile"}},
 			{
-				prep: func(t *testing.T) *config.Provider {
+				prep: func(t *testing.T) *config.Config {
 					return config.MustNew(l,
 						configx.WithValues(map[string]interface{}{
 							config.ViperKeyDSN: config.DefaultSQLiteMemoryDSN,
@@ -165,7 +165,7 @@ func TestDriverDefault_Strategies(t *testing.T) {
 				},
 				expect: []string{"password", "profile"}},
 			{
-				prep: func(t *testing.T) *config.Provider {
+				prep: func(t *testing.T) *config.Config {
 					return config.MustNew(l,
 						configx.WithConfigFiles("../test/e2e/profiles/verification/.kratos.yml"),
 						configx.WithValue(config.ViperKeyDSN, config.DefaultSQLiteMemoryDSN),
diff --git a/identity/validator_test.go b/identity/validator_test.go
index c0357956b..060a270c6 100644
--- a/identity/validator_test.go
+++ b/identity/validator_test.go
@@ -57,7 +57,7 @@ func TestSchemaValidator(t *testing.T) {
 
 	conf, reg := internal.NewFastRegistryWithMocks(t)
 	conf.MustSet(config.ViperKeyDefaultIdentitySchemaURL, ts.URL+"/schema/firstName")
-	conf.MustSet(config.ViperKeyIdentitySchemas, []config.SchemaConfig{
+	conf.MustSet(config.ViperKeyIdentitySchemas, []config.Schema{
 		{ID: "whatever", URL: ts.URL + "/schema/whatever"},
 		{ID: "unreachable-url", URL: ts.URL + "/404-not-found"},
 	})
diff --git a/internal/testhelpers/errorx.go b/internal/testhelpers/errorx.go
index d88627948..d417783f6 100644
--- a/internal/testhelpers/errorx.go
+++ b/internal/testhelpers/errorx.go
@@ -21,7 +21,7 @@ import (
 
 func NewErrorTestServer(t *testing.T, reg interface {
 	errorx.PersistenceProvider
-	config.Providers
+	config.Provider
 }) *httptest.Server {
 	logger := logrusx.New("", "", logrusx.ForceLevel(logrus.TraceLevel))
 	writer := herodot.NewJSONWriter(logger)
@@ -32,11 +32,11 @@ func NewErrorTestServer(t *testing.T, reg interface {
 		writer.Write(w, r, e.Errors)
 	}))
 	t.Cleanup(ts.Close)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceErrorUI, ts.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceErrorUI, ts.URL)
 	return ts
 }
 
-func NewRedirTS(t *testing.T, body string, conf *config.Provider) *httptest.Server {
+func NewRedirTS(t *testing.T, body string, conf *config.Config) *httptest.Server {
 	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		if len(body) == 0 {
 			w.WriteHeader(http.StatusNoContent)
@@ -52,7 +52,7 @@ func NewRedirTS(t *testing.T, body string, conf *config.Provider) *httptest.Serv
 func NewRedirSessionEchoTS(t *testing.T, reg interface {
 	x.WriterProvider
 	session.ManagementProvider
-	config.Providers
+	config.Provider
 }) *httptest.Server {
 	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		sess, err := reg.SessionManager().FetchFromRequest(r.Context(), r)
@@ -60,6 +60,6 @@ func NewRedirSessionEchoTS(t *testing.T, reg interface {
 		reg.Writer().Write(w, r, sess)
 	}))
 	t.Cleanup(ts.Close)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL+"/return-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL+"/return-ts")
 	return ts
 }
diff --git a/internal/testhelpers/handler_mock.go b/internal/testhelpers/handler_mock.go
index 25789b417..f73fcbd49 100644
--- a/internal/testhelpers/handler_mock.go
+++ b/internal/testhelpers/handler_mock.go
@@ -27,10 +27,10 @@ type mockDeps interface {
 	identity.PrivilegedPoolProvider
 	session.ManagementProvider
 	session.PersistenceProvider
-	config.Providers
+	config.Provider
 }
 
-func MockSetSession(t *testing.T, reg mockDeps, conf *config.Provider) httprouter.Handle {
+func MockSetSession(t *testing.T, reg mockDeps, conf *config.Config) httprouter.Handle {
 	return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
 		i := identity.NewIdentity(config.DefaultIdentityTraitsSchemaID)
 		require.NoError(t, reg.PrivilegedIdentityPool().CreateIdentity(context.Background(), i))
@@ -53,7 +53,7 @@ func MockGetSession(t *testing.T, reg mockDeps) httprouter.Handle {
 	}
 }
 
-func MockMakeAuthenticatedRequest(t *testing.T, reg mockDeps, conf *config.Provider, router *httprouter.Router, req *http.Request) ([]byte, *http.Response) {
+func MockMakeAuthenticatedRequest(t *testing.T, reg mockDeps, conf *config.Config, router *httprouter.Router, req *http.Request) ([]byte, *http.Response) {
 	set := "/" + uuid.New().String() + "/set"
 	router.GET(set, MockSetSession(t, reg, conf))
 
@@ -101,8 +101,8 @@ func MockSessionCreateHandlerWithIdentity(t *testing.T, reg mockDeps, i *identit
 	sess.ExpiresAt = time.Now().UTC().Add(time.Hour * 24)
 	sess.Active = true
 
-	if reg.Configuration(context.Background()).Source().String(config.ViperKeyDefaultIdentitySchemaURL) == internal.UnsetDefaultIdentitySchema {
-		reg.Configuration(context.Background()).MustSet(config.ViperKeyDefaultIdentitySchemaURL, "file://./stub/fake-session.schema.json")
+	if reg.Config(context.Background()).Source().String(config.ViperKeyDefaultIdentitySchemaURL) == internal.UnsetDefaultIdentitySchema {
+		reg.Config(context.Background()).MustSet(config.ViperKeyDefaultIdentitySchemaURL, "file://./stub/fake-session.schema.json")
 	}
 
 	require.NoError(t, reg.PrivilegedIdentityPool().CreateIdentity(context.Background(), i))
diff --git a/internal/testhelpers/identity_schema.go b/internal/testhelpers/identity_schema.go
index b2235c492..c91dbe451 100644
--- a/internal/testhelpers/identity_schema.go
+++ b/internal/testhelpers/identity_schema.go
@@ -9,17 +9,17 @@ import (
 // SetDefaultIdentitySchema sets the identity schemas in viper config:
 //
 //	testhelpers.SetDefaultIdentitySchema("file://customer.json")
-func SetDefaultIdentitySchema(t *testing.T, conf *config.Provider, location string) {
+func SetDefaultIdentitySchema(t *testing.T, conf *config.Config, location string) {
 	conf.MustSet(config.ViperKeyDefaultIdentitySchemaURL, location)
 }
 
 // SetIdentitySchemas sets the identity schemas in viper config:
 //
 //	testhelpers.SetIdentitySchemas(map[string]string{"customer": "file://customer.json"})
-func SetIdentitySchemas(t *testing.T, conf *config.Provider, schemas map[string]string) {
-	var s []config.SchemaConfig
+func SetIdentitySchemas(t *testing.T, conf *config.Config, schemas map[string]string) {
+	var s []config.Schema
 	for id, location := range schemas {
-		s = append(s, config.SchemaConfig{ID: id, URL: location})
+		s = append(s, config.Schema{ID: id, URL: location})
 	}
 
 	conf.MustSet(config.ViperKeyIdentitySchemas, s)
diff --git a/internal/testhelpers/selfservice.go b/internal/testhelpers/selfservice.go
index 8c83655ab..f7ccfb112 100644
--- a/internal/testhelpers/selfservice.go
+++ b/internal/testhelpers/selfservice.go
@@ -25,7 +25,7 @@ func TestSelfServicePreHook(
 	configKey string,
 	makeRequestPre func(t *testing.T, ts *httptest.Server) (*http.Response, string),
 	newServer func(t *testing.T) *httptest.Server,
-	conf *config.Provider,
+	conf *config.Config,
 ) func(t *testing.T) {
 	return func(t *testing.T) {
 		t.Run("case=pass without hooks", func(t *testing.T) {
@@ -87,7 +87,7 @@ func SelfServiceHookFakeIdentity(t *testing.T) *identity.Identity {
 	return &i
 }
 
-func SelfServiceHookConfigReset(t *testing.T, conf *config.Provider) func() {
+func SelfServiceHookConfigReset(t *testing.T, conf *config.Config) func() {
 	return func() {
 		conf.MustSet(config.ViperKeySelfServiceLoginAfter, nil)
 		conf.MustSet(config.ViperKeySelfServiceLoginBeforeHooks, nil)
@@ -97,35 +97,35 @@ func SelfServiceHookConfigReset(t *testing.T, conf *config.Provider) func() {
 	}
 }
 
-func SelfServiceHookSettingsSetDefaultRedirectTo(t *testing.T, conf *config.Provider, value string) {
+func SelfServiceHookSettingsSetDefaultRedirectTo(t *testing.T, conf *config.Config, value string) {
 	conf.MustSet(config.ViperKeySelfServiceSettingsAfter+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookSettingsSetDefaultRedirectToStrategy(t *testing.T, conf *config.Provider, strategy, value string) {
+func SelfServiceHookSettingsSetDefaultRedirectToStrategy(t *testing.T, conf *config.Config, strategy, value string) {
 	conf.MustSet(config.ViperKeySelfServiceSettingsAfter+"."+strategy+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookLoginSetDefaultRedirectTo(t *testing.T, conf *config.Provider, value string) {
+func SelfServiceHookLoginSetDefaultRedirectTo(t *testing.T, conf *config.Config, value string) {
 	conf.MustSet(config.ViperKeySelfServiceLoginAfter+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookLoginSetDefaultRedirectToStrategy(t *testing.T, conf *config.Provider, strategy, value string) {
+func SelfServiceHookLoginSetDefaultRedirectToStrategy(t *testing.T, conf *config.Config, strategy, value string) {
 	conf.MustSet(config.ViperKeySelfServiceLoginAfter+"."+strategy+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookRegistrationSetDefaultRedirectTo(t *testing.T, conf *config.Provider, value string) {
+func SelfServiceHookRegistrationSetDefaultRedirectTo(t *testing.T, conf *config.Config, value string) {
 	conf.MustSet(config.ViperKeySelfServiceRegistrationAfter+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookRegistrationSetDefaultRedirectToStrategy(t *testing.T, conf *config.Provider, strategy, value string) {
+func SelfServiceHookRegistrationSetDefaultRedirectToStrategy(t *testing.T, conf *config.Config, strategy, value string) {
 	conf.MustSet(config.ViperKeySelfServiceRegistrationAfter+"."+strategy+"."+config.DefaultBrowserReturnURL, value)
 }
 
-func SelfServiceHookLoginViperSetPost(t *testing.T, conf *config.Provider, strategy string, c []config.SelfServiceHook) {
+func SelfServiceHookLoginViperSetPost(t *testing.T, conf *config.Config, strategy string, c []config.SelfServiceHook) {
 	conf.MustSet(config.HookStrategyKey(config.ViperKeySelfServiceLoginAfter, strategy), c)
 }
 
-func SelfServiceHookRegistrationViperSetPost(t *testing.T, conf *config.Provider, strategy string, c []config.SelfServiceHook) {
+func SelfServiceHookRegistrationViperSetPost(t *testing.T, conf *config.Config, strategy string, c []config.SelfServiceHook) {
 	conf.MustSet(config.HookStrategyKey(config.ViperKeySelfServiceRegistrationAfter, strategy), c)
 }
 
diff --git a/internal/testhelpers/selfservice_login.go b/internal/testhelpers/selfservice_login.go
index c5a76343b..fae24a991 100644
--- a/internal/testhelpers/selfservice_login.go
+++ b/internal/testhelpers/selfservice_login.go
@@ -31,12 +31,12 @@ func NewLoginUIFlowEchoServer(t *testing.T, reg driver.Registry) *httptest.Serve
 		require.NoError(t, err)
 		reg.Writer().Write(w, r, e)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login-ts")
 	t.Cleanup(ts.Close)
 	return ts
 }
 
-func NewLoginUIWith401Response(t *testing.T, c *config.Provider) *httptest.Server {
+func NewLoginUIWith401Response(t *testing.T, c *config.Config) *httptest.Server {
 	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		w.WriteHeader(http.StatusUnauthorized)
 	}))
diff --git a/internal/testhelpers/selfservice_recovery.go b/internal/testhelpers/selfservice_recovery.go
index e1ece201c..76a189d51 100644
--- a/internal/testhelpers/selfservice_recovery.go
+++ b/internal/testhelpers/selfservice_recovery.go
@@ -32,7 +32,7 @@ func NewVerificationUIFlowEchoServer(t *testing.T, reg driver.Registry) *httptes
 		require.NoError(t, err)
 		reg.Writer().Write(w, r, e)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceVerificationUI, ts.URL+"/verification-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceVerificationUI, ts.URL+"/verification-ts")
 	t.Cleanup(ts.Close)
 	return ts
 }
diff --git a/internal/testhelpers/selfservice_registration.go b/internal/testhelpers/selfservice_registration.go
index dc95a60ab..701c719e8 100644
--- a/internal/testhelpers/selfservice_registration.go
+++ b/internal/testhelpers/selfservice_registration.go
@@ -31,7 +31,7 @@ func NewRegistrationUIFlowEchoServer(t *testing.T, reg driver.Registry) *httptes
 		require.NoError(t, err)
 		reg.Writer().Write(w, r, e)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceRegistrationUI, ts.URL+"/registration-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceRegistrationUI, ts.URL+"/registration-ts")
 	t.Cleanup(ts.Close)
 	return ts
 }
diff --git a/internal/testhelpers/selfservice_settings.go b/internal/testhelpers/selfservice_settings.go
index f5be136b9..0944d5f03 100644
--- a/internal/testhelpers/selfservice_settings.go
+++ b/internal/testhelpers/selfservice_settings.go
@@ -39,7 +39,7 @@ func NewSettingsUIFlowEchoServer(t *testing.T, reg driver.Registry) *httptest.Se
 		require.NoError(t, err)
 		reg.Writer().Write(w, r, e)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings-ts")
 	t.Cleanup(ts.Close)
 	return ts
 }
@@ -116,7 +116,7 @@ func GetSettingsFlowMethodConfigDeprecated(t *testing.T, primaryUser *http.Clien
 	return rs.Payload.Methods[id].Config
 }
 
-func NewSettingsUITestServer(t *testing.T, conf *config.Provider) *httptest.Server {
+func NewSettingsUITestServer(t *testing.T, conf *config.Config) *httptest.Server {
 	router := httprouter.New()
 	router.GET("/settings", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
 		w.WriteHeader(http.StatusNoContent)
@@ -147,13 +147,13 @@ func NewSettingsUIEchoServer(t *testing.T, reg *driver.RegistryDefault) *httptes
 	ts := httptest.NewServer(router)
 	t.Cleanup(ts.Close)
 
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings")
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login")
 
 	return ts
 }
 
-func NewSettingsLoginAcceptAPIServer(t *testing.T, adminClient *client.OryKratos, conf *config.Provider) *httptest.Server {
+func NewSettingsLoginAcceptAPIServer(t *testing.T, adminClient *client.OryKratos, conf *config.Config) *httptest.Server {
 	var called int
 	loginTS := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		require.Equal(t, 0, called)
@@ -196,8 +196,8 @@ func NewSettingsAPIServer(t *testing.T, reg *driver.RegistryDefault, ids map[str
 	t.Cleanup(tsp.Close)
 	t.Cleanup(tsa.Close)
 
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyPublicBaseURL, tsp.URL)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyAdminBaseURL, tsa.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyPublicBaseURL, tsp.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyAdminBaseURL, tsa.URL)
 	return tsp, tsa, AddAndLoginIdentities(t, reg, &httptest.Server{Config: &http.Server{Handler: public}, URL: tsp.URL}, ids)
 }
 
diff --git a/internal/testhelpers/selfservice_verification.go b/internal/testhelpers/selfservice_verification.go
index bc9523d9b..8bd4cbfaf 100644
--- a/internal/testhelpers/selfservice_verification.go
+++ b/internal/testhelpers/selfservice_verification.go
@@ -32,7 +32,7 @@ func NewRecoveryUIFlowEchoServer(t *testing.T, reg driver.Registry) *httptest.Se
 		require.NoError(t, err)
 		reg.Writer().Write(w, r, e)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceRecoveryUI, ts.URL+"/recovery-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceRecoveryUI, ts.URL+"/recovery-ts")
 	t.Cleanup(ts.Close)
 	return ts
 }
diff --git a/internal/testhelpers/server.go b/internal/testhelpers/server.go
index a3b6b1c33..e22da8401 100644
--- a/internal/testhelpers/server.go
+++ b/internal/testhelpers/server.go
@@ -20,11 +20,11 @@ func NewKratosServerWithCSRF(t *testing.T, reg driver.Registry) (public, admin *
 	public = httptest.NewServer(x.NewTestCSRFHandler(rp, reg))
 	admin = httptest.NewServer(ra)
 
-	if len(reg.Configuration(context.Background()).Source().String(config.ViperKeySelfServiceLoginUI)) == 0 {
-		reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, "http://NewKratosServerWithCSRF/you-forgot-to-set-me/login")
+	if len(reg.Config(context.Background()).Source().String(config.ViperKeySelfServiceLoginUI)) == 0 {
+		reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, "http://NewKratosServerWithCSRF/you-forgot-to-set-me/login")
 	}
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyPublicBaseURL, public.URL)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyAdminBaseURL, admin.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyPublicBaseURL, public.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyAdminBaseURL, admin.URL)
 
 	reg.RegisterRoutes(rp, ra)
 
@@ -45,11 +45,11 @@ func NewKratosServerWithRouters(t *testing.T, reg driver.Registry, rp *x.RouterP
 }
 
 func InitKratosServers(t *testing.T, reg driver.Registry, public, admin *httptest.Server) {
-	if len(reg.Configuration(context.Background()).Source().String(config.ViperKeySelfServiceLoginUI)) == 0 {
-		reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, "http://NewKratosServerWithRouters/you-forgot-to-set-me/login")
+	if len(reg.Config(context.Background()).Source().String(config.ViperKeySelfServiceLoginUI)) == 0 {
+		reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, "http://NewKratosServerWithRouters/you-forgot-to-set-me/login")
 	}
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyPublicBaseURL, public.URL)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeyAdminBaseURL, admin.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyPublicBaseURL, public.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeyAdminBaseURL, admin.URL)
 
 	reg.RegisterRoutes(public.Config.Handler.(*x.RouterPublic), admin.Config.Handler.(*x.RouterAdmin))
 }
diff --git a/internal/testhelpers/strategies.go b/internal/testhelpers/strategies.go
index f75db73ab..d8f01873a 100644
--- a/internal/testhelpers/strategies.go
+++ b/internal/testhelpers/strategies.go
@@ -7,6 +7,6 @@ import (
 	"github.com/ory/kratos/driver/config"
 )
 
-func StrategyEnable(t *testing.T, c *config.Provider, strategy string, enable bool) {
+func StrategyEnable(t *testing.T, c *config.Config, strategy string, enable bool) {
 	c.MustSet(fmt.Sprintf("%s.%s.enabled", config.ViperKeySelfServiceStrategyConfig, strategy), enable)
 }
diff --git a/persistence/sql/persister_hmac_test.go b/persistence/sql/persister_hmac_test.go
index 0c2cbd14b..e87d45dab 100644
--- a/persistence/sql/persister_hmac_test.go
+++ b/persistence/sql/persister_hmac_test.go
@@ -20,7 +20,7 @@ import (
 
 type logRegistryOnly struct {
 	l *logrusx.Logger
-	c *config.Provider
+	c *config.Config
 }
 
 func (l *logRegistryOnly) IdentityTraitsSchemas(ctx context.Context) schema.Schemas {
@@ -38,7 +38,7 @@ func (l *logRegistryOnly) Logger() *logrusx.Logger {
 	return l.l
 }
 
-func (l *logRegistryOnly) Configuration(_ context.Context) *config.Provider {
+func (l *logRegistryOnly) Config(_ context.Context) *config.Config {
 	return l.c
 }
 
diff --git a/persistence/sql/persister_identity_test.go b/persistence/sql/persister_identity_test.go
index 6f1cba25d..88c62a1d1 100644
--- a/persistence/sql/persister_identity_test.go
+++ b/persistence/sql/persister_identity_test.go
@@ -29,7 +29,7 @@ func TestPersister_CreateIdentityRacy(t *testing.T) {
 
 		t.Run(fmt.Sprintf("db=%s", name), func(t *testing.T) {
 			var wg sync.WaitGroup
-			p.Configuration(context.Background()).MustSet(config.ViperKeyDefaultIdentitySchemaURL, defaultSchema.RawURL)
+			p.Config(context.Background()).MustSet(config.ViperKeyDefaultIdentitySchemaURL, defaultSchema.RawURL)
 
 			for i := 0; i < 10; i++ {
 				wg.Add(1)
diff --git a/persistence/sql/persister_test.go b/persistence/sql/persister_test.go
index ba89478b2..2575932d1 100644
--- a/persistence/sql/persister_test.go
+++ b/persistence/sql/persister_test.go
@@ -144,7 +144,7 @@ func TestPersister(t *testing.T) {
 	for name, reg := range conns {
 		t.Run(fmt.Sprintf("database=%s", name), func(t *testing.T) {
 			p := reg.Persister()
-			conf := reg.Configuration(context.Background())
+			conf := reg.Config(context.Background())
 
 			t.Logf("DSN: %s", conf.DSN())
 			t.Run("contract=identity.TestPool", func(t *testing.T) {
diff --git a/schema/handler_test.go b/schema/handler_test.go
index a88c03e9f..72eeade9f 100644
--- a/schema/handler_test.go
+++ b/schema/handler_test.go
@@ -81,10 +81,10 @@ func TestHandler(t *testing.T) {
 		return string(raw)
 	}
 
-	var schemasConfig []config.SchemaConfig
+	var schemasConfig []config.Schema
 	for _, s := range schemas {
 		if s.ID != config.DefaultIdentityTraitsSchemaID {
-			schemasConfig = append(schemasConfig, config.SchemaConfig{
+			schemasConfig = append(schemasConfig, config.Schema{
 				ID:  s.ID,
 				URL: s.RawURL,
 			})
diff --git a/selfservice/mfa/questions/config_test.go b/selfservice/mfa/questions/config_test.go
deleted file mode 100644
index 9ae28e9de..000000000
--- a/selfservice/mfa/questions/config_test.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package questions
-
-import (
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestConfig(t *testing.T) {
-	t.Run("method=recovery", func(t *testing.T) {
-		t.SkipNow()
-		assert.EqualValues(t, []RecoverySecurityQuestion{{ID: "foo", Label: "bar"}},
-			nil)
-		// p.SelfServiceRecoverySecurityQuestions())
-	})
-}
diff --git a/selfservice/strategy/link/strategy_test.go b/selfservice/strategy/link/strategy_test.go
index 800c3d400..95f1dd5a4 100644
--- a/selfservice/strategy/link/strategy_test.go
+++ b/selfservice/strategy/link/strategy_test.go
@@ -8,7 +8,7 @@ import (
 	"github.com/ory/kratos/selfservice/flow/recovery"
 )
 
-func initViper(t *testing.T, c *config.Provider) {
+func initViper(t *testing.T, c *config.Config) {
 	c.MustSet(config.ViperKeyDefaultIdentitySchemaURL, "file://./stub/default.schema.json")
 	c.MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, "https://www.ory.sh")
 	c.MustSet(config.ViperKeySelfServiceStrategyConfig+"."+identity.CredentialsTypePassword.String()+".enabled", true)
diff --git a/selfservice/strategy/oidc/strategy_helper_test.go b/selfservice/strategy/oidc/strategy_helper_test.go
index 3f78bf7d3..213ae3e88 100644
--- a/selfservice/strategy/oidc/strategy_helper_test.go
+++ b/selfservice/strategy/oidc/strategy_helper_test.go
@@ -157,7 +157,7 @@ func newReturnTs(t *testing.T, reg driver.Registry) *httptest.Server {
 		require.Empty(t, sess.Identity.Credentials)
 		reg.Writer().Write(w, r, sess)
 	}))
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL)
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL)
 	t.Cleanup(ts.Close)
 	return ts
 }
@@ -178,9 +178,9 @@ func newUI(t *testing.T, reg driver.Registry) *httptest.Server {
 		reg.Writer().Write(w, r, e)
 	}))
 	t.Cleanup(ts.Close)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login")
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceRegistrationUI, ts.URL+"/registration")
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceLoginUI, ts.URL+"/login")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceRegistrationUI, ts.URL+"/registration")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceSettingsURL, ts.URL+"/settings")
 	return ts
 }
 
@@ -252,7 +252,7 @@ func newOIDCProvider(
 	}
 }
 
-func viperSetProviderConfig(t *testing.T, conf *config.Provider, providers ...oidc.Configuration) {
+func viperSetProviderConfig(t *testing.T, conf *config.Config, providers ...oidc.Configuration) {
 	conf.MustSet(config.ViperKeySelfServiceStrategyConfig+"."+string(identity.CredentialsTypeOIDC),
 		map[string]interface{}{"enabled": true, "config": &oidc.ConfigurationCollection{Providers: providers}})
 }
diff --git a/selfservice/strategy/password/strategy_test.go b/selfservice/strategy/password/strategy_test.go
index 95dd71883..77c434edb 100644
--- a/selfservice/strategy/password/strategy_test.go
+++ b/selfservice/strategy/password/strategy_test.go
@@ -21,7 +21,7 @@ import (
 func newReturnTs(t *testing.T, reg interface {
 	session.ManagementProvider
 	x.WriterProvider
-	config.Providers
+	config.Provider
 }) *httptest.Server {
 	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		sess, err := reg.SessionManager().FetchFromRequest(r.Context(), r)
@@ -29,7 +29,7 @@ func newReturnTs(t *testing.T, reg interface {
 		reg.Writer().Write(w, r, sess)
 	}))
 	t.Cleanup(ts.Close)
-	reg.Configuration(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL+"/return-ts")
+	reg.Config(context.Background()).MustSet(config.ViperKeySelfServiceBrowserDefaultReturnTo, ts.URL+"/return-ts")
 	return ts
 }