GITNUXSOFTWARE ADVICE
TechnologyTop 10 Best Apache Tomcat Alternatives in 2026
Server-side Java servlet runtime choices for WAR deployment, ops, and lifecycle needs
How we ranked these tools
An editor sets the topic, the inclusion criteria, and the evaluation framework before research starts.
AI search agents find sources, extract figures with provenance, and aggregate written reviews. They also transcribe video reviews and podcasts.
Framework: Features 40% · Ease 30% · Value 30%
Gitnux may earn a commission through links on this page — this does not influence rankings. Editorial policy
Editor’s top 3 picks
Three quick recommendations before you dive into the full comparison below — each one leads on a different dimension.
commercial Jakarta EE replacement
Red Hat JBoss Enterprise Application Platform
Red Hat JBoss Enterprise Application Platform is strong for Jakarta EE app server replacements, weak when only servlet and JSP WAR execution is required.
Fits when enterprises need vendor-supported managed Jakarta EE runtime for replacing Tomcat WAR deployments.
IBM-supported infrastructure
IBM WebSphere Liberty
IBM WebSphere Liberty is strong for supported servlet and JSP deployments on IBM infrastructure, weak when requiring a drop-in Apache Tomcat configuration match.
Fits when Windows teams run WAR-based Jakarta Servlet and JSP apps on IBM-supported infrastructure with vendor support needs.
free-tier lightweight Servlet server
Undertow
Undertow is strong for embedded or code-driven Servlet deployments, weak when expecting full Tomcat feature parity out of the box.
Fits when Windows teams need a lightweight Java server runtime with Servlet support and minimal server breadth.
Apache Tomcat is an open-source Java servlet container that runs Jakarta Servlet and Jakarta Server Pages web applications. Its primary job is to accept HTTP requests and execute server-side code packaged as WAR files, then return responses. It also provides the core support for web application lifecycles like deployment, configuration, and request handling.
- → Some teams leave because operational ownership is easier with a platform that automates container provisioning and deployment workflows.
- → Teams move away due to infrastructure constraints like container weight, resource consumption, or host management overhead compared with more managed options.
- → Some organizations require an integrated account and governance model for access control, audit logging, and policy enforcement that a standalone container setup does not provide by default.
- → Keep Apache Tomcat when the application portfolio is built for servlet and JSP behavior and WAR deployment semantics already match the team’s pipeline.
- → Keep Apache Tomcat when the organization needs direct configuration control over HTTP connectors and can maintain hardening and tuning practices internally.
Comparison Table
Red Hat JBoss Enterprise Application Platform
enterprise application serverRed Hat JBoss Enterprise Application Platform is a supported Jakarta EE application server.
Red Hat JBoss Enterprise Application Platform is strong for Jakarta EE app server replacements, weak when only servlet and JSP WAR execution is required.
Red Hat JBoss Enterprise Application Platform serves as an application server platform that runs Jakarta web applications and other Jakarta EE APIs in a production-oriented runtime, which goes beyond a servlet-only container like Apache Tomcat. It provides managed server components such as application deployment handling, configuration and lifecycle operations, and runtime services typically associated with full application server behavior rather than just request routing. It also aligns with enterprise deployment patterns that require consistent behavior across updates, scaling events, and multi-environment promotion for managed applications.
A common tradeoff versus Apache Tomcat is operational complexity, since an application server platform adds more managed subsystems and container lifecycle features than a single servlet container. JBoss Enterprise Application Platform fits situations where teams need managed Jakarta EE services such as container-managed features and enterprise middleware integration, or where standardized server behavior is required for multiple applications deployed to shared infrastructure. It is also a strong fit when application runtime consistency across server lifecycles matters more than minimizing moving parts.
- +Managed Jakarta EE runtime services for server-side Java apps
- +Enterprise support posture for application server lifecycle issues
- +Configuration and deployment features aligned to Java EE deployments
- +Stronger server-managed behavior than a servlet container alone
- –More platform and admin surface than Apache Tomcat
- –Not ideal for teams deploying only WARs with servlet and JSP basics
- –Migration effort rises when apps were built for Tomcat container behavior
Java platform teams
Replace Tomcat with managed Jakarta EE
Fewer runtime discrepancies during releases
Enterprise application owners
Run Jakarta EE services beyond WARs
Simpler service provisioning within runtime
Show 1 more scenario
Windows IT operations teams
Centralize production application server control
More consistent operations across teams
Manage enterprise runtime configuration and deployment lifecycles with a vendor-supported application server.
Best for: Fits when enterprises need vendor-supported managed Jakarta EE runtime for replacing Tomcat WAR deployments.
IBM WebSphere Liberty
enterprise application serverIBM WebSphere Liberty is a Java application server for Jakarta EE and MicroProfile workloads.
IBM WebSphere Liberty is strong for supported servlet and JSP deployments on IBM infrastructure, weak when requiring a drop-in Apache Tomcat configuration match.
IBM WebSphere Liberty is a Java runtime designed to host Jakarta Servlet and Jakarta Server Pages applications using a Tomcat-like deployment workflow with WAR packaging and HTTP endpoints. It focuses on a modular architecture where server behavior is composed from enabled features for web containers, security, and management, which supports consistent container behavior across environments. For teams comparing Java application server options to Apache Tomcat, Liberty fits when enterprise governance is required alongside the application container model.
A key tradeoff versus Apache Tomcat is that Liberty adds an operational surface area that includes feature configuration and container runtime governance for environments that need auditability and access control. Liberty is a strong fit for production systems that require Role-Based Access Control for administrative operations and that need vendor-supported runtime behavior under change-control processes. A common usage situation is migrating existing servlet and JSP workloads to a managed runtime where application deployment remains familiar but runtime configuration must align with enterprise administration and compliance needs.
- +Enterprise-supported Java runtime for servlet and JSP workloads
- +Modular feature configuration reduces exposed server surface
- +Works well with IBM-focused enterprise deployment and admin practices
- +Administration supports role-based access and change visibility
- –Not a configuration-identical swap for Apache Tomcat
- –Tomcat-centric teams may face a setup and tuning learning curve
Java platform teams on Windows
Supported replacement for servlet workloads
Reduced runtime support risk
Enterprises standardizing on IBM
Vendor-backed container for production
More consistent runtime operations
Best for: Fits when Windows teams run WAR-based Jakarta Servlet and JSP apps on IBM-supported infrastructure with vendor support needs.
Undertow
open-source web serverUndertow is a flexible web server built for Java applications and Servlet deployments.
Undertow is strong for embedded or code-driven Servlet deployments, weak when expecting full Tomcat feature parity out of the box.
Undertow is a Java HTTP server that can run Servlet and Jakarta Server Pages workloads through an embedded style architecture, which aligns it closely with common Tomcat migration and compatibility needs. It supports the Servlet container layer that many Tomcat users expect while keeping the runtime focused on the HTTP request pipeline rather than a full application server feature set. Undertow is frequently selected when teams need tighter control over the surrounding Java process, including custom startup behavior and in-process lifecycle management.
A key tradeoff versus running Apache Tomcat is that Undertow’s feature surface is narrower for container conveniences that some Tomcat users rely on, so additional integration work may be needed for uncommon Tomcat modules or extensions. Undertow fits well for services that embed the web layer inside a larger application, such as internal APIs, microservices, and platform components that already manage threading, routing, and deployment orchestration.
- +Servlet-focused request pipeline supports Tomcat-like workloads
- +Works well as an embedded HTTP server inside other applications
- +Configuration can be streamlined for lightweight server deployments
- +Often used for direct, code-centric runtime control
- –Tomcat-centric ops workflows can require extra integration work
- –Smaller server feature surface than Apache Tomcat for some stacks
Java teams on Windows
Run Servlet workloads with smaller footprint
Lower server overhead
Product teams embedding servers
Bundle a Servlet container inside an app
Single-process runtime
Show 1 more scenario
Teams migrating off Tomcat
Retain request handling with less server surface
Simplified server layer
Teams keep the core request/response behavior while reducing reliance on Tomcat-specific server breadth and packaging.
Best for: Fits when Windows teams need a lightweight Java server runtime with Servlet support and minimal server breadth.
Apache TomEE
open-source application serverApache TomEE combines the Tomcat Servlet container with Jakarta EE capabilities.
Apache TomEE extends Tomcat’s servlet container with built-in Jakarta EE APIs, strong for WAR migration, weak when only servlet and JSP are required.
Apache TomEE keeps a Tomcat-style servlet container workflow while adding a wider Jakarta EE application-server surface around that foundation. It focuses on running Java web applications packaged as WAR files with extended Jakarta EE APIs provided by the same runtime.
Deployment, request handling, and configuration stay close to Tomcat expectations, while additional server capabilities reduce the need to pair separate frameworks. For teams moving off Apache Tomcat, Apache TomEE is a direct substitute when the target includes Java EE programming models beyond pure servlet and JSP.
- +Tomcat-style servlet container with extended Jakarta EE APIs
- +WAR deployment aligns with Apache Tomcat application packaging
- +Configuration and request handling follow familiar servlet lifecycles
- +Provides fuller Jakarta EE runtime to reduce extra integration work
- –Extra Jakarta EE functionality increases runtime surface versus plain Tomcat
- –Not the same level of specialization as a dedicated Jakarta EE application server
Best for: Fits when Windows or Linux teams replace Apache Tomcat with WAR-based Jakarta EE runtime needs and minimal packaging changes.
Apache Geronimo
enterpriseOpen-source Java EE application server maintained by the Apache Software Foundation.
Apache Geronimo is strong for hosting Java EE specifications beyond servlets, weak when teams want Tomcat-style minimal servlet deployment.
Apache Geronimo runs Java server-side applications and supports a full Java EE stack beyond Tomcat’s servlet-container role. It is built as an Apache project from a modular server that can host Jakarta Servlet and JSP workloads while also covering broader Java EE specifications.
Configuration and runtime behavior are exposed through its admin interfaces and deployment lifecycle. Compared with an HTTP-first servlet container, it targets teams that want more bundled Java EE capabilities in the same server.
- +Includes more than servlet and JSP, matching full Java EE expectations
- +Apache-governed server packaging aligns with organizations standardizing on Apache projects
- +Deployed applications follow a Java EE container lifecycle instead of servlet-only flow
- +Modular components support swapping in the specs and drivers a deployment needs
- –Administration can feel heavier than deploying WARs into a servlet container
- –Operational familiarity tends to be less common than Tomcat-first teams
- –Migration off Tomcat can require validation of non-servlet Java EE components
- –Use of older Java EE patterns may complicate new application baselines
Best for: Fits when Apache-governed full Java EE server support is needed beyond Tomcat’s servlet container scope.
Eclipse Jetty
open-source servlet containerJetty is an open-source web server and Servlet container for Java applications.
Jetty has granular Java APIs for server and HTTP configuration, which helps fine-tune request handling.
Eclipse Jetty is a Java servlet container that targets close overlap with Apache Tomcat for running Jakarta Servlet and Jakarta Server Pages web apps. It focuses on a configurable HTTP server stack and deployment of WAR-based applications with servlet request handling and lifecycle hooks similar to Tomcat.
Jetty also exposes extensive programmatic configuration through APIs and supports multiple runtime packaging patterns beyond just a WAR drop. For teams moving from Tomcat, Jetty is a practical substitute where the application contract is primarily servlet and JSP request-response behavior.
- +Close Servlet and JSP container overlap with Tomcat migration paths
- +Rich Java configuration hooks for HTTP handling and server lifecycle
- +Supports common WAR deployment workflows used by servlet-based apps
- +Good fit for lightweight deployments that need a smaller surface
- –Not all Tomcat configuration patterns map cleanly one to one
- –Team familiarity with Jetty APIs can be required for deeper tuning
- –Smaller community gravity than Tomcat for servlet container edge cases
- –Operational behavior depends heavily on how the server is configured
Best for: Fits when Windows users replace a Tomcat-style servlet container and need Jakarta Servlet and JSP behavior.
WildFly
open-source application serverWildFly is an open-source application server supporting Jakarta EE and MicroProfile.
WildFly is strong for Tomcat-style WAR deployments into a full Java application server, weak when only a minimal servlet container is required.
WildFly is a Java application server that covers Tomcat-style deployments while adding broader server capabilities for Jakarta EE workloads. It focuses on running WAR packaged web applications via HTTP request handling, while also supporting more enterprise patterns beyond a servlet container.
Configuration and deployment extend past Tomcat-style lifecycle basics with a management model for controlling server behavior. It is a strong migration path when the target is a full application server rather than only a servlet container replacement.
- +Supports running WAR applications through HTTP request handling
- +Provides a management model for server configuration and deployment control
- +Covers broader enterprise workloads than a servlet-only container
- +Widely used for production Java server deployments
- –Configuration and management are more complex than a pure servlet container
- –Tomcat-only teams may need time to map deployment and config concepts
- –Operational learning curve is higher for app-server features
Best for: Fits when Windows and Linux teams need a Jakarta application server replacement for Tomcat WAR deployments.
Open Liberty
open-source application serverOpen Liberty is an open-source Java runtime for Jakarta EE and MicroProfile applications.
Open Liberty is strong for modular Jakarta EE or MicroProfile API hosting, weak when only a servlet container is required.
Open Liberty provides a lightweight Java runtime for running server applications that need Jakarta EE or MicroProfile APIs, not just a servlet container. It replaces Tomcat’s request handling with an application server model that includes container-managed configuration, security, and HTTP endpoint execution.
Deployment and runtime behavior are driven by its configuration and server lifecycle, which changes how web apps are packaged and managed compared with WAR-only servlet container usage. The free tier support is reflected in its pricing signal, making it feasible for teams testing runtime options.
- +Supports Jakarta EE and MicroProfile APIs beyond servlet-only use
- +Server lifecycle and configuration fit application-server deployment models
- +Designed for modular Java apps with pluggable features
- +Free-tier availability lowers experimentation risk
- –Not a drop-in replacement for Tomcat WAR deployments without runtime changes
- –Operational configuration differs from Tomcat’s container-centric model
- –More moving parts than a servlet container when only basic JSP and servlets are needed
Best for: Fits when Windows or Linux teams want a smaller application-server runtime for Jakarta EE or MicroProfile APIs.
Eclipse GlassFish
open-source application serverEclipse GlassFish is an open-source implementation of the Jakarta EE platform.
Eclipse GlassFish is strong for deployments that outgrow a standalone Servlet container, weak when only simple WAR execution is needed.
Eclipse GlassFish is a Jakarta EE application server that runs Jakarta Servlet and JSP web apps, so it replaces Apache Tomcat when deployments need a broader Java web profile. It accepts HTTP requests and executes packaged server-side code, with deployment and runtime configuration for Java web applications.
GlassFish adds full application-server lifecycle support beyond a standalone servlet container, which matches teams moving from simple WAR execution to managed server behavior. It is positioned as a specialist option for Jakarta standards-based deployments.
- +Full application-server deployment and request handling for Jakarta Servlet and JSP
- +Stronger alternative to standalone servlet containers via managed server lifecycles
- +Specialist fit for standards-based Jakarta EE web application deployments
- +Free-to-use software licensing model for local and shared testing
- –More server surface area than Tomcat for teams running only WARs
- –Operational setup can feel heavier than a pure servlet-container stack
- –Configuration complexity increases for users focused on minimal request routing
Best for: Fits when Windows users run Jakarta Servlet and JSP apps that need full application-server lifecycle support.
Oracle WebLogic Server
enterprise application serverOracle WebLogic Server is an enterprise platform for Java and Jakarta EE applications.
Oracle WebLogic Server is strong for Oracle-centric enterprise deployments needing platform services, weak when minimal WAR-only servlet hosting is the goal.
Oracle WebLogic Server is a paid Java application server from Oracle, not a free reader like Apache Tomcat. It runs Jakarta Servlet and Jakarta Server Pages applications packaged as WAR files, handles HTTP request execution, and supports enterprise deployment and configuration.
WebLogic adds broader platform services than a servlet container, including integration controls for large Oracle-centric environments. This makes it a substitute when the target is a full application server footprint rather than Tomcat-style container-only hosting.
- +Enterprise-focused application server services beyond a servlet container
- +Tight fit for organizations using Oracle infrastructure stacks
- +Supports Jakarta web apps with mature deployment and configuration controls
- +Extensive admin tooling for application server lifecycle management
- –Administrative complexity is higher than Tomcat’s container-only model
- –Requires platform-level footprint that can be overkill for simple WAR hosting
- –Migration effort is larger when applications rely on Tomcat-specific defaults
Best for: Fits when Windows users run Oracle-based enterprise Java workloads needing an application-server platform instead of a servlet container.
Conclusion
After evaluating 10 apache tomcat alternatives, Red Hat JBoss Enterprise Application Platform stands out as our overall top pick — it scored highest across our combined criteria of features, ease of use, and value, which is why it sits at #1 in the rankings above.
Use the comparison table and detailed reviews above to validate the fit against your own requirements before committing to a tool.
Before you replace Apache Tomcat
Buyers evaluating alternatives to Apache Tomcat usually want the same WAR-first Jakarta Servlet and Jakarta Server Pages request handling model, but with different operational controls and lifecycle governance. Red Hat JBoss Enterprise Application Platform and IBM WebSphere Liberty fit teams that need a managed vendor platform around servlet and JSP workloads.
For teams that want less platform surface than a full enterprise application server, Undertow and Eclipse Jetty offer tighter HTTP and servlet configuration control. Apache TomEE is a common middle step because it stays close to a Tomcat-style servlet container and adds Jakarta EE APIs for WAR migration paths.
Map Apache Tomcat expectations to runtime governance and API needs
First map the workload boundary from Tomcat’s core job, which is executing Jakarta Servlet and Jakarta Server Pages code from WARs and handling HTTP requests. If the requirement stays at servlet and JSP with minimal packaging changes, Apache TomEE is the tightest match among the listed options.
Second map how configuration and deployment control should be handled in the organization. If vendor-supported managed lifecycle and enterprise governance matter, Red Hat JBoss Enterprise Application Platform or IBM WebSphere Liberty fit, while Undertow and Eclipse Jetty fit when teams want configuration and HTTP behavior control with a smaller server surface.
Confirm WAR-based servlet and JSP behavior is the only contract
If the contract is simply WAR execution plus servlet and JSP request handling, Apache TomEE provides the most Tomcat-like container posture while extending with Jakarta EE APIs. If the contract allows deeper server HTTP customization, Eclipse Jetty and Undertow can support servlet-style deployments but teams must adapt container patterns that assume Tomcat defaults.
Decide whether a fuller Jakarta application server lifecycle is required
If the organization expects application-server style lifecycle management for deployment and configuration, WildFly and Eclipse GlassFish provide that management model around WAR deployments. If only the container execution loop needs replacement, Undertow reduces server breadth but trades off feature surface versus Apache Tomcat.
Match enterprise support and governance expectations
If vendor-supported platform lifecycle is required, Red Hat JBoss Enterprise Application Platform and IBM WebSphere Liberty fit organizations that want enterprise support posture and modular runtime feature configuration. If governance needs align with Oracle platform services and operational maturity, Oracle WebLogic Server matches at the cost of higher administrative complexity.
Scope the required Jakarta EE or MicroProfile API footprint
If the move adds Jakarta EE APIs beyond servlet and JSP, Apache TomEE and Open Liberty are direct matches in different ways because TomEE extends a Tomcat-style container while Open Liberty supports modular Jakarta EE or MicroProfile hosting. If teams only need servlet and JSP behavior, Open Liberty and more full servers can add runtime surface that exceeds the Apache Tomcat use case.
Plan for configuration and tuning differences before cutover
IBM WebSphere Liberty and WildFly require mapping from Tomcat-centric configuration and tuning to their server configuration models. Jetty and Undertow provide Java API configuration hooks for HTTP handling, which can speed tuning for experienced teams but still changes operational workflows compared with Apache Tomcat.
Pitfalls when switching from Apache Tomcat to alternatives
Most switching failures happen when teams underestimate how configuration and deployment models differ from Apache Tomcat’s container-centric lifecycle. Apache TomEE can reduce those gaps, while full application servers require mapping tuning and deployment concepts to their server models.
The other frequent mistake is over-scoping API surface, which makes the new runtime carry broader server responsibilities than the servlet and JSP contract demands.
Treating IBM WebSphere Liberty or WildFly as a configuration-identical drop-in for Tomcat
Map Tomcat-centric configuration and tuning patterns to each server’s modular features and management model before cutover. Plan a migration test that exercises deployment, request handling, and configuration changes as operational workflows, not just WAR startup.
Choosing Open Liberty or WildFly when only servlet and JSP execution is required
Limit the runtime surface scope by aligning the chosen server’s Jakarta EE or MicroProfile API footprint to actual application dependencies. When the goal is minimal WAR hosting, Apache TomEE, Jetty, or Undertow are often a closer fit than full platform runtimes.
Overlooking administrative complexity introduced by enterprise application servers
Account for governance and administration needs when adopting Oracle WebLogic Server or Eclipse GlassFish, because these systems bring broader server surface area than Apache Tomcat. If administrative overhead is already managed tightly, governance-heavy servers align well, but teams expecting container-only operations should reconsider.
Assuming Jetty or Undertow will match Apache Tomcat operational workflows out of the box
Expect differences in container-centric assumptions and adapt the team’s configuration and deployment processes using Jetty’s server and HTTP Java configuration hooks or Undertow’s servlet-focused request pipeline.
Selecting a servlet-container substitute while still needing Jakarta EE APIs
If application code uses Jakarta EE APIs beyond servlet and JSP, Apache TomEE provides built-in Jakarta EE API support while preserving Tomcat-style WAR deployment alignment. If the application also needs MicroProfile or modular API hosting, Open Liberty may fit better than a Tomcat-style container extension.
Frequently Asked Questions About Alternatives to Apache Tomcat
Which alternative keeps a Tomcat-like WAR deployment workflow with fewer changes to servlet and JSP request handling?
How should existing servlet and JSP annotations be handled when moving from Apache Tomcat to a modular runtime like Open Liberty or IBM WebSphere Liberty?
What changes typically occur in security administration when replacing Apache Tomcat with RBAC-aware runtimes such as IBM WebSphere Liberty?
How do container-managed behavior and lifecycle management differ between Apache Tomcat and Red Hat JBoss Enterprise Application Platform?
When an application depends on more than servlet and JSP, which option reduces the need for additional server-side components?
What should teams expect for management and operational control when switching from Apache Tomcat to WildFly or Eclipse GlassFish?
How does the runtime approach affect migration for teams that embed routing and threading outside the servlet container, such as microservices using Undertow?
If the goal includes Jakarta EE or MicroProfile APIs beyond servlet and JSP, which alternatives align more closely than Apache Tomcat?
Tools featured as alternatives to Apache Tomcat
Primary sources checked during evaluation.
Referenced in the comparison table and product reviews above.
Related reading
- Top 10 Best Pine Script Alternatives in 2026
- Top 10 Best Adobe Experience Manager Alternatives in 2026
- Top 10 Best Armoury Crate Alternatives in 2026
- Top 10 Best Argo CD Alternatives in 2026
- Top 10 Best Arch Linux Alternatives in 2026
- Top 10 Best Arc Alternatives in 2026
- Top 10 Best Esri ArcGIS Alternatives in 2026
- Top 10 Best Arc Alternatives in 2026
- Top 10 Best Appspace Alternatives in 2026
- Top 10 Best iCloud Alternatives in 2026
- Top 10 Best Apache HTTP Server Alternatives in 2026
- Top 10 Best Anrok Alternatives in 2026
- Top 10 Best Amazon Simple Notification Service (Amazon SNS) Alternatives in 2026
- Top 10 Best AlmaLinux Alternatives in 2026
- Top 10 Best Aloha Browser Alternatives in 2026
- Top 10 Best Alexa Alternatives in 2026
- Top 10 Best Alacritty Alternatives in 2026
- Top 10 Best AirDroid Alternatives in 2026
- Top 10 Best AIDA64 Alternatives in 2026
- Top 10 Best After Effects Alternatives in 2026
Keep exploring
Looking for top picks?
Best Software & Tools
Browse our curated best-of lists with expert rankings, scoring methodology, and category-by-category breakdowns.
Explore best software & tools→More on this category
Best Technology software
Browse our top-rated technology tools with editorial scoring and methodology.
See best technology→FOR SOFTWARE VENDORS
Not on this list? Let’s fix that.
Our best-of pages are how many teams discover and compare tools in this space. If you think your product belongs in this lineup, we’d like to hear from you—we’ll walk you through fit and what an editorial entry looks like.
Apply for a ListingWHAT THIS INCLUDES
Where buyers compare
Readers come to these pages to shortlist software—your product shows up in that moment, not in a random sidebar.
Editorial write-up
We describe your product in our own words and check the facts before anything goes live.
On-page brand presence
You appear in the roundup the same way as other tools we cover: name, positioning, and a clear next step for readers who want to learn more.
Kept up to date
We refresh lists on a regular rhythm so the category page stays useful as products and pricing change.