diff --git a/lib/gat/gatcaddyfile/critic.go b/lib/gat/gatcaddyfile/critic.go
new file mode 100644
index 0000000000000000000000000000000000000000..c3411b20fe75c3d14c9d6b89f53bb7d6d87e7271
--- /dev/null
+++ b/lib/gat/gatcaddyfile/critic.go
@@ -0,0 +1,25 @@
+package gatcaddyfile
+
+import (
+	"github.com/caddyserver/caddy/v2"
+	"github.com/caddyserver/caddy/v2/caddyconfig"
+	"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
+
+	"gfx.cafe/gfx/pggat/lib/gat/handlers/pool/critics/latency"
+)
+
+func init() {
+	RegisterDirective(Critic, "latency", func(d *caddyfile.Dispenser, warnings *[]caddyconfig.Warning) (caddy.Module, error) {
+		if !d.NextArg() {
+			return nil, d.ArgErr()
+		}
+		threshold, err := caddy.ParseDuration(d.Val())
+		if err != nil {
+			return nil, d.WrapErr(err)
+		}
+
+		return &latency.Critic{
+			Threshold: caddy.Duration(threshold),
+		}, nil
+	})
+}
diff --git a/lib/gat/gatcaddyfile/pool.go b/lib/gat/gatcaddyfile/pool.go
index 78938db4b35ff9c6913b3f4a093efef0a060a61b..c43682431529698df15cdea966ac2cc7964dd840 100644
--- a/lib/gat/gatcaddyfile/pool.go
+++ b/lib/gat/gatcaddyfile/pool.go
@@ -146,6 +146,22 @@ func init() {
 					}
 
 					module.TrackedParameters = append(module.TrackedParameters, strutil.MakeCIString(d.Val()))
+				case "penalize":
+					if !d.NextArg() {
+						return nil, d.ArgErr()
+					}
+
+					critic, err := UnmarshalDirectiveJSONModuleObject(
+						d,
+						Critic,
+						"critic",
+						warnings,
+					)
+					if err != nil {
+						return nil, err
+					}
+
+					module.RawCritics = append(module.RawCritics, critic)
 				default:
 					return nil, d.ArgErr()
 				}
@@ -221,6 +237,22 @@ func init() {
 					}
 
 					module.TrackedParameters = append(module.TrackedParameters, strutil.MakeCIString(d.Val()))
+				case "penalize":
+					if !d.NextArg() {
+						return nil, d.ArgErr()
+					}
+
+					critic, err := UnmarshalDirectiveJSONModuleObject(
+						d,
+						Critic,
+						"critic",
+						warnings,
+					)
+					if err != nil {
+						return nil, err
+					}
+
+					module.RawCritics = append(module.RawCritics, critic)
 				default:
 					return nil, d.ArgErr()
 				}
diff --git a/lib/gat/gatcaddyfile/unmarshallers.go b/lib/gat/gatcaddyfile/unmarshallers.go
index dff13ab03dabff03e7551e73e7f99222380bd194..a9308a297135ae8e5da353a9e8273c84065c1142 100644
--- a/lib/gat/gatcaddyfile/unmarshallers.go
+++ b/lib/gat/gatcaddyfile/unmarshallers.go
@@ -17,6 +17,7 @@ const (
 	Matcher            = "pggat.matchers"
 	Pool               = "pggat.handlers.pool.pools"
 	Pooler             = "pggat.handlers.pool.poolers"
+	Critic             = "pggat.handlers.pool.critics"
 	SSLServer          = "pggat.ssl.servers"
 	SSLClient          = "pggat.ssl.clients"
 )