diff --git a/PlayBot.pl b/PlayBot.pl
index 64d0a5fa562d5666d626e34684317d76331e395e..81e83d4075b90ab97e079a2c52e8658d5ea9d7e0 100755
--- a/PlayBot.pl
+++ b/PlayBot.pl
@@ -59,7 +59,8 @@ POE::Session->create(
 		irc_public => \&on_speak,
 		irc_msg    => \&on_query,
 		irc_notice => \&on_notice,
-		_flux	   => \&flux
+		_flux	   => \&flux,
+		_later     => \&later
 	},
 );
 
@@ -88,6 +89,20 @@ sub flux
 }
 
 
+sub later
+{
+	my ($nick, $id) = @_[ARG0,ARG1];
+
+	my $sth = $dbh->prepare_cached('SELECT url 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);
+}
+
+
 sub cycle
 {
 	my ($arg) = @_;
@@ -227,7 +242,7 @@ sub on_speak
 		eval { %content = zippy($url) };
 		$site = 'zippyshare';
 	}
-	elsif ($msg =~ /!fav ([0-9]+)/) {
+	elsif ($msg =~ /^!fav ([0-9]+)/) {
 		my $sth = $dbh->prepare_cached('SELECT user FROM playbot_codes WHERE nick = ?');
 		$sth->execute($nick)
 			or $log->error("Couldn't finish transaction: " . $dbh->errstr);
@@ -243,6 +258,14 @@ sub on_speak
 
 		return;
 	}
+	elsif ($msg =~ /^!later( ([0-9]*)( in ([0-9]*)(h|m)?)?)?/) {
+		my ($id, $time, $unit) = ($2, $4, $5);
+
+		$time *= ($unit eq 'm') ? 60 : 3600;
+		$kernel->delay_set('_later', 3, $nick, $id);
+
+		return;
+	}
 	else {
 		return;
 	}