diff --git a/panels/clock/script.js b/panels/clock/script.js
index fd702f88e349e82718b09038573de5462a496cae..86ff9b1df4f23cdcf21a95c4d9763ff8dee182d4 100755
--- a/panels/clock/script.js
+++ b/panels/clock/script.js
@@ -57,7 +57,6 @@ this.loaded = function(panel, config) {
 			smlFontPost		= "time-medium";		// width * 18.75%
 		
 		init = function() {
-
 			if (fontsReady) {
 				digiBackground = document.createElement('canvas');
 				analBackground = document.createElement('canvas');
@@ -75,6 +74,8 @@ this.loaded = function(panel, config) {
 		}
 		
 		this.resize = function(width, height) {
+console.log("width " + width);
+console.log("height " + height);
 			if (height > width) {
 				var size = height / 2;
 				if (!!analClock) {
@@ -89,7 +90,7 @@ this.loaded = function(panel, config) {
 					$(analClock).attr('width', size).attr('height', height);
 				}
 				if (!!digiClock) {
-					$(digiClock).attr('width', width - size - 5).attr('height', height);
+					$(digiClock).attr('width', width - size - 6).attr('height', height);
 				}
 			}
 			calc();
diff --git a/panels/departure/departures.php b/panels/departure/departures.php
index c5c03bc4907194035f252108a904197ed3e9e612..e08149fe5fd2ceb53fd7aec20513212de58d163f 100644
--- a/panels/departure/departures.php
+++ b/panels/departure/departures.php
@@ -1,196 +1,193 @@
-<?php
-	error_reporting (-1);    
-	ini_set ('display_errors', 1);
-	
-	// initialize frontend
-	header('Content-type: text/javascript');
-	
-	// set root
-	chdir($_SERVER['DOCUMENT_ROOT']);
-	
-	// version-info
-	$version = "0.05";
-	$vrrf_version = "0.07";
-	
-	// options
-	$options = array();
-	
-	// max entries
-	$max = 1000000;
-	
-	// configuration
-	if (isset($_GET['config'])) {
-		$file = $_GET['config'];
-		if (!file_exists($file)) {
-			$result['error'] = 'config file "'.$file.'" not found';
-			$result['config']['name'] = $file;
-			$result['options'] = $options;
-			echo json_encode($result);
-			exit;
-		}
-		$config = file_get_contents($file);
-		$buffer = json_decode($config, true);
-		$options['stops'] = $buffer['stops'];
-		$options['filter'] = $buffer['filter'];
-		if (is_numeric($buffer['max'])) {
-			$max = $buffer['max'];
-		}
-		if (count($options['stops']) == 0) {
-			$result['error'] = 'no stops defined';
-			$result['config']['name'] = $config_name;
-			$result['config']['type'] = 'panel/departure';
-			$result['options'] = $options;
-			echo json_encode($result);
-			exit;
-		}
-	} else {
-		$result['error'] = 'no config defined';
-		$result['config']['name'] = $config_name;
-		$result['config']['type'] = 'panel/departure';
-		$result['options'] = $options;
-		echo json_encode($result);
-		exit;
-	}
-	
-	
-	usort($options['stops'], function($a, $b) {
-		return strcmp($a, $b);
-	});
-	
-	// cache
-	$name = json_encode($options);
-	$cachefile = "cache/vrr_".md5($name).".json";
-	$cachetime = 60;
-	$cache_ablauf = 0;
-	$cacheused = false;
-	$rawdata = array();
-	$alldata = array();
-	
-	if (is_file($cachefile))
-		$cache_ablauf=filemtime($cachefile)+$cachetime;
-	if (!isset($_GET["nocache"]) && is_file($cachefile) && (time() < filemtime($cachefile)+$cachetime)) {
-		$plain = file_get_contents($cachefile);
-		$alldata = json_decode($plain, true);
-		$cacheused = true;
-	} else {
-		foreach ($options['stops'] as $n => $stop) {
-			$stopsplit = explode(":",$stop);
-
-			// errors?
-			if ($stopsplit == $stop)
-				echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>";
-			
-			// get departures
-			$plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json");
-			$data = json_decode($plain, true);
-			// version
-			$alldata["version"] = $version;
-			$alldata["vrrf_version"] = $data['version'];
-			$alldata["used_vrrf_version"] = $vrrf_version;
-			// api_errors
-			$alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error'];
-			// info
-			$alldata["info"] = ""; // TODO generate informations
-			// data
-			$rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw'];
-		}
-		
-		$reftime = date("dHi");
-		$alldata['lines'] = array();
-		foreach ($rawdata as $stop => $data) {
-			// process
-			foreach ($data as $i => $entry) {
-		
-				// filter
-				if (isset($options['filter']['bl'])) {
-					if (isset($options['filter']['bl']['line']) ) {
-						if (in_array($entry['line'], $options['filter']['bl']['line'])) {
-							continue;
-						}
-					}
-					if (isset($options['filter']['bl']['type']) ) {
-						if (in_array($entry['type'], $options['filter']['bl']['type'])) {
-							continue;
-						}
-					}
-					if (isset($options['filter']['bl']['platform']) ) {
-						if (in_array($entry['platform'], $options['filter']['bl']['platform'])) {
-							continue;
-						}
-					}
-				}
-				if (isset($options['filter']['wl'])) {
-					if (isset($options['filter']['wl']['line']) ) {
-						if (!in_array($entry['line'], $options['filter']['wl']['line'])) {
-							continue;
-						}
-					}
-					if (isset($options['filter']['wl']['type']) ) {
-						if (!in_array($entry['type'], $options['filter']['wl']['type'])) {
-							continue;
-						}
-					}
-					if (isset($options['filter']['wl']['platform']) ) {
-						if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) {
-							continue;
-						}
-					}
-				}
-				// !filter
-				
-				$scheddate = explode(".",$entry['sched_date']);
-				$schedtime = explode(":",$entry['sched_time']);
-				$deptime = $scheddate[0].$schedtime[0].$schedtime[1];
-				//echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>";
-				if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) {
-					$buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']);
-					foreach ($alldata['lines'] as $key => $value) {
-						if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) {
-							$ibuf = sizeof($alldata['lines'][$key]['stops']);
-							while ($buf != null) {
-								if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) {
-									$alldata['lines'][$key]['stops'][$ibuf] = $buf;
-									$buf = null;
-								} else {
-									$alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1];
-									$ibuf--;
-								}
-							}
-							break;
-						}
-					}
-					if ($buf != null) {
-						$dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf));
-						$alldata['lines'][] = $dbuf;
-					}
-				}
-			}
-		
-		}
-			
-		// sort
-		usort($alldata['lines'], function($a, $b) {
-			// atime
-			$scheddate = explode(".",$a['stops'][0]['date']);
-			$schedtime = explode(":",$a['stops'][0]['time']);
-			$atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
-			// btime
-			$scheddate = explode(".",$b['stops'][0]['date']);
-			$schedtime = explode(":",$b['stops'][0]['time']);
-			$btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
-			// compare
-			return intval($atime) - intval($btime);
-		});
-		
-		// clean
-		foreach ($alldata['lines'] as $id => $line) {
-			unset($alldata['lines'][$id]['key']);
-			unset($alldata['lines'][$id]['identifier']);
-		}
-		
-		// save cache
-		file_put_contents($cachefile,json_encode($alldata));
-	}
-	
-	echo json_encode($alldata);
-?>
+<?php
+	error_reporting (-1);    
+	ini_set ('display_errors', 1);
+	
+	// initialize frontend
+	header('Content-type: text/json');
+	
+	// version-info
+	$version = "0.05";
+	$vrrf_version = "0.07";
+	
+	// options
+	$options = array();
+	
+	// max entries
+	$max = 1000000;
+	
+	// configuration
+	if (isset($_GET['config'])) {
+		$file = "config/" . $_GET['config'] . ".json";
+		if (!file_exists($file)) {
+			$result['error'] = 'config file "'.$file.'" not found';
+			$result['config']['name'] = $file;
+			$result['options'] = $options;
+			echo json_encode($result);
+			exit;
+		}
+		$config = file_get_contents($file);
+		$buffer = json_decode($config, true);
+		$options['stops'] = $buffer['stops'];
+		$options['filter'] = $buffer['filter'];
+		if (is_numeric($buffer['max'])) {
+			$max = $buffer['max'];
+		}
+		if (count($options['stops']) == 0) {
+			$result['error'] = 'no stops defined';
+			$result['config']['name'] = $config_name;
+			$result['config']['type'] = 'panel/departure';
+			$result['options'] = $options;
+			echo json_encode($result);
+			exit;
+		}
+	} else {
+		$result['error'] = 'no config defined';
+		$result['config']['name'] = $config_name;
+		$result['config']['type'] = 'panel/departure';
+		$result['options'] = $options;
+		echo json_encode($result);
+		exit;
+	}
+	
+	
+	usort($options['stops'], function($a, $b) {
+		return strcmp($a, $b);
+	});
+	
+	// cache
+	$name = json_encode($options);
+	$cachefile = "cache/vrr_".md5($name).".json";
+	$cachetime = 60;
+	$cache_ablauf = 0;
+	$cacheused = false;
+	$rawdata = array();
+	$alldata = array();
+	
+	if (is_file($cachefile))
+		$cache_ablauf=filemtime($cachefile)+$cachetime;
+	if (!isset($_GET["nocache"]) && is_file($cachefile) && (time() < filemtime($cachefile)+$cachetime)) {
+		$plain = file_get_contents($cachefile);
+		$alldata = json_decode($plain, true);
+		$cacheused = true;
+	} else {
+		foreach ($options['stops'] as $n => $stop) {
+			$stopsplit = explode(":",$stop);
+
+			// errors?
+			if ($stopsplit == $stop)
+				echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>";
+			
+			// get departures
+			$plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json");
+			$data = json_decode($plain, true);
+			// version
+			$alldata["version"] = $version;
+			$alldata["vrrf_version"] = $data['version'];
+			$alldata["used_vrrf_version"] = $vrrf_version;
+			// api_errors
+			$alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error'];
+			// info
+			$alldata["info"] = ""; // TODO generate informations
+			// data
+			$rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw'];
+		}
+		
+		$reftime = date("dHi");
+		$alldata['lines'] = array();
+		foreach ($rawdata as $stop => $data) {
+			// process
+			foreach ($data as $i => $entry) {
+		
+				// filter
+				if (isset($options['filter']['bl'])) {
+					if (isset($options['filter']['bl']['line']) ) {
+						if (in_array($entry['line'], $options['filter']['bl']['line'])) {
+							continue;
+						}
+					}
+					if (isset($options['filter']['bl']['type']) ) {
+						if (in_array($entry['type'], $options['filter']['bl']['type'])) {
+							continue;
+						}
+					}
+					if (isset($options['filter']['bl']['platform']) ) {
+						if (in_array($entry['platform'], $options['filter']['bl']['platform'])) {
+							continue;
+						}
+					}
+				}
+				if (isset($options['filter']['wl'])) {
+					if (isset($options['filter']['wl']['line']) ) {
+						if (!in_array($entry['line'], $options['filter']['wl']['line'])) {
+							continue;
+						}
+					}
+					if (isset($options['filter']['wl']['type']) ) {
+						if (!in_array($entry['type'], $options['filter']['wl']['type'])) {
+							continue;
+						}
+					}
+					if (isset($options['filter']['wl']['platform']) ) {
+						if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) {
+							continue;
+						}
+					}
+				}
+				// !filter
+				
+				$scheddate = explode(".",$entry['sched_date']);
+				$schedtime = explode(":",$entry['sched_time']);
+				$deptime = $scheddate[0].$schedtime[0].$schedtime[1];
+				//echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>";
+				if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) {
+					$buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']);
+					foreach ($alldata['lines'] as $key => $value) {
+						if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) {
+							$ibuf = sizeof($alldata['lines'][$key]['stops']);
+							while ($buf != null) {
+								if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) {
+									$alldata['lines'][$key]['stops'][$ibuf] = $buf;
+									$buf = null;
+								} else {
+									$alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1];
+									$ibuf--;
+								}
+							}
+							break;
+						}
+					}
+					if ($buf != null) {
+						$dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf));
+						$alldata['lines'][] = $dbuf;
+					}
+				}
+			}
+		
+		}
+			
+		// sort
+		usort($alldata['lines'], function($a, $b) {
+			// atime
+			$scheddate = explode(".",$a['stops'][0]['date']);
+			$schedtime = explode(":",$a['stops'][0]['time']);
+			$atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
+			// btime
+			$scheddate = explode(".",$b['stops'][0]['date']);
+			$schedtime = explode(":",$b['stops'][0]['time']);
+			$btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
+			// compare
+			return intval($atime) - intval($btime);
+		});
+		
+		// clean
+		foreach ($alldata['lines'] as $id => $line) {
+			unset($alldata['lines'][$id]['key']);
+			unset($alldata['lines'][$id]['identifier']);
+		}
+		
+		// save cache
+		file_put_contents($cachefile,json_encode($alldata));
+	}
+	
+	echo json_encode($alldata);
+?>
diff --git a/panels/departure/script.js b/panels/departure/script.js
index d453dab98b3ddd5a09bc145e125b8d184532d534..e5d17c99bd3acc7d164a3fba70ddf3e271e89a82 100755
--- a/panels/departure/script.js
+++ b/panels/departure/script.js
@@ -65,7 +65,7 @@ this.loaded = function(panel, config) {
 
 var update = function(config, fields) {
 	console.log("departures: get data [" + config + "]");
-	$.get("panels/departure/departures.php?config=config/panel/departure/" + config + ".json", function(decodedData) {
+	$.get("panels/departure/departures.php?config=" + config , function(decodedData) {
 		
 		console.log("departures: check vrrf errors [" + config + "]");
 		if (!!decodedData.errors) {
@@ -286,4 +286,4 @@ var buildDOM = function(config, fields) {
 		elements.push(buf.self);
 	}
 	$(fields.cont).append(elements);
-}
\ No newline at end of file
+}
diff --git a/panels/departure/style.less b/panels/departure/style.less
index 9c06e3842aee1a8e2558b42b3d9ca98f0ca08e11..dc1b3d4ac72ff7994ecf5d930ccb8b365f6786f8 100755
--- a/panels/departure/style.less
+++ b/panels/departure/style.less
@@ -10,7 +10,7 @@
 	box-sizing: border-box;
 	overflow: hidden;
 	font-family: display;
-	font-weight: bold;
+	/* font-weight: bold */
 
 	[data-departure] {
 		position: relative;
@@ -137,4 +137,4 @@
 			width: 100%;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/panels/scrollbar/script.js b/panels/scrollbar/script.js
index 76df35f421ab101053c43b3dda939494107b959f..b473444d69e918483a68a50d40d3574d8765a359 100755
--- a/panels/scrollbar/script.js
+++ b/panels/scrollbar/script.js
@@ -2,7 +2,7 @@ var CM;
 
 this.loaded = function(panel, config) {
 	console.log("scrollbar: register with config [" + config + "]");
-  
+
 	function CanvasMarquee() {
 		var
 			me = this,
@@ -20,7 +20,7 @@ this.loaded = function(panel, config) {
 			mctx		= null,
 			strings		= [],
 			texts		= [];
-		
+
 		init = function() {
 			marquee	= $(panel).find('[data-marquee]')[0];
 			width = $(panel).width();
@@ -28,14 +28,14 @@ this.loaded = function(panel, config) {
 			$(marquee).attr('width', width).attr('height', height);
 			mctx = marquee.getContext('2d');
 		}
-		
+
 		this.setTexts = function(t) {
 			strings = t;
 			prerender();
 			textID = -1;
 			nextText();
 		}
-		
+
 		this.resize = function() {
 			oldWidth = width;
 			width = $(panel).width();
@@ -45,30 +45,35 @@ this.loaded = function(panel, config) {
 			prerender();
 			left = left * width / oldWidth;
 		}
-		
-		render = function() {
+
+		render = function(delta) {
 			if (left > -texts[textID].width) {
+
+				left = left - (amount > 0 ? amount : 1);
+
 				mctx.fillStyle = bgColor;
 				mctx.fillRect(0, 0, width, height);
-				mctx.drawImage(texts[textID].text, (left = left - (amount > 0 ? amount : 1)), 0);
+				mctx.drawImage(texts[textID].text, left, 0);
 				window.requestAnimationFrame(render);
 			} else {
 				setTimeout(nextText, (delay >= 0 ? delay : 0) * 1000);
 			}
-			
+
 		}
-		
+
 		nextText = function() {
 			textID = (textID + 1) % texts.length;
 			left = width;
+			start = new Date();
+			start=null;
 			window.requestAnimationFrame(render);
 		}
-		
+
 		prerender = function() {
 			mctx.font = height + "px " + font;
 			texts = [];
 			for (var i = 0; i < strings.length; ++i) {
-				var 
+				var
 					text = '+++ ' + strings[i].join(' +++                +++ ') + ' +++',
 					bWidth = mctx.measureText(text).width,
 					buffer = document.createElement('canvas'),
@@ -84,23 +89,23 @@ this.loaded = function(panel, config) {
 				});
 			}
 		}
-		
+
 		init();
 	}
 	$.get("config/panel/scrollbar/oh14.json", function(decodedData) {
 		CM = new CanvasMarquee();
 		CM.setTexts(decodedData.texts);
 	});
-	
+
 	r = function() {
 		resize();
 	}
-	
+
 	$(window).resize(r);
-	
+
 }
 
 var resize = function() {
 	if (CM)
 		CM.resize();
-}
\ No newline at end of file
+}