PREFACE This step-by-step guide goes through all the basic and advanced settings of the LiteSpeed Cache plugin for WordPress. Depending on the reader’s skill level, it should take no more than 30 minutes to get the most important information on how to set up WordPress caching that runs on the LiteSpeed server. After going through this guide you are able to set up your WordPress website with the most optimized caching settings. Aligned with version 3.6

LiteSpeed Cache Settings

Easy Step-by-Step Setup Guide

Last updated on July 16, 2021 by Janz Nordman

Disclosure: This content is reader-supported. If you click on my links, I may earn a commission. Read more...

When it comes to optimizing your website, caching is one of the best technology available today. It makes your website extremely fast which will eventually result in less bounce rate, better SEO results, and better conversion. LiteSpeed Cache for WordPress by LiteSpeed Technologies is an all-in-one site acceleration plugin, featuring an exclusive server-level cache and a collection of optimization features. It supports WordPress multisite and is compatible with most popular plugins, including WooCommerce, bbPress, and Yoast SEO. Awesome, isn’t it?

LiteSpeed WordPress Performance

Important

Many of the optimization features can be used on any of the following web servers: LiteSpeed, Apache, Nginx, etc. The caching features, however, require either free OpenLiteSpeed, commercial LiteSpeed Enterprise Edition, LiteSpeed-powered hosting providers like A2 Hosting, Hostinger, or the new QUIC.cloud CDN.

Clarification

Are you using an alternative webserver instead of LiteSpeed server technology? When yes, I strongly suggest you consider using WP Rocket WordPress caching plugin. They have over 1 million installations already on production environments, meaning they do something right.

General

[1] General Settings


Automatically Upgrade OFF

Turn this option ON to have LiteSpeed Cache settings updated automatically, whenever a new version is released. However, it is strongly recommended to turn this OFF and apply updates manually.

Domain Key

When you would like to use QUIC.cloud CDN or image optimization then you need to generate Domain Key to connect to the online services. Click on the Request Domain Key button and wait for the approval. The domain key will be automatically sent to your WordPress after some time.

NB! Creating a QUIC.cloud account is not mandatory.

Recommendation

I do recommend using QUIC.cloud for image optimization. QUIC.cloud comes with an optimization quota of 1000 images a month for free. When you have a small website then this is enough for you. After exceeding this limit it’s up to you to either wait till next month or top-up more quota.

Notifications OFF

I suppose you have other channels to get all the information you need. Let’s be honest notifications are annoying.

Cache

[1] Cache


Enable Cache Enable

You can enable LiteSpeed cache settings only when pre-requisites have fulfilled (read above). Otherwise, you should see the corresponding error message. You can peek here to get an overview of how to test the cache. 

NB! When disabling the cache, all cached entries for your website will be purged.

Cache Mobile OFF

Turn this option OFF when your website doesn’t have either AMP or mobile-specific design/content. For responsive websites turning this option ON is not necessary.

NB! This setting will edit the .htaccess file.

Recommendation

For all other settings, you can easily use the default values. Probably you never need to change those values, because they work already the best optimum way for you. Do not forget to click on “Save Changes” when you have changed any of the toggles.

Force Cache URIs

You can specify special URIs to force caching regardless of any “non-cacheable” settings that may appear elsewhere. Also, you can overwrite default TTL value when the current value doesn’t satisfy your needs.

NB! You can use special characters ^ and $, to indicate the beginning of a string and/or the end of a string e.g. ^/events/list/$.

1. line: /events/list/?category=online 300
2. line: /events/list/?category=classes 600
3. line: /events/list/$

Note

Note that by default events page will use the default TTL caching period. Although, online and classes category will use accordingly 300 and 600 seconds of caching period.

[2] TTL


Recommendation

For all the Time-To-Live (TTL) settings you can easily use the default values that are already present. Probably you never need to change those values, because they work already the best optimum way for you. Do not forget to click on “Save Changes” afterward. Please note that the value fields expecting some number value in seconds.

[3] Purge


Purge All On Upgrade ON

Turn this option ON to have LiteSpeed cache assets renewed automatically, whenever a new version is released.

Auto Purge Rules for Publish/Update All pages

I strongly do recommend tick the “All pages” option to make sure that nothing isn’t cached when content has updated. Usually, it’s a good practice to purge only pages where the content has changed. On the other hand, people tend to forget such a rule as “Auto Purge“. That’s why the safest bet is to choose purge for all options. Make sure you know what are you doing when choosing another way.

Serve Stale ON

This is an option that benefits very busy sites but has less of an impact on low-traffic sites. When a stale page for some reason is not acceptable for your requirements then disable this option. In heavy traffic circumstances, this option keeps servers very happy 🙂

Scheduled Purge URLs

If you have content that is generated by an outside source at a certain time every day, then you might want to purge the page to be sure the outside content is correctly displayed. You can specify a list of URLs (one per line) that will be purged automatically at a certain time of day.

NB! Specifying those URLs is not necessary under normal circumstances.

1. line: https://yourdomain/events/list.php
2. line: /events/list.php

Note

Note that the second URL points to the same URL as the first one.

Scheduled Purge Time

Here you can specify the purge time when you have fulfilled the Scheduled Purge URLs field.

10:00 PM

[4] Excludes


Do Not Cache URIs

You can specify your own URIs to skip caching regardless of any cacheable settings that may appear elsewhere.

NB! You can’t use TTL values at the end of URI strings here because this is for caching only.

1. line: /events/list/
2. line: /events/list/$
3. line: ^/events/list

Note

You can also use special characters ^ and $ here. This setting is very useful when some REST API calls need to be excluded from the cache mechanism.

Do Not Cache Query Strings

The query string is the part of URI that stays on the right side from ? symbol e.g. https://www.yourdomain.com/events/list/?category=online where the query string is category=online.

1. line: category

Note

You don’t want to cache any pages where categories are used.

Do Not Cache Categories

To prevent categories from being cached you can exclude any by entering a particular category slug value for this setting. Example https://www.yourdomain.com/category/{category-slug}/ e.g. review.

1. line: category-slug
2. line: category-slug-2

Note

You can insert multiple category slugs, one per line.

Do Not Cache Tags

To prevent tags from being cached you can exclude any by entering a particular tag slug value for this setting. Example https://www.yourdomain.com/tag/{tag-slug}/ e.g. wordpress.

1. line: tag-slug
2. line: tag-slug-2

Note

You can insert multiple tag slugs, one per line.

Do Not Cache Cookies

This is a list of cookies telling that, do not cache any page where a cookie in this list appears in the request headers. In normal circumstances, you don’t need to use that option.

NB! This setting will edit the .htaccess file.

1. line: yummy_cookie

Note

You can insert multiple cookies, one per line. Spaces should have a backslash in front of them like “\ “.

Do Not Cache User Agents

When a visitor requests a page from your site via one of the listed user agents, they will not be served from the cache. In normal circumstances, you don’t need to use that option.

NB! This setting will edit the .htaccess file.

1. line: Mozilla/5.0

Note

You can insert multiple user agents, one per line. Spaces should have a backslash in front of them like “\ “.

Do Not Cache Roles Administrator

When you are an administrator, testing new functionality, you may want to exclude yourself from being served from cache until your testing is done.

[5] ESI Coming Soon


Stay tuned!

[6] Object


Note

Please ask your hosting provider about the availability of different object cache solutions for your hosting service before using this feature.

Object Cache ON

An object cache stores the results of frequent database queries in a way that makes them faster to retrieve and eliminates the need for repeated access to the database. Object caching greatly reduces the time it takes to retrieve the same query results.

Note

When you use the page cache, then object cache is most efficient only when WordPress builds the page for the first time. In the next request, the server hits the page cache without needing to use the object cache. When you purge the page cache, WordPress uses object cache again to rebuild the same page with the latest content.

Method Memcached

You can use either Memcached or Redis cache for your website. For simplicity, I recommend using Memcached, while Redis offers a rich set of features that make it effective for a wide range of use cases.

Note

A2 Hosting provides a Memcached installed for most of their Managed and Turbo plans only.

Host localhost

Usually, object cache is available on localhost hostname or 127.0.0.1 IP address. Please ask your hosting provider to give you the correct hostname or IP address when you are unable to connect successfully.

Note for Advanced Users

When using Memcached then the host parameter may also specify the path of a Unix socket file path e.g. /path/to/memcached.sock. Various tests indicate that Unix sockets may be 33% faster than TCP sockets.

Port 0

Use value 0 for default ports. The default port for Memcached is 11211 and the default port for Redis is 6379. Please ask your hosting provider to provide the correct port when you are unable to connect successfully.

Default Object Lifetime 360

Please use the default value.

Persistent Connection ON

Use keep-alive connections to speed up cache operations.

Cache Wp-Admin OFF

Please keep this feature disabled. Otherwise, you may encounter expired data when using administration UI.

Store Transients ON

Enable this feature to receive server notices when Cache Wp-Admin is disabled.

[7] Browser


Browser Cache ON

Turn this option ON for static files. Extensions like .bmp, .jpeg, .pdf, .ps, .ttf, .jpg, .svg, .webp, .css, .js, .woff, .gif, .png, .woff2, … are considered all as static files. Those files unlikely change often that’s why they are “static”.

NB! This setting will edit the .htaccess file.

Browser Cache TTL

Leave default value unless you have good reasons to use different TTL values.

Recommendation for Advanced Users

When using CDN service then this value can be set to 604800 (one week). At the same time make sure to set CDN TTL to 31557600 (one year). Usually, CDN services have an option to purge cache on request.

[7] Advanced


You can use a different cookie name when multiple web applications with a LiteSpeed cache plugin configured within one virtual machine. Usually, you don’t need to configure this field.

NB! This setting will edit the .htaccess file.

Improve HTTP/HTTPS Compatibility OFF

When your web server is working properly then you can keep this setting off. Enable this option only if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities. When you enable this option, this ensures that the login cookie is always accessible to both HTTP and HTTPS connections.

Instant Click OFF

When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.

Note

Be aware, though, that this function will generate extra requests to the server and may impact server load significantly. Before enabling this setting please make sure you have either: proper caching configured, the website uses CDN service or the origin server has enough power to serve a large number of requests.

CDN

[1] CDN Settings


QUIC.cloud CDN OFF

Assuming you are using Cloudflare CDN service instead.

Cloudflare API ON

First, you need to get your Global API Key from Cloudflare. Otherwise please fill in your e-mail address, API key, and domain to activate Cloudflare API. When integration is activated you should see corresponding options on the Manage page.

[2] Manage


Cloudflare

When you have activated your Cloudflare API successfully you should be able to control Development Mode and Cloudflare Cache from your WordPress administration interface.

Hint

When you would like to purge only a particular resource from Cloudflare cache then navigate to Caching > Configuration > Custom Purge on your Cloudflare UI.

Image Optimization

[1] Image Optimization Summary


At first, you can collect images that need to be sent to the cloud server for optimization. After gathering the information, you may request to push the images to the remote QUIC.cloud server.

  • Gather Image Data – you can request a maximum of 200 images at once.
  • Send Optimization Request – you will be informed how many images have been pushed to the Cloud server.

Optimization Status

Here you can see the following information like:

  • Images optimized and pulled
  • Images failed to fetch
  • Images previously optimized
  • Image files missing
  • Duplicate image files ignored

[2] Image Optimization Settings


Auto Request Cron OFF

Automatically request optimization via regular polling tasks. I personally prefer to turn this setting off and request optimization manually. Though, when you have many daily image uploads, then feel free to keep this option enabled.

Auto Pull Cron ON

Keep this option enabled to make sure that optimized images are pulled back to your origin server.

Optimize Original Images ON

Keep this setting enabled to optimize original images. Fortunately, the backup is also kept in the same folder. Though, when you have a website that is oriented to sell professional images, please keep this setting disabled. Also, make sure that original images are only accessible by the people who have paid for the images 🙂

Remove Original Backups OFF

Usually, websites use only up to 10% of the disk capacity. Hence you can freely turn this setting off to make sure you have original images always available. Otherwise, feel free to enable this setting e.g. when you upload unoptimized images directly from your mobile phone.

Optimize Losslessly OFF

Keep this setting off when you need a fast website loading instead of perfect images displayed on your website. When quality images are more important to you than website speed then feel free to enable this setting.

Recommendation

You should rather provide a dedicated download link for images of higher quality.

Preserve EXIF/XMP data OFF

When distributing or selling quality images, it’s rather preferred to preserve metadata. Otherwise, feel free to disable this option.

Create WebP Versions ON

Keep this setting enabled to generate WebP versions of original images while optimizing. Today all the major browsers support the WebP format, even Safari since version 14. Hence the WebP format is the safe way to go.

Image WebP Replacement ON

Keep this setting enabled to significantly improve load time by replacing images with their optimized WebP versions. Technically speaking, all the image tags have the srcset attribute supporting multiple formats. This is useful in cases where the browser does not support WebP image format.

NB! This setting will edit the .htaccess file.

WebP Attribute To Replace

Specify which element attributes will be replaced with WebP. Only attributes listed here will be replaced. I suggesting to copy all the values from right box to left side. Additionally you can add your theme’s specific attributes.

WebP For Extra srcset OFF

Keep this setting disabled. When your website contains custom HTML including images, it’s strongly recommended to include srcset attributes with corresponding WebP formats already. This approach gives you better control over your website. Otherwise, feel free to enable this option.

WordPress Image Quality Control 98

Recommended to use the default value, although I personally use quality level of 98.

LiteSpeed Cache Settings – Page Optimization Advanced

[1] CSS Settings


CSS Minify ON

Turn this option ON to remove unnecessary or redundant data without affecting how the resource is processed by the browser – e.g. code comments and formatting, removing unused code, using shorter variable and function names, and so on.

CSS Combine ON

Each CSS file you are using for your website adds time to your page load speed. Sometimes this is unavoidable, however, when turning this option ON you can combine all CSS files together. Use Tuning Settings > CSS Excludes option when any CSS file needs to be excluded from the combined file.

CSS Combine External and Inline OFF

Keep this setting disabled to exclude external and inline CSS from the combined CSS file. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS combination.

Unique CSS File Deprecated since version 3.6 ON

Enabling this will get one combined CSS file for each URI. This is one of the crucial settings in performance tuning. Now you can see how much unused CSS you have per page. This is useful when you want to refine your CSS and remove the unused CSS per page.

NB! Since version 3.6 UCSS will always generate the unique file.

CSS HTTP/2 Push ON

Turn this option ON to pre-send internal CSS files to the browser before they are requested.

NB! Connections must use SSL.

Load CSS Asynchronously OFF

Keep this option OFF, otherwise please extract Critical CSS from the rest of the CSS code or leave this job for the LiteSpeed CCSS server. Please be noted that this is an advanced technique and can be quite tricky. Therefore, if you are responsible to maintain or build a rather complex website, this feature is not worth the hassle.

Font Display Optimization Swap

This setting tells browsers how fonts should be displayed while being downloaded. Swap means that the font will be drawn immediately on the page with a fallback font. There is zero block time, meaning that the page will not wait for the font to load. However, as soon as the required font is available, the browser will swap out the fallback text in favor of the new font.

Recommendation

When using this option it’s also recommended to preload font files to avoid swap effect or to minimize the time of displaying fallback font.

[2] JS Settings


JS Minify ON

Turn this option ON to remove all unnecessary characters from the JavaScript source codes without changing functionality.

JS Combine ON

Each JS file you are using for your website adds time to your page load speed. Sometimes this is unavoidable, however, when turning this option ON you can combine all JS files together. Use Tuning -> JS Excludes option when any JS file needs to be excluded from the combined file.

NB! Since version 3.5 jQuery has been excluded for you by default.

JS Combine External and Inline ON

Includes external and inline JavaScript code into a combined file. This option minimizes potential errors caused by JS Combine. Use Tuning -> JS Excludes to exclude resources that can’t be combined.

NB! JS Combine must be set to ON

JS HTTP/2 Push ON

Turn this option ON to pre-send internal JS files to the browser before they are requested.

NB! Connections must use SSL.

Load JS Deferred ON

JavaScript is considered a “parser blocking resource” and hence plays a crucial part in the Critical Rendering Path. I do recommend using deferred loading for javascript files whenever possible.

Note

When using Cloudflare’s Rocket Loader feature then this functionality is already turned on for you, although it may behave differently.

Load Inline JS After DOM Ready

Load inline javascript after DOM is fully loaded. You can even try the Deferred option if it works for you.

Note

When using Cloudflare’s Rocket Loader feature then this functionality is already turned on for you, although it may behave differently.

Exclude JQuery Deprecated since version 3.5 ON

This option improves compatibility with inline JavaScript. When you use the JS Combine feature, it is recommended that this setting remains ON.

NB! Since version 3.5 this option has been moved to Tuning -> JS Excludes.

[3] Optimization Settings


CSS/JS Cache TTL

Keep default value.

Advanced Recommendation

When using CDN service then this value can be set to 604800 (one week). At the same time make sure to set CDN TTL to 31557600 (one year). Usually, CDN services have an option to purge cache on request.

HTML Minify ON

HTML minification removes all unnecessary characters from the source code without changing functionality. I do recommend turning this option ON.

Inline CSS Minify Deprecated since version 3.5 ON

Minify inline CSS code. I do recommend turning this option ON.

NB! Since version 3.5 this option has been merged into CSS Minify.

Inline JS Minify Deprecated since version 3.5 ON

Minify inline JS code. I do recommend turning this option ON.

NB! Since version 3.5 this option has been merged into JS Minify.

DNS Prefetch

Prefetching DNS can reduce latency significantly for your visitors when they click to external links, particularly on mobile networks. Domains should be entered one per line.

1. line: //www.litespeedtech.com
2. line: //www.a2hosting.com

DNS Prefetch Control ON

Enables DNS prefetch for URLs in the document like images, CSS, JavaScript, and so forth. DNS requests are very small in terms of bandwidth, but latency can be quite high, especially on mobile networks. Hence I recommend turning this option ON.

Remove Comments Deprecated since version 3.6 ON

When JS and CSS files have minified, comments can take up valuable space. I do recommend enabling this option to strip comments from minified files and make them more efficient to transmit.

Remove Query Strings ON

Removes query strings from static resources. There are rumors that some servers and proxy servers are unable to cache properly when query strings are used. Although this can improve your speed score in services like Pingdom, GTmetrix, and PageSpeed, it can cause a bad user experience for your visitors when you update a particular plugin or theme. Therefore, only use this option when you do not update your WordPress often.

NB! Please remember that query strings are usually there for a reason, especially in the WordPress world.

Load Google Fonts Asynchronously Coming Soon

Remove Google Fonts Coming Soon

Remove WordPress Emoji ON

Browser default emoji will be displayed instead of wordpress.org emoji. I do recommend turning this option ON when you do not need to use emojis.

Remove Noscript Tag OFF

Keep this setting OFF for now 🙂

[4] Media Settings


Lazy Load Images ON

Load images only when they enter the viewport. This can improve page loading time and decreases server load. This also enhances user experience and reduces bandwidth traffic on mobile devices.

Basic Image Placeholder

Leave empty to use default gray image placeholder. You can use your own base64 encoded image, but believe me, the default option does the job very well 🙂

Responsive Placeholder ON

This option can help to reduce layout reshuffles when images are loaded. I do recommend setting this ON.

Responsive Placeholder SVG

Use default one 🙂

Lazy Load Iframes OFF

When you don’t have iframes on your webpage keep this setting OFF. Otherwise, turn this ON to reduce initial HTTP requests.

Inline Lazy Load Images Library ON

This can improve your webpage loading speed and user experience.

NB! This setting is closely related to Load Inline JS.

[5] Media Excludes


Here you can configure all the exceptions for media assets when you don’t want something lazy-loaded.

[6] Localization Settings


Gravatar Cache ON

Activate this option when your website gets a lot of comments and Avatars are enabled on your website.

NB! Check on Settings > Discussions > Avatar Display whether you have Avatars enabled before enabling this setting.

Gravatar Cache TTL 604800

You can control how long Avatars will be cached by the browser. Use the default value (1 week).

Localize Resources ON

Sometimes you may want to localize external JavaScript resources to apply different cache policies. You can enter the domain names of external resources that you want to localize. Fortunately, you have a large list of domain names already prepopulated for you. Just remove domain names you do not use on your website.

1. line: https://www.googletagmanager.com/gtm.js
2. line: https://www.google-analytics.com/analytics.js

NB! Only HTTPS domain URLs can be entered.

Warning

Referencing the JavaScript file from Google’s servers ensures that you get access to new features and product updates as they become available, giving you the most accurate data in your reports. Though localization of scripts may speed up your webpage a bit, localizing Google scripts is not the recommended practice.

[7] Tuning Settings Advanced


Combined CSS Priority Deprecated since version 3.5 OFF

Normally, combined CSS is loaded after external CSS files. Leave this option disabled, because combined local CSS is more likely to have customizations that need to be loaded after the base CSS. Enable this option if you have reason to load combined CSS before other CSS files.

CSS Excludes

Here you can list down all the CSS files that should not be minified/combined. Both full URLs and partial strings can be used, one per line. Filter with the name litespeed_cache_optimize_css_excludes is also supported. All the elements with an attribute data-no-optimize="1" in HTML code will be excluded.

1. line: https://www.yourdomain.com/wp-content/plugins/cookie-pot/css/cookies.css
2. line: cookie-pot/css/cookies.css

Note

Note that the second file location points to the same resource as the first one.

Combined JS Priority Deprecated since version 3.5 OFF

Normally, combined JavaScript is loaded after external JavaScript files. Leave this option disabled and enable it if you have a reason to load combined JavaScript before other JavaScript files.

JS Excludes

Here you can list down all the JS files that should not be minified/combined. Both full URLs and partial strings can be used, one per line. Filter with the name litespeed_cache_optimize_js_excludes is also supported. All the elements with the attribute data-no-optimize="1" in HTML code will be excluded.

1. line: https://www.yourdomain.com/wp-content/plugins/cookie-pot/js/cookies.js
2. line: cookie-pot/js/cookies.js

Note

Note that the second file location points to the same resource as the first one.

JS Deferred Excludes

Listed JavaScript files or inline JavaScript code will not be deferred. Both full URLs and partial strings can be used, one per line. Filter with the name litespeed_optm_js_defer_exc is also supported. All the elements with the attribute data-no-defer="1" in HTML code will be excluded.

1. line: jquery.js
2. line: jquery.min.js
3. line: someInlineScriptVariableOrMethodNameOrStringFragmentToUseForExclusion

Database

[1] Manage


Database Optimizer

You can regularly keep an eye on this page and eliminate red badges whenever you feel necessary. Those activities should be safe and risk-free for your system.

Recommendation

Instead of regularly executing Clean all post revisions you should set Revisions Max Number different from zero in the next section.

Database Table Engine Converter Coming Soon

[2] DB Optimization Settings


Revisions Max Number

It’s up to you to find the optimal revision count per post that works for you. I usually keep this number around 5.

Revisions Max Age

Recommended value is 30 days.

NB! Be aware that after defined days post revisions will be deleted.

FAQ

What do I Need to Set Up LiteSpeed Cache for My Website?

When you would like to use LiteSpeed cache for your website you’ll need one of the following: either free OpenLiteSpeed server, commercial LiteSpeed Enterprise Edition, LiteSpeed-powered hosting providers like A2 Hosting, Hostinger, or QUIC.cloud CDN. The most easier option for beginners is to start using any solution offered by hosting providers where LiteSpeed server technology is already bundled into the hosting plans.

What Are the Best Settings for WordPress LiteSpeed Cache Plugin?

It’s very hard to tell you the best LiteSpeed Cache plugin settings for your website because every website is a unique piece of art. By going through this tutorial above you’ll get all the information you need to know when configuring LiteSpeed Cache setting for your website. When you still have questions or would like to clarify something, I’m here to help you.

Does LiteSpeed Cache Work with Cloudflare or Any Other CDN Service?

Yes, you can easily use Cloudflare CDN on top of your origin server. Though LiteSpeed Cache works for every CDN I strongly recommend using Cloudflare CDN for your website. You can take a look at How to Setup Cloudflare CDN for your website to get started quickly. Be aware that when using Cloudflare you’ll also get a very powerful firewall, but there are Tons of Other Features that Cloudflare provides.

[Next Steps] Quick Website Setup

Thanks for Reading and Good Luck on Your Journey! Need Some Help or Would Like to Ask Something about Current Content? Please Add a Comment 🙂

Cloudflare Setup Guide

Cloudflare Setup

How to install Cloudflare on your website? Read my step-by-step guide to get your website faster with Cloudflare.
Read More
A2 Hosting Setup Guide

A2 Hosting Setup

This article provides information you need for setting up a website and domain on an A2 Hosting server.
Read More

Leave Comment

Your email address will not be published. Required fields are marked *