diff --git a/lib/commands/parser.pm b/lib/commands/parser.pm
index 418ad735aa0c52c65d9ed5cd4e67ff6813b027ff..5489c8c6b9e3d362d57f79f7905a479668a2b97d 100644
--- a/lib/commands/parser.pm
+++ b/lib/commands/parser.pm
@@ -134,10 +134,10 @@ sub exec {
 
 sub tag {
     my ($msg, $chan) = @_;
-    my @tags = ($msg =~ /#([a-zA-Z0-9_-]+)/g);
+    my @tags = ($msg =~ /(?:^| )#([a-zA-Z0-9_]+)/g);
 
     my $id = utils::id::get($chan);
-    commands::tag::exec($id, "@tags");
+    commands::tag::exec($id, $msg);
 }
 
 1;
diff --git a/lib/commands/tag.pm b/lib/commands/tag.pm
index c345defeb40cfbbb9a4a62b767d219e270056a22..aba63b62fb832145492b31a7fdd399708b3cd762 100644
--- a/lib/commands/tag.pm
+++ b/lib/commands/tag.pm
@@ -6,7 +6,7 @@ our $log;
 sub exec {
     my ($id, $msg) = @_;
 
-    while ($msg =~ /#?([a-zA-Z0-9_]+)/g) {
+    while ($msg =~ /(?:^| )#?([a-zA-Z0-9_]+)/g) {
         addTag($id, $1);
     }
 }