diff --git a/PlayBot.pl b/PlayBot.pl
index a69c5917c0ebfd85a930bc9c2db628f056c52a63..01e959cbea37ad9003e1687606f257987f147a6f 100755
--- a/PlayBot.pl
+++ b/PlayBot.pl
@@ -30,6 +30,7 @@ my $admin = 'moise';
 my $baseurl = 'http://nightiies.iiens.net/links/';
 my @nicksToVerify;
 my @codesToVerify;
+my $lastID;
 
 my $debug = 0;
 
@@ -93,13 +94,18 @@ sub later
 {
 	my ($nick, $id) = @_[ARG0,ARG1];
 
-	my $sth = $dbh->prepare_cached('SELECT url FROM playbot WHERE id = ?');
+	my $sth = $dbh->prepare_cached('SELECT url, sender, title FROM playbot WHERE id = ?');
 	$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
 
 	$sth->execute($id)
 		or $log->error("Couldn't finish transaction: " . $dbh->errstr);
 
-	$irc->yield(privmsg => $nick => $sth->fetch->[0]) if ($sth->rows);
+	if ($sth->rows) {
+		my @donnees = $sth->fetchrow_array;
+
+		$irc->yield(privmsg => $nick => '['.$id.'] '.$donnees[2].' | '.$donnees[1]);
+		$irc->yield(privmsg => $nick => $donnees[0]);
+	}
 }
 
 
@@ -227,7 +233,7 @@ sub on_speak
 		eval { %content = youtube($url) };
 		$site = 'youtube';
 	}
-	elsif ($msg =~ m#(^|[^!])https?://soundcloud.com/([a-zA-Z0-9-]+/[a-zA-Z0-9-]+)#) {
+	elsif ($msg =~ m#(^|[^!])https?://soundcloud.com/([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+)#) {
 		my $url = 'https://www.soundcloud.com/'.$2;
 		eval { %content = soundcloud($url) };
 		$site = 'soundcloud';
@@ -242,7 +248,9 @@ sub on_speak
 		eval { %content = zippy($url) };
 		$site = 'zippyshare';
 	}
-	elsif ($msg =~ /^!fav ([0-9]+)/) {
+	elsif ($msg =~ /^!fav( ([0-9]+))?/) {
+		my $id = ($2) ? $2 : $lastID;
+
 		my $sth = $dbh->prepare_cached('SELECT user FROM playbot_codes WHERE nick = ?');
 		$sth->execute($nick)
 			or $log->error("Couldn't finish transaction: " . $dbh->errstr);
@@ -253,7 +261,7 @@ sub on_speak
 		}
 
 		my $sth2 = $dbh->prepare_cached('INSERT INTO playbot_fav (id, user) VALUES (?, ?)');
-		$sth2->execute($1, $sth->fetch->[0])
+		$sth2->execute($id, $sth->fetch->[0])
 			or $log->error("Couldn't finish transaction: " . $dbh->errstr);
 
 		return;
@@ -261,6 +269,7 @@ sub on_speak
 	elsif ($msg =~ /^!later( ([0-9]*)( in ([0-9]*)(h|m)?)?)?/) {
 		my ($id, $time, $unit) = ($2, $4, $5);
 
+		$id = $lastID if (!$id);
 		$time = 6 if (!$time);
 		$time *= ($unit eq 'm') ? 60 : 3600;
 		$kernel->delay_set('_later', $time, $nick, $id);
@@ -300,10 +309,11 @@ sub on_speak
 
 		$id = $sth->fetch->[0];
 	}
+	$lastID = $id;
 
 
 	# insertion des éventuels tags
-	while ($msg =~ /#([a-zA-Z_-]*)/g) {
+	while ($msg =~ /#([a-zA-Z0-9_-]*)/g) {
 		next if (!$1);
 		my $sth = $dbh->prepare_cached('INSERT INTO playbot_tags (id, tag) VALUES (?, ?)');
 		$log->error("Couldn't prepare querie; aborting") unless (defined $sth);