diff --git a/server/app.py b/server/app.py
index 53ec4e7e4481c1035103d405d2f7ecdc870382c5..c0a1b40febae0f0cccc1e1e2df176b4dc134116e 100644
--- a/server/app.py
+++ b/server/app.py
@@ -9,7 +9,7 @@ from datetime import timedelta
 from dateutil.tz import tzlocal
 
 from .staticVariables import TEMPLATE_DIR, STATIC_DIR, DATA_DIR, DEFAULT_STOP, DEFAULT_HOST, DEFAULT_PORT, APP_VERSION, AVAILABLE_LANGUAGES, TRANSLATION_DIR, GOOGLE_MAPS_KEY, GOOGLE_MAPS_TEST_KEY, GOOGLE_MAPS_REGION
-from .dataHandler import loadJson, hasTemplate, hasData, CustomJsonEncoder
+from .dataHandler import loadJson, hasTemplate, hasData, isDirectory, CustomJsonEncoder
 from .gtfs import GtfsHandler
 from .locator import FoliLocator
 
@@ -161,12 +161,18 @@ def sendRootFile():
 @app.route('/<stopId>/')
 @app.route('/<stopId>/<path:path>')
 def view(path = 'index.html'):
+	# abort if attempting to access internal paths
+	if path.startswith('internal/'):
+		abort(403)
+
+	path = path.rstrip('/')
+	if isDirectory(path):
+		path += '/index.html'
+
 	if '.html' not in path:
 		path = path + '.html'
 
-	# abort if attempting to access internal or invalid paths
-	if path.startswith('internal/'):
-		abort(403)
+	# abort if attempting to access invalid paths
 	if not hasTemplate(path):
 		abort(404)
 
@@ -209,15 +215,23 @@ def apiStopInfo(version):
 def apiBusInfo(version, busId = None, getShape = "false"):
 	# busId is falsely optional here so that we can easily use url_for() for this endpoint in js
 	if int(version) == 1 and busId != None:
+		lastModified, data = locator.getLastResponse()
+		if not data or data.get('status', None) != 'OK':
+			return {}
 
-		lastModified, dynamicData = locator.getLastResponse()
+		data = data['result']
+		vehicles = data.get('vehicles', None)
+		if not vehicles:
+			return {}
 
-		data = dynamicData["result"]["vehicles"][busId]
+		data = vehicles[busId]
 
-		# add shape to the data
+		# add shapes to the data
 		# route_short_name = lineref from data
 		if (getShape == "true"):
-			data["shape"] = gtfs.getShape(data["lineref"])
+			# FIXME: in theory this can contain shape information for multiple trips, since route_short_name doesn't have to be and isn't unique to one trip in GTFS
+			data["shapes"] = gtfs.getTripShapes(data["lineref"])
+
 		if data:
 			return jsonify(data)
 
diff --git a/server/dataHandler.py b/server/dataHandler.py
index f7245eb5de506bb7778aa7151db7ba34bf507f5f..d06edf8767cb7fda8dd0f130a8866264f31d529e 100644
--- a/server/dataHandler.py
+++ b/server/dataHandler.py
@@ -50,8 +50,14 @@ def loadJson(filename):
 	return content
 
 # helpers for file lookups
+def isDirectory(filename):
+	path = os.path.join(TEMPLATE_DIR, filename)
+	return not os.path.islink(path) and os.path.isdir(os.path.normpath(path))
+
 def hasTemplate(filename):
-	return os.path.isfile(os.path.normpath(os.path.join(TEMPLATE_DIR, filename)))
+	path = os.path.join(TEMPLATE_DIR, filename)
+	return not os.path.islink(path) and os.path.isfile(os.path.normpath(path))
 
 def hasData(filename):
-	return os.path.isfile(os.path.normpath(os.path.join(DATA_DIR, filename)))
+	path = os.path.join(DATA_DIR, filename)
+	return not os.path.islink(path) and os.path.isfile(os.path.normpath(path))
diff --git a/server/gtfs.py b/server/gtfs.py
index 8c6f2848aa8929590e912ea98618440a862103c6..3fd5813da4759548407236df198d63c75cf6e6f1 100644
--- a/server/gtfs.py
+++ b/server/gtfs.py
@@ -80,9 +80,6 @@ class GtfsHandler(object):
 		loader = transitfeed.Loader(feedPath)
 		self.schedule = loader.Load()
 
-		#print("trips")
-		#print(self.schedule.trips)
-
 		# filter unused stops
 		for stopId, stop in self.schedule.stops.items():
 			if not stop.GetTrips(self.schedule):
@@ -186,15 +183,18 @@ class GtfsHandler(object):
 			stops.append(result)
 
 		result = self._routeToDict(self.schedule.GetRoute(trip.route_id))
+		result['shape_id'] = trip.shape_id
 		result['stops'] = stops
 		return result
 
-	def _tripToRoute(self, trip, shortOnly):
+	def _tripToRoute(self, trip, nameOnly):
 		route = self.schedule.GetRoute(trip.route_id)
-		if shortOnly:
+		if nameOnly:
 			return route.route_short_name if route.route_short_name else route.route_id
 
-		return self._routeToDict(trip)
+		result = self._routeToDict(route)
+		result['shape_id'] = trip.shape_id
+		return result
 
 	def isValid(self):
 		return self.schedule != None
@@ -207,6 +207,7 @@ class GtfsHandler(object):
 
 		return self._stopToDict(stop)
 
+	# predicate function used to filter out trips not currently in service
 	def _inactivePredicate(self, trip, now):
 		return not now or self.schedule.GetServicePeriod(trip.service_id).IsActiveOn(now.strftime("%Y%m%d"), date_object = now)
 
@@ -345,27 +346,25 @@ class GtfsHandler(object):
 
 		return stop.stop_timezone
 
-	def getShape(self, lineref):
-		print("looking for shape from lineref " + lineref)
-
-		# find route id from routes.txt
-		# then find shape id from trips.txt
-		# with shape id find shape from shapes.txt
-		routeId = None
-		for key, route in self.schedule.routes.iteritems():
-			if (route.route_short_name == lineref):
-				routeId = key
-
-		print("found routeId ")
-		print(routeId)
-		shapeId = None
-		for key, trip in self.schedule.trips.iteritems():
-			if (trip.route_id == routeId):
-				shapeId = trip.shape_id
-				break
+	# predicate function used to filter out trips not currently in service, will only retain trips of particular route or named trip
+	def _namedInactivePredicate(self, trip, lineref = None, now = None):
+		# FIXME: not tied to any specifc stop, so server time (ie. UTC most likely under docker)
+		if not now:
+			now = datetime.now(tzlocal())
+
+		if not lineref:
+			return self._inactivePredicate(trip, now)
+
+		short_name = trip.trip_short_name
+		if not short_name:
+			route = self.schedule.GetRoute(trip.route_id)
+			short_name = route.route_short_name if route.route_short_name else route.route_id
+
+		return short_name == lineref and self._inactivePredicate(trip, now)
 
-		shape = self.schedule._shapes[shapeId].points
-		return shape
+	def getTripShapes(self, lineref):
+		shapes = (self.schedule.GetShape(trip.shape_id) for trip in self.schedule.GetTripList() if self._namedInactivePredicate(trip, lineref))
+		return {s.shape_id:s for s in shapes}.values()
 
 	def setLocator(self, locatorService):
 		self.locator = locatorService
diff --git a/static/css/stylesheet.css b/static/css/stylesheet.css
index 4711794acd245aff64b22ecd986e311864e3f08f..6d37b79971a3b14e7d3996286de2696a1f0d3035 100644
--- a/static/css/stylesheet.css
+++ b/static/css/stylesheet.css
@@ -1,3 +1,5 @@
+@charset "utf-8";
+
 body { padding: 0; margin: 0; font-size: 16px; }
 
 /* header and footer heights */
@@ -30,10 +32,10 @@ body { height: 100%; overflow-y: scroll; }
 @media only screen and (max-width: 768px) {
 	.flex-grow { width: 100%; }
 
-    /* Column count for the F�li info page */
-    .card-columns {
-        column-count: 1;
-    }
+	/* Column count for the Föli info page */
+	.card-columns {
+		column-count: 1;
+	}
 }
 
 /* sticky footer and header: fixed position (for display units, doesn't scroll) */
@@ -249,40 +251,42 @@ body {
 	right: 0;
 }
 
-/* F�li info page cards */
+/* Föli info page cards */
 .foli-card {
-    border: 1px solid #FF9900;
+	border: 1px solid #FF9900;
+}
+
+.foli-card .card-header {
+	background-color: #FF9900;
 }
-    .foli-card .card-header {
-        background-color: #FF9900;
-    }
 
 th .text-muted {
-    font-size: 14px;
-    font-style: normal;
-    margin: 0;
+	font-size: 14px;
+	font-style: normal;
+	margin: 0;
 }
 
 /* Info page cards */
 .info-card {
-    height: 600px;
-    background-color: #FF9900;
-    border: 1px solid #FF9900;
-    margin-bottom: 30px;
+	height: 600px;
+	background-color: #FF9900;
+	border: 1px solid #FF9900;
+	margin-bottom: 30px;
 }
 
-/* F�li application page*/
+/* Föli application page*/
 .app-card {
-    border: 1px solid #FF9900;
-    margin-top: 30px;
+	border: 1px solid #FF9900;
+	margin-top: 30px;
+}
+
+.app-card .card-header {
+	background-color: #FF9900;
 }
-    .app-card .card-header {
-        background-color: #FF9900;
-    }
 
 .app-image {
-    margin-bottom: 25px;
-    width: 100%;
+	margin-bottom: 25px;
+	width: 100%;
 }
 
 /* larger screen layout */
@@ -310,8 +314,8 @@ th .text-muted {
 		height: 55px;
 	}
 
-    /* Column count for the F�li info page */
-    .card-columns {
-        column-count: 2;
-    }
+	/* Column count for the Föli info page */
+	.card-columns {
+		column-count: 2;
+	}
 }
diff --git a/templates/demo.html b/templates/demo.html
index eea2b68cbf923f5bf6da5ba310091db64a5f8a4b..62227e23c7bf9683b758539e75e72ce117714e5b 100644
--- a/templates/demo.html
+++ b/templates/demo.html
@@ -15,9 +15,9 @@
 	<h4>Fruits</h4>
 	{% with fruits = load_json('fruits.json') %}
 		<ul>
-    	{% for fruit in fruits %}
-    		<li>{{ fruit }}</li>
-    	{% endfor %}
-    	</ul>
+		{% for fruit in fruits %}
+			<li>{{ fruit }}</li>
+		{% endfor %}
+		</ul>
 	{% endwith %}
 {% endblock content %}
diff --git a/templates/foli.html b/templates/foli.html
deleted file mode 100644
index ee26e4910b4813ac51a9aa9fd9760f1cc40e82d7..0000000000000000000000000000000000000000
--- a/templates/foli.html
+++ /dev/null
@@ -1,403 +0,0 @@
-{% extends 'internal/base.html' %}
-
-{% set title = 'Föli Info' %}
-{% set sticky_banners = true %}
-{% set localized = false %}
-{% set content_lang = 'fi' %}
-
-{% block content %}
-
-<div class="container">
-    <h1>Föli - Turun seudun joukkoliikenne</h1>
-
-    <h2>Hinnat</h2>
-    <p>Bussissa voit ostaa kertalipun tai ladata matkakortin käteisellä. Samalla lipulla tai matkakortilla on vaihtoaikaa 2 tuntia.</p>
-    <div class="card-columns">
-        <!-- Single ticket prices -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Kertaliput</h3>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th>Ryhmä</th>
-                        <th>Hinta</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>Aikuiset</td>
-                        <td>3,00 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>Lapset (alle 15 v)</td>
-                        <td>1,50 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>Yölisä (klo 24-04)</td>
-                        <td>1,00 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>Matkailulippu 24 t</td>
-                        <td>7,50 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>Kännykkälippu 24 t</td>
-                        <td>7,50 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-        <!-- Foli card prices -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Arvokortit</h3>
-            </div>
-            <div class="card-body">
-                <h4 class="card-title">Haltijakohtainen</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="3">Aikuiset (&ge; 20 v)</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>norm.</td>
-                        <td>päivä*</td>
-                        <td>yö**</td>
-                    </tr>
-                    <tr>
-                        <td>2,20 &euro;</td>
-                        <td>2,20 &euro;</td>
-                        <td>3,20 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-            <div class="card-body">
-                <h4 class="card-title">Henkilökohtaiset</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="3">Lapset (alle 15 v)</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>norm.</td>
-                        <td>päivä*</td>
-                        <td>yö**</td>
-                    </tr>
-                    <tr>
-                        <td>1,10 &euro;</td>
-                        <td>1,10 &euro;</td>
-                        <td>2,10 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="3">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>norm.</td>
-                        <td>päivä*</td>
-                        <td>yö**</td>
-                    </tr>
-                    <tr>
-                        <td>1,70 &euro;</td>
-                        <td>1,45 &euro;</td>
-                        <td>2,70 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="3">Seniorit (&ge; 65 v) ja vammaiset<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>norm.</td>
-                        <td>päivä*</td>
-                        <td>yö**</td>
-                    </tr>
-                    <tr>
-                        <td>1,70 &euro;</td>
-                        <td>1,45 &euro;</td>
-                        <td>2,70 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-            <div class="card-footer">
-                <p>*ma-pe klo 9:00-12:59, **klo 23:00-04:00</p>
-            </div>
-        </div>
-        <!-- Foli season pass prices -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Kausikortit</h3>
-            </div>
-            <div class="card-body">
-                <h4 class="card-title">Haltijakohtaiset</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="4">Aikuiset (&ge; 20 v)</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td></td>
-                        <td>norm.</td>
-                        <td>netti</td>
-                        <td>Lisäpäiviä 20 &euro;:lla</td>
-                    </tr>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>52 &euro;</td>
-                        <td>49 &euro;</td>
-                        <td>10</td>
-                    </tr>
-                    <tr>
-                        <td>90 pv</td>
-                        <td>140 &euro;</td>
-                        <td>130 &euro;</td>
-                        <td>10</td>
-                    </tr>
-                    <tr>
-                        <td>180 pv</td>
-                        <td>260 &euro;</td>
-                        <td></td>
-                        <td></td>
-                    </tr>
-                </tbody>
-            </table>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="3">Haltijakohtainen erikoiskortti</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>Kestokortti</td>
-                        <td>260 &euro; / 6 kk</td>
-                        <td>520 &euro; / v</td>
-                    </tr>
-                </tbody>
-            </table>
-            <div class="card-body">
-                <h4 class="card-title">Henkilökohtaiset</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="4">Lapset (alle 15 v)</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td></td>
-                        <td>norm.</td>
-                        <td>netti</td>
-                        <td>Lisäpäiviä 10 &euro;:lla</td>
-                    </tr>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>26 &euro;</td>
-                        <td>23 &euro;</td>
-                        <td>10</td>
-                    </tr>
-                </tbody>
-            </table>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="4">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td></td>
-                        <td>norm.</td>
-                        <td>netti</td>
-                        <td>Lisäpäiviä 10 &euro;:lla</td>
-                    </tr>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>36 &euro;</td>
-                        <td>33 &euro;</td>
-                        <td>8</td>
-                    </tr>
-                </tbody>
-            </table>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="4">Seniorit (&ge; 65 v) ja vammaiset<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td></td>
-                        <td>norm.</td>
-                        <td>netti</td>
-                        <td>Lisäpäiviä 10 &euro;:lla</td>
-                    </tr>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>36 &euro;</td>
-                        <td>33 &euro;</td>
-                        <td>8</td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-        <!-- Foli double card prices -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Tuplakortit</h3>
-            </div>
-            <div class="card-body">
-                <h4 class="card-title">Haltijakohtainen</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="2">Aikuiset (&ge; 20 v)</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>52 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-            <div class="card-body">
-                <h4 class="card-title">Henkilökohtaiset</h4>
-            </div>
-            <table class="table table-striped">
-                <thead>
-                    <tr>
-                        <th colspan="2">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>30 pv</td>
-                        <td>36 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-        <!-- Tourist cards -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Matkailijakortit</h3>
-            </div>
-            <div class="card-body">
-                <p>Myydään myös Turku Touringin matkailuneuvonnassa osoitteessa Aurakatu 4. Ei myydä busseissa.</p>
-            </div>
-            <table class="table table-striped">
-                <tbody>
-                    <tr>
-                        <td>1 vrk</td>
-                        <td>7 &euro;</td>
-                        <td>5 vrk</td>
-                        <td>19 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>2 vrk</td>
-                        <td>10 &euro;</td>
-                        <td>6 vrk</td>
-                        <td>22 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>3 vrk</td>
-                        <td>13 &euro;</td>
-                        <td>7 vrk</td>
-                        <td>25 &euro;</td>
-                    </tr>
-                    <tr>
-                        <td>4 vrk</td>
-                        <td>16 &euro;</td>
-                        <td>14 vrk</td>
-                        <td>31 &euro;</td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-        <!-- Mobile tickets -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Mobiililippu</h3>
-            </div>
-            <div class="card-body">
-                <p>
-                    Mobiilisovelluksessa myydään aikuisten ja lasten kertalippuja sekä erimittaisia matkailijatuotteita.
-                    Maksutapoina ovat IQ-maksu, pankki- tai luottokortti sekä matkapuhelinmaksu. Hintaan lisätään
-                    maksutapalisä. Ohjeet sovelluksen lataamiseen löydät etusivun linkistä "Mobiilisovellus".
-                </p>
-            </div>
-        </div>
-        <!-- Sale and service locations -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Myynti- ja palvelupisteet</h3>
-            </div>
-            <div class="card-body">
-                <div class="row">
-                    <div class="col-4">Turku:</div>
-                    <div class="col-8">Joukkoliikenteen palvelutoimisto<br />Yhteispalvelu Monitori</div>
-                </div>
-                <div class="row">
-                    <div class="col-4">Kaarina:</div>
-                    <div class="col-8">Yhteispalvelupiste, Kaarinan keskusta<br />Yhteispalvelupiste, Piikkiön kirjasto</div>
-                </div>
-                <div class="row">
-                    <div class="col-4">Raisio:</div>
-                    <div class="col-8">Kirjastotalon Yhteispalvelu</div>
-                </div>
-                <div class="row">
-                    <div class="col-4">Naantali:</div>
-                    <div class="col-8">Yhteispalvelupiste</div>
-                </div>
-                <div class="row">
-                    <div class="col-4">Lieto:</div>
-                    <div class="col-8">Yhteispalvelupiste</div>
-                </div>
-                <div class="row">
-                    <div class="col-4">Rusko:</div>
-                    <div class="col-8">Ruskon pääkirjasto</div>
-                </div>
-            </div>
-        </div>
-        <!-- Foli card top-up locations -->
-        <div class="card foli-card">
-            <div class="card-header">
-                <h3 class="card-title">Latauspisteet</h3>
-            </div>
-            <div class="card-body">
-                <div class="col">Turun kaupunginkirjasto</div>
-                <div class="col">Sokos Wiklund</div>
-                <div class="col">Stockmann</div>
-                <div class="col">Citymarket: Kupittaa, Länsikeskus, Ravattula</div>
-                <div class="col">Prisma: Itäharju, Länsikeskus, Mylly, Piispanristi, Tampereentie</div>
-            </div>
-        </div>
-    </div>
-    <p>Kortin lunastusmaksu 5,00 &euro; (sis. alv 24 &#37;)</p>
-    <p>Matkalippujen hinnat sis. alv 10 &#37;</p>
-</div>
-
-{% endblock content %}
diff --git a/templates/foli/app.html b/templates/foli/app.html
new file mode 100644
index 0000000000000000000000000000000000000000..1625aa12d15c72bcb83283146fc232aa85ea5cc2
--- /dev/null
+++ b/templates/foli/app.html
@@ -0,0 +1,168 @@
+{% extends 'internal/base.html' %}
+
+{% set title = 'Foli-sovellus' %}
+{% set sticky_banners = true %}
+{% set localized = false %}
+{% set content_lang = 'fi' %}
+
+{% block content %}
+
+<div class="container">
+	<h1>Föli - Turun seudun joukkoliikenne</h1>
+	<h2>Mobiilisovellus</h2>
+
+	<div class="card app-card">
+		<div class="card-header">
+			<h3 class="card-title">Bussilippu kännykällä</h3>
+		</div>
+		<div class="row" style="margin-top: 25px;">
+			<div class="col-sm-5">
+				<img class="app-image" src="{{ util.static_url('img/mobiililippu_1.png') }}">
+			</div>
+			<div class="col-sm-7">
+				<img class="app-image" src="{{ util.static_url('img/mobiililippu_2.png') }}">
+				<img class="app-image" src="{{ util.static_url('img/mobiililippu_3.png') }}">
+				<img class="app-image" src="{{ util.static_url('img/mobiililippu_4.png') }}">
+			</div>
+		</div>
+		<div class="card-footer">
+			<p>Mobiililippusovelluksen voi ladata uusimpiin Windows, Apple ja Android -älypuhelimiin.</p>
+		</div>
+	</div>
+
+	<div class="card app-card">
+		<div class="card-header">
+			<h3 class="card-title">Mobiililiput</h3>
+		</div>
+		<div class="card-body">
+			<p>
+				Sovelluksella voi ostaa koko Fölin alueella voimassa olevia kertalippuja ja matkailijalippuja.
+				Sovelluksessa myydään myös yhdistelmälippuja, jolloin lippu sisältää sisäänpääsyn tapahtumaan
+				sekä bussilipun. Kertalipuissa on vaihtoaikaa 2 tuntia. Mobiililipun voimassaolo alkaa tilauksesta.
+				Mobiililippu luetaan bussissa samalla lukijalaitteella, joka lukee myös matkakortit. Matkapuhelin
+				asetetaan näyttöpuoli ylöspäin lukijalaitteen alapuolelle.
+			</p>
+			<p>
+				Matkustajan on pidettävä huoli siitä, että puhelimessa on virtaa koko matkan ajan. Sovelluksen
+				käyttö vaatii toimivan nettiyhteyden.
+			</p>
+			<h4>Maksutavat</h4>
+			<p>
+				Kerta- ja matkailijaliput voi maksaa jälkilaskuun perustuvalla Svea-maksulla, pankki- ja
+				luottokortilla (Visa ja Mastercard), puhelinoperaattorin puhelinlaskulla ja MobilePaylla.
+				Pankki- ja luottokortilla tai puhelinoperaattorin puhelinlaskulla maksettaessa normaalilla
+				hinnalla myytävän lipun hinnan lisäksi asiakkaalta veloitetaan maksutapalisä.  Kertalipuissa
+				maksutapalisä on 0,20 euroa. Matkailijatuotteissa se on korttimaksuilla 0,20 euroa ja
+				puhelinoperaattorimaksuissa 0,50 euroa. Kertalipusta ja lyhytkestoisesta matkailijatuotteesta
+				ei kuitenkaan peritä lainkaan maksutapalisää, jos lipun maksaa jälkiveloitteisella Svea-maksulla.
+				Svea-maksulla maksettaessa asiakkaalta peritään siis ainoastaan normaali lipun hinta, esimerkiksi
+				aikuisten kertamaksu 3 euroa ja lasten kertamaksu 1,50 euroa
+			</p>
+			<p>
+				Kertalipun voi maksaa mobiilimaksulla. Mobiilimaksua käyttävän matkustajan ei tarvitse
+				rekisteröityä palveluun.
+			</p>
+			<h4>Lipputuotekohtaiset nousurajoitteet</h4>
+			<ul>
+				<li>2 h kertalipulla saa matkustaa enintään 6 matkaa (enintään 4 matkaa/tunti)</li>
+				<li>1 vrk lipulla saa matkustaa enintään 10 matkaa (enintään 5 matkaa/tunti)</li>
+				<li>2 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
+				<li>3 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
+				<li>5 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
+				<li>7 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
+				<li>14 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
+			</ul>
+		</div>
+	</div>
+
+	<div class="card app-card">
+		<div class="card-header">
+			<h3 class="card-title">Matkakortin lataaminen mobiilisovelluksella</h3>
+		</div>
+		<div class="card-body">
+			<p>Föli-mobiilisovelluksella voi ladata myös arvo- ja kausikorttia.</p>
+			<p>
+				Arvokortille ladattava summa on voi olla 10, 20 tai 30 euroa. Kausikorteista voi palvelun
+				alkuvaiheessa ladata rajattujen asiakasryhmien 30, 90 ja 180 päivän kortteja. Asiakasryhmiä
+				lisätään vaiheittain palveluun. Kausikortille voi ladata myös lisäpäiviä, jotka ovat aikuisilla
+				10 päivää sekä nuorilla ja opiskelijoilla 8 päivää.
+			</p>
+			<p>
+				Jotta puhelimen kautta tehty lataus yhdistyisi oikeaan matkakorttiin, on asiakkaan itse
+				tallennettava sovellukseen oman matkakorttinsa numero. Yksilöllinen numero on painettu
+				matkakortin kääntöpuolelle kortin yläosaan. Numerosarjassa on 18 numeroa, ja koko sarjan
+				kirjoittamisessa kannattaa olla huolellinen. Jos numeron kirjoittaa väärin ja ohjelma kuitenkin
+				tunnistaa numeron oikeanlaiseksi, sovellus lataa jonkun toisen omistamaa korttia.
+			</p>
+			<p>
+				Matkakorttien lataukset voi maksaa laskulla tai pankkikortilla. Myös pankkikortin
+				luotto-ominaisuutta voi käyttää.
+			</p>
+		</div>
+	</div>
+
+	<div class="card app-card">
+		<div class="card-header">
+			<h3 class="card-title">Mobiilikausilippu kokeilukäytössä</h3>
+		</div>
+		<div class="card-body">
+			<p>
+				Fölin mobiilisovelluksessa on nyt kokeilussa 30 päivän mobiilikausilippu. Vain mobiilisti
+				toimivan kausilipun voi ostaa sovelluksen kohdasta Mobiilikausilippu ja tarjolla on sekä
+				aikuisten että lasten 30 päivän kausilippu. Lipulla voi matkustaa kausikortin tavoin Fölin
+				liikenteessä, kuitenkin enintään 15 matkaa päivässä ja 5 matkaa tunnissa. Kausilippua käytettäessä
+				on sovelluksen oltava jatkuvasti verkkoyhteydessä toimiakseen sekä asiakkaan on varmistettava,
+				että puhelimessa on riittävästi virtaa koko matkan ajan. Ilman verkkoyhteyttä lipulla ei pääse
+				matkustamaan. Kausilipun viivakoodi leimataan jokaisen nousun yhteydessä lukijalaitteen alalaidassa
+				olevalle lukijalle. Ilman validoitua leimausta lipulla ei voi matkustaa. Lipun voimassaolo alkaa
+				heti ostosta, eikä ensimmäisestä käytöstä kuten matkakortilla matkustettaessa.
+			</p>
+			<p>
+				Mikäli kokeilun aikana ilmenee ongelmia, esimerkiksi sovellus ei toimi, pyydetään asiakkaita
+				olemaan yhteydessä äkillisissä ongelmatilanteissa suoraan mobiilisovelluksen toimittajaan
+				osoitteeseen tuki(a)iq-payments.com ja muissa palauteasioissa Fölin palautepalveluun. Palautetta
+				voi antaa myös sähköpostitse lähetettävän kyselyn kautta. Mobiilikausilipun ostaneille lähetetään
+				sähköpostitse palautekyselylinkki, jossa kysytään käyttäjien kokemuksia liittyen lipun toimintaan,
+				lukunopeuteen sekä verkkoyhteyksien toimintaan. Mahdollisimman monen käyttäjän toivotaan vastaavan
+				kyselyyn, jotta kausilippua voidaan kehittää edelleen.
+			</p>
+			<h4>Miten toimin, jos lataan vahingossa väärän tuotteen mobiilisovelluksessa?</h4>
+			<p>
+				Mobiilisovelluksessa on mahdollista ladata omaa matkakorttia ja ostaa mobiilikausilippu
+				eli puhelimessa toimiva kausilippu. Jos asiakas lataa vahingossa mobiilikausilipun matkakortin
+				lataamisen sijasta, latauksen palautus matkakortille onnistuu helpoiten ja nopeiten ilmoittamalla
+				tästä suoraan sovelluksen palaute-napin kautta ylläpitäjälle/maksunvälittäjälle. Palautekenttään
+				voi kirjoittaa esimerkiksi: "Latasin vahingossa väärän tuotteen, voitteko siirtää kauden
+				matkakortilleni.". Vaihtoehtoisesti viestin voi lähettää sähköpostitse tuki(a)iq.payments.com.
+			</p>
+		</div>
+	</div>
+	<div class="card app-card">
+		<div class="card-header">
+			<h3 class="card-title">Sarjaliput - 10 kertalippua 9 lipun hinnalla</h3>
+		</div>
+		<div class="card-body">
+			<p>
+				Mobiilisovelluksesta voi ostaa myös 10 kerran sarjalipun. Sarjalippu sisältää kymmenen Fölin
+				kertalippua, jotka ovat voimassa koko Fölin alueella ja sisältävät normaalin kahden tunnin
+				vaihto-oikeuden. Yhdeksän kertalipun hinnalla saa kymmenen kertalippua eli yhden kertalipun
+				saa paketin mukana ilmaiseksi.
+			</p>
+			<h4>Hinnat:</h4>
+			<ul>
+				<li>Aikuisen 10 kertalipun lippupaketti 27 euroa</li>
+				<li>Lapsen 10 kertalipun lippupaketti 13,50 euroa</li>
+			</ul>
+			<p>
+				Lippupaketti on voimassa kolme kuukautta. Mobiilikertalippu ei ole voimassa yötaksan aikana,
+				ellei lippua ole aktivoitu ennen klo 23. Mobiilikertalippuja voi käyttää kerralla useamman.
+			</p>
+		</div>
+	</div>
+	<h4 style="margin-top: 30px;">
+		Sovelluksen on tehnyt iQ Payments Oy. Turun seudun joukkoliikenne Fölin mobiilimaksamisen mahdollistava
+		sovellus palkittiin parhaana mobiilimaksamisen sovelluksena Slush-tapahtumassa syksyllä 2015.
+	</h4>
+</div>
+
+{% endblock content %}
diff --git a/templates/foli/index.html b/templates/foli/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..03aadfc055a1d70bb54835631aea7cfcc6d5f9cc
--- /dev/null
+++ b/templates/foli/index.html
@@ -0,0 +1,403 @@
+{% extends 'internal/base.html' %}
+
+{% set title = 'Föli Info' %}
+{% set sticky_banners = true %}
+{% set localized = false %}
+{% set content_lang = 'fi' %}
+
+{% block content %}
+
+<div class="container">
+	<h1>Föli - Turun seudun joukkoliikenne</h1>
+
+	<h2>Hinnat</h2>
+	<p>Bussissa voit ostaa kertalipun tai ladata matkakortin käteisellä. Samalla lipulla tai matkakortilla on vaihtoaikaa 2 tuntia.</p>
+	<div class="card-columns">
+		<!-- Single ticket prices -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Kertaliput</h3>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th>Ryhmä</th>
+						<th>Hinta</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>Aikuiset</td>
+						<td>3,00 &euro;</td>
+					</tr>
+					<tr>
+						<td>Lapset (alle 15 v)</td>
+						<td>1,50 &euro;</td>
+					</tr>
+					<tr>
+						<td>Yölisä (klo 24-04)</td>
+						<td>1,00 &euro;</td>
+					</tr>
+					<tr>
+						<td>Matkailulippu 24 t</td>
+						<td>7,50 &euro;</td>
+					</tr>
+					<tr>
+						<td>Kännykkälippu 24 t</td>
+						<td>7,50 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<!-- Foli card prices -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Arvokortit</h3>
+			</div>
+			<div class="card-body">
+				<h4 class="card-title">Haltijakohtainen</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="3">Aikuiset (&ge; 20 v)</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>norm.</td>
+						<td>päivä*</td>
+						<td>yö**</td>
+					</tr>
+					<tr>
+						<td>2,20 &euro;</td>
+						<td>2,20 &euro;</td>
+						<td>3,20 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+			<div class="card-body">
+				<h4 class="card-title">Henkilökohtaiset</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="3">Lapset (alle 15 v)</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>norm.</td>
+						<td>päivä*</td>
+						<td>yö**</td>
+					</tr>
+					<tr>
+						<td>1,10 &euro;</td>
+						<td>1,10 &euro;</td>
+						<td>2,10 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="3">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>norm.</td>
+						<td>päivä*</td>
+						<td>yö**</td>
+					</tr>
+					<tr>
+						<td>1,70 &euro;</td>
+						<td>1,45 &euro;</td>
+						<td>2,70 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="3">Seniorit (&ge; 65 v) ja vammaiset<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>norm.</td>
+						<td>päivä*</td>
+						<td>yö**</td>
+					</tr>
+					<tr>
+						<td>1,70 &euro;</td>
+						<td>1,45 &euro;</td>
+						<td>2,70 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+			<div class="card-footer">
+				<p>*ma-pe klo 9:00-12:59, **klo 23:00-04:00</p>
+			</div>
+		</div>
+		<!-- Foli season pass prices -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Kausikortit</h3>
+			</div>
+			<div class="card-body">
+				<h4 class="card-title">Haltijakohtaiset</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="4">Aikuiset (&ge; 20 v)</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td></td>
+						<td>norm.</td>
+						<td>netti</td>
+						<td>Lisäpäiviä 20 &euro;:lla</td>
+					</tr>
+					<tr>
+						<td>30 pv</td>
+						<td>52 &euro;</td>
+						<td>49 &euro;</td>
+						<td>10</td>
+					</tr>
+					<tr>
+						<td>90 pv</td>
+						<td>140 &euro;</td>
+						<td>130 &euro;</td>
+						<td>10</td>
+					</tr>
+					<tr>
+						<td>180 pv</td>
+						<td>260 &euro;</td>
+						<td></td>
+						<td></td>
+					</tr>
+				</tbody>
+			</table>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="3">Haltijakohtainen erikoiskortti</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>Kestokortti</td>
+						<td>260 &euro; / 6 kk</td>
+						<td>520 &euro; / v</td>
+					</tr>
+				</tbody>
+			</table>
+			<div class="card-body">
+				<h4 class="card-title">Henkilökohtaiset</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="4">Lapset (alle 15 v)</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td></td>
+						<td>norm.</td>
+						<td>netti</td>
+						<td>Lisäpäiviä 10 &euro;:lla</td>
+					</tr>
+					<tr>
+						<td>30 pv</td>
+						<td>26 &euro;</td>
+						<td>23 &euro;</td>
+						<td>10</td>
+					</tr>
+				</tbody>
+			</table>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="4">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td></td>
+						<td>norm.</td>
+						<td>netti</td>
+						<td>Lisäpäiviä 10 &euro;:lla</td>
+					</tr>
+					<tr>
+						<td>30 pv</td>
+						<td>36 &euro;</td>
+						<td>33 &euro;</td>
+						<td>8</td>
+					</tr>
+				</tbody>
+			</table>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="4">Seniorit (&ge; 65 v) ja vammaiset<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td></td>
+						<td>norm.</td>
+						<td>netti</td>
+						<td>Lisäpäiviä 10 &euro;:lla</td>
+					</tr>
+					<tr>
+						<td>30 pv</td>
+						<td>36 &euro;</td>
+						<td>33 &euro;</td>
+						<td>8</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<!-- Foli double card prices -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Tuplakortit</h3>
+			</div>
+			<div class="card-body">
+				<h4 class="card-title">Haltijakohtainen</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="2">Aikuiset (&ge; 20 v)</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>30 pv</td>
+						<td>52 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+			<div class="card-body">
+				<h4 class="card-title">Henkilökohtaiset</h4>
+			</div>
+			<table class="table table-striped">
+				<thead>
+					<tr>
+						<th colspan="2">Nuoret (15-19 v) ja opiskelijat<br /><p class="text-muted">- Henkikirjoilla tai asunto-osoite Turussa, Kaarinassa, Raisiossa, Naantalissa, Liedossa tai Ruskolla.</p></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>30 pv</td>
+						<td>36 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<!-- Tourist cards -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Matkailijakortit</h3>
+			</div>
+			<div class="card-body">
+				<p>Myydään myös Turku Touringin matkailuneuvonnassa osoitteessa Aurakatu 4. Ei myydä busseissa.</p>
+			</div>
+			<table class="table table-striped">
+				<tbody>
+					<tr>
+						<td>1 vrk</td>
+						<td>7 &euro;</td>
+						<td>5 vrk</td>
+						<td>19 &euro;</td>
+					</tr>
+					<tr>
+						<td>2 vrk</td>
+						<td>10 &euro;</td>
+						<td>6 vrk</td>
+						<td>22 &euro;</td>
+					</tr>
+					<tr>
+						<td>3 vrk</td>
+						<td>13 &euro;</td>
+						<td>7 vrk</td>
+						<td>25 &euro;</td>
+					</tr>
+					<tr>
+						<td>4 vrk</td>
+						<td>16 &euro;</td>
+						<td>14 vrk</td>
+						<td>31 &euro;</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<!-- Mobile tickets -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Mobiililippu</h3>
+			</div>
+			<div class="card-body">
+				<p>
+					Mobiilisovelluksessa myydään aikuisten ja lasten kertalippuja sekä erimittaisia matkailijatuotteita.
+					Maksutapoina ovat IQ-maksu, pankki- tai luottokortti sekä matkapuhelinmaksu. Hintaan lisätään
+					maksutapalisä. Ohjeet sovelluksen lataamiseen löydät etusivun linkistä "Mobiilisovellus".
+				</p>
+			</div>
+		</div>
+		<!-- Sale and service locations -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Myynti- ja palvelupisteet</h3>
+			</div>
+			<div class="card-body">
+				<div class="row">
+					<div class="col-4">Turku:</div>
+					<div class="col-8">Joukkoliikenteen palvelutoimisto<br />Yhteispalvelu Monitori</div>
+				</div>
+				<div class="row">
+					<div class="col-4">Kaarina:</div>
+					<div class="col-8">Yhteispalvelupiste, Kaarinan keskusta<br />Yhteispalvelupiste, Piikkiön kirjasto</div>
+				</div>
+				<div class="row">
+					<div class="col-4">Raisio:</div>
+					<div class="col-8">Kirjastotalon Yhteispalvelu</div>
+				</div>
+				<div class="row">
+					<div class="col-4">Naantali:</div>
+					<div class="col-8">Yhteispalvelupiste</div>
+				</div>
+				<div class="row">
+					<div class="col-4">Lieto:</div>
+					<div class="col-8">Yhteispalvelupiste</div>
+				</div>
+				<div class="row">
+					<div class="col-4">Rusko:</div>
+					<div class="col-8">Ruskon pääkirjasto</div>
+				</div>
+			</div>
+		</div>
+		<!-- Foli card top-up locations -->
+		<div class="card foli-card">
+			<div class="card-header">
+				<h3 class="card-title">Latauspisteet</h3>
+			</div>
+			<div class="card-body">
+				<div class="col">Turun kaupunginkirjasto</div>
+				<div class="col">Sokos Wiklund</div>
+				<div class="col">Stockmann</div>
+				<div class="col">Citymarket: Kupittaa, Länsikeskus, Ravattula</div>
+				<div class="col">Prisma: Itäharju, Länsikeskus, Mylly, Piispanristi, Tampereentie</div>
+			</div>
+		</div>
+	</div>
+	<p>Kortin lunastusmaksu 5,00 &euro; (sis. alv 24 &#37;)</p>
+	<p>Matkalippujen hinnat sis. alv 10 &#37;</p>
+</div>
+
+{% endblock content %}
diff --git a/templates/foliApp.html b/templates/foliApp.html
deleted file mode 100644
index 5f014d20f593304a257d69b597a31727e35366a0..0000000000000000000000000000000000000000
--- a/templates/foliApp.html
+++ /dev/null
@@ -1,168 +0,0 @@
-{% extends 'internal/base.html' %}
-
-{% set title = 'Foli-sovellus' %}
-{% set sticky_banners = true %}
-{% set localized = false %}
-{% set content_lang = 'fi' %}
-
-{% block content %}
-
-<div class="container">
-    <h1>Föli - Turun seudun joukkoliikenne</h1>
-    <h2>Mobiilisovellus</h2>
-
-    <div class="card app-card">
-        <div class="card-header">
-            <h3 class="card-title">Bussilippu kännykällä</h3>
-        </div>
-        <div class="row" style="margin-top: 25px;">
-            <div class="col-sm-5">
-                <img class="app-image" src="{{ util.static_url('img/mobiililippu_1.png') }}">
-            </div>
-            <div class="col-sm-7">
-                <img class="app-image" src="{{ util.static_url('img/mobiililippu_2.png') }}">
-                <img class="app-image" src="{{ util.static_url('img/mobiililippu_3.png') }}">
-                <img class="app-image" src="{{ util.static_url('img/mobiililippu_4.png') }}">
-            </div>
-        </div>
-        <div class="card-footer">
-            <p>Mobiililippusovelluksen voi ladata uusimpiin Windows, Apple ja Android -älypuhelimiin.</p>
-        </div>
-    </div>
-
-    <div class="card app-card">
-        <div class="card-header">
-            <h3 class="card-title">Mobiililiput</h3>
-        </div>
-        <div class="card-body">
-            <p>
-                Sovelluksella voi ostaa koko Fölin alueella voimassa olevia kertalippuja ja matkailijalippuja.
-                Sovelluksessa myydään myös yhdistelmälippuja, jolloin lippu sisältää sisäänpääsyn tapahtumaan
-                sekä bussilipun. Kertalipuissa on vaihtoaikaa 2 tuntia. Mobiililipun voimassaolo alkaa tilauksesta.
-                Mobiililippu luetaan bussissa samalla lukijalaitteella, joka lukee myös matkakortit. Matkapuhelin
-                asetetaan näyttöpuoli ylöspäin lukijalaitteen alapuolelle.
-            </p>
-            <p>
-                Matkustajan on pidettävä huoli siitä, että puhelimessa on virtaa koko matkan ajan. Sovelluksen
-                käyttö vaatii toimivan nettiyhteyden.
-            </p>
-            <h4>Maksutavat</h4>
-            <p>
-                Kerta- ja matkailijaliput voi maksaa jälkilaskuun perustuvalla Svea-maksulla, pankki- ja
-                luottokortilla (Visa ja Mastercard), puhelinoperaattorin puhelinlaskulla ja MobilePaylla.
-                Pankki- ja luottokortilla tai puhelinoperaattorin puhelinlaskulla maksettaessa normaalilla
-                hinnalla myytävän lipun hinnan lisäksi asiakkaalta veloitetaan maksutapalisä.  Kertalipuissa
-                maksutapalisä on 0,20 euroa. Matkailijatuotteissa se on korttimaksuilla 0,20 euroa ja
-                puhelinoperaattorimaksuissa 0,50 euroa. Kertalipusta ja lyhytkestoisesta matkailijatuotteesta
-                ei kuitenkaan peritä lainkaan maksutapalisää, jos lipun maksaa jälkiveloitteisella Svea-maksulla.
-                Svea-maksulla maksettaessa asiakkaalta peritään siis ainoastaan normaali lipun hinta, esimerkiksi
-                aikuisten kertamaksu 3 euroa ja lasten kertamaksu 1,50 euroa
-            </p>
-            <p>
-                Kertalipun voi maksaa mobiilimaksulla. Mobiilimaksua käyttävän matkustajan ei tarvitse
-                rekisteröityä palveluun.
-            </p>
-            <h4>Lipputuotekohtaiset nousurajoitteet</h4>
-            <ul>
-                <li>2 h kertalipulla saa matkustaa enintään 6 matkaa (enintään 4 matkaa/tunti)</li>
-                <li>1 vrk lipulla saa matkustaa enintään 10 matkaa (enintään 5 matkaa/tunti)</li>
-                <li>2 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
-                <li>3 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
-                <li>5 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
-                <li>7 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
-                <li>14 vrk lipulla saa matkustaa enintään 10 matkaa/päivä (enintään 5 matkaa/tunti)</li>
-            </ul>
-        </div>
-    </div>
-
-    <div class="card app-card">
-        <div class="card-header">
-            <h3 class="card-title">Matkakortin lataaminen mobiilisovelluksella</h3>
-        </div>
-        <div class="card-body">
-            <p>Föli-mobiilisovelluksella voi ladata myös arvo- ja kausikorttia.</p>
-            <p>
-                Arvokortille ladattava summa on voi olla 10, 20 tai 30 euroa. Kausikorteista voi palvelun
-                alkuvaiheessa ladata rajattujen asiakasryhmien 30, 90 ja 180 päivän kortteja. Asiakasryhmiä
-                lisätään vaiheittain palveluun. Kausikortille voi ladata myös lisäpäiviä, jotka ovat aikuisilla
-                10 päivää sekä nuorilla ja opiskelijoilla 8 päivää.
-            </p>
-            <p>
-                Jotta puhelimen kautta tehty lataus yhdistyisi oikeaan matkakorttiin, on asiakkaan itse
-                tallennettava sovellukseen oman matkakorttinsa numero. Yksilöllinen numero on painettu
-                matkakortin kääntöpuolelle kortin yläosaan. Numerosarjassa on 18 numeroa, ja koko sarjan
-                kirjoittamisessa kannattaa olla huolellinen. Jos numeron kirjoittaa väärin ja ohjelma kuitenkin
-                tunnistaa numeron oikeanlaiseksi, sovellus lataa jonkun toisen omistamaa korttia.
-            </p>
-            <p>
-                Matkakorttien lataukset voi maksaa laskulla tai pankkikortilla. Myös pankkikortin
-                luotto-ominaisuutta voi käyttää.
-            </p>
-        </div>
-    </div>
-
-    <div class="card app-card">
-        <div class="card-header">
-            <h3 class="card-title">Mobiilikausilippu kokeilukäytössä</h3>
-        </div>
-        <div class="card-body">
-            <p>
-                Fölin mobiilisovelluksessa on nyt kokeilussa 30 päivän mobiilikausilippu. Vain mobiilisti
-                toimivan kausilipun voi ostaa sovelluksen kohdasta Mobiilikausilippu ja tarjolla on sekä
-                aikuisten että lasten 30 päivän kausilippu. Lipulla voi matkustaa kausikortin tavoin Fölin
-                liikenteessä, kuitenkin enintään 15 matkaa päivässä ja 5 matkaa tunnissa. Kausilippua käytettäessä
-                on sovelluksen oltava jatkuvasti verkkoyhteydessä toimiakseen sekä asiakkaan on varmistettava,
-                että puhelimessa on riittävästi virtaa koko matkan ajan. Ilman verkkoyhteyttä lipulla ei pääse
-                matkustamaan. Kausilipun viivakoodi leimataan jokaisen nousun yhteydessä lukijalaitteen alalaidassa
-                olevalle lukijalle. Ilman validoitua leimausta lipulla ei voi matkustaa. Lipun voimassaolo alkaa
-                heti ostosta, eikä ensimmäisestä käytöstä kuten matkakortilla matkustettaessa.
-            </p>
-            <p>
-                Mikäli kokeilun aikana ilmenee ongelmia, esimerkiksi sovellus ei toimi, pyydetään asiakkaita
-                olemaan yhteydessä äkillisissä ongelmatilanteissa suoraan mobiilisovelluksen toimittajaan
-                osoitteeseen tuki(a)iq-payments.com ja muissa palauteasioissa Fölin palautepalveluun. Palautetta
-                voi antaa myös sähköpostitse lähetettävän kyselyn kautta. Mobiilikausilipun ostaneille lähetetään
-                sähköpostitse palautekyselylinkki, jossa kysytään käyttäjien kokemuksia liittyen lipun toimintaan,
-                lukunopeuteen sekä verkkoyhteyksien toimintaan. Mahdollisimman monen käyttäjän toivotaan vastaavan
-                kyselyyn, jotta kausilippua voidaan kehittää edelleen.
-            </p>
-            <h4>Miten toimin, jos lataan vahingossa väärän tuotteen mobiilisovelluksessa?</h4>
-            <p>
-                Mobiilisovelluksessa on mahdollista ladata omaa matkakorttia ja ostaa mobiilikausilippu
-                eli puhelimessa toimiva kausilippu. Jos asiakas lataa vahingossa mobiilikausilipun matkakortin
-                lataamisen sijasta, latauksen palautus matkakortille onnistuu helpoiten ja nopeiten ilmoittamalla
-                tästä suoraan sovelluksen palaute-napin kautta ylläpitäjälle/maksunvälittäjälle. Palautekenttään
-                voi kirjoittaa esimerkiksi: "Latasin vahingossa väärän tuotteen, voitteko siirtää kauden
-                matkakortilleni.". Vaihtoehtoisesti viestin voi lähettää sähköpostitse tuki(a)iq.payments.com.
-            </p>
-        </div>
-    </div>
-    <div class="card app-card">
-        <div class="card-header">
-            <h3 class="card-title">Sarjaliput - 10 kertalippua 9 lipun hinnalla</h3>
-        </div>
-        <div class="card-body">
-            <p>
-                Mobiilisovelluksesta voi ostaa myös 10 kerran sarjalipun. Sarjalippu sisältää kymmenen Fölin
-                kertalippua, jotka ovat voimassa koko Fölin alueella ja sisältävät normaalin kahden tunnin
-                vaihto-oikeuden. Yhdeksän kertalipun hinnalla saa kymmenen kertalippua eli yhden kertalipun
-                saa paketin mukana ilmaiseksi.
-            </p>
-            <h4>Hinnat:</h4>
-            <ul>
-                <li>Aikuisen 10 kertalipun lippupaketti 27 euroa</li>
-                <li>Lapsen 10 kertalipun lippupaketti 13,50 euroa</li>
-            </ul>
-            <p>
-                Lippupaketti on voimassa kolme kuukautta. Mobiilikertalippu ei ole voimassa yötaksan aikana,
-                ellei lippua ole aktivoitu ennen klo 23. Mobiilikertalippuja voi käyttää kerralla useamman.
-            </p>
-        </div>
-    </div>
-    <h4 style="margin-top: 30px;">
-        Sovelluksen on tehnyt iQ Payments Oy. Turun seudun joukkoliikenne Fölin mobiilimaksamisen mahdollistava
-        sovellus palkittiin parhaana mobiilimaksamisen sovelluksena Slush-tapahtumassa syksyllä 2015.
-    </h4>
-</div>
-
-{% endblock content %}
diff --git a/templates/index.html b/templates/index.html
index e80a8e295da6b1b301fdd1ec45350567cbe79177..9c13ef61395ff07f7d8170cdc9a258eda935d4ef 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -57,17 +57,17 @@
 			</div>
 		</div>
 	</div>
-    <div class="row mb-4">
-        <div class="col-md-5 offset-md-1 mb-4 mb-md-0">
-            <div class="card menu-card bg-foli text-center box-shadow">
-                <img class="card-img-top" src="{{ util.static_url('img/application_placeholder.png') }}" alt="{{ _("Card Image") }}">
-                <div class="card-body">
-                    <a role="button" href="{{ util.view_url('foliApp') }}" class="btn btn-lg btn-primary">{{ _("Föli application") }}</a>
-                </div>
-            </div>
-        </div>
-        <div class="col-md-5">
-            <!--Empty spot for next menu card-->
-        </div>
-    </div>
+	<div class="row mb-4">
+		<div class="col-md-5 offset-md-1 mb-4 mb-md-0">
+			<div class="card menu-card bg-foli text-center box-shadow">
+				<img class="card-img-top" src="{{ util.static_url('img/application_placeholder.png') }}" alt="{{ _("Card Image") }}">
+				<div class="card-body">
+					<a role="button" href="{{ util.view_url('foli/app') }}" class="btn btn-lg btn-primary">{{ _("Föli application") }}</a>
+				</div>
+			</div>
+		</div>
+		<div class="col-md-5">
+			<!--Empty spot for next menu card-->
+		</div>
+	</div>
 {% endblock content %}
diff --git a/templates/info.html b/templates/info.html
index 07feb024a4782c73615e1215cf3d0915f5e1a09d..bbf3062373e5aef3f8336bc279fcc95ce139b6fa 100644
--- a/templates/info.html
+++ b/templates/info.html
@@ -1,4 +1,4 @@
-{% extends 'internal/base.html' %}
+{% extends 'internal/base.html' %}
 
 {% set title = 'Info' %}
 {% set sticky_banners = true %}
@@ -8,38 +8,38 @@
 {% block content %}
 
 <div class="container">
-    <div class="row">
-        <div class="col-md-6">
-            <div class="card info-card">
-                <a class="twitter-timeline" data-height="600" data-dnt="true" data-theme="light" href="https://twitter.com/Turkukaupunki?ref_src=twsrc%5Etfw">Tweets by Turkukaupunki</a>
-                <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <div class="card info-card">
-                <div class="card-header">
-                    <h3 class="card-title">Visit Turku -uutiset</h3>
-                </div>
-                <script type="text/javascript" src="http://output92.rssinclude.com/output?type=js&amp;id=1172169&amp;hash=c1c032487ad85904644bb22308686454"></script>
-            </div>
-        </div>
-    </div>
+	<div class="row">
+		<div class="col-md-6">
+			<div class="card info-card">
+				<a class="twitter-timeline" data-height="600" data-dnt="true" data-theme="light" href="https://twitter.com/Turkukaupunki?ref_src=twsrc%5Etfw">Tweets by Turkukaupunki</a>
+				<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
+			</div>
+		</div>
+		<div class="col-md-6">
+			<div class="card info-card">
+				<div class="card-header">
+					<h3 class="card-title">Visit Turku -uutiset</h3>
+				</div>
+				<script type="text/javascript" src="http://output92.rssinclude.com/output?type=js&amp;id=1172169&amp;hash=c1c032487ad85904644bb22308686454"></script>
+			</div>
+		</div>
+	</div>
 
-    <div class="row">
-        <div class="col-md-6">
-            <div class="card info-card" style="overflow: auto;">
-                <div class="card-header">
-                    <h3 class="card-title">AccuWeather-sää</h3>
-                </div>
-                <a href="https://www.accuweather.com/en/fi/turku/134768/weather-forecast/134768" class="aw-widget-legal">
-                </a><div id="awtd1519238716374" class="aw-widget-36hour" data-locationkey="134768" data-unit="c" data-language="fi" data-useip="false" data-uid="awtd1519238716374" data-editlocation="false"></div>
-                <script type="text/javascript" src="https://oap.accuweather.com/launch.js"></script>
-            </div>
-        </div>
-        <div class="col-md-6">
-            <!-- Empty spot for another card. -->
-        </div>
-    </div>
+	<div class="row">
+		<div class="col-md-6">
+			<div class="card info-card" style="overflow: auto;">
+				<div class="card-header">
+					<h3 class="card-title">AccuWeather - sää</h3>
+				</div>
+				<a href="https://www.accuweather.com/en/fi/turku/134768/weather-forecast/134768" class="aw-widget-legal">
+				</a><div id="awtd1519238716374" class="aw-widget-36hour" data-locationkey="134768" data-unit="c" data-language="fi" data-useip="false" data-uid="awtd1519238716374" data-editlocation="false"></div>
+				<script type="text/javascript" src="https://oap.accuweather.com/launch.js"></script>
+			</div>
+		</div>
+		<div class="col-md-6">
+			<!-- Empty spot for another card. -->
+		</div>
+	</div>
 </div>
 
 {% endblock content %}
diff --git a/templates/internal/base.html b/templates/internal/base.html
index 40f84c1728eb71777fb22aaa11258efdfc4db8a0..f8e4134acf45b2972100cc7cd9dd06e78155e939 100644
--- a/templates/internal/base.html
+++ b/templates/internal/base.html
@@ -142,7 +142,7 @@
 			// TODO: this needs some serious refinement once we know how we implement changing of the views so that the whole page doesn't need to reload
 			// FIXME: does not chain to previous click handler if it is already set!
 			$.fn.clickableBox = function() {
-    			this.click(function() {
+				this.click(function() {
 					window.location = $(this).find("a").attr("href");
 					return false;
 				}).css('cursor', 'pointer');
diff --git a/templates/map.html b/templates/map.html
index 1fec184b7346fb65f1e3091bcfa280f6461ecaf8..04d40b50c4e2727f0361dba78a8b02003a6cf9d5 100644
--- a/templates/map.html
+++ b/templates/map.html
@@ -111,8 +111,8 @@
 					strokeWeight: 1.5,
 					strokeColor: '#ffffff',
 					fillColor: '#00abed',
-    				fillOpacity: 1,
-    				scale: 1.5,
+					fillOpacity: 1,
+					scale: 1.5,
 				},
 				title: stopName,
 				label: { text: stopId, color: '#ffffff', fontSize: '0.75rem' },
@@ -129,7 +129,7 @@
 					scale: 15,
 					strokeWeight: 2,
 					fillColor: '#f7aa00',
-    				fillOpacity: 0.8
+					fillOpacity: 0.8
 				},
 				title: id,
 				label: busName,
@@ -274,22 +274,23 @@
 			// get information about the focused bus
 			var requestFocus = focusedMarker;
 			$.getJSON(
-				 "{{ url_for('apiBusInfo', version = 1, _external = True) }}" + focusedMarker + '/true',
+				"{{ url_for('apiBusInfo', version = 1, _external = True) }}" + focusedMarker + '/true',
 				function (data) {
 					// poor man's locking (the A in Ajax is for Asynchronous :))
 					if (requestFocus !== focusedMarker)
 						return;
 
 					focusedBus = data;
-
 					console.log("found this bus info: ", focusedBus);
 
 					// draw the shape
 					var shapeCoordinates = [];
-					focusedBus.shape.map( value => {
-						//console.log("value 2", value[2], " value 3", value[3]);
-						shapeCoordinates.push(positionToGoogleLatLng(value[0], value[1]));
+					$.each(focusedBus.shapes, function (key, value) {
+						value.map( value => {
+							shapeCoordinates.push(positionToGoogleLatLng(value[0], value[1]));
+						});
 					});
+
 					focusedShape = new google.maps.Polyline({
 						map: gmap,
 						path: shapeCoordinates,
@@ -342,7 +343,6 @@
 
 		// creates or updates the info window for focused bus
 		var updateInfoWindow = function() {
-			//console.log("dynamicdata: ", dynamicData);
 			// TODO is there a better way of doing this, this way is pretty ugly
 			var infoWindowContent = `
 			<h1>` + focusedBus.lineref + `</h1>