diff --git a/app.py b/app.py
index a49bd990ec6c3bcc9ea202bd25fece5d715a6471..516956dfc414fa22a069f6e1ece4bc4831385152 100644
--- a/app.py
+++ b/app.py
@@ -1,6 +1,6 @@
 from urllib.parse import urlparse, urljoin
 import re
-from flask import Flask, render_template
+from flask import Flask, render_template, redirect, request, url_for
 from flask_caching import Cache
 from lxml import html
 import requests
@@ -9,16 +9,28 @@ from scrape import scrape
 app = Flask(__name__)
 cache = Cache(app, config={'CACHE_TYPE': 'simple'})
 
+def make_cache_key(*args, **kwargs):
+    path = request.path
+    args = str(hash(frozenset(request.args.items())))
+    return (path + args).encode('utf-8')
+
 @app.after_request
 def add_header(response):
     response.cache_control.max_age = 300
     return response
 
 @app.route("/")
-@cache.cached(timeout=300)
 def index():
-    tournament_name, tournament_details, events = scrape()
-    return render_template('index.html',
+    return render_template('index.html')
+
+@app.route("/live")
+@cache.cached(timeout=300, key_prefix=make_cache_key)
+def live(results_url=None):
+    results_url = request.args.get('results_url')
+    if not results_url:
+        return redirect(url_for('index'))
+    tournament_name, tournament_details, events = scrape(results_url)
+    return render_template('live.html',
         tournament_name = tournament_name,
         tournament_details = tournament_details,
         events = events)
diff --git a/scrape.py b/scrape.py
index a5a4463360987360058ec8be9f76fd63fff2417c..c35f3fd59b8ae19ca89bcc407cc96539d01567a5 100644
--- a/scrape.py
+++ b/scrape.py
@@ -5,8 +5,7 @@ from urllib.parse import urlparse, urljoin
 from itertools import repeat
 
 
-def scrape():
-    results_url = "https://fencingresults.ant.sr/cobra/"
+def scrape(results_url):
     results = requests.get(results_url)
     results_tree = html.fromstring(results.content)
     try:
diff --git a/static/css/style.css b/static/css/style.css
index 8e366cf601cb30d27e39a2c43e0592ff84d2b91c..7e25c9d89e8d98e063c5420646f4968373a17cca 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -4,7 +4,12 @@ body {
     background-color: #000;
     max-width: 100%;
 }
-main {
+body.page-live header span.back-to-home {
+    float: right;
+    font-size: .8em;
+    opacity: .6;
+}
+body.page-live main {
     display: flex;
     flex-wrap: wrap;
     align-items: flex-start;
@@ -12,6 +17,27 @@ main {
     max-width: 100%;
     box-sizing: border-box;
 }
+body.page-live p, ul {
+    margin: .25em 0;
+}
+body.page-home form {
+    display: flex;
+    flex-wrap: wrap;
+}
+body.page-home form > * {
+    flex: auto 1 0;
+}
+body.page-home label {
+    display: flex;
+    flex-wrap: wrap;
+}
+body.page-home input,
+body.page-home select {
+    flex: 15em 1 0;
+}
+body.page-home input[type=submit] {
+    flex: 6em 0 0;
+}
 h1 {
     font-size: 1.2em;
 }
@@ -41,9 +67,6 @@ section > :last-child {
 h1, h2, h3, h4, h5, h6 {
     margin: .35em 0;
 }
-p, ul {
-    margin: .25em 0;
-}
 a:link,
 a:active,
 a:visited {
diff --git a/templates/index.html b/templates/index.html
index 53c3977bc7bfdc6c97ee80c48ec19ffcf00bae18..ccfb0da16d1a199f7784068e7c02a38e70a49d1d 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -4,38 +4,37 @@
     <meta charset="utf-8">
     <title>Armory Dashboard</title>
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta http-equiv="refresh" content="60; URL={{ url_for('index') }}">
     <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
 </head>
-<body>
+<body class="page-home">
     <header>
-        <h1>{{ tournament_name }} - {{ events | length }} events</h1>
+        <h1>Armory Dashboard</h1>
     </header>
     <main>
-    {% for e in events %}
-    <section class="status-{{ e['status'] }}">
-    <header>
-        <div class="status">{{ e['status'] }}</div>
-        <div class="name">
-            <a name="{{ e['name'] }}" href="#{{ e['name'] }}">{{ e['name'] }}</a>
-        </div>
-        <div class="time">{{ e['time'] }}</div>
-    </header>
-    <h4></h4>
-    <p><span class="number">{{ e['fencers_checked_in'] | length }}</span> of <span class="number">{{ e['fencers'] | length }}</span> fencer(s) checked in.</p>
-    {% if e['previously_fenced'] %}
-    <p><span class="number">{{ e['previous_total'] }}</span> fenced in prior events:</p>
-    <ul>
-    {% for pe in e['previously_fenced'] %}
-        <li>{{ pe }} - {{ e['previously_fenced'][pe] }}</li>
-    {% endfor %}
-    </ul>
-    {% endif %}
-    {% if e['new_fencers_not_checked_in'] %}
-    <p class="hl">{{ e['new_fencers_not_checked_in'] | length }} new and not checked in</p>
-    {% endif %}
-    </section>
-    {% endfor %}
+        <p>
+            Welcome! Please select a Live Results URL, or enter your own.
+        </p>
+        <p>
+            <form action="{{ url_for('live') }}" method="get">
+                <label>Live Results URL: &nbsp;
+                    <select name="results_url">
+                        <option value="" selected disabled>-- Select One --</option>
+                        <option value="http://escrimeresults.com/cobra/">Cobra</option>
+                        <option value="http://escrimeresults.com/thrust/">Thrust</option>
+                        <option value="http://njfencingresults.org/liveresults/">NJFencingResults.org</option>
+                    </select>
+                </label>
+                <input type="submit" value="Go!">
+            </form>
+        </p>
+        <p>
+            <form action="{{ url_for('live') }}" method="get">
+                <label>Other URL: &nbsp;
+                    <input name="results_url" placeholder="http://example.com/liveresults">
+                </label>
+                <input type="submit" value="Go!">
+            </form>
+        </p>
     </main>
 </body>
 </html>
diff --git a/templates/live.html b/templates/live.html
new file mode 100644
index 0000000000000000000000000000000000000000..835e4a9b71d0b569acb9af782adc3e69654f9d7d
--- /dev/null
+++ b/templates/live.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>Armory Dashboard</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta http-equiv="refresh" content="60; URL={{ url_for('index') }}">
+    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
+</head>
+<body class="page-live">
+    <header>
+        <span class="back-to-home"><a href="{{ url_for('index') }}">Back to Home</a></span>
+        <h1>{{ tournament_name }} - {{ events | length }} events</h1>
+    </header>
+    <main>
+    {% for e in events %}
+    <section class="status-{{ e['status'] }}">
+    <header>
+        <div class="status">{{ e['status'] }}</div>
+        <div class="name">
+            <a name="{{ e['name'] }}" href="#{{ e['name'] }}">{{ e['name'] }}</a>
+        </div>
+        <div class="time">{{ e['time'] }}</div>
+    </header>
+    <h4></h4>
+    <p><span class="number">{{ e['fencers_checked_in'] | length }}</span> of <span class="number">{{ e['fencers'] | length }}</span> fencer(s) checked in.</p>
+    {% if e['previously_fenced'] %}
+    <p><span class="number">{{ e['previous_total'] }}</span> fenced in prior events:</p>
+    <ul>
+    {% for pe in e['previously_fenced'] %}
+        <li>{{ pe }} - {{ e['previously_fenced'][pe] }}</li>
+    {% endfor %}
+    </ul>
+    {% endif %}
+    {% if e['new_fencers_not_checked_in'] %}
+    <p class="hl">{{ e['new_fencers_not_checked_in'] | length }} new and not checked in</p>
+    {% endif %}
+    </section>
+    {% endfor %}
+    </main>
+</body>
+</html>