This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
advanced-adblock [2023/01/06 17:18] – rs232 | advanced-adblock [2023/08/13 17:03] (current) – [Domain whitelist] -formatting hogwild | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Adblock | + | ====== Adblock ====== |
- | As an evolution of the original adblock script, v2 comes with a rich feature-set and improved interaction capabilities. | + | This menu contains settings to configure FreshTomato' |
- | ===== Functionality ===== | + | In documentation, |
- | Adblock can accept different format of lists (always plain text) extracting the domains from files in different layout (v1 required the " | ||
- | ==== Logging | + | ===== v1 and v2 ===== |
- | The new GUI allows you to set up the maximum loglevel to be generated by the script. In an attempt to make the log messages more intuitive/ | + | There are currently two versions of Adblock: [[advanced-adblock# |
- | ==== Filter-file size limit ==== | + | \\ This table lists the Adblock versions available on different types of hardware\\ |
- | It's calculated automatically by the router and given a best practice acceptable limit to enable/ | + | ^ Hardware ^ FT < 2023.1 ^ FT >= 2023.1 ^ |
+ | | MIPS R1 | [[advanced-adblock# | ||
+ | | MIPS R2 | [[advanced-adblock# | ||
+ | | ARM | [[advanced-adblock# | ||
- | Custom path - It is now possible to specify an option filesystem path where the script can store the files. Defining the path changes the way the script works and enables some additional functionality. This essentially allows to store lists, their http headers and the actual compiled blockfile on external storage (e.g. USB) offloading demand on the RAM and allowing for information to survive | + | \\ Adblock v1 functionality |
- | ==== Black lists ==== | + | Adblock v2 uses advanced methods to block ads. It should be the preferred choice whenever possible. |
- | The well know table where lists are defined now also accepts a new format called list-of-lists, | ||
- | '' | + | ===== How Adblock Works ===== |
- | ==== Custom blacklisting ==== | + | FreshTomato' |
- | Here a range of syntax are accepted - standard domain (one per line) - a path to a file where the domains are defined (e.g. / | + | * dnsmasq resolves |
+ | * The adblock script then replaces that address with an address of 0.0.0.0 . | ||
+ | * The 0.0.0.0 address is sent to the client requesting DNS resolution. | ||
+ | * Since 0.0.0.0. is an NXDOMAIN (invalid/unknown address), no connection is made to that URL. | ||
- | ==== Whitelisting | + | Given a list of sources, the original script simply blocks ads. However, there are other reasons for your network to avoid communicating with certain servers. This function was therefore renamed "DNS Filtering" |
+ | ===== Adblock Settings ===== | ||
- | - standard domain (one per line) - a path to a file where the domains are defined (e.g. / | + | \\ **Enable**: Checking this box turns on Adblock. |
- | ==== Troubleshooting ==== | + | The adblock script downloads lists of URLs/ |
- | The GUI integration with adblock provides already some crucial details to understand if the script is operating correctly or not. | + | \\ |
- | ====== Adblock | + | **Debug mode (v1)** |
- | The Adblock menu contains settings to configure FreshTomato' | + | Checking this box enables debug mode for dnsmasq |
- | FreshTomato' | + | \\ |
- | If only elements are blocked, it's likely the page will load without error -- uncluttered. | + | |
- | )) | + | |
- | For Adblock to work properly, client devices **must be configured** to use FreshTomato' | + | {{:: |
- | There are three optional settings that help ensure smooth Adblock operations: | + | \\ |
- | - Enabling //Intercept DNS// port in the [[dhcp_dns|DHCP/ | + | **Max Log Level (v2)**: |
- | - Enabling //Prevent Client auto DoH// in the [[dhcp_dns|DHCP/ | + | |
- | - Enabling the "DoH Server" | + | |
- | Warning: FreshTomato' | + | Thew newer v2 interface lets you set the maximum log level output |
- | ===== Adblock Settings ===== | + | Supported levels include: |
- | **Enable**: Checking this box enables FreshTomato' | + | |
+ | | ||
+ | | ||
+ | | ||
+ | * 6 | ||
+ | * 7 (Debug level) writes very detailed log information. This is helpful when troubleshooting common problems. | ||
- | **Debug Mode: **Checking this box enables debug mode in the log. This tells FreshTomato that you want all DNS queries that are routed to dnsmasq to be logged to the system log (syslog). This is useful | + | The higher |
- | [[https:// | + | \\ |
- | ===== Blacklist URL ===== | + | {{:: |
- | This section contains a table containing a list of the various blacklists FreshTomato can download and use for ad blocking. | + | \\ |
- | **On:** Clicking on one of the blacklist rows will make a checkbox appear at the far left of the row. Checking that box will enable | + | A good way to view Adblock log entries is to go to the [[status-log|Logs]] menu and type " |
- | **Blacklist URL: **Shows the location on the Internet where that particular blacklist can be found. | + | {{:: |
- | **Description: | + | **Blockfile size limit (v2 only)**: |
+ | |||
+ | Adblock v1 may crash FreshTomato | ||
\\ | \\ | ||
- | [[https://wiki.freshtomato.org/ | + | {{:: |
\\ | \\ | ||
- | **Delete: **Clicking this button on a checked Blacklist URL will permanently delete that Blacklist. Note that there is no option to reset these to the original Blacklist URL entries. If you delete a Blacklist URL that is important to you, you will need to find it, and enter it back into the Blacklist URL table. | + | This limit is calculated as 10% of physical RAM (when external storage is set). When no external storage is found, |
- | **Add:** Clicking Add inserts | + | This is a limit, not a target. There' |
- | An Autoupdate function will launch randomly every day between 2:00AM and 2:59 to download the most up-to-date Blacklists from the URLs in the list. | + | \\ |
- | ===== Custom | + | **Custom |
- | The Custom Blacklist section contains | + | An important v2 feature is the option to configure a path to permanent storage where adblock can store relevant files. It is strongly advised to specify |
- | ===== Custom Whitelist ===== | + | \\ {{adblock-v2-custom_path.jpg? |
- | Here you enter custom | + | \\ |
+ | |||
+ | This is very useful when the script is re-run (manually or automatically) and there are no updated lists or configuration changes. The check for configuration changes involves controlling any modification to NVRAM variables since the last script run. | ||
+ | |||
+ | When a custom path is defined, adblock will: | ||
+ | |||
+ | - Download all http headers from only the enabled lists | ||
+ | - Compare those headers with the ones stored locally | ||
+ | - Decide whether to re-process the blocklists or not. | ||
+ | |||
+ | This runs as follows: | ||
+ | |||
+ | * If the configuration wasn't changed and; | ||
+ | * No updated lists are available | ||
+ | * Skip the re-processing and return to idle. | ||
+ | |||
+ | This saves time and resources. | ||
+ | |||
+ | Here, " | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ==== Domain Blacklist URLs & Group-of-Lists ==== | ||
+ | |||
+ | This table contains a list of the blacklists FreshTomato can download and use to block ads. | ||
+ | |||
+ | **On: | ||
+ | |||
+ | **Blacklist URL: | ||
+ | |||
+ | **NOTE:** Since release 2023.4 by default, no blocklists were defined as part of the standard releases. This was done to to reduce NVRAM demand. However, you can add your preferred lists manually. A good summary of these lists is the official [[adblock_dns_filtering|Adblock (DNS filtering) lists]] page on this Wiki. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{:: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **Description: | ||
+ | |||
+ | **Delete: | ||
+ | |||
+ | There is no option to reset these to the original Blacklist URL entries. | ||
+ | |||
+ | If you delete a URL that's important to you, you will need to: | ||
+ | |||
+ | * Re-enter it into the Blacklist URL table or; | ||
+ | * Reset FreshTomato to default settings | ||
+ | |||
+ | **Add: | ||
+ | |||
+ | You can also add a comment in the Description field. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ==== Compatible data formats ==== | ||
+ | |||
+ | Target lists to be downloaded must be in plain text format. As above, v2 can extract domains from lists in a variety of formats. Essentially, | ||
+ | |||
+ | **Group-of-lists** | ||
+ | |||
+ | Currently, v2 also accepts a new list format called " | ||
+ | |||
+ | \\ | ||
+ | |||
+ | This can be visualized as follows: | ||
+ | |||
+ | <code -> | ||
+ | URL |--> list | ||
+ | </ | ||
+ | |||
+ | | ||
+ | |||
+ | <code -> | ||
+ | URL |--> Group-of-lists-file |--> URL |--> list | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | | ||
+ | |||
+ | Adblock automatically handles EOL (End of Line) characters in files, when necessary. It converts them internally. | ||
+ | |||
+ | Group-of-lists are visible in the log file. For example, they might appear as: " | ||
+ | |||
+ | |||
+ | ==== Domain blacklist custom ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === Domain Syntax === | ||
+ | |||
+ | Several syntaxes are valid for this list: | ||
+ | |||
+ | * Standard domains (one entry per line) | ||
+ | * A path to a local file where domains are defined. The file should contain one domain per line. \\ For example: "/ | ||
+ | * A domain prefixed with a " | ||
+ | |||
+ | \\ | ||
+ | |||
+ | When adding custom entries: | ||
+ | |||
+ | If you blacklist: " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | and all other subdomains will be blacklisted. | ||
+ | |||
+ | However, this may not be what you want. | ||
+ | |||
+ | To prevent subdomains of an entry from being filtered, prepend a " | ||
+ | |||
+ | For example, if you enter " | ||
+ | |||
+ | Prepending a " | ||
+ | |||
+ | Any line starting with a "#" | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **Sort a-z ↓** **:** Clicking this button sorts the contents of this field alphabetically. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ==== Domain whitelist ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === Syntaxes === | ||
+ | |||
+ | The Domain whitelist can use: | ||
+ | |||
+ | * Standard domains (one entry per line). | ||
+ | * A path to a file of domains (one domain per line) . \\ For example: "/ | ||
+ | * Prepending a " | ||
+ | |||
+ | \\ | ||
+ | |||
+ | When adding entries: | ||
+ | |||
+ | If you whitelist: " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | and all other subdomains will be whitelisted. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | You can prevent subdomains of an entry from being whitelisted | ||
+ | |||
+ | For example, if you enter " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | Any line starting with a "#" | ||
+ | |||
+ | \\ **Sort a-z ↓** : Clicking this button sorts the field contents alphabetically. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === Maintaining the Domain whitelist === | ||
+ | |||
+ | A good way to maintain the whitelist is to share it on your LAN, and educate users about nslookup verification and whitelist additions. | ||
+ | |||
+ | Such a process could be automated as follows: | ||
+ | |||
+ | - Map a file in the Whitelist section of the Adblock menu | ||
+ | - Share the file/folder via Samba, in the [[nas-samba|File Sharing]] menu | ||
+ | - Teach users: | ||
+ | - How to use nslookup on a URL to verify DNS lookups | ||
+ | - Where to find the whitelist (via its samba share) and; | ||
+ | - After the whitelist has been edited, to configure settings in [[admin-buttons|Buttons/ | ||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | ==== Enforcing Client Compliance ==== | ||
+ | |||
+ | For Adblock to work properly, client devices **must be configured** to use FreshTomato' | ||
+ | |||
+ | For the latter, first enable DHCP in the [[basic-network|Network]] menu. To enable the DNS server, select "Use internal DNS" under in the [[advanced-dhcpdns|DHCP/ | ||
+ | |||
+ | These steps are mandatory. Clients that bypass FreshTomato' | ||
+ | |||
+ | Three optional settings help ensure proper Adblock operation: | ||
+ | |||
+ | - Enable //Intercept DNS port// in the [[advanced-dhcpdns|DHCP/ | ||
+ | - Enable //Prevent Client auto DoH// in the [[advanced-dhcpdns|DHCP/ | ||
+ | - Enable the "DoH Server" | ||
+ | |||
+ | Adblock v1 functionality is a reduced version of ad-blocking scripts taken from code outside FreshTomato. Enabling one of those outside scripts and FreshTomato Adblock at the same time may cause conflicts. Do not enable both. Adblock v2 uses advanced methods to block ads. It should be the preferred choice whenever possible. | ||
+ | |||
+ | Adblock/DNS Filtering affects name resolution only. If an application communicates directly via IP address, Adblock cannot prevent that. | ||
+ | |||
+ | Thorough management of domain blocking can be tedious work. For example, with email spam, you'll probably have to deal with false positives. | ||
+ | |||
+ | Regardless of version, the script is always named " | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ===== Adblock v2 ===== | ||
+ | |||
+ | Adblock v2 improves on the original (v1) script. V2 adds a richer feature set, with increased user interaction via a toolbar and command line options. | ||
+ | |||
+ | \\ \\ \\ {{: | ||
+ | |||
+ | |||
+ | ==== v2 Improvements ==== | ||
+ | |||
+ | * Adblock v2 performs | ||
+ | * Allows you to run certain script functions without having to run all of them, to save time. | ||
+ | * Can accept different list formats (in plain text), and extract domains from files with different layouts. \\ This includes Easylist format. There may be false positives using Easylist format. For details, see: [[https:// | ||
+ | * Prevents resource starvation. Also, before running, v2 assesses its configuration for blocklist capacity. It's basically self-diagnosing and healing. | ||
+ | * Supports Quick-run. This mode allows you to add a domain | ||
+ | * Supports external storage. Now, lists and headers are stored in optional permanent storage to help decide which lists to download. | ||
+ | * Prevents false positives via a new, hard-coded 30-minute interval between runs. This is enabled after an update is completed. | ||
+ | * Includes more troubleshooting options. Debug logging and script tracing can be enabled to look deep into the \\ lowest operational level of the script. | ||
+ | * Can be operated from the web interface or at a command line. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | To get help with adblock at the command line, type '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ {{: | ||
+ | |||
+ | | ||
+ | |||
+ | \\ \\ To open the last trace file automatically, | ||
+ | |||
+ | \\ {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ===== Using the v2 Controls ===== | ||
+ | |||
+ | \\ | ||
+ | |||
+ | The Controls button bar in the Advanced section let you control adblock script execution. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | | {{ : | ||
+ | | ::: | **Unload: | ||
+ | | ::: | **Update: | ||
+ | | ::: | **Reset-limit: | ||
+ | | ::: | **Clear all files: | ||
+ | | ::: | **Snapshot: | ||
+ | | ::: | **Enable Only: | ||
+ | | ::: | **Disable Only:** This lets you disable adblock ('' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Refresh: There is now a refresh command at the bottom of the table. Refreshes are limited to a minimum frequency of 5 seconds. The more frequently you run refreshes, the higher the system load will climb. | ||
+ | |||
+ | |||
+ | ===== Quick-run (v2) and Full-run Operations ===== | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Modifications to the adblock script configuration can be categorized as follows: | ||
+ | |||
+ | - List (enable/ | ||
+ | - List content update | ||
+ | - Change of parameters (loglevel / blockfile limit / path ) | ||
+ | - **Addition of a simple blacklist_custom** | ||
+ | - **Addition of a simple whitelist** | ||
+ | - Addition of pruning blacklist_custom | ||
+ | - Addition of a strict whitelist | ||
+ | - Removal of a blacklist_custom | ||
+ | - Removal of a whitelist | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Only two operations from the above list can be run in Quick-run mode, as they don't require full processing: | ||
+ | |||
+ | * No. (4) Addition of simple custom blacklist domain/s | ||
+ | * No. (5) Addition of simple whitelisted domain/s | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Operations (4) and (5) are the most common actions performed when maintaining adblock script configuration. Quick-run operations are performed live on a running blockfile. Therefore, the adblock script | ||
+ | |||
+ | Please note that " | ||
+ | |||
+ | |||
+ | ===== Command line operations (v2) ===== | ||
+ | |||
+ | | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | As seen above in the " | ||
+ | |||
+ | \\ Help | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Status | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Start | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Stop | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Update | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Upgrade | ||
+ | |||
+ | '' | ||
+ | |||
+ | Since it is stored in RAM, it will be lost after a reboot. Therefore, an extra parameter is supported: | ||
+ | |||
+ | \\ Test | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Reset | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Clear/ | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Trace/ | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Snapshot | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Enable | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ Disable | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ==== Adblock test command (v2) ==== | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | To simplify and speed up testing of broken resolution or other DNS issues, use the " | ||
+ | |||
+ | Specifically: | ||
+ | |||
+ | * dnsmasq answer - Displays the actual name resolution as seen by the router and LAN users. \\ The word " | ||
+ | * Cloudflare answer - This query bypasses the usual dnsmasq process and sends a query to address 1.1.1.1 . \\ This can help you to verify if a domain exists. | ||
+ | * Blockfile ref - This checks whether there are any references to the tested domain in the blockfile. | ||
+ | |||
+ | \\ With these three pieces of information, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Automatic list updates ===== | ||
+ | |||
+ | As part of normal adblock operation, a crontable entry is added to perform a daily list update. Update times are now randomized to prevent DDoS of the list providers' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | To verify the current scheduled update time: | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | In this example, it's **28** (min) **4** (am) * (Every day) * (Every month) * (Every day of the week). | ||
+ | |||
+ | This picture illustrates the syntax of crontable expressions: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{:: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | For help automating/ | ||
+ | |||
+ | If you stop adblock, the crontable expression is removed. This is by design. | ||
+ | |||
+ | |||
+ | ===== Future development goals ===== | ||
+ | |||
+ | * Add an option to let FreshTomato users share their Whitelists. \\ This would allow the creation of a shared database of " | ||
+ | * Add a test function to the web interface (currently only command line) | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ===== Adblock Notes and Troubleshooting ===== | ||
- | ===== Adblock Notes ===== | + | ==== Troubleshooting v1 ==== |
- | Testing/Troubleshooting | + | You can test Blacklisted or Custom entries to see if Adblock is properly redirecting them by using the nslookup tool (Windows, Linux or MacOS). Simply run nslookup and enter the domain/URL to be tested. If it resolves to 0.0.0.0, then Adblock is working properly, and the domain is being blocked. You can also check FreshTomato' |
- | Blacklisted or Custom entries can be tested to see if Adblocker is properly redirecting them by using the nslookup tool on Windows, Linux or OS X. Simply run nslookup and enter the domain/URL in question. If it resolves to 0.0.0.0, then Adblock is working properly, and the domain will be blocked. You can also check FreshTomato' | + | For example, this entry shows that dnsmasq replaced |
'' | '' | ||
- | shows that the dnsmasq daemon replaced the true IP address of hbx.media.net with 0.0.0.0. Adblocker | + | Adblock |
- | If the router crashes, you may have used too many large Blacklists, | + | If your router crashes, you may be using too many large Blacklists, |
- | There are a few sites available | + | There are websites |
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | \\ | ||
**Adblock doesn' | **Adblock doesn' | ||
- | Increasingly, | + | Increasingly, |
- | As mentioned earlier, enabling the "DoH Server" | + | As mentioned earlier, enabling the "DoH Server" |
- | **IOS for paid iCloud service only** | + | \\ |
- | On the " | ||
- | {{:pasted:20220611-134207.png}} | + | ==== Troubleshooting v2 ==== |
+ | |||
+ | For troubleshooting, | ||
+ | |||
+ | In order to learn what might be going wrong, it's crucial to understand adblock' | ||
+ | |||
+ | * System load is too high in the 5min+ section (For example, > 1.5) | ||
+ | * RAM usage is too high (> 90%) | ||
+ | * dnsmasq ownership remains root (non-operational) until lists are fully loaded. It's normal to see " | ||
+ | * Too many dnsmasq restarts | ||
+ | * dnsmasq restart time is too high (> 15 seconds) | ||
+ | * adblock calls today | ||
+ | * last run errors | ||
+ | |||
+ | \\ | ||
+ | |||
+ | If the Blockfile size exceeds the //Blockfile size limit// value, the blockfile size will be reduced. If (with limit manually set high) dnsmasq still struggles to run properly after this, the safeDnsmasqRestart() process will reduce the Blockfile size in increments of 5% and reattempt to fully start dnsmasq after each reduction. When dnsmasq functions properly, the new auto-calculated limit is set as the current //Blockfile size limit//. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | When a trace is running, FreshTomato will display this (FIX ME!) in the Web interface: | ||
+ | |||
+ | | ||
+ | |||
+ | \\ \\ To open the last trace file automatically, | ||
+ | |||
+ | \\ {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **Apple iOS devices (paid iCloud service only)** | ||
+ | |||
+ | Apple IOS devices have settings that may interfere with adblock operations. The "Limit Address Tracking" | ||
+ | |||
+ | \\ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | \\ {{: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Alternatively, | ||
+ | |||
+ | \\ | ||
- | or to have this disabled globally look for " | + | {{: |
- | {{: | + | You might connect your mobile/ |
- | Considering you might connect to different WLANs with your mobile/ | + | Remember, these options are only available |