Index: client/bin/gbr
===================================================================
--- client/bin/gbr	(revision 7cdd65d046c9006576119fc80e12f3d5a5a37478)
+++ client/bin/gbr	(revision 600e7130ecdae89be4f21ac6ccd5cdd2580265e5)
@@ -52,5 +52,5 @@
 foreach my $file(@files) {
     if ($file =~ m|http://www\.youtube\.com/watch\?v=|) {
-	open FILE, ">", "/tmp/gutenbach-youtube\n" or die "Couldn't create temporary file";
+	open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file";
 	print FILE $file;
 	$title = $file;
Index: remctl/lib/gutenbach/volume-down
===================================================================
--- remctl/lib/gutenbach/volume-down	(revision 9c0279ee584d72ca543f631999621c6c1afac43e)
+++ remctl/lib/gutenbach/volume-down	(revision 3ee56cff057ee53b76f191fbff92316181885f19)
@@ -1,3 +1,6 @@
 #!/bin/sh
 PATH="$(dirname $0):$PATH"
-volume-set . $(( $(volume-get .) - 1 ))
+
+python "$(dirname $0)/volume-helper.py" -
+
+#volume-set . $(( $(volume-get .) - 1 ))
Index: remctl/lib/gutenbach/volume-get
===================================================================
--- remctl/lib/gutenbach/volume-get	(revision 9c0279ee584d72ca543f631999621c6c1afac43e)
+++ remctl/lib/gutenbach/volume-get	(revision 3ee56cff057ee53b76f191fbff92316181885f19)
@@ -5,4 +5,3 @@
 channel=$(/usr/lib/gutenbach/gutenbach-get-config channel)
 
-amixer get $mixer | grep "$channel" \
- | perl -lne 'print $1 if (/: Playback ([0-9]+)/)'
+amixer get $mixer | grep "^  $channel" | perl -lpe "s/  $channel: Playback //g;s/\[off\]/muted/g;s/\[on\]//g"  
Index: remctl/lib/gutenbach/volume-helper.py
===================================================================
--- remctl/lib/gutenbach/volume-helper.py	(revision bbede33a59239c67b8d4c28ee833d499f3fdb0c2)
+++ remctl/lib/gutenbach/volume-helper.py	(revision bbede33a59239c67b8d4c28ee833d499f3fdb0c2)
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+
+from __future__ import division
+from subprocess import *
+import sys
+import math
+import time
+import os
+j = os.path.join
+
+arg = sys.argv[1]
+currentDir = os.path.split(__file__)[0]
+#sys.path[:0] = [currentDir]
+
+def getVolume():
+	"""
+		Returns current PCM volume percentage as int
+	"""
+	v = int(Popen(j(currentDir,'volume-get'), stdout=PIPE).communicate()[0].split()[0])
+	return v
+
+def setVolume(percent):
+	"""
+		Over the course of 3 seconds, in steps of 0.3sec, linearly sets
+		volume between [current vol]-->[new vol]
+	"""
+	v = getVolume()
+	newV = percent
+	for i in range(10):
+		frac = i/10
+		tempV = int(v + (newV-v)*frac)
+		command = ['amixer', 'set', 'PCM', str(tempV)]
+		#print tempV
+		sys.stdout.flush()
+		call(command, stdout=PIPE)
+		time.sleep(0.3)
+
+v = getVolume()
+map = {
+        '+': int(math.ceil( v*1.13 + .001 )),
+        '-': int(math.floor( v/1.13 + .001 ))
+}
+
+newVolume = map[arg]
+
+# Alert user
+print 'Smoothly modifying over next 3 seconds, by ~3dB (from %i to %i)...' % (v, newVolume)
+sys.stdout.flush()
+
+# Adjust volume
+setVolume(newVolume)
+
+# Alert user
+print 'Volume adjust finished.'
+
+# Send zephyr
+call([j(currentDir,'volume-zephyr')])
+
Index: remctl/lib/gutenbach/volume-set
===================================================================
--- remctl/lib/gutenbach/volume-set	(revision 9c0279ee584d72ca543f631999621c6c1afac43e)
+++ remctl/lib/gutenbach/volume-set	(revision 3ee56cff057ee53b76f191fbff92316181885f19)
@@ -1,10 +1,12 @@
 #!/bin/sh
 PATH="$(dirname $0):$PATH"
+
+# $1 is string "set" and is unused (passed in via remctl)
+# $2 is the actual volume
 
 mixer=$(/usr/lib/gutenbach/gutenbach-get-config mixer)
 channel=$(/usr/lib/gutenbach/gutenbach-get-config channel)
 
-amixer set $mixer "$2" | grep "$channel" \
- | perl -lne 'print $1 if (/: Playback ([0-9]+)/)'
+amixer set $mixer -- "$2" | grep "^  $channel" | perl -lpe "s/  $channel: Playback //g;s/\[off\]/muted/g;s/\[on\]//g"
 
 volume-zephyr
Index: remctl/lib/gutenbach/volume-up
===================================================================
--- remctl/lib/gutenbach/volume-up	(revision 9c0279ee584d72ca543f631999621c6c1afac43e)
+++ remctl/lib/gutenbach/volume-up	(revision 3ee56cff057ee53b76f191fbff92316181885f19)
@@ -1,3 +1,6 @@
 #!/bin/sh
 PATH="$(dirname $0):$PATH"
-volume-set . $(( $(volume-get .) + 1 ))
+
+python "$(dirname $0)/volume-helper.py" +
+
+#volume-set . $(( $(volume-get .) + 1 ))
Index: server/lib/gutenbach
===================================================================
--- server/lib/gutenbach	(revision 79fac025ded28a275bfed3505635b99e032be69a)
+++ server/lib/gutenbach	(revision a2944f6cb79c7542cc207952b742f3b628290dfa)
@@ -133,4 +133,5 @@
 my ($tempdir);
 my ($newpath);
+my ($title);
 
 open(STATUS, ">", "/var/run/gutenbach/status");
@@ -139,11 +140,11 @@
   # $magic means that Image::ExifTool was able to identify the type of file
   printf(ZEPHYR "%s file %s\n", $magic, $arguments{"job-title"});
-  printf(STATUS "%s file %s\n", $magic, $arguments{"job-title"});
+  #printf(STATUS $arguments{"job-title"});
   $status .= sprintf(" Filetype: %s.", $magic);
   $status .= sprintf(" Filename: %s.", $arguments{"job-title"});
-
   if (exists $fileinfo->{'Title'}) {
+      $title = $fileinfo->{'Title'};
     printf(ZEPHYR "\@b{%s}\n", $fileinfo->{'Title'}) if exists $fileinfo->{'Title'};
-    #printf(STATUS "%s\n", $fileinfo->{'Title'}) if exists $fileinfo->{'Title'};
+    printf(STATUS "%s\n", $fileinfo->{'Title'}) if exists $fileinfo->{'Title'};
     $status .= sprintf(" Title: %s.", $fileinfo->{'Title'});
   }
@@ -174,24 +175,12 @@
     # YouTube URLs are resolved by the youtube-dl command.
     # Launch youtube-dl
-    $pid = open(YTDL, "-|");
-    if ($pid) {
-	print ZEPHYR "YouTube video $filepath.\nCurrently downloading, please wait...";
-	close ZEPHYR;
-	while (<YTDL>) {
-	    open(ZEPHYR, "|-", @zwrite_command);
-	    print ZEPHYR $_;
-	    close ZEPHYR;
-	}
-	open(ZEPHYR, "|-", @zwrite_command);
-	print ZEPHYR "Done downloading.";
-	close ZEPHYR;
-    }
-    else {
-	my @args = ("youtube-dl", "-q", "-o", "/tmp/youtube.flv", $filepath);
-	exec(@args) or die "Couldn't exec youtube-dl";
-    }
-
-    $filepath = "/tmp/youtube.flv";
-    # Print the title to zephyr and the status string.
+    $pid = open(YTDL, "-|", "youtube-dl","-b", "-g", $filepath) or die "Unable to invoke youtube-dl";
+	print ZEPHYR "YouTube video $filepath\n$title";
+	$status .= " YouTube video $filepath. $title.";
+	# youtube-dl prints the URL of the flash video, which we pass to mplayer as a filename.
+	$filepath = <YTDL>;
+	chomp $filepath;
+
+
   } else { # Doesn't appear to be a YouTube URL.
     print STDERR "Resolved external reference to $filepath\n";
