LLM Gateway: Routing, Enforcement, and Compliance (September 2026)

Published September 17, 202618 min read

When a regulator asks which model processed a customer request, with what prompt, at what time, the answer should take seconds. For most teams running direct provider integrations, it takes days, or doesn't exist. An LLM gateway is how you build the architecture where that answer is always ready, and this post covers what that architecture looks like in practice.

TLDR:

  • An LLM gateway intercepts every request before it reaches a provider, making prompt injection blocking and PII redaction enforceable at the infrastructure layer instead of per-application.
  • Without a gateway, per-team controls create inconsistent coverage: one caller strips PII, another sends raw PHI directly to the provider API.
  • HIPAA violations carry penalties up to $1.9 million per violation category per year (inflation-adjusted); GDPR runs up to €20 million or 4% of global annual turnover, whichever is higher, making gateway-layer redaction a compliance requirement.
  • EU AI Act Article 12 requires logs capturing model version, policy version, enforcement action, and timestamp per request; storing full prompt payloads by default creates a GDPR Article 30 liability.
  • Openlayer's managed gateway runs five discrete enforcement actions per request across OpenAI, Anthropic, Azure, and OpenRouter, with policy definitions traveling from pre-deployment evaluation into production enforcement gates.

What an LLM gateway actually does

At its core, an LLM gateway is a reverse proxy that sits between your applications and one or more LLM provider APIs. Every request your application sends to OpenAI, Anthropic, Azure, or any other provider passes through the gateway first. Authentication, routing, rate limiting, caching, logging: the gateway owns all of it, across every provider, from a single integration point.

But request-level control is where traditional API gateways stop. An LLM gateway goes deeper because AI traffic has properties that HTTP traffic does not. Requests carry prompts, natural language that can contain injected instructions, PII pulled from upstream context, or attempts to redirect the model's behavior. Responses carry generated content that may hallucinate, leak sensitive data, or violate a policy your organization has committed to upholding. A gateway that only inspects headers and routes by endpoint sees none of this.

Here is what AI-specific gateways add beyond standard request routing:

  • Token-based rate limits that count against actual model consumption, beyond request volume alone, so a single verbose prompt does not silently exhaust a budget that request-count limits would never catch.
  • Semantic caching that recognizes functionally equivalent prompts and serves cached responses, reducing token costs without sacrificing output quality.
  • Prompt inspection before the request leaves your perimeter, giving the gateway a chance to detect injected instructions or PII before they reach the model.
  • Content-level policy enforcement on responses before they reach downstream systems. Observation alone is not enough here; a gateway that logs a policy violation after delivery has not enforced anything.

The gateway's role is the one architectural layer where every inference event is visible before it executes and before its output propagates. That visibility is what makes every security and compliance control discussed in the rest of this piece structurally possible.

Why direct provider integrations create a governance gap

Without a gateway, each application team manages its own provider credentials, its own rate limits, and its own logging setup. The result is credential sprawl across dozens of API keys with no centralized revocation path, spend fragmented across cost centers with no unified attribution, and audit trails that exist per-application if they exist at all.

The compliance consequence is concrete: when a regulator or internal audit asks which model processed a customer request, with what prompt, at what time, there is no single place to answer it. Each application team has a different answer, in a different format, stored in a different system.

Security controls break the same way. There are three failure patterns that appear consistently across teams operating without a gateway:

  • One team applies PII redaction before sending requests to a provider. Another does not. Without a gateway enforcing redaction at the infrastructure layer, sensitive data reaches the provider API depending entirely on which team built the caller.
  • One application blocks prompt injection attempts at the app layer. Another sends raw user input directly to the provider. The control exists in one place and is absent in another, with no mechanism to detect or correct the inconsistency.
  • Shadow AI compounds both problems. When connecting to a provider API requires only an API key and an HTTP client, teams add new models without going through any review process. Those deployments never enter an inventory, never get reviewed, and never get monitored.

The structural issue is that per-application controls are applied at the wrong layer. Every request passes through the infrastructure layer regardless of which team built the caller. That is where consistent enforcement needs to live.

The LLM gateway threat model

LLM traffic carries attack surfaces that standard web application security frameworks were not built to handle. The OWASP LLM Top 10 ranks prompt injection as the leading risk for the second consecutive edition. The gateway is the correct interception point for each threat below because it sits on the request path before the model sees the input and before the response reaches any downstream system.

  • Prompt injection (direct and indirect): Direct injection embeds instructions in user input. Indirect injection hides them in retrieved documents, tool outputs, or external data sources the model reads mid-workflow. The gateway intercepts the full request payload before it reaches the provider, making it the only layer that sees both user-supplied and retrieved content before the model processes them together.
  • Sensitive information disclosure: PII, credentials, or confidential business data can appear in prompts, retrieved context, or model responses. Application-layer redaction is inconsistent across teams. The gateway enforces redaction uniformly on every request and response, regardless of which caller generated them.
  • Insecure output handling: Generated content passed downstream without inspection can trigger XSS, inject commands into logs, or supply false information to dependent systems. The gateway intercepts responses before delivery and applies content-level policy checks that application code often skips.
  • Excessive agency in agentic systems: When an agent can invoke tools, write to databases, or call external APIs, a single compromised step propagates through every subsequent action in the chain. The gateway enforces tool allowlists at the infrastructure layer, blocking unauthorized invocations before they execute, not logging them after.
  • Supply chain vulnerabilities via plugins and integrations: Third-party tools and MCP servers introduced into agent workflows expand the attack surface beyond the primary model. The gateway scopes which external endpoints agents are permitted to call, making unapproved integrations visible and blockable before they run.

The structural argument is consistent across all five: the gateway owns the only position in the architecture where every inference event, from every caller, passes through a single enforcement point before any action is taken or any output delivered.

Prompt injection defense at the gateway layer

Prompt injection exploits the model's own design: the model cannot reliably distinguish between instructions you wrote and instructions an attacker embedded in user input or a retrieved document. There is no patch for this. Defense in depth across the request path is the only viable approach.

Three layers matter at the gateway:

  • Input validation before the request leaves your perimeter. The gateway inspects the prompt payload for known injection patterns before forwarding to the provider. Classifier-based detection can catch high-confidence direct injection attempts, but pattern matching has limits: novel phrasings and obfuscated instructions slip through. Openlayer enforces a specific enforcement threshold here: chunks where injection-pattern classifiers exceed a 0.85 confidence score are flagged and routed to a secondary review path instead of hard-blocked, preserving usefulness on legitimate tasks while enforcing controls.
  • Indirect injection defense in retrieval pipelines. Retrieved documents, tool outputs, and external data sources all arrive mid-workflow after the initial input validation step. A malicious instruction embedded in a retrieved chunk bypasses user-input classifiers entirely because it arrives as "context," not as user input. Gateway-level defense here requires inspecting retrieved content before it enters the context window. This is a distinct pipeline position with distinct latency tradeoffs: scanning retrieved chunks adds overhead on every RAG call.
  • Output verification against the original task specification. Even when injection attempts pass input inspection, goal-drift in the model's output is detectable. The gateway compares the final response against the original task specification and blocks responses that represent an unexplained deviation. The model itself cannot be relied on to recognize it has been redirected; the output verification layer catches drift before the response exits the API boundary. That blocking step is enforcement. Logging the deviation afterward is not.

What the gateway cannot reliably catch: semantically sophisticated injections that produce responses plausible enough to pass automated verification, and multi-step injections that accumulate influence across turns before producing a detectable output. Defense in depth reduces exposure; it does not eliminate it.

PII detection and redaction in the request path

Gateway-layer PII detection runs in two directions. Outbound: prompts are inspected before they reach the provider, catching PHI, credentials, or customer records that application code failed to strip. Inbound: responses are inspected before they reach the user or any downstream system, catching PII in LLM outputs that the model surfaced from its training data or from retrieved context.

Pattern matching catches the obvious cases: SSNs, credit card numbers, phone numbers with consistent formats. But it misses the cases that create real liability. A name in a query template is not a PII exposure. The same name appearing in retrieved customer records, passed as context to the model, and then reflected in the response is. Openlayer's context-aware PII detection distinguishes between these two cases at the gateway layer, making the enforcement decision based on where the data came from, and not solely on whether the string matches a regex.

For HIPAA and GDPR, the stakes make this a hard requirement. HIPAA violations carry penalties up to $1.9 million per violation category per year (the current inflation-adjusted cap as of 2024). GDPR enforcement runs up to €20 million or 4% of global annual turnover. Both frameworks require that PHI and personal data not leave a controlled processing boundary without appropriate safeguards. When an application sends a user prompt containing PHI to an external model provider, that provider becomes a data processor under both frameworks. If the transmission happens without a BAA under HIPAA or appropriate data processing agreements under GDPR, the gateway forwarded a compliance violation with every request.

Data sovereignty adds a network topology constraint on top of the detection logic. For regulated industries, PII detection cannot happen in an external scanning service sitting between the application and the provider. The inspection must occur inside the customer's network perimeter before the data moves. That constraint is what makes on-premise or private VPC gateway deployment a compliance requirement, not an infrastructure preference.

Audit logging: what to capture and what not to store

Compliance-grade audit logging at the gateway layer has to satisfy two obligations that pull in opposite directions. Regulators want enough information to reconstruct what your system did. Privacy law limits how much of that information you can retain and where.

EU AI Act technical documentation requirements under Article 12 require that high-risk systems listed under Annex III log sufficient information to reconstruct system behavior after deployment. That minimum includes: the model version that processed the request, the policy version applied at the time of that request, the enforcement action taken (allow, warn, block, redact, or escalate), and a precise timestamp. Without model version in the log, you cannot determine whether a failure predates or postdates a model update. Without the policy version, you cannot confirm what rules were in force when an enforcement decision was made.

What you probably should not log by default is the full prompt and response payload. Storing verbatim conversation content at scale introduces a GDPR Article 30 records-of-processing obligation and creates a secondary data store that may contain PHI, PII, or commercially sensitive content far outside the governance purpose of the log. The audit log's job is to prove a control was in place and functioned correctly. It does not need to be a transcript.

Two patterns manage the tension:

  • Redact before logging. Apply the same PII detection logic to log payloads that you apply to the request path. Store the sanitized version. The enforcement record stays intact while sensitive content does not persist.
  • Sample instead of capturing fully. Run full content capture on a statistically representative subset. For incidents, store complete payloads at the trace level tied to the triggering event. Routine traffic gets metadata only.

Tamper-evidence is non-negotiable regardless of retention scope. An audit log that can be modified after the fact does not satisfy Article 12 or any comparable framework. Append-only storage with cryptographic integrity verification is the baseline requirement. Examples include AWS S3 Object Lock in compliance mode, Azure immutable blob storage, or hash-chained log records.

Access control and API key architecture across teams

A compromised gateway is a force multiplier for an attacker. One leaked credential, and every provider key sitting behind that gateway, whether OpenAI, Anthropic, Azure, or Google, is exposed simultaneously. The gateway's position as a single integration point is exactly what makes access control architecture here non-negotiable.

The pattern that solves this is virtual keys: scoped credentials issued per team, per application, or per use case, mapped internally to the underlying provider key the gateway holds. Application teams never see raw provider credentials. If a virtual key is compromised, you revoke it without touching the provider key or disrupting any other team's access. The underlying credential stays inside the gateway's trust boundary.

Hierarchical budget controls layer on top of key scoping. Openlayer's LLM Gateway supports per-API-key spending limits nested within team-level budgets, preventing any individual service from consuming the entire team allocation. When configuring usage limits, projected cost savings are surfaced before the limits are applied, making the financial impact of governance controls visible at the point of configuration, not discoverable only after an overage.

Four RBAC roles exist at the workspace level (Admin, Member, Member Restricted, and Viewer), with per-dashboard visibility controls that let you scope access to sensitive compliance and cost data without opening it to everyone who needs to call the API. This maps directly to the compliance question auditors ask most frequently: who had access to systems processing regulated data, and when. Privilege escalation events generate real-time Slack alerts, making access-level changes immediately visible, not buried in post-hoc log review.

One architectural tradeoff is worth stating directly: SaaS gateway deployments route prompt payloads through vendor infrastructure. For HIPAA-covered entities and organizations subject to GDPR data residency requirements, that routing may not be permissible regardless of BAA coverage. Self-hosted or private VPC deployment keeps all prompt data inside the customer's network perimeter, satisfying residency requirements at the cost of operating the gateway infrastructure. The compliance requirement drives the deployment model, not the other way around.

Intelligent traffic routing for security and compliance

Routing decisions at an LLM gateway determine far more than latency. Every request routed to a specific provider determines which regulatory boundary that data crosses, which data processing agreements apply, and whether your deployment satisfies residency requirements at all.

There are four routing categories that matter for compliance:

  • Cost and latency routing: redirect traffic to cheaper or faster providers based on current pricing or measured response times, making the financial impact of infrastructure decisions directly measurable, not inferred.
  • Provider failover chains: if a primary provider returns an error or exceeds a latency threshold, the gateway retries against a secondary provider automatically. The compliance requirement here is that the failover target must satisfy the same regulatory constraints as the primary: a HIPAA-covered failover for HIPAA-covered workloads, not any available endpoint that happens to respond.
  • Weighted traffic splitting: route a configured percentage of traffic to a new model version while the rest hits the stable version. This is how canary deployments work at the infrastructure layer instead of the application layer, giving you behavioral comparison data across versions without a full rollout.
  • Compliance-boundary routing: healthcare data routed only to providers that have executed a BAA; EU resident data routed only to providers operating within GDPR-compliant infrastructure. Enforcement happens at the gateway via request metadata such as user region, data classification tags, or tenant identifiers passed as headers, matched against a route policy that maps those attributes to permitted provider endpoints.

The tradeoff between static and semantic routing is worth naming directly. Static rules are fast: a header value matches a condition and the gateway selects a route in microseconds. Semantic routing requires a classifier that reads the prompt and infers its category, data sensitivity, or appropriate provider, adding latency on every request and requiring training on your own traffic to be accurate enough to trust. For compliance-boundary routing, static rules based on explicit metadata are more defensible in an audit than a classifier's inference about data sensitivity. Use semantic routing where the performance gain warrants the overhead; use static metadata-driven rules where the routing decision carries regulatory weight.

Agentic AI and the gateway's expanding scope

When a single-turn LLM generates a bad response, you catch it at the output layer and correct it before the next request. When an agent writes to a production database, calls an external API, or modifies shared state, the action has already executed before any output-layer guardrail sees it. That is the structural problem prompt inspection alone cannot solve.

Tool call authorization is where the gateway's scope extends past content filtering. An explicit allowlist scoped per agent, per deployment context, governs which tools an agent can invoke before execution. When intent-to-tool alignment confidence drops below 0.75 or the requested tool sits outside the registered allowlist, execution is suspended and an audit trail entry is generated carrying the agent ID, requested tool, alignment score, and task context. Logging the unauthorized call after execution is observation. Suspending before execution is enforcement.

Model Context Protocol introduces an additional exposure surface. MCP servers expose tools to agents via a standardized interface, meaning a single compromised or misconfigured MCP server can make unauthorized capabilities available to every agent that connects to it. Gateway-level controls need to scope which MCP servers agents are permitted to reach, and also which tools they can call, because the tool list is variable and determined by whatever the server advertises at connection time.

Multi-agent architectures compound this further. In a supervisor-plus-subagent topology, a key concern for AI agent observability, a compromised subagent can pass malicious content upward into shared context that the supervisor reads before issuing instructions to other agents. The error does not stay local; it propagates through every agent that reads from that shared state. Gateway-level controls on inter-agent communication, which inspect outputs before they enter shared context, are the interception point that prevents a single agent failure from cascading across the chain.

Regulatory compliance mapping for LLM gateway deployments

Five frameworks, distinct requirements, one shared failure mode: teams build the technical controls and skip the documentation, then find out during an audit that runtime AI controls differ from documentation in how auditors assess them; undocumented controls are treated the same as absent ones.

The framework-to-control mapping looks like this:

FrameworkObligationGateway Control
EU AI Act Article 9 risk managementActive risk management controls, beyond policy statements aloneTool allowlist enforcement, prompt injection blocking, real-time content guardrails
EU AI Act Article 12Logs sufficient to reconstruct system behavior post-deploymentModel version, policy version, enforcement action, timestamp per request
NIST AI RMF GOVERNOrganizational policies defining AI accountabilityAPI key ownership records, team-level budget controls, RBAC role assignments
NIST AI RMF MEASUREOngoing measurement of AI system behaviorLatency percentiles, token consumption, policy trigger rates tracked across providers
ISO 42001 Clause 6.1.2Risk treatment: select and apply controls to handle identified AI risksTool allowlist enforcement, prompt injection blocking, PII redaction before provider forwarding
ISO 42001 Clause 9.1Performance evaluation: monitor, measure, analyze, and assess AI management system performancePer-request metric scores, policy trigger rates, enforcement action logs reviewed against defined performance criteria
GDPR Article 30Records of processing activities covering AI data flowsData flow documentation per provider, residency routing rules, BAA/DPA registry
HIPAA Security RuleTechnical safeguards for ePHI transmissionPHI redaction before provider forwarding, access controls per key, audit log retention

A correctly configured gateway that lacks a documented threat model fails Article 9. A gateway logging enforcement actions with no documented key lifecycle policy fails GDPR Article 30 because the data flows cannot be traced to an accountable controller relationship. The technical controls exist; the compliance record does not. Auditors cannot assess what is not documented, and absence of documentation is treated as absence of the control itself.

Governance platforms like Credo AI and IBM watsonx.governance take a different approach to this problem. Credo AI's Policy Packs and AI Registry document which controls are required and track whether teams completed the associated workflows, but enforcement on model behavior is delegated to other tools; Credo AI itself does not block prompt injection or redact PII at the API boundary. IBM watsonx.governance maps AI systems to regulatory frameworks and surfaces risk dashboards, but real-time blocking of unsafe outputs sits outside its scope, and its framework mappings are manual to configure and service-heavy to maintain. Both platforms produce compliance documentation; neither produces the runtime enforcement record that documentation is supposed to describe. An LLM gateway closes that gap: the enforcement actions logged per request, such as model version, policy version, action taken, and timestamp, are the technical evidence those governance platforms require as input to their audit workflows.

Three documentation artifacts must be built alongside implementation, not assembled after an audit notice arrives:

  • A threat model naming the attack surfaces the gateway covers, the controls applied to each, and the residual risk accepted after those controls are in place. This is the Article 9 risk management record.
  • A key lifecycle policy specifying who can issue credentials, what scopes they carry, how revocation is triggered, and how quickly it takes effect. This is the access control record that GDPR Article 30 and HIPAA's access management safeguard require.
  • A data flow register mapping each provider endpoint to the data classifications permitted to reach it, the processing agreements in place, and the residency constraints enforced by routing policy. This is what satisfies both GDPR Article 30 and HIPAA's transmission security safeguard.

The gateway generates most of the raw evidence these documents reference automatically. Audit evidence from LLM traces, including the enforcement action, the policy version applied, and the timestamp, is captured at inference time per request. What the gateway does not generate is the governing document that gives those records meaning in an audit: the threat model, the key policy, the data flow register. Those require deliberate authorship before the first request routes through.

How Openlayer's Managed LLM Gateway implements these controls

Openlayer is a unified evaluation, observability, and governance platform spanning development through production. Its managed gateway routes inference requests across OpenAI, Anthropic, Azure, and OpenRouter through a single integration point, extending the same policy definitions used in pre-deployment evaluation into live production enforcement. Teams send requests through the gateway, and cross-provider observability, cost tracking, and guardrail enforcement apply uniformly regardless of which provider handles the request or which team made the call.

The controls described throughout this post, including prompt injection defense, PII redaction, audit logging, access control, and compliance-boundary routing, are live enforcement actions at that layer, not monitoring overlays. There are five discrete enforcement actions available per request:

  • Allow with logging: the request proceeds and a per-request audit record is written, capturing the metric score, threshold checked, policy rule triggered, and timestamp.
  • Warn: the request proceeds but a flag is raised for review, with the same audit record produced.
  • Block: inference halts before the output crosses the API boundary. Logging alone would be observation; this blocking step is what separates enforcement from observation.
  • Redact: sensitive content is stripped from the request or response before it reaches the downstream consumer.
  • Escalate: the request is routed to a human reviewer before any output is returned.

Each action carries distinct tradeoffs between user experience and risk tolerance, and each generates its audit record as a byproduct of enforcement, not assembled after the fact.

Policy continuity from evaluation to production

What separates this architecture from point tools is that the same policy definitions used in pre-deployment evaluation continue running as live enforcement gates in production. A groundedness threshold enforced as a CI/CD deployment gate does not require manual translation into a separate runtime rule. The policy travels with the deployment. Auditors can follow a policy from its version-controlled definition through its pre-deployment test results to its production enforcement record, a pattern that supports continuous compliance evidence for AI systems without reconstructing the chain manually.

Automated compliance mapping to EU AI Act, NIST AI RMF, and ISO 42001 operates as a byproduct of that enforcement workflow. Per-API-key spending limits nest within team-level budgets, with projected cost savings surfaced before limits are applied. For teams with air-gapped deployment requirements, provider pricing data is bundled directly into the Docker artifact, maintaining accurate cost monitoring without external connectivity.

Final thoughts on LLM gateway security and compliance

Your gateway sits at the one position in the architecture where every inference event passes through before any action executes or any output propagates. That position only becomes a governance asset when the controls running there block, not merely observe, and when the documentation backing those controls exists before the first audit notice arrives. Getting those two things right, enforcement at the gateway layer and documentation built alongside it, is the structural work this entire post points toward. Reach out to Openlayer to see how the enforcement and compliance mapping described here works across your provider setup.

FAQ

How do you structure API keys and project routing in an LLM gateway to give each team isolated trace monitoring and usage attribution?

Layer per-API-key spending limits nested within team-level budgets on top of that scoping, and route each team's traffic through its own project pipeline so trace monitoring and cost attribution stay isolated by default. No post-hoc filtering is required.

How do I secure AI agents against prompt injection and unauthorized tool use at the gateway layer?

Run three controls in sequence: inspect the full request payload before it reaches the provider (flag chunks where injection-pattern classifiers exceed 0.85 confidence and route them to a secondary review path, stopping short of a hard block); scope which tools each agent can invoke using an explicit allowlist, suspending execution when intent-to-tool alignment confidence drops below 0.75; and compare the agent's final output against the original task specification, blocking responses that represent an unexplained deviation before they exit the API boundary. Each of these is an enforcement step, not a logging step, which is the structural distinction that matters: an unauthorized tool call logged after execution is evidence of a control gap, not a control.

What is an LLM gateway and how does it differ from a standard API gateway?

An LLM gateway is a reverse proxy that sits between your applications and one or more LLM provider APIs, handling authentication, routing, rate limiting, caching, and logging from a single integration point, but it goes beyond what standard API gateways do because AI traffic carries properties HTTP traffic does not. Standard gateways inspect headers and route by endpoint; an LLM gateway inspects prompt payloads for injected instructions and PII before the request reaches the provider, enforces content-level policy on responses before they reach downstream systems, tracks token-based consumption instead of merely request volume, and applies semantic caching that recognizes functionally equivalent prompts. The architectural distinction is that every inference event passes through a single enforcement point before any action executes or any output propagates, and that position is what makes security and compliance controls structurally consistent across teams instead of dependent on which team built the caller.

How does Openlayer's LLM gateway compare to Langfuse for enforcing security and compliance controls in production?

Langfuse offers strong diagnostic observability, with detailed trace logging, span-level visibility, and session-level analysis that give teams a clear picture of what their LLM systems are doing. Currently, however, Langfuse delegates runtime enforcement to third-party libraries like LLM Guard or NeMo Guardrails instead of natively blocking unsafe outputs before they reach end users or downstream systems. Openlayer's managed gateway runs prompt injection defense, PII redaction, tool call authorization, and content policy enforcement as live enforcement actions at the API boundary, with five discrete configurable outcomes per request: allow with logging, warn, block, redact, or escalate. For LLM gateway security compliance in particular, the gap that matters is between detection and prevention: a guardrail that logs a policy violation after delivery has not enforced anything.

How do I satisfy EU AI Act Article 9 and Article 12 documentation requirements through gateway-level controls?

Article 9 requires active risk management controls, going beyond policy statements, which gateway-level enforcement satisfies through tool allowlist enforcement, prompt injection blocking, and real-time content guardrails. Article 12 requires logs sufficient to reconstruct system behavior after deployment, meaning each request record must capture the model version that processed it, the policy version in force at that moment, the enforcement action taken, and a precise timestamp. What the gateway does not generate automatically is the governing documentation that gives those records audit meaning: a threat model naming the attack surfaces and residual risks accepted, a key lifecycle policy specifying who can issue credentials and how revocation triggers, and a data flow register mapping each provider endpoint to the data classifications permitted to reach it. Build those three artifacts alongside implementation; an undocumented control is treated as an absent one during audit.

Work on the future.