top of page

Lone Star Fencing Center:    Greater Dallas' premiere fencing club

Discover our internationally-recognized fencing program that introduces beginners to modern Olympic-style fencing, offers fun and growth for recreational fencers, and builds elite athletes who compete at the highest levels. 

mingcute_location-fill_edited.png

600 Data Dr, Suite 102 Plano, TX 75075

mingcute_phone-fill (1)_edited.png

1 (214) 644-7312

ABOUT LONE STAR FENCING CENTER

Lone Star Fencing Club is a renowned fencing club in the Dallas area of Texas. The club aims to provide high-quality fencing training and competition opportunities, attracting fencing enthusiasts of all ages and skill levels. With an experienced coaching team possessing international fencing experience, as well as teaching skills and personal care, the club ensures that each member receives the best guidance and support. Learn More


Frame 2147226973.png

Team Wins

wow-image → b596b0_a3f88ea4f8d44a8baeadc1edce6088f7~mv2.jpg.png
33rd Annual Crescent City Open, New Orleans, LA

Hannah Luker won Junior Womens Saber event and finished second in DIV2 and third in DIV1A events in New Orleans

wow-image → b596b0_a3f88ea4f8d44a8baeadc1edce6088f7~mv2.jpg.png
Division 1/Para Championships + April NAC

Congratulations!🎉🍾🎊🎈 Coach Ray Congratulations 🎊🎈🍾 to Coach Ray!

image 9 (1).png
Andre Andreyev
Head Coach

Our Coach

Andre Andreyev, Head Coach, has 28 years of saber coaching experience. He earned a Master's Degree in Sports in the former Soviet Union and was a National Saber Champion in Ukraine. Andre graduated from the Lviv Institute of Physical Education in Ukraine. He has coached the Ukrainian National Team, the former Soviet Youth Team, and the British National Youth Saber Team. After moving to the United States, Coach Andre coached clubs and university teams in New Jersey, Arizona, and Texas. Many of Coach Andre's students are American National A and B level fencers, with graduates including members of renowned university fencing teams such as Princeton, Johns Hopkins, West Point, Duke, MIT, Penn State, and the U.S. Air Force Academy, as well as members of the U.S. National Saber Team.

Contact Us

Ready to sign up? Questions? 
send us a message


and we’ll get back to


you shortly.

Age Group
I'm Interested In...
bottom of page
/* UTM Tracker v2.0 - first/latest touch attribution and form autofill */ (function (window, document) { "use strict"; var userConfig = window.UTM_TRACKER_CONFIG || {}; var config = { storageKey: userConfig.storageKey || "utm_attribution_v2", cookieName: userConfig.cookieName || "utm_attribution_v2", ownedDomains: Array.isArray(userConfig.ownedDomains) ? userConfig.ownedDomains : [], defaultTouch: userConfig.defaultTouch === "latest" ? "latest" : "first", cookieDays: Math.min(Number(userConfig.cookieDays) || 400, 400), linkerMinutes: Math.min(Number(userConfig.linkerMinutes) || 30, 1440), decorateLinks: userConfig.decorateLinks !== false, removeLinkerFromUrl: userConfig.removeLinkerFromUrl !== false, debug: userConfig.debug === true, canStore: typeof userConfig.canStore === "function" ? userConfig.canStore : function () { return true; } }; var PARAMS = [ "utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content", "utm_id", "utm_source_platform", "utm_creative_format", "utm_marketing_tactic", "gclid", "gbraid", "wbraid", "fbclid", "msclkid", "ttclid", "twclid", "li_fat_id", "dclid", "srsltid" ]; var META = ["landing_page", "referrer", "captured_at"]; var LINKER_PARAM = "_utm_attribution"; var MAX_VALUE_LENGTH = 2048; var memoryData = emptyData(); var observedRoots = []; var scheduled = false; function emptyData() { return { first: null, latest: null }; } function log() { if (config.debug && window.console) { window.console.log.apply(window.console, ["[UTM Tracker]"].concat([].slice.call(arguments))); } } function clean(value, max) { if (typeof value !== "string") return ""; return value.replace(/[\u0000-\u001F\u007F]/g, "").trim().slice(0, max || MAX_VALUE_LENGTH); } function parseJSON(value) { try { var parsed = JSON.parse(value); return parsed && typeof parsed === "object" ? parsed : null; } catch (_) { return null; } } function storageAllowed() { try { return config.canStore() === true; } catch (_) { return false; } } function validTouch(value) { if (!value || typeof value !== "object") return null; var result = {}; PARAMS.concat(META).forEach(function (key) { var item = clean(value[key] || "", key === "captured_at" ? 40 : MAX_VALUE_LENGTH); if (item) result[key] = item; }); return Object.keys(result).length ? result : null; } function validData(value) { return { first: validTouch(value && value.first), latest: validTouch(value && value.latest) }; } function readCookie() { var match = document.cookie.match(new RegExp("(?:^|; )" + config.cookieName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "=([^;]*)")); if (!match) return null; try { return parseJSON(decodeURIComponent(match[1])); } catch (_) { return null; } } function compactData(data) { function compactTouch(touch) { if (!touch) return null; var result = {}; PARAMS.forEach(function (key) { if (touch[key]) result[key] = clean(touch[key], 250); }); if (touch.captured_at) result.captured_at = touch.captured_at; return Object.keys(result).length ? result : null; } return { first: compactTouch(data.first), latest: compactTouch(data.latest) }; } function cookieData(data) { var compact = compactData(data); var encoded = encodeURIComponent(JSON.stringify(compact)); if (encoded.length <= 3800) return encoded; /* Stay below the practical 4 KB cookie limit by retaining values in priority order. localStorage still keeps the complete record. */ var priority = ["utm_source", "utm_medium", "utm_campaign", "utm_id", "utm_term", "utm_content", "gclid", "gbraid", "wbraid", "fbclid", "msclkid", "ttclid", "twclid", "li_fat_id", "dclid", "srsltid"]; var reduced = emptyData(); ["first", "latest"].forEach(function (touchName) { if (!compact[touchName]) return; reduced[touchName] = {}; priority.forEach(function (key) { if (!compact[touchName][key]) return; var candidate = JSON.parse(JSON.stringify(reduced)); candidate[touchName][key] = clean(compact[touchName][key], 120); var candidateEncoded = encodeURIComponent(JSON.stringify(candidate)); if (candidateEncoded.length <= 3800) reduced = candidate; }); }); return encodeURIComponent(JSON.stringify(reduced)); } function readData() { if (!storageAllowed()) return memoryData; var parsed = null; try { parsed = parseJSON(window.localStorage.getItem(config.storageKey)); } catch (_) {} if (!parsed) parsed = readCookie(); memoryData = validData(parsed || memoryData); return memoryData; } function writeData(data) { memoryData = validData(data); if (!storageAllowed()) return; try { window.localStorage.setItem(config.storageKey, JSON.stringify(memoryData)); } catch (error) { log("localStorage unavailable", error); } try { var value = cookieData(memoryData); document.cookie = config.cookieName + "=" + value + "; Path=/; Max-Age=" + Math.floor(config.cookieDays * 86400) + "; SameSite=Lax" + (location.protocol === "https:" ? "; Secure" : ""); } catch (error) { log("cookie unavailable", error); } } function allParamValues(search, key) { var values = search.getAll(key); for (var i = 0; i < values.length; i += 1) { var value = clean(values[i]); if (value) return value; } return ""; } function base64UrlEncode(value) { var bytes = new TextEncoder().encode(value), binary = ""; bytes.forEach(function (byte) { binary += String.fromCharCode(byte); }); return window.btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); } function base64UrlDecode(value) { var input = value.replace(/-/g, "+").replace(/_/g, "/"); input += "===".slice((input.length + 3) % 4); var binary = window.atob(input), bytes = new Uint8Array(binary.length); for (var i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i); return new TextDecoder().decode(bytes); } function readLinker(search) { var raw = clean(search.get(LINKER_PARAM) || "", 12000); if (!raw) return null; try { var payload = parseJSON(base64UrlDecode(raw)); if (!payload || !Number.isFinite(payload.created)) return null; if (Math.abs(Date.now() - payload.created) > config.linkerMinutes * 60000) return null; return validData(payload.data); } catch (_) { return null; } } function removeLinker() { if (!config.removeLinkerFromUrl || !window.history || !window.history.replaceState) return; try { var url = new URL(location.href); if (!url.searchParams.has(LINKER_PARAM)) return; url.searchParams.delete(LINKER_PARAM); history.replaceState(history.state, "", url.href); } catch (_) {} } function capture() { var search = new URL(location.href).searchParams; var linked = readLinker(search); var data = readData(); if (linked) { if (!data.first && linked.first) data.first = linked.first; if (linked.latest) data.latest = linked.latest; removeLinker(); } var touch = {}; PARAMS.forEach(function (key) { var value = allParamValues(search, key); if (value) touch[key] = value; }); if (Object.keys(touch).length) { touch.landing_page = clean(location.href); touch.referrer = clean(document.referrer || ""); touch.captured_at = new Date().toISOString(); if (!data.first) data.first = touch; data.latest = touch; } writeData(data); return data; } function normalizeName(field) { return clean(field.getAttribute("data-utm-field") || field.name || field.id || "", 200) .toLowerCase().replace(/\[\]$/, "").replace(/[\s.-]+/g, "_"); } function fieldInfo(field) { var name = normalizeName(field), touch = config.defaultTouch; if (/^(first_touch_|first_|original_)/.test(name)) { touch = "first"; name = name.replace(/^(first_touch_|first_|original_)/, ""); } else if (/^(latest_touch_|latest_|last_touch_|last_)/.test(name)) { touch = "latest"; name = name.replace(/^(latest_touch_|latest_|last_touch_|last_)/, ""); } var aliases = { landing_url: "landing_page", utm_landing_page: "landing_page", utm_referrer: "referrer", utm_captured_at: "captured_at" }; name = aliases[name] || name; return PARAMS.concat(META).indexOf(name) === -1 ? null : { key: name, touch: touch }; } function setNativeValue(field, value) { var prototype = field.tagName === "TEXTAREA" ? window.HTMLTextAreaElement.prototype : window.HTMLInputElement.prototype; var setter = Object.getOwnPropertyDescriptor(prototype, "value"); if (setter && setter.set) setter.set.call(field, value); else field.value = value; field.setAttribute("value", value); field.dispatchEvent(new Event("input", { bubbles: true })); field.dispatchEvent(new Event("change", { bubbles: true })); } function fillField(field, data) { if (!field || field.disabled || /^(button|submit|reset|file|checkbox|radio)$/i.test(field.type || "")) return; var info = fieldInfo(field); if (!info) return; var existing = clean(field.value || ""); if (existing && existing.toLowerCase() !== "no utm") return; var primary = data[info.touch], fallback = data[info.touch === "first" ? "latest" : "first"]; var value = (primary && primary[info.key]) || (fallback && fallback[info.key]) || ""; if (value) setNativeValue(field, value); } function scan(root) { var data = readData(), fields = []; if (root.matches && root.matches("input,textarea")) fields.push(root); if (root.querySelectorAll) fields = fields.concat([].slice.call(root.querySelectorAll("input,textarea"))); fields.forEach(function (field) { fillField(field, data); }); if (root.querySelectorAll) { [].slice.call(root.querySelectorAll("*")).forEach(function (element) { if (element.shadowRoot) observeRoot(element.shadowRoot); }); } } function scheduleScan() { if (scheduled) return; scheduled = true; (window.requestAnimationFrame || window.setTimeout)(function () { scheduled = false; scan(document); }, 0); } function observeRoot(root) { if (!root || observedRoots.indexOf(root) !== -1) return; observedRoots.push(root); scan(root); new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { [].slice.call(mutation.addedNodes).forEach(function (node) { if (node.nodeType === 1) scan(node); }); }); }).observe(root, { childList: true, subtree: true }); } function owned(hostname) { var host = hostname.toLowerCase().replace(/^www\./, ""); return config.ownedDomains.some(function (domain) { var candidate = clean(domain, 253).toLowerCase().replace(/^https?:\/\//, "").split("/")[0].replace(/^www\./, "").replace(/:\d+$/, ""); return host === candidate || host.slice(-candidate.length - 1) === "." + candidate; }); } function decorate(anchor) { if (!config.decorateLinks || !anchor || !config.ownedDomains.length) return; try { var url = new URL(anchor.href, location.href); if (!/^https?:$/.test(url.protocol) || !owned(url.hostname) || url.hostname === location.hostname || url.searchParams.has(LINKER_PARAM)) return; var data = readData(); if (!data.first && !data.latest) return; var payload = base64UrlEncode(JSON.stringify({ created: Date.now(), data: compactData(data) })); if (payload.length <= 6000) url.searchParams.set(LINKER_PARAM, payload); anchor.href = url.href; } catch (_) {} } function handleRouteChange() { window.setTimeout(function () { capture(); scheduleScan(); }, 0); } function clearData() { memoryData = emptyData(); try { window.localStorage.removeItem(config.storageKey); } catch (_) {} try { document.cookie = config.cookieName + "=; Path=/; Max-Age=0; SameSite=Lax" + (location.protocol === "https:" ? "; Secure" : ""); } catch (_) {} } function patchHistory(method) { if (!window.history || !history[method]) return; var original = history[method]; history[method] = function () { var result = original.apply(this, arguments); handleRouteChange(); return result; }; } function init() { capture(); observeRoot(document.documentElement); document.addEventListener("submit", function (event) { scan(event.target); }, true); document.addEventListener("focusin", function (event) { fillField(event.target, readData()); }, true); document.addEventListener("pointerdown", function (event) { decorate(event.target.closest && event.target.closest("a[href]")); }, true); document.addEventListener("click", function (event) { decorate(event.target.closest && event.target.closest("a[href]")); }, true); document.addEventListener("contextmenu", function (event) { decorate(event.target.closest && event.target.closest("a[href]")); }, true); document.addEventListener("keydown", function (event) { if (event.key === "Enter") decorate(event.target.closest && event.target.closest("a[href]")); }, true); window.addEventListener("popstate", handleRouteChange); patchHistory("pushState"); patchHistory("replaceState"); } /* Useful for consent managers and debugging. Call refresh() immediately after analytics/marketing consent is granted. */ window.UTMTracker = { refresh: function () { var data = capture(); scheduleScan(); return data; }, get: function () { return validData(readData()); }, clear: clearData }; if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", init, { once: true }); else init(); })(window, document);