Encore DEF Dispenser

Proud to be Powered by Vontier. Sharing a united vision that is driven by innovation. Find out more

Encore DEF

Gilbarco Veeder-Root’s Encore S Diesel Exhaust Fluid (DEF) dispenser is the quality choice for North America.

It’s consistent with your brand image and familiar to your customers. It leverages your existing interfaces to CRIND® payment and fleet card networks, alphanumeric keypad applications and loyalty programs that are supported by your existing point of sale system.

Yet, on the inside, its innovative design brings to bear all the best practices for dispensing DEF we’ve learned from Europe to provide you with the best opportunity build a new profit center and meet the needs of your customers. The Encore S DEF dispenser is designed specifically to prevent DEF freezing and crystallization with a heated cabinet and specially-designed optional hanging hardware. The Encore S DEF dispenser’s hydraulics are stainless steel to protect against corrosion. And an innovative, Weights & Measures approved stainless steel mass flow meter measures DEF accurately and reliably. You get the industry’s premium DEF dispenser designed for our market, maximum uptime, and the lowest total cost of ownership.

Maximum Uptime and Lowest Total Cost of Ownership

  • Stainless steel, DEF-compatible hydraulics protect against corrosion
  • Thermostat-controlled heated cabinet and specially designed optional hanging hardware prevents DEF freezing and crystallization with minimal power consumption
  • Stainless steel mass flow meter measures DEF accurately and reliably
  • Proven Gilbarco CRIND electronics support your existing point of sale, payment and fleet card networks, loyalty programs and alphanumeric keypad applications
  • Compatible with Gilbarco Veeder-Root’s Intelligent Device Management system for performance monitoring
  • Supported by the industry’s largest and best network of Authorized Service Contractors
  • Superior durability, with a best-in-industry 4-year corrosion warranty, solid metal frame and sheathing with automotive-quality coatings, and a high quality PPU lens

Branding Consistency and Familiar Operation

  • Part of the Encore S series for a consistent brand image on your fuel island
  • Familiar Encore S features for intuitive operation
  • Superior usability, with a reliable, high speed 6” printer, angled hose outlet castings and freeze protected/heated nozzle boots

More Options

  • Field-proven payment options including CRIND with monochrome screens, RFID contactless payment, and barcode readers
  • Alphanumeric keypad for fleet applications that require VIN or odometer entry

Easy Installation

  • No below-grade access required
  • Easy use with above-ground tanks

Familiar user interface

  • Intuitive for your customers to operate and streamlines pay at the pump for speedy transactions
  • Supports the same CRIND® and alphanumeric keypad applications that you know from your other Encore dispensers
  • Works with your existing POS system

Mass flow meter

  • Accurately measures DEF, but has no moving parts that wear or stick
  • Measures mass directly and independently from viscosity and density changes
  • Unaffected by temperature, conductivity, and solid content. You enjoy maximum uptime and accuracy North American design
  • Provides consistent branding, intuitive operation, and superior image

Heated cabinet with automatic hose retraction and sliding nozzle cover

  • Keeps DEF from crystallizing or freezing
  • Thermostat controlled and insulated for maximum efficiency and uptime

ISO compatible components

  • Ensure DEF compatibility and prevent corrosion
  • Highly reliable for the long term

Options:

  • CRIND with 5.7” monochrome or 10.4” color screens
  • Bar code scanner
  • Alphanumeric keypad for entry of VIN or FlexPay™ Encrypting PIN Pad for PCI-compliant PIN-based debit
  • FlexPay Secure Card Reader
  • Contactless card reader
  • Call button
  • Intercom speakers
  • 5 Button/Incremental programmable preset
  • Two-level price posting
  • Custom graphics
  • Electromechanical totalizers
  • DEF-specific hanging hardware


Request a Quote


<script>

// CONFIG: map UTM parameter names -> input selectors
const fieldMap = {
utm_source: 'input[name="1097612_221968pi_1097612_221968"]',
utm_medium: 'input[name="1097612_221965pi_1097612_221965"]',
utm_campaign: 'input[name="1097612_221959pi_1097612_221959"]',
utm_content: 'input[name="1097612_221962pi_1097612_221962"]'
};

// CONFIG: whether to save values read from the URL into sessionStorage
const saveUrlToSession = true;

function safeSessionGet(key) {
try {
return sessionStorage.getItem(key);
} catch (e) {
return null;
}
}

function safeSessionSet(key, value) {
if (!saveUrlToSession) return;
try {
sessionStorage.setItem(key, value);
} catch (e) {
// ignore storage write failures
}
}

function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName); // returns null if not present
}

function setFieldValue(el, value) {
if (!el) return;
el.value = value;
// trigger input/change events for libraries that listen for them
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
}

function populateKey(paramName, selector) {
const el = document.querySelector(selector);

// 1) Try sessionStorage first
const sessVal = safeSessionGet(paramName);
if (sessVal !== null && sessVal !== '') {
setFieldValue(el, sessVal);
return;
}

// 2) Fallback to URL param
const urlVal = getUrlParam(paramName);
if (urlVal !== null && urlVal !== '') {
setFieldValue(el, urlVal);
safeSessionSet(paramName, urlVal); // store for future pages if enabled
}
}

function populateHiddenFields() {
Object.keys(fieldMap).forEach(paramName => {
populateKey(paramName, fieldMap[paramName]);
});
}

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', populateHiddenFields);
} else {
populateHiddenFields();
}

// Optional: allow manual calls from other scripts
window.populateHiddenFields = populateHiddenFields;

(function () {
// CONFIG
const fieldMap = {
utm_source: 'input[name="1097612_221968pi_1097612_221968"]',
utm_medium: 'input[name="1097612_221965pi_1097612_221965"]',
utm_campaign: 'input[name="1097612_221959pi_1097612_221959"]',
utm_content: 'input[name="1097612_221962pi_1097612_221962"]'
};
const saveUrlToSession = true;

// Safe session helpers
function safeSessionGet(key) {
try { return sessionStorage.getItem(key); } catch (e) { return null; }
}
function safeSessionSet(key, value) {
if (!saveUrlToSession) return;
try { sessionStorage.setItem(key, value); } catch (e) {}
}

// URL helper
function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName);
}

// DOM helper
function setFieldValue(el, value) {
if (!el) return;
el.value = value;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
}

// Core: check session first, then URL
function populateKey(paramName, selector) {
const el = document.querySelector(selector);
const sessVal = safeSessionGet(paramName);
if (sessVal !== null && sessVal !== '') {
setFieldValue(el, sessVal);
return;
}
const urlVal = getUrlParam(paramName);
if (urlVal !== null && urlVal !== '') {
setFieldValue(el, urlVal);
safeSessionSet(paramName, urlVal);
}
}

// Populate all configured fields
function populateHiddenFields() {
Object.keys(fieldMap).forEach(paramName => {
populateKey(paramName, fieldMap[paramName]);
});
}

// Init
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', populateHiddenFields);
} else {
populateHiddenFields();
}
window.populateHiddenFields = populateHiddenFields;
})();
</script>

<script>
document.addEventListener('DOMContentLoaded', function() {
// Function to get URL parameters
function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName);
}

// Get the utm_source value
const utmSource = getUrlParam('utm_source');
const utmMedium = getUrlParam('utm_medium'); // Also get others
const utmCampaign = getUrlParam('utm_campaign');
const utmContent = getUrlParam('utm_content');

// --- Method 1: Direct Assignment (if form fields exist) ---
// Find your form fields by name/ID and set their value
const sourceField = document.querySelector('input[name="1097612_221968pi_1097612_221968"]'); // Adjust selector
if (sourceField && utmSource) {
sourceField.value = utmSource;
}
const mediumField = document.querySelector('input[name="1097612_221965pi_1097612_221965"]'); // Adjust selector
if (mediumField && utmMedium) {
mediumField.value = utmMedium;
}
const campaignField = document.querySelector('input[name="1097612_221959pi_1097612_221959"]'); // Adjust selector
if (campaignField && utmCampaign) {
campaignField.value = utmCampaign;
}
const contentField = document.querySelector('input[name="1097612_221962pi_1097612_221962"]'); // Adjust selector
if (contentField && utmContent) {
contentField.value = utmContent;
}
// Repeat for medium, campaign, etc.

// --- Method 2: Store in Session Storage (Recommended for multi-page) ---
// This keeps data across page views before form submission
if (utmSource) {
sessionStorage.setItem('utm_source', utmSource);
}
if (utmMedium) {
sessionStorage.setItem('utm_medium', utmMedium);
}
if (utmCampaign) {
sessionStorage.setItem('utm_campaign', utmCampaign);
}
if (utmContent) {
sessionStorage.setItem('utm_content', utmContent);
}
});

// Function to populate form on any page load (using session storage)
function populateHiddenFields() {
const utm_source = sessionStorage.getItem('utm_source');
const utm_medium = sessionStorage.getItem('utm_medium');
const utm_campaign = sessionStorage.getItem('utm_campaign');
const utm_content = sessionStorage.getItem('utm_content');

const sourceInput = document.querySelector('input[name="1097612_221968pi_1097612_221968"]');
if (sourceInput && utm_source) {
sourceInput.value = utm_source;
}
const mediumInput = document.querySelector('input[name="1097612_221965pi_1097612_221965"]');
if (mediumInput && utm_medium) {
mediumInput.value = utm_medium;
}
const campaignInput = document.querySelector('input[name="1097612_221959pi_1097612_221959"]');
if (campaignInput && utm_campaign) {
campaignInput.value = utm_campaign;
}
const contentInput = document.querySelector('input[name="1097612_221962pi_1097612_221962"]');
if (contentInput && utm_content) {
contentInput.value = utm_content;
}
}

// Run this when the form loads on the *final* page (e.g., the form page itself)
// Call populateHiddenFields(); when your form element is ready or on DOMContentLoaded again.
</script>