diff --git a/Modules/Debug.pm b/Modules/Debug.pm
index 5cbfe1377b9929dcdf6c2f761b706400ff5735ba..e7aed73c0a7c752369b027d1b0a19456f6152143 100644
--- a/Modules/Debug.pm
+++ b/Modules/Debug.pm
@@ -98,7 +98,7 @@ sub debug_help
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
 	
-	$conn->privmsg($reply_to, "`".$Config::command_sign."debug {<module>|queue [<sched_id>]}` => Print module variables or schedule queue events");
+	$conn->privmsg($reply_to, "`".$Config::command_sign."dbg {<module>|queue [<sched_id>]}` => Print module variables or schedule queue events");
 	
 	return 1;
 } # Fin debug_help
diff --git a/Modules/Horoscope.pm b/Modules/Horoscope.pm
index 63769f26b82c4bbe54dcc42fdce6baceb80c2752..5093e3ea32ade81e57181d1770461991ca3ee3cf 100644
--- a/Modules/Horoscope.pm
+++ b/Modules/Horoscope.pm
@@ -71,7 +71,7 @@ sub send_result
 	my ($conn, $status, $buffer, $params) = @_;
 	$::logger->debug("Horoscope result received\n");
 	
-	if($status)
+	if($status != -1)
 	{
 		$::logger->debug("Status ok\n");
 		my $parser = HTML::TokeParser::Simple->new("string" => $buffer);
diff --git a/Modules/HostIsDown.pm b/Modules/HostIsDown.pm
index bf1f54c25ed3dbb1e2897b8ca08ce78e50924889..27ad17d30cc1c03e8601199d1d3bda564f4e1577 100644
--- a/Modules/HostIsDown.pm
+++ b/Modules/HostIsDown.pm
@@ -46,7 +46,7 @@ sub send_result
 	my ($conn, $status, $buffer, $params) = @_;
 	$::logger->debug("HostIsDown result received\n");
 	
-	if($status)
+	if($status != -1)
 	{
 		$::logger->debug("Status ok\n");
 		my $parser = HTML::TokeParser::Simple->new("string" => $buffer);
diff --git a/Modules/Join.pm b/Modules/Join.pm
index 6dbbdf2b648d7bfe38d59df9f510b6d408fa6ff2..c3d251dd0ab6e4febd54c386bfdfc4155a056006 100644
--- a/Modules/Join.pm
+++ b/Modules/Join.pm
@@ -21,7 +21,7 @@ my %joining_chans = ();
 sub join_main
 {
 	my ($self, $event , $reply_to, $ref_params) = @_;
-	
+
 	if(defined($ref_params->[0]))
 	{
 		if(substr($ref_params->[0], 0, 1) ne "#")
@@ -29,14 +29,14 @@ sub join_main
 			$::displayer->sendto($reply_to, "Can't join a query");
 			return 1;
 		}
-		
-		$joining_chans{$ref_params->[0]} = $reply_to;
-		
+
+		$joining_chans{lc $ref_params->[0]} = $reply_to;
+
 		$self->join($ref_params->[0]);
-		
+
 		return 1;
 	}
-	
+
 	return 0;
 } # Fin join_main
 
@@ -48,11 +48,11 @@ sub join_main
 sub namreply_handle
 {
 	my ($conn, $event) = @_;
-	
+
 	if($event->{'format'} eq 'server')
 	{
-		my $chan = $event->{'args'}[2];
-		
+		my $chan = lc $event->{'args'}[2];
+
 		if(defined($joining_chans{$chan}))
 		{
 			my $reply_to = $joining_chans{$chan};
@@ -75,9 +75,9 @@ sub namreply_handle
 sub toomanychannels_handle
 {
 	my ($conn, $event) = @_;
-	
-	my $chan = $event->{'args'}[1];
-	
+
+	my $chan = lc $event->{'args'}[1];
+
 	if(defined($joining_chans{$chan}))
 	{
 		my $reply_to = $joining_chans{$chan};
@@ -88,7 +88,7 @@ sub toomanychannels_handle
 	{
 		$conn->privmsg($Config::owner, "ERR_TOOMANYCHANNELS received for $chan, but wasn't joining it.");
 	}
-	
+
 	return 1;
 } # Fin toomanychannels_handle
 
@@ -99,9 +99,9 @@ sub toomanychannels_handle
 sub inviteonlychan_handle
 {
 	my ($conn, $event) = @_;
-	
-	my $chan = $event->{'args'}[1];
-	
+
+	my $chan = lc $event->{'args'}[1];
+
 	if(defined($joining_chans{$chan}))
 	{
 		my $reply_to = $joining_chans{$chan};
@@ -112,7 +112,7 @@ sub inviteonlychan_handle
 	{
 		$conn->privmsg($Config::owner, "ERR_INVITEONLYCHAN received for $chan, but wasn't joining it.");
 	}
-	
+
 	return 1;
 } # Fin inviteonlychan_handle
 
@@ -123,9 +123,9 @@ sub inviteonlychan_handle
 sub channelisfull_handle
 {
 	my ($self, $event) = @_;
-	
-	my $chan = $event->{'args'}[1];
-	
+
+	my $chan = lc $event->{'args'}[1];
+
 	if(defined($joining_chans{$chan}))
 	{
 		my $reply_to = $joining_chans{$chan};
@@ -136,7 +136,7 @@ sub channelisfull_handle
 	{
 		$conn->privmsg($Config::owner, "ERR_CHANNELISFULL received for $chan, but wasn't joining it.");
 	}
-	
+
 	return 1;
 } # Fin channelisfull_handle
 
@@ -147,9 +147,9 @@ sub channelisfull_handle
 sub bannedfromchannel_handle
 {
 	my ($self, $event) = @_;
-	
-	my $chan = $event->{'args'}[1];
-	
+
+	my $chan = lc $event->{'args'}[1];
+
 	if(defined($joining_chans{$chan}))
 	{
 		my $reply_to = $joining_chans{$chan};
@@ -160,7 +160,7 @@ sub bannedfromchannel_handle
 	{
 		$conn->privmsg($Config::owner, "ERR_BANNEDFROMCHAN received for $chan, but wasn't joining it.");
 	}
-	
+
 	return 1;
 } # Fin bannedfromchannel_handle
 
@@ -172,8 +172,8 @@ sub bannedfromchannel_handle
 sub join_save
 {
 	my (undef, undef, $reloading) = @_;
-	
-	
+
+
 	if($reloading)
 	{
 		# On se désenregistre sinon on risque d'avoir deux fois le handler d'appelé
@@ -183,9 +183,9 @@ sub join_save
 		EventHandler::remove_event("channelisfull", "before", \&channelisfull_handle);
 		EventHandler::remove_event("bannedfromchannel", "before", \&bannedfromchannel_handle);
 	}
-	
+
 	return 1;
-} # Fin join_load
+} # Fin join_save
 
 
 # ###
@@ -200,8 +200,8 @@ sub join_load
 	EventHandler::add_event("inviteonlychan", "before", \&inviteonlychan_handle);
 	EventHandler::add_event("channelisfull", "before", \&channelisfull_handle);
 	EventHandler::add_event("bannedfromchannel", "before", \&bannedfromchannel_handle);
-	
-	
+
+
 	return 1;
 } # Fin join_load
 
@@ -213,10 +213,10 @@ sub join_load
 sub join_help
 {
 	my ($self, $event, $reply_to, $ref_params) = @_;
-	
+
 	$self->privmsg($reply_to, "`".$Config::command_sign."join <#channel>` => "
 	                             ."let ".$Config::nick." join <#channel>");
-	
+
 	return 1;
 } # Fin join_help
 
diff --git a/Modules/Postit.pm b/Modules/Postit.pm
index cbc946cfa8f88db686efc5056ba37bcfbf8b6508..9a9ecc1a817b30972d165fb95845ea2114d6ac62 100644
--- a/Modules/Postit.pm
+++ b/Modules/Postit.pm
@@ -34,18 +34,18 @@ my %months = (
 # ###
 #  postit_main
 # Permet de créer des post-it virtuels
-# 
+#
 # Usage :
 #  !postit [drop] <label> [<text>]
 # ###
 sub postit_main
 {
 	my ($self, $event, $reply_to, $ref_params) = @_;
-	
+
 	if(defined($ref_params->[0]))
 	{
 		my $first_word = shift @{$ref_params};
-		
+
 		if($first_word eq 'drop')
 		{
 			return 1 if(drop_postit($self, $event, $reply_to, $ref_params));
@@ -66,7 +66,7 @@ sub postit_main
 			}
 		}
 	}
-	
+
 	$ref_params->[0] = 'postit';
 	Help::help_main($self, $event, $reply_to, $ref_params);
 } # Fin postit_main
@@ -79,28 +79,28 @@ sub postit_main
 sub drop_postit
 {
 	my ($self, $event, $reply_to, $ref_params) = @_;
-	
+
 	return 0 if(!defined($ref_params->[0]));
-	
+
 	my $label = shift @{$ref_params};
 	my $ref_postit = \%postits;
 	my $event_nick = $event->{'nick'};
-	
+
 	if(!defined($ref_postit->{$event_nick}))
 	{
 		$self->privmsg($reply_to, "No postit to drop for you");
 		return 1;
 	}
-	
+
 	if(!defined($ref_postit->{$event_nick}->{$label}))
 	{
 		$self->privmsg($reply_to, "No postit named '$label' to drop for you");
 		return 1;
 	}
-	
+
 	delete $ref_postit->{$event_nick}->{$label};
 	$self->privmsg($reply_to, "Postit named '$label' deleted");
-	
+
 	return 1;
 } # Fin drop_postit
 
@@ -112,25 +112,25 @@ sub drop_postit
 sub see_postit
 {
 	my ($self, $event, $reply_to, $label) = @_;
-	
+
 	my $event_nick = $event->{'nick'};
-	
+
 	if(!defined($postits{$event_nick}))
 	{
 		$self->privmsg($reply_to, "No postit found for you");
 		return 1;
 	}
-	
+
 	if(!defined( $postits{$event_nick}->{$label} ))
 	{
 		$self->privmsg($reply_to, "No postit named '$label' found");
 		return 1;
 	}
-	
-	
+
+
 	# On envoie le postit
 	$self->privmsg($reply_to, $postits{$event_nick}->{$label});
-	
+
 	return 1;
 } # Fin see_postit
 
@@ -142,10 +142,10 @@ sub see_postit
 sub see_labels
 {
 	my ($self, $event, $reply_to) = @_;
-	
+
 	my $event_nick = $event->{'nick'};
 	my $ref_postit = \%postits;
-	
+
 	my @labels = ();
 	if(defined($ref_postit->{$event_nick}))
 	{
@@ -154,7 +154,7 @@ sub see_labels
 			push(@labels, $key);
 		}
 	}
-	
+
 	if(defined($labels[0]))
 	{
 		if(defined($labels[1]))
@@ -170,7 +170,7 @@ sub see_labels
 	{
 		$self->privmsg($reply_to, $event_nick.": You don't have any postit");
 	}
-	
+
 	return 1;
 } # Fin see_labels
 
@@ -182,19 +182,19 @@ sub see_labels
 sub write_postit
 {
 	my ($self, $event, $reply_to, $label, $ref_params) = @_;
-	
+
 	my $event_nick = $event->{'nick'};
 	my $ref_postit = \%postits;
-	
+
 	# On récupère le moment où l'utilisateur a posé son postit
 	my (undef, $month, $day, $clock, $year) = split /\s+/, localtime(time);
 	$month = $months{$month};
-	
-	
+
+
 	# On se fait une chaine formattée avec des belles couleurs sous irssi
 	my $formatted_time = "\x0304[\x0303$day/$month/$year $clock\x0304]\x03 ";
 	my $message = $formatted_time.join(' ', @{$ref_params});
-	
+
 	if(!defined($ref_postit->{$event_nick}))
 	{
 		$ref_postit->{ $event_nick } = {
@@ -209,13 +209,13 @@ sub write_postit
 			{
 				$self->privmsg($reply_to, $event_nick
 									.": your message has been concat to the previous one, all is good!");
-				
+
 				my $old_msg = ($ref_postit->{ $event_nick }->{$label} =~ /^.*?\]. (.*)$/)[0];
-				
+
 				$ref_params->[0] = substr($ref_params->[0], 1);
 				shift @{$ref_params} if($ref_params->[0] eq '');
 				return 0 if(!defined($ref_params->[0]));
-				
+
 				$ref_postit->{ $event_nick }->{$label} = $formatted_time . $old_msg .' '. join(' ', @{$ref_params});
 			}
 			else
@@ -223,20 +223,20 @@ sub write_postit
 				$self->privmsg($reply_to, $event_nick
 									.": I kept the new one but there was already one named '$label': "
 									.$ref_postit->{$event_nick}->{$label});
-				
+
 				$ref_postit->{ $event_nick }->{$label} = $message;
 			}
 			return 1;
 		}
-		
+
 		$ref_postit->{ $event_nick }->{$label} = $message;
 	}
-	
+
 	my $random_affirmation = $Config::affirmative[int(rand($#Config::affirmative + 1))];
-	
+
 	$self->privmsg($reply_to, $random_affirmation);
-	
-	
+
+
 	return 1;
 } # Fin write_postit
 
@@ -248,13 +248,13 @@ sub write_postit
 sub change_owner
 {
 	my (undef, $event) = @_;
-	
+
 	my $old_nick = $event->{'nick'};
 	my $new_nick = $event->{'args'}[0];
-	
-	
+
+
 	my $ref_postits = \%postits;
-	
+
 	if(defined($ref_postits->{$old_nick}))
 	{
 		# On copie les postits de $old_nick vers $new_nick
@@ -263,7 +263,7 @@ sub change_owner
 			if(defined($ref_postits->{$new_nick}))
 			{
 				$ref_postits->{$new_nick}->{$label} = $ref_postits->{$old_nick}->{$label};
-				
+
 				# On supprime l'entrée dans la référence à l'ancien pseudo
 				delete $ref_postits->{$old_nick}->{$label};
 			}
@@ -272,15 +272,15 @@ sub change_owner
 				$ref_postits->{ $new_nick } = {
 												$label => $ref_postits->{$old_nick}->{$label}
 												};
-				
+
 				# On supprime l'entrée dans la référence à l'ancien pseudo
 				delete $ref_postits->{$old_nick}->{$label};
 			}
 		}
-		
+
 		delete $ref_postits->{$old_nick};
 	}
-	
+
 } # Fin change_owner
 
 
@@ -291,12 +291,12 @@ sub change_owner
 sub postit_help
 {
 	my ($self, $event, $reply_to, $ref_params) = @_;
-	
+
 	$self->privmsg($reply_to, "`".$Config::command_sign."postit <label> [+][<text>]` => "
 												."write a post-it, concat to or see one");
 	$self->privmsg($reply_to, "`".$Config::command_sign."postit drop <label>` => drop a postit from its <label>");
 	$self->privmsg($reply_to, "`".$Config::command_sign."postit labels` => show your labels");
-	
+
 	return 1;
 } # Fin postit_help
 
@@ -309,29 +309,29 @@ sub postit_save
 {
 	my (undef, $folder, $reloading) = @_;
 	my $file_postit = "/postits".$Config::suffixe.".sav";
-	
+
 	open POSTITS, ">", $folder.$file_postit or die "Unable to create $folder$file_postit";
-	
+
 	foreach my $nick (keys %postits)
 	{
-		printf POSTITS "$nick\n";
+		print POSTITS "$nick\n";
 		foreach my $label (keys %{$postits{$nick}})
 		{
-			printf POSTITS $label."\n";
-			printf POSTITS $postits{$nick}{$label}."\n";
+			print POSTITS $label."\n";
+			print POSTITS $postits{$nick}{$label}."\n";
 		}
-		printf POSTITS "$nick\n";
+		print POSTITS "$nick\n";
 	}
-	
+
 	close POSTITS;
-	
+
 	if($reloading)
 	{
 		# On veut pouvoir chopper les changements de pseudos, mais on se
 		# désenregistre, sinon on risque d'avoir deux fois le handler d'appelé
 		EventHandler::remove_event("nick", "before", \&change_owner);
 	}
-	
+
 	return 1;
 } # Fin postit_save
 
@@ -345,14 +345,14 @@ sub postit_load
 	shift; # Pas besoin de la connexion au serveur
 	my $folder = shift;
 	my $file_postit = "/postits".$Config::suffixe.".sav";
-	
+
 	open POSTITS, "<", $folder.$file_postit or return 0;
-	
+
 	my $got_nick = '';
 	while(my $line = <POSTITS>)
 	{
 		chomp $line;
-		
+
 		if($got_nick eq '')
 		{
 			# Un nouveau pseudo qui avait posé un postit
@@ -369,19 +369,19 @@ sub postit_load
 			# On récupère le message
 			my $msg = <POSTITS>;
 			chomp $msg;
-			
+
 			$postits{ $got_nick }{$line} = $msg;
 		}
-		
+
 	}
-	
+
 	close POSTITS;
-	
+
 	# On veut pouvoir chopper les changements de pseudos, donc on ajoute un
 	# event handler sur le changement de pseudo (= l'évènement 'nick')
 	EventHandler::add_event("nick", "before", \&change_owner);
-	
-	
+
+
 	return 1;
 } # Fin postit_load
 
diff --git a/Modules/Queue.pm b/Modules/Queue.pm
new file mode 100644
index 0000000000000000000000000000000000000000..65c17959895ac9b5863ed66db66a3ae84fd1fe97
--- /dev/null
+++ b/Modules/Queue.pm
@@ -0,0 +1,83 @@
+package Queue; # right = owner ; command = queue
+
+
+use strict;
+use warnings;
+
+
+# ###
+#  queue_main
+# 
+#
+# Usage :
+#  !queue remove <sched_id>
+# ###
+sub queue_main
+{
+	my ($conn, $event, $reply_to, $ref_params) = @_;
+	
+	return 0 unless(defined($ref_params->[0]));
+	
+	if($ref_params->[0] eq 'remove')
+	{
+		if($conn->parent->schedulequeue->is_empty())
+		{
+			$::displayer->sendto($reply_to, "The schedule queue is empty from any event.");
+			return 1;
+		}
+		
+		if(defined($ref_params->[1]))
+		{
+			return remove_queue_id($conn, $event, $reply_to, $ref_params->[1]);
+		}
+	}
+	
+	$ref_params->[0] = 'queue';
+	Help::help_main($conn, $event, $reply_to, $ref_params);
+} # Fin queue_main
+
+
+# ###
+#  remove_queue_id
+# Supprime un event de la queue
+# ###
+sub remove_queue_id
+{
+	my ($conn, $event, $reply_to, $sched_id) = @_;
+	
+	my $schqueue = $conn->parent->schedulequeue;
+	if(exists($schqueue->queue->{$sched_id}))
+	{
+		my $entry = $schqueue->queue->{$sched_id};
+		
+		$schqueue->dequeue($entry);
+		$::displayer->sendto($reply_to, "Event $sched_id removed from the schedule queue.");
+	}
+	else
+	{
+		$::displayer->sendto($reply_to, "No such event in the schedule queue.");
+	}
+	
+	return 1;
+} # Fin remove_queue_id
+
+
+# ###
+#  queue_help
+# Aide de queue
+# ###
+sub queue_help
+{
+	my ($conn, $event, $reply_to, $ref_params) = @_;
+	
+	$conn->privmsg($reply_to, "`".$Config::command_sign."queue remove <sched_id>` => Remove the <sched_id> event from the queue");
+	
+	return 1;
+} # Fin queue_help
+
+
+1;
+
+__END__
+
+
diff --git a/Modules/Rss.pm b/Modules/Rss.pm
index 7ce5b44a5be03bd1d73d72ef309f2a04297f41f5..08c37f89247612cb40262847ac2d8ef79585b72b 100644
--- a/Modules/Rss.pm
+++ b/Modules/Rss.pm
@@ -43,7 +43,7 @@ my %periods = %Common::periods;
 # ###
 #  rss_main
 # Sert à avertir lorsqu'une update d'un flux rss est présente
-# 
+#
 # Usage :
 #  !rss {run|stop|status}
 #  !rss {add <url> [[every] <nb> <period>]|del <url> [<#chan>|all]} [grep [on] <regex>]
@@ -53,7 +53,7 @@ my %periods = %Common::periods;
 sub rss_main
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	if(
 		substr($reply_to, 0, 1) eq '#' &&
 		lc $event->{"nick"} ne lc $Config::owner &&
@@ -63,8 +63,8 @@ sub rss_main
 		$conn->privmsg($reply_to, $event->{"nick"}.": You're not authorized to use this module here");
 		return 1;
 	}
-	
-	
+
+
 	if(defined($ref_params->[0]))
 	{
 		if($ref_params->[0] =~ /^(?:run|start|stop|status)$/i)
@@ -92,7 +92,7 @@ sub rss_main
 			return 1 if(see_rss($conn, $event, $reply_to, $ref_params));
 		}
 	}
-	
+
 	$ref_params->[0] = 'rss';
 	Help::help_main($conn, $event, $reply_to, $ref_params);
 } # Fin rss_main
@@ -105,11 +105,11 @@ sub rss_main
 sub run_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	return 0 if($event->{"nick"} ne $Config::owner);
-	
+
 	my $cmd = shift @{$ref_params};
-	
+
 	if($cmd =~ /^(?:run|start)$/i)
 	{
 		if(defined($ref_params->[0]))
@@ -120,9 +120,9 @@ sub run_rss
 				$conn->privmsg($reply_to, "No such schedule '$id'");
 				return 1;
 			}
-			
+
 			my $sched_infos = $state{"schedules"}->{$id};
-			
+
 			if($sched_infos->{"running"})
 			{
 				$conn->privmsg($reply_to, "The scheduled RSS '$id' is already running");
@@ -146,7 +146,7 @@ sub run_rss
 				$conn->privmsg($reply_to, "The RSS fetcher is now running");
 				$::logger->info("The RSS fetcher is now running...");
 				$state{"running"} = 1;
-				
+
 				run_for_real($conn);
 			}
 		}
@@ -161,14 +161,14 @@ sub run_rss
 				$conn->privmsg($reply_to, "No such schedule '$id'");
 				return 1;
 			}
-			
+
 			my $sched_infos = $state{"schedules"}->{$id};
-			
+
 			if($sched_infos->{"running"})
 			{
 				$conn->parent->schedulequeue->dequeue($sched_infos->{"sched_id"})
 					if(defined($sched_infos->{"sched_id"}));
-				
+
 				$sched_infos->{"running"}  = 0;
 				$sched_infos->{"checking"} = 0;
 				$::logger->info("The scheduled RSS '$id' is new stopped");
@@ -183,13 +183,13 @@ sub run_rss
 			$conn->privmsg($reply_to, "The RSS fetcher is now stopped");
 			$::logger->info("The RSS fetcher is now stopped") if($state{"running"});
 			$state{"running"} = 0;
-			
+
 			# On enlève chaque rss qui est dans la schedulequeue
 			foreach my $id (keys %{$state{"schedules"}})
 			{
 				$conn->parent->schedulequeue->dequeue($state{"schedules"}->{$id}->{"sched_id"})
 					if(defined($state{"schedules"}->{$id}->{"sched_id"}));
-				
+
 				$state{"schedules"}->{$id}->{"running"}  = 0;
 				$state{"schedules"}->{$id}->{"checking"} = 0;
 			}
@@ -205,11 +205,11 @@ sub run_rss
 				$conn->privmsg($reply_to, "No such schedule '$id'");
 				return 1;
 			}
-			
+
 			my $sched_infos = $state{"schedules"}->{$id};
-			
+
 			my $msg = "The schedule '$id' is in stage checking: ";
-			
+
 			if($sched_infos->{"checking"})
 			{
 				$msg .= "YES, ";
@@ -218,9 +218,9 @@ sub run_rss
 			{
 				$msg .= "NO, ";
 			}
-			
+
 			$msg .= "running: ";
-			
+
 			if($sched_infos->{"running"})
 			{
 				$msg .= "YES";
@@ -229,7 +229,7 @@ sub run_rss
 			{
 				$msg .= "NO";
 			}
-			
+
 			$conn->privmsg($reply_to, $msg);
 		}
 		else
@@ -244,7 +244,7 @@ sub run_rss
 			}
 		}
 	}
-	
+
 	return 1;
 } # Fin run_rss
 
@@ -256,16 +256,16 @@ sub run_rss
 sub reloadfail_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	return 0 if($event->{"nick"} ne $Config::owner);
-	
+
 	# On enlève le "reloadfail"
 	shift @{$ref_params};
-	
+
 	# S'il n'y a pas d'URL, wtf quoi
 	return 0 unless(defined($ref_params->[0]));
-	
-	
+
+
 	my $tmp = shift @{$ref_params};
 	my $url = undef;
 	if(!eval{ $url = qr/$tmp/i })
@@ -273,7 +273,7 @@ sub reloadfail_rss
 		$conn->privmsg($reply_to, "'$tmp' doesn't seem to be a correct regex for a URL");
 		return 1;
 	}
-	
+
 	my @urls = ();
 	foreach my $id (keys %{$state{"schedules"}})
 	{
@@ -283,9 +283,9 @@ sub reloadfail_rss
 			push @urls, $state{"schedules"}->{$id}->{"url"};
 		}
 	}
-	
+
 	$conn->privmsg($reply_to, "These urls have there 'fails' to 0: ".join(", ", @urls));
-	
+
 	return 1;
 } # Fin reloadfail_rss
 
@@ -297,7 +297,7 @@ sub reloadfail_rss
 sub run_for_real
 {
 	my ($conn, $schedule, $id) = @_;
-	
+
 	if(defined($schedule) && defined($id))
 	{
 		if($schedule->{"running"})
@@ -308,17 +308,17 @@ sub run_for_real
 		}
 		if($schedule->{"checking"})
 		{
-			$::displayer->sendto($schedule->{"reply_to"}->[0], 
+			$::displayer->sendto($schedule->{"reply_to"}->[0],
 								 $schedule->{"url"}.": Checking stage, wait for it please");
 			return 1;
 		}
 	   	if(!$state{"running"})
 		{
-			$::displayer->sendto($schedule->{"reply_to"}->[0], 
+			$::displayer->sendto($schedule->{"reply_to"}->[0],
 								 $schedule->{"url"}.": The RSS module is not currently running");
 			return 1;
 		}
-		
+
 		$schedule->{"checking"} = 1;
 		$::logger->debug("Checking '".$schedule->{"url"}."' for RSS feed compatibility");
 		check_stream($conn, $schedule, $id);
@@ -329,7 +329,7 @@ sub run_for_real
 		foreach $id (keys %{$state{"schedules"}})
 		{
 			$schedule = $state{"schedules"}->{$id};
-			
+
 			# Si le schedule n'est pas lancé pour celui-là
 			if(!$schedule->{"running"} && !$schedule->{"checking"})
 			{
@@ -338,7 +338,7 @@ sub run_for_real
 			}
 		}
 	}
-	
+
 	return 1;
 } # Fin run_for_real
 
@@ -350,15 +350,15 @@ sub run_for_real
 sub add_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'add'
 	shift @{$ref_params};
-	
+
 	return 0 if(!defined($ref_params->[0]));
-	
+
 	$reply_to = lc $reply_to;
-	
-	
+
+
 	# add <url> [[every] <nb> <period>]
 	my %sched_infos = (
 		"sched_id"     => undef,
@@ -372,28 +372,28 @@ sub add_rss
 		"last_titles"  => [],
 		"fails"        => 0
 	);
-	
+
 	my $url = lc shift @{$ref_params};
-	
-	
+
+
 # 	[[every] <nb> <period>] [grep <regex>]
 	if($url =~ m#^https?://#i)
 	{
 		$sched_infos{"url"} = $url;
-		
+
 		if(&already_registered($url, $reply_to))
 		{
 			$conn->privmsg($reply_to, "'$url' is already registered for this channel");
 			return 1;
 		}
-		
+
 		my $reply = "";
-		
+
 		# Si on a plus que seulement l'url
 		if(defined($ref_params->[0]))
 		{
 			my $re = join(' ', @{$ref_params});
-			
+
 			if($re =~ /^(?:(?:every )?(\d+)?\s*(\w+))?\s*(?:grep(?: on)? (.+))?$/i)
 			{
 				my $every_min = $1;
@@ -401,11 +401,11 @@ sub add_rss
 				{
 					my $period = $2;
 					$period =~ s/s$//;
-					
+
 					if(defined($periods{$period}))
 					{
 						$sched_infos{"period"} = $periods{$period};
-						
+
 						$sched_infos{"period"} *= int($every_min) if(defined($every_min) && $every_min ne '');
 					}
 					else
@@ -414,7 +414,7 @@ sub add_rss
 								.($Config::rss_default_period / 60)."mins). ";
 					}
 				}
-				
+
 				if(defined($3) && $3 ne '')
 				{
 					my $prere = $3;
@@ -430,27 +430,27 @@ sub add_rss
 				}
 			}
 		}
-		
-		
+
+
 		$reply .= "'$url' added, entering checking mode";
 		$conn->privmsg($reply_to, $reply);
-		
+
 		$reply = "Added URL for RSS stream: $url on $reply_to every "
 				.$sched_infos{"period"}."s (checking stage begin...)";
 		$reply .= " grep on '".$sched_infos{"grep"}."'" if(defined($sched_infos{"grep"}));
-		
+
 		$::logger->debug($reply);
-		
+
 		my $id = get_next_id(lc $reply_to);
 		$state{"schedules"}->{$id} = \%sched_infos;
-		
+
 		run_for_real($conn, \%sched_infos, $id);
 	}
 	else
 	{
 		$conn->privmsg($reply_to, "This URL ($url) doesn't seem valid");
 	}
-	
+
 	return 1;
 } # Fin add_rss
 
@@ -462,7 +462,7 @@ sub add_rss
 sub already_registered
 {
 	my ($url, $chan) = @_;
-	
+
 	foreach my $id (keys %{$state{"schedules"}})
 	{
 		return 1 if(
@@ -470,7 +470,7 @@ sub already_registered
 			Common::is_in_list($state{"schedules"}->{$id}->{"reply_to"}, $chan)
 		);
 	}
-	
+
 	return 0;
 } # Fin already_registered
 
@@ -482,15 +482,15 @@ sub already_registered
 sub del_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'del'
 	shift @{$ref_params};
-	
+
 	return 0 if(!defined($ref_params->[0]));
-	
+
 	$reply_to = lc $reply_to;
-	
-	
+
+
 	# del <url>
 	my $tmp = shift @{$ref_params};
 	my $url = undef;
@@ -499,37 +499,37 @@ sub del_rss
 		$conn->privmsg($reply_to, "'$tmp' doesn't seem to be a correct regex for a URL");
 		return 1;
 	}
-	
-	
+
+
 	my %deleted = ();
 	foreach my $id (keys %{$state{"schedules"}})
 	{
 		my ($chan) = split / /, $id;
-		
+
 		# Next si la cible n'est pas sur le même chan/query
 		next unless lc $reply_to eq lc $chan;
-		
+
 		if(substr($chan, 0, 1) eq '#')
 		{
 			# Next si on n'est pas op sur le chan
 			next unless Chans::is_op($chan, $event->{"nick"}) or $event->{"nick"} eq $Config::owner;
 		}
-		
-		
+
+
 		# On regarde si ça correspond
 		if($state{"schedules"}->{$id}->{"url"} =~ $url || $state{"schedules"}->{$id}->{"master_title"} =~ $url)
 		{
 			$deleted{$state{"schedules"}->{$id}->{"url"}} = "";
-			
+
 			$conn->parent->schedulequeue->dequeue($state{"schedules"}->{$id}->{"sched_id"})
 					if(defined($state{"schedules"}->{$id}->{"sched_id"}));
-			
+
 			$state{"schedules"}->{$id}->{"sched_id"} = undef;
 			delete $state{"schedules"}->{$id};
 		}
 	}
-	
-	
+
+
 	# Résultat...
 	$::logger->debug("Deletion: '".join("', '", keys %deleted)."'");
 	if(%deleted && defined((keys %deleted)[1]))
@@ -544,7 +544,7 @@ sub del_rss
 	{
 		$conn->privmsg($reply_to, "No URL found to delete");
 	}
-	
+
 	return 1;
 } # Fin del_rss
 
@@ -556,31 +556,31 @@ sub del_rss
 sub change_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'change'
 	shift @{$ref_params};
-	
+
 	return 0 if(!defined($ref_params->[0]));
-	
+
 	my $url = lc shift @{$ref_params};
-	
+
 	if($url =~ m#^https?://#i)
 	{
 		shift @{$ref_params} if(defined($ref_params->[0]) && $ref_params->[0] =~ /^to$/i);
 		shift @{$ref_params} if(defined($ref_params->[0]) && $ref_params->[0] =~ /^every$/i);
-		
+
 		if(defined($ref_params->[0]) && defined($ref_params->[1]))
 		{
 			if($ref_params->[0] =~ /^\d+$/ && defined($periods{$ref_params->[1]}))
 			{
 				my $new_period = $ref_params->[0] * $periods{$ref_params->[1]};
-				
+
 				my $schedule = undef;
-				
+
 				foreach my $id (keys %{$state{"schedules"}})
 				{
 					my ($chan_added) = split / /, $id;
-					
+
 					if(
 						$state{"schedules"}->{$id}->{"url"} eq $url
 						&& $chan_added eq lc $reply_to
@@ -590,15 +590,15 @@ sub change_rss
 						last;
 					}
 				}
-				
+
 				if(!defined($schedule))
 				{
 					$conn->privmsg($reply_to, "'$url' doesn't seem to be registered");
 					return 1;
 				}
-				
+
 				$schedule->{"period"} = $new_period;
-				
+
 				$conn->privmsg($reply_to, "'$url' will be scheduled every ${new_period}s");
 			}
 			else
@@ -615,7 +615,7 @@ sub change_rss
 	{
 		$conn->privmsg($reply_to, "This URL ($url) doesn't seem valid");
 	}
-	
+
 	return 1;
 } # Fin change_rss
 
@@ -627,21 +627,21 @@ sub change_rss
 sub see_rss
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'see'
 	shift @{$ref_params};
-	
+
 	# see [#chan] [<url>]
 	my $url = undef;
 	my $chan_see = undef;
-	
+
 	if(defined($ref_params->[0]) && substr($ref_params->[0], 0, 1) eq "#")
 	{
 		$chan_see = lc shift @{$ref_params};
 	}
-	
+
 	$chan_see = $reply_to unless defined $chan_see;
-	
+
 	if(defined($ref_params->[0]))
 	{
 		my $tmp = $ref_params->[0];
@@ -651,15 +651,15 @@ sub see_rss
 			return 1;
 		}
 	}
-	
-	
+
+
 	my @to_see = ();
-	
+
 	foreach my $id (keys %{$state{"schedules"}})
 	{
 		my ($chan) = split / /, $id;
-		
-		
+
+
 		if(substr($chan, 0, 1) eq '#')
 		{
 			next unless Chans::is_op($chan, $event->{"nick"}) or $event->{"nick"} eq $Config::owner;
@@ -668,8 +668,8 @@ sub see_rss
 		{
 			next unless lc $reply_to eq lc $chan;
 		}
-		
-		
+
+
 		# On regarde si ça correspond
 		if(
 			(!defined($url) || $state{"schedules"}->{$id}->{"url"}          =~ $url
@@ -681,9 +681,9 @@ sub see_rss
 			push @to_see, $id;
 		}
 	}
-	
-	
-	
+
+
+
 	# Résultat...
 	if(@to_see && defined($to_see[1]))
 	{
@@ -693,13 +693,13 @@ sub see_rss
 	elsif(@to_see)
 	{
 		my $msg = "Only one found:";
-		
+
 		$msg .= " \x02".$state{"schedules"}->{$to_see[0]}->{"master_title"}."\x02"
 			if(defined($state{"schedules"}->{$to_see[0]}->{"master_title"}));
-		
+
 		$msg .= " '".$state{"schedules"}->{$to_see[0]}->{"url"}."' every "
 			.$state{"schedules"}->{$to_see[0]}->{"period"}."s";
-		
+
 		if(
 			defined($state{"schedules"}->{$to_see[0]}->{"grep"})
 			&& $state{"schedules"}->{$to_see[0]}->{"grep"} ne ""
@@ -707,55 +707,55 @@ sub see_rss
 		{
 			$msg .= ", grep on '".$state{"schedules"}->{$to_see[0]}->{"grep"}."'";
 		}
-		
+
 		$msg .= ", displays on ".join(', ', @{$state{"schedules"}->{$to_see[0]}->{"reply_to"}});
-		
+
 		my $next_update = $state{"schedules"}->{$to_see[0]}->{"last_update"}
 			+ $state{"schedules"}->{$to_see[0]}->{"period"};
 		$msg .= ". Next update: ".localtime($next_update);
-		
-		
+
+
 		$conn->privmsg($reply_to, $msg);
 	}
 	else
 	{
 		$conn->privmsg($reply_to, "No URL found");
 	}
-	
+
 	return 1;
 } # Fin see_rss
 
 
 # ###
 #  rss_on_kick
-# 
+#
 # ###
 sub rss_on_kick
 {
 	my ($conn, $event) = @_;
-	
+
 	# On regarde si c'est nous qui avons été kické
 	if($event->{'to'}[0] eq $Config::nick)
 	{
 		my $kicked_chan = $event->{'args'}[0];
 		my @deleted = ();
-		
+
 		foreach my $id (keys %{$state{"schedules"}})
 		{
 			my ($chan) = split / /, $id;
-			
+
 			if(lc $kicked_chan eq lc $chan)
 			{
 				push @deleted, $state{"schedules"}->{$id}->{"url"};
-				
+
 				$conn->parent->schedulequeue->dequeue($state{"schedules"}->{$id}->{"sched_id"})
 						if(defined($state{"schedules"}->{$id}->{"sched_id"}));
-				
+
 				$state{"schedules"}->{$id}->{"sched_id"} = undef;
 				delete $state{"schedules"}->{$id};
 			}
 		}
-		
+
 		if(@deleted)
 		{
 			$::logger->info("Kick event removed these URLs: '".join("', '", @deleted)."'");
@@ -771,24 +771,24 @@ sub rss_on_kick
 sub check_stream
 {
 	my ($conn, $schedule, $id) = @_;
-	
+
 	# On créé la requête
 	my $htmlreq = new HTMLRequests($conn);
-	
+
 	my $url = $schedule->{"url"};
 	my $method = "GET";
 	my $raw_result = 0;
 	my $callback = \&check_stream_cb;
-	
+
 	my %params = (
 		"schedule" => $schedule,
 		"id"       => $id
 	);
-	
+
 	# Et on lance la requête
 	$::logger->info("Running RSS check for url '$url'");
-	$htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params);	
-	
+	$htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params);
+
 	return 1;
 } # Fin check_stream
 
@@ -802,28 +802,28 @@ sub check_stream_cb
 	my ($conn, $status, $buffer, $params) = @_;
 	my $url = $params->{"schedule"}->{"url"};
 	$::logger->debug("RSS result received for URL '$url' (id ".$params->{"id"}.")\n");
-	
+
 	my $reply_to = $params->{"schedule"}->{"reply_to"};
-	
+
 	# On vérifie le statut récupéré de l'url
-	if($status)
+	if($status != -1)
 	{
 		my $parser = HTML::TokeParser::Simple->new("string" => $buffer);
-		
+
 		# On récupère le titre principal du flux RSS
 		$parser->get_tag("title");
 		$params->{"schedule"}->{"master_title"} = $parser->get_text();
-		
-		
+
+
 		if(!$parser->get_tag("item"))
 		{
 			send_chans($conn, "Can't find usable content in '$url', deleting this URL", $reply_to);
 			$::logger->debug("Can't find item tag in '$url' source code, deleting");
-			
+
 			delete $state{"schedules"}->{$params->{"id"}};
 			return 1;
 		}
-		
+
 		# On récupère seulement un titre pour le check
 		$parser->get_tag("title");
 		my $title = $parser->get_text();
@@ -833,18 +833,18 @@ sub check_stream_cb
 		$title =~ s/\s+/ /g;
 		$title =~ s/\n/ /g;
 		$title =~ s/^\s*(.*?)\s*$/$1/;
-		
+
 		$parser->get_tag("link");
 		my $link = $parser->get_text();
-		
+
 		$::logger->debug("Found title '$title' and link '$link', the RSS feed '$url'");
-		
+
 		$params->{"schedule"}->{"last_titles"} = [$title];
-		
+
 		# On donne le dernier titre en disant que c'est oki, que le flux sera suivi
 		send_chans($conn, "\x0304[\x0303$url\x0304]\x03 Last title is \x02$title\x02 \x0302$link\x03 scheduled every ".
 						$params->{"schedule"}->{"period"}."s", $reply_to);
-		
+
 		# Enfin, on lance le schedule
 		$params->{"schedule"}->{"running"}  = 1;
 		$params->{"schedule"}->{"checking"} = 0;
@@ -862,10 +862,10 @@ sub check_stream_cb
 		# On prévient que l'url est injoignable
 		send_chans($conn, "'$url' isn't reachable, aborting", $reply_to);
 		$::logger->debug("'$url' isn't reachable, aborting");
-		
+
 		delete $state{"schedules"}->{$params->{"id"}};
 	}
-	
+
 	return 1;
 } # Fin check_stream_cb
 
@@ -877,23 +877,23 @@ sub check_stream_cb
 sub get_stream
 {
 	my ($conn, $schedule, $id) = @_;
-	
+
 	# On créé la requête
 	my $htmlreq = new HTMLRequests($conn);
-	
+
 	my $url = $schedule->{"url"};
 	my $method = "GET";
 	my $raw_result = 0;
 	my $callback = \&get_stream_cb;
-	
+
 	my %params = (
 		"schedule" => $schedule,
 		"id"       => $id
 	);
-	
+
 	# Et on lance la requête
-	$htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params);	
-	
+	$htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params);
+
 	return 1;
 } # Fin get_stream
 
@@ -907,38 +907,38 @@ sub get_stream_cb
 	my ($conn, $status, $buffer, $params) = @_;
 	my $url = $params->{"schedule"}->{"url"};
 	$::logger->debug("RSS result received for URL '$url'\n");
-	
+
 	my $reply_to = $params->{"schedule"}->{"reply_to"};
 	my $grep     = $params->{"schedule"}->{"grep"};
-	
+
 	# On undef le sched_id car le schedule n'est plus dans la queue
 	$params->{"schedule"}->{"sched_id"} = undef;
-	
+
 	# On vérifie le statut récupéré de l'url
-	if($status)
+	if($status != -1)
 	{
 		# On récupère le dernier titre
 		my $parser = HTML::TokeParser::Simple->new("string" => $buffer);
 		my $tag = undef;
-		
+
 		my @titles = ();
 		my @urls   = ();
 		my $too_much = 0;
 		my $found_at_least_one_tag = 0;
-		
+
 		while(1)
 		{
 			$tag = $parser->get_tag("item");
 			if(!$tag)
 			{
 				last if(@titles || $found_at_least_one_tag);
-				
+
 				$params->{"schedule"}->{"fails"} += 1;
-				
+
 				my $msg = "Can't find usable content in '$url', "
 						."the URL may have changed or something else went wrong";
 				my $logfile = debug_big_buffer($buffer);
-				
+
 				if($params->{"schedule"}->{"fails"} >= $max_fails)
 				{
 					# Au bout d'un certain nombre de fails, on arrête
@@ -950,11 +950,15 @@ sub get_stream_cb
 				else
 				{
 					# On n'a pas encore atteint le quota de fails, on continue
-					$msg .= " (fails: ".$params->{"schedule"}->{"fails"}."/$max_fails)";
-					send_chans($conn, $msg, $reply_to);
-					
+					if($params->{"schedule"}->{"fails"} >= $max_fails * 7/10)
+					{
+						# But send a warning to the user only at 70% of the max_fails
+						$msg .= " (fails: ".$params->{"schedule"}->{"fails"}."/$max_fails)";
+						send_chans($conn, $msg, $reply_to);
+					}
+
 					$::logger->debug("Can't find item tag in '$url' source code, see $logfile");
-					
+
 					$params->{"schedule"}->{"sched_id"} = $conn->{"cmdtool"}->schedule(
 						$params->{"schedule"}->{"period"},
 						\&get_stream,
@@ -963,13 +967,13 @@ sub get_stream_cb
 					);
 					$::logger->debug("Rescheduled '$url' in ".$params->{"schedule"}->{"period"}."s");
 				}
-				
+
 				return 1;
 			}
-			
+
 			next if($tag->is_end_tag);
 			$found_at_least_one_tag = 1;
-			
+
 			# On récupère un titre
 			$parser->get_tag("title");
 			my $title = $parser->get_text();
@@ -979,8 +983,8 @@ sub get_stream_cb
 			$title =~ s/\s+/ /g;
 			$title =~ s/\n/ /g;
 			$title =~ s/^\s*(.*?)\s*$/$1/;
-			
-			
+
+
 			# On arrête de parser lorsqu'on a fini de récupérer tous les nouveaux titres
 			last if(Common::is_in_list($params->{"schedule"}->{"last_titles"}, $title));
 			# Ou lorsqu'on atteint les 5 URLs (on sait jamais)
@@ -989,29 +993,29 @@ sub get_stream_cb
 				$too_much = 1;
 				last;
 			}
-			
+
 			# On passe à l'url suivante si grep a été défini et qu'on matche pas
 			next if(defined($grep) && $title !~ $grep);
-			
+
 			$::logger->debug("'$title' matches $grep") if(defined($grep));
-			
-			
+
+
 			$parser->get_tag("link");
 			my $link = $parser->get_text();
-			
+
 			push @titles, $title;
 			push @urls,   $link;
-			
+
 			$::logger->debug("Found title '$title' and link '$link' the RSS feed '$url'");
 		}
-		
-		
+
+
 		# On donne les derniers titres en disant que c'est oki, que le flux sera suivi
 		if(@titles)
 		{
 			my $title = $url;
 			$title = $params->{"schedule"}->{"master_title"} if(defined($params->{"schedule"}->{"master_title"}));
-			
+
 			if(defined $titles[1])
 			{
 				my $msg = "\x0304[\x0303$title\x0304]\x03 New entries are ";
@@ -1023,9 +1027,9 @@ sub get_stream_cb
 					$msg .= "\x0307|\x03 ";
 				}
 				$msg .= "\x02".$titles[$max]."\x02 \x0302".$urls[$max]."\x03";
-				
+
 				$msg .= ". There may be more new URLs, checkout by yourself!" if($too_much);
-				
+
 				send_chans($conn, $msg, $reply_to);
 			}
 			else
@@ -1033,17 +1037,17 @@ sub get_stream_cb
 				send_chans($conn, "\x0304[\x0303$title\x0304]\x03 New entry found: \x02"
 								.$titles[0]."\x02 \x0302".$urls[0]."\x03", $reply_to);
 			}
-			
-			
+
+
 			my @merge = (@titles, @{$params->{"schedule"}->{"last_titles"}});
 			pop @merge while($#merge > $nb_last_titles);
-			
+
 			$params->{"schedule"}->{"last_titles"} = \@merge;
 		}
-		
+
 		# Enfin, on relance le schedule si c'est toujours oki
 		return if(!$state{"running"} && $params->{"schedule"}->{"running"});
-		
+
 		$params->{"schedule"}->{"sched_id"} = $conn->{"cmdtool"}->schedule(
 			$params->{"schedule"}->{"period"},
 			\&get_stream,
@@ -1053,7 +1057,7 @@ sub get_stream_cb
 		$params->{"schedule"}->{"fails"} = 0;
 		$params->{"schedule"}->{"last_update"} = time;
 		$::logger->debug("Rescheduled '$url' in ".$params->{"schedule"}->{"period"}."s (".$params->{"id"}.")");
-		
+
 		# Sometimes bug just happen
 		if(!defined($state{"schedules"}->{$params->{"id"}}))
 		{
@@ -1064,15 +1068,15 @@ sub get_stream_cb
 	{
 		# On prévient que l'url est injoignable
 		$params->{"schedule"}->{"fails"} += 1;
-		
+
 		my $msg = "'$url' isn't reachable anymore";
-		
+
 		if($params->{"schedule"}->{"fails"} >= $max_fails)
 		{
 			# Au bout d'un certain nombre de fails, on arrête
 			$msg .= ". Deleting this URL.";
 			delete $state{"schedules"}->{$params->{"id"}};
-			
+
 			send_chans($conn, $msg, $reply_to);
 			$::logger->debug("Can't find item tag in '$url' source code");
 		}
@@ -1082,7 +1086,7 @@ sub get_stream_cb
 			$msg .= " (fails: ".$params->{"schedule"}->{"fails"}."/$max_fails)";
 			send_chans($conn, $msg, $reply_to);
 			$::logger->debug("Can't find item tag in '$url' source code");
-			
+
 			$params->{"schedule"}->{"sched_id"} = $conn->{"cmdtool"}->schedule(
 				$params->{"schedule"}->{"period"},
 				\&get_stream,
@@ -1102,10 +1106,10 @@ sub get_stream_cb
 sub get_next_id
 {
 	my $from = shift;
-	
+
 	my $cpt = 0;
 	$cpt++ while(defined($state{"schedules"}->{$from." ".$cpt}));
-	
+
 	return $from." ".$cpt;
 } # Fin get_next_id
 
@@ -1117,7 +1121,7 @@ sub get_next_id
 sub send_chans
 {
 	my ($conn, $msg, $to) = @_;
-	
+
 	foreach my $chan_q (@{$to})
 	{
 		$::displayer->sendto($chan_q, $msg);
@@ -1133,26 +1137,26 @@ sub send_chans
 sub debug_big_buffer
 {
 	my $buffer = shift;
-	
+
 	# Sauvegarde de l'ancien fichier de log
 	my $last_logfile = $::logger->file;
-	
+
 	# Création du nom du fichier
 	my $logdir = $Config::logs_dir;
 	$logdir =~ s#/+$##;
-	
+
 	my $time = scalar localtime(time);
 	$time =~ s/\s+/-/g;
 	my $new_logfile = $Config::logs_dir."/rss-$time.log";
-	
+
 	# Changement du fichier de log
 	$::logger->file($new_logfile);
 	# Écriture du buffer
 	$::logger->debug($buffer);
-	
+
 	# Restauration de l'ancien fichier de log
 	$::logger->file($last_logfile);
-	
+
 	return $new_logfile;
 }
 
@@ -1163,9 +1167,9 @@ sub debug_big_buffer
 sub rss_help
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	shift @{$ref_params};
-	
+
 	if($event->{"nick"} eq $Config::owner)
 	{
 		$conn->privmsg($reply_to, "`".$Config::command_sign."rss {run|stop|status} [<id>]`"
@@ -1173,15 +1177,15 @@ sub rss_help
 		$conn->privmsg($reply_to, "`".$Config::command_sign."rss reloadfail <URL>`"
 							." => change fail value to 0 for <URL>");
 	}
-	
-	
+
+
 	$conn->privmsg($reply_to, "`".$Config::command_sign."rss {add <URL> [every <nb> <period>] [grep <regex>]|del {<URL>|<Feed title>}}`"
 						." => Add/remove a <URL> to fetch (check every hour by default), grep <regex> on news title");
 	$conn->privmsg($reply_to, "`".$Config::command_sign."rss change <URL> to every <nb> <period>`"
 						." => Change fetch period of a <URL>");
 	$conn->privmsg($reply_to, "`".$Config::command_sign."rss see [<#chan>] [<URL>|<Feed title>]`"
 						." => See what you have asked to monitor");
-	
+
 	return 1;
 } # Fin rss_help
 
@@ -1191,13 +1195,13 @@ sub rss_help
 sub rss_save
 {
 	my ($conn, $folder, $reloading) = @_;
-	
+
 	my $file_rss = $folder."/rss".$Config::suffixe.".sav";
-	
+
 	store \%state, $file_rss;
-	
+
 	EventHandler::remove_event("kick", "after", \&rss_on_kick) if $reloading;
-	
+
 	return 1;
 } # Fin rss_save
 
@@ -1205,19 +1209,21 @@ sub rss_save
 sub rss_load
 {
 	my ($conn, $folder, $reloading) = @_;
-	
+
 	my $file_rss = $folder."/rss".$Config::suffixe.".sav";
-	
+
 	my $stateref = retrieve $file_rss;
-	
+
+	my $currtime = time;
+
 	%state = %{$stateref};
-	
+
 	foreach my $id (keys %{$state{"schedules"}})
 	{
 		my $schedule = $state{"schedules"}->{$id};
-		
-		$schedule->{"last_update"} = 0;
-		
+
+		$schedule->{"last_update"} = $currtime;
+
 		if($state{"running"} && !defined($reloading) && $schedule->{"running"})
 		{
 			$schedule->{"running"}  = 0;
@@ -1225,12 +1231,12 @@ sub rss_load
 			run_for_real($conn, $schedule, $id);
 		}
 	}
-	
-	
+
+
 	# Ajout d'un handler pour supprimer les rss du chan d'où on se fait kick
 	EventHandler::add_event("kick", "after", \&rss_on_kick);
-	
-	
+
+
 	return 1;
 } # Fin rss_load
 
diff --git a/Modules/Television.pm b/Modules/Television.pm
index 54550ec812d984f6477ef63c4aa686c932342746..15da4f208f2999a4d447ca2627de0d22957895b3 100644
--- a/Modules/Television.pm
+++ b/Modules/Television.pm
@@ -12,7 +12,7 @@ my $url = 'http://www.programme-television.org/programme-television-maintenant?b
 
 
 # Table des chaines servant à construire la regexp pour la commande !tv <chaine>
-my %table_chaines = (   
+my %table_chaines = (
 						"TF1" => 0,
 						"France2" => 1,
 						"France3" => 2,
@@ -110,7 +110,7 @@ sub send_result
 	my ($conn, $status, $buffer, $params) = @_;
 	$::logger->debug("Television result received\n");
 	
-	if($status)
+	if($status != -1)
 	{
 		$::logger->debug("Status ok\n");
 		
diff --git a/Modules/Translation.pm b/Modules/Translation.pm
index f3626f38cd014743f12ff65df6390937ce1c743e..52b3d5526f46023070a5dd7275ed4d4ac5745e14 100644
--- a/Modules/Translation.pm
+++ b/Modules/Translation.pm
@@ -1,7 +1,6 @@
 package Translation; # command = trad,translation
 
-# use HTML::TokeParser::Simple;
-use JSON qw( decode_json );
+use JSON;
 use URI::Escape;
 
 use Common;
@@ -68,17 +67,17 @@ my %table_traduction = (
 
 # ###
 #  translation_main
-# Traduit 
-# 
+# Traduit
+#
 # Usage :
 #  !trad <init_lang> <end_lang> <text>
 # ###
 sub trad_main
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	return 0 unless(defined($ref_params->[2]));
-	
+
 	my $prec = '';
 	if($ref_params->[0] =~ /^-(.*)$/)
 	{
@@ -86,38 +85,33 @@ sub trad_main
 		shift @{$ref_params};
 		return 0 unless(defined($ref_params->[2]));
 	}
-	
+
 	my $init_lang = shift @{$ref_params};
 	my $end_lang = shift @{$ref_params};
-	my $to_translate = join('+', @{$ref_params});
-	
+	my $to_translate = join(' ', @{$ref_params});
+
 	$init_lang = &get_two_char_lang($init_lang);
 	$end_lang  = &get_two_char_lang($end_lang);
-	
+
 	if($init_lang eq $end_lang)
 	{
 		$conn->privmsg($reply_to, join(' ', @{$ref_params}));
 		return 1;
 	}
-	
+
 	return 0 unless(defined($init_lang) && defined($end_lang));
-	
+
 	my $htmlreq = new HTMLRequests($conn);
-	
+
 	# Échappement des caractères spéciaux
-	my $to_translate = uri_escape($to_translate);
-	
-	my $url = "http://translate.google.fr/translate_a/t?client=t&text=$to_translate&sl=$init_lang&tl=$end_lang&ie=UTF-8&oe=UTF-8&multires=1&ssel=0&tsel=0&sc=1";
-# 	my $url = "http://translate.google.fr/translate_t?hl=fr&ie=UTF-8&text=$to_translate&sl=$init_lang&tl=$end_lang";
-	my $method = "POST";
-	my %req_params = (
-		"text" => join(' ', @{$ref_params}),
-		"sl" => $init_lang,
-		"tl" => $end_lang
-	);
+	$to_translate = uri_escape($to_translate);
+
+	my $url = "https://translate.google.fr/translate_a/single?client=t&sl=$init_lang&tl=$end_lang&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&ie=UTF-8&oe=UTF-8&ssel=3&tsel=3&kc=0&q=$to_translate";
+	my $method = "GET";
+	my %req_params = ();
 	my $raw_result = 0;
 	my $callback = \&send_result;
-	
+
 	my %params = (
 		"event" => $event,
 		"reply_to" => $reply_to,
@@ -126,9 +120,9 @@ sub trad_main
 		"init" => $init_lang,
 		"end" => $end_lang
 	);
-	
+
 	$htmlreq->wget($url, $method, \%req_params, $raw_result, $callback, \%params);
-	
+
 	return 1;
 } # Fin trad_main
 
@@ -137,21 +131,32 @@ sub send_result
 {
 	my ($conn, $status, $buffer, $params) = @_;
 	$::logger->debug("Translation result received\n");
-	
-	if($status)
+
+	if($status != -1)
 	{
 		$::logger->debug("Status ok\n");
-		
-		my $trad = [];
-		# FIXME Quand la lib JSON (ou JSON::XS, je sais pas trop) arrivera à
-		# parser du JSON, on pourra corriger ça...
-		# (notez que c'est pas bien de faire un eval de trucs reçus d'internet !)
-		eval "\$trad = $buffer;";
-		
-		my $main_trad = $trad->[0]->[0]->[0];
-		
+		if($buffer =~ /<!DOCTYPE/)
+		{
+			$::displayer->sendto($params->{"reply_to"}, "I'm being banned from Google at the moment, please try again later.");
+			$::logger->info("Being banned from google right now\n");
+			# TODO voir pour rajouter un timer histoire de pas refaire de requêtes à google...
+			return;
+		}
+
+		# Google ne semble pas respecter la norme JSON, decode_json n'aime pas
+		# ça, donc on remet le buffer en normé
+		$buffer =~ s/,(?=,)/,null/g;
+		$buffer =~ s/\[,+/[null,/g;
+		my $trad = decode_json($buffer);
+
+		my @main_trad = ();
+		foreach my $t (@{$trad->[0]})
+		{
+			push(@main_trad, $t->[0]) if($#{$t} > 0);
+		}
+
 		my %precise = ();
-		
+
 		if($#{$params->{'text'}} == 0 && defined($trad->[1]))
 		{
 			foreach my $more (@{$trad->[1]})
@@ -171,9 +176,13 @@ sub send_result
 				}
 			}
 		}
-		
-		my $trads = $main_trad;
-		
+
+		my $trads = join('', @main_trad);
+		if($params->{'init'} eq 'auto')
+		{
+			$trads .= " \x0303(".$trad->[2].")\x03";
+		}
+
 		if(keys %precise)
 		{
 			if($params->{'prec'} && defined($precise{'--'.$params->{'prec'}.'-plus--'}))
@@ -194,7 +203,7 @@ sub send_result
 				}
 			}
 		}
-		
+
 		if($trads)
 		{
 			$::displayer->sendto($params->{"reply_to"}, $trads);
@@ -205,10 +214,10 @@ sub send_result
 			$::displayer->sendto($params->{"reply_to"}, "No translation found (empty result)");
 			$::logger->debug("Empty translation result for '" . join(' ', @{$params->{'text'}}) . "'\n");
 		}
-		
+
 		return;
 	}
-	
+
 	$::logger->debug("Status not ok\n'''");
 	$::logger->debug($buffer);
 	$::logger->debug("'''\n");
@@ -222,12 +231,12 @@ sub get_two_char_lang
 
 	$lang = lc $lang if($lang ne "zh-CN");
 	return $lang if(length $lang == 2 || $lang eq "zh-CN");
-	
+
 	if(defined($table_traduction{$lang}))
 	{
 		return $table_traduction{$lang};
 	}
-	
+
 	return;
 }
 
@@ -235,7 +244,7 @@ sub get_two_char_lang
 sub trad_help
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	$conn->privmsg($reply_to, "`".$Config::command_sign.$ref_params->[0]." [-<prec>] <init_lang> <end_lang> <text>` => will translate <text>, <prec> is used to be more accurate following what's returned (e.g.: name, nom, verb, ...)");
 	$conn->privmsg($reply_to, "There are these languages: français (fr), albanais (sq), allemand (de), anglais (en), arabe (ar), bulgare (bg), catalan (ca), Chinois (zh-CN), coréen (ko), croate (hr), danois (da), espagnol (es), estonien (et), finnois (fi), galicien (gl), grec (el), hébreu (iw), hindi (hi), hongrois (hu), indonésien (id), italien (it), japonais (ja), letton (lv), lituanien (lt), maltais (mt), néerlandais (nl), norvégien (no), polonais (pl), portugais (pt), roumain (ro), russe (ru), serbe (sr), slovaque (sk), slovène (sl), suédois (sv), tagalog (tl), tchèque (cs), thaï (th), turc (tr), ukrainien (uk), vietnamien (vi)");
 } # Fin trad_help
diff --git a/Modules/UrbanDictionary.pm b/Modules/UrbanDictionary.pm
index 62c35588cef162bccf52df681903f4714461388f..0104e9aa590f3501235df8d03edf073efae1bae8 100644
--- a/Modules/UrbanDictionary.pm
+++ b/Modules/UrbanDictionary.pm
@@ -46,12 +46,12 @@ sub ud_main
 
 
 sub send_result
-{   
-    my ($conn, $status, $buffer, $params) = @_;
-    $::logger->debug("UrbanDictionary result received\n");
+{
+	my ($conn, $status, $buffer, $params) = @_;
+	$::logger->debug("UrbanDictionary result received\n");
 
-    if($status)
-    {
+	if($status != -1)
+	{
 		$::logger->debug("Status ok\n");
 		
 		my $msg = $params->{"url"};
diff --git a/Modules/Vote.pm b/Modules/Vote.pm
index 801e2278b7897d6483e79de14f2a69876103ef5f..ed1b937fbb2cd663ea14f225e777c11620fe7c8f 100644
--- a/Modules/Vote.pm
+++ b/Modules/Vote.pm
@@ -31,7 +31,7 @@ our %last_added = ();
 # ###
 #  vote_main
 # Permet de gérer des votes
-# 
+#
 # Usage :
 #  !vote new <question>
 #  !vote del <id>
@@ -42,14 +42,14 @@ our %last_added = ();
 sub vote_main
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# Don't use in query, only on chans
 	unless(substr($reply_to, 0, 1) eq '#')
 	{
 		$::displayer->sendto($reply_to, "Can't operate in query, sorry.");
 		return 1;
 	}
-	
+
 	if(defined($ref_params->[0]) && $ref_params->[0])
 	{
 		if($ref_params->[0] eq 'new')
@@ -73,7 +73,7 @@ sub vote_main
 			return 1 if(vote($conn, $event, $reply_to, $ref_params));
 		}
 	}
-	
+
 	$ref_params->[0] = 'vote';
 	Help::help_main($conn, $event, $reply_to, $ref_params);
 } # Fin vote_main
@@ -86,22 +86,22 @@ sub vote_main
 sub new_vote
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'new'
 	shift @{$ref_params};
-	
+
 	unless(defined($ref_params->[0]) && $ref_params->[0])
 	{
 		$::displayer->sendto($reply_to, "Didn't find your question.");
 		return 0;
 	}
-	
+
 	my $lc_reply_to = lc $reply_to;
 	my $id = get_next_id($lc_reply_to);
 	my (undef, $vote_id) = split / +/, $id;
 	my $question = join(' ', @{$ref_params});
 	my $full_user = (lc $event->{'nick'}).'!'.(lc $event->{'userhost'});
-	
+
 	my %new_vote = (
 		'chan'       => $lc_reply_to,
 		'id'         => $vote_id,
@@ -114,14 +114,14 @@ sub new_vote
 		},
 		'author'     => $full_user
 	);
-	
+
 	$votes{$id} = \%new_vote;
 	$last_added{$lc_reply_to} = $vote_id;
-	
+
 	my $add_date = localtime($votes{$id}->{'added date'});
 	$::displayer->sendto($reply_to, "Vote \x0304[\x0303id #$vote_id\x0304]\x03 added on $add_date");
 	$::logger->info("New vote: '$question', id='$id', added by $full_user");
-	
+
 	return 1;
 } # Fin new_vote
 
@@ -133,16 +133,16 @@ sub new_vote
 sub del_vote
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'del' ou autre
 	shift @{$ref_params};
-	
+
 	unless(defined($ref_params->[0]))
 	{
 		$::displayer->sendto($reply_to, "Didn't find the id.");
 		return 0;
 	}
-	
+
 	my $lc_reply_to = lc $reply_to;
 	my $vote_id = $ref_params->[0];
 	if($ref_params->[0] =~ /^#?(\d+)$/)
@@ -151,13 +151,13 @@ sub del_vote
 	}
 	my $id = $lc_reply_to.' '.$vote_id;
 	my $full_user = (lc $event->{'nick'}).'!'.(lc $event->{'userhost'});
-	
+
 	# On vérifie que c'est bien l'auteur qui demande la suppression du vote
 	if(defined($votes{$id}) && $votes{$id}->{'author'} eq $full_user)
 	{
 		return real_del_vote($id, $lc_reply_to);
 	}
-	
+
 	$::displayer->sendto($reply_to, "Can't find this vote on this chan or you're not authorized.");
 	return 1;
 } # Fin del_vote
@@ -170,16 +170,16 @@ sub del_vote
 sub real_del_vote
 {
 	my ($id, $reply_to) = @_;
-	
+
 	my $question = $votes{$id}->{'question'};
 	my $yes = $votes{$id}->{'results'}->{'yes'};
 	my $no  = $votes{$id}->{'results'}->{'no'};
-	
+
 	delete $votes{$id};
 	$::displayer->sendto($reply_to, "Vote for '$question' deleted");
 	$::displayer->sendto($reply_to, "Final results: yes = \x0303$yes\x03 - no = \x0304$no\x03");
 	$::logger->info("Vote removed: '$question', id='$id'. Results: yes=$yes, no=$no");
-	
+
 	return 1;
 } # Fin real_del_vote
 
@@ -191,15 +191,15 @@ sub real_del_vote
 sub list_votes
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	shift @{$ref_params};
-	
+
 	my $to_check_chan = lc $reply_to;
 	if(defined($ref_params->[0]) && substr($ref_params->[0], 0, 1) eq '#')
 	{
 		$to_check_chan = lc $ref_params->[0];
 	}
-	
+
 	my %current_votes = ();
 	foreach my $id (sort keys %votes)
 	{
@@ -208,17 +208,17 @@ sub list_votes
 			$current_votes{$id} = $votes{$id};
 		}
 	}
-	
+
 	my @curr_votes = sort keys %current_votes;
 	my $msg = "";
-	
+
 	if(@curr_votes)
 	{
 		foreach my $id (@curr_votes)
 		{
 			$msg .= "\x0307{#" . $votes{$id}->{'id'} . "\x03";
 			$msg .= " Added by \x0304" . $votes{$id}->{'author'};
-			$msg .= "on \x0302" . localtime($votes{$id}->{'added date'});
+			$msg .= "\x0302 on " . localtime($votes{$id}->{'added date'});
 			$msg .= "\x0307}\x03 ";
 		}
 	}
@@ -227,7 +227,7 @@ sub list_votes
 		$msg = "There's currently no vote on $to_check_chan";
 	}
 	$::displayer->sendto($reply_to, $msg);
-	
+
 	return 1;
 } # Fin list_votes
 
@@ -239,36 +239,36 @@ sub list_votes
 sub see_vote
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	# On enlève le 'see'
 	shift @{$ref_params};
-	
+
 	unless(defined($ref_params->[0]))
 	{
 		$::displayer->sendto($reply_to, "Didn't find the id.");
 		return 0;
 	}
-	
+
 	my $lc_reply_to = lc $reply_to;
 	my $vote_id = $ref_params->[0];
 	my $id = $lc_reply_to." ".$vote_id;
-	
+
 	# On vérifie que le vote existe
 	if(defined($votes{$id}))
 	{
 		my $msg = "Vote \x0304[\x0303id #$vote_id\x0304]\x03: ";
 		$msg .= $votes{$id}->{'question'};
 		$msg .= " -- \x0302Added on " . localtime($votes{$id}->{'added date'});
-		
+
 		$::displayer->sendto($reply_to, $msg);
-		
+
 		# Public/private?
 # 		if(lc $event->{'nick'} eq $votes{$id}->{'author'})
 		{
 			my $yes = $votes{$id}->{'results'}->{'yes'};
 			my $no  = $votes{$id}->{'results'}->{'no'};
 			$msg = "Current results: yes = \x0303$yes\x03 - no = \x0304$no\x03";
-			
+
 			$::displayer->sendto($reply_to, $msg);
 		}
 	}
@@ -276,7 +276,7 @@ sub see_vote
 	{
 		$::displayer->sendto($reply_to, "Can't find this vote. It has either expired or been deleted.");
 	}
-	
+
 	return 1;
 } # Fin see_vote
 
@@ -288,13 +288,13 @@ sub see_vote
 sub vote
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	my $lc_reply_to = lc $reply_to;
 	my $vote_id = $last_added{$lc_reply_to};
 	my $voter = $event->{'userhost'};
-	
+
 	my $code = real_vote(join(' ', @{$ref_params}), $lc_reply_to, $vote_id, $voter);
-	
+
 	if($code == 0)
 	{
 		$::displayer->sendto($reply_to, "You've already answered to this vote \x0304[\x0303id #$vote_id\x0304]\x03");
@@ -307,7 +307,7 @@ sub vote
 	{
 		$::displayer->sendto($reply_to, "Can't find your answer.");
 	}
-	
+
 	return 1;
 } # Fin vote
 
@@ -319,10 +319,10 @@ sub vote
 sub real_vote
 {
 	my ($params, $chan, $vote_id, $voter) = @_;
-	
+
 	my $id = $chan." ".$vote_id;
 	print Data::Dumper->Dump([$votes{$id}, $params], [qw(vote_struct params)]);
-	
+
 	if($params =~ /^(?:y(?:es)?|oui)$/i)
 	{
 		if(can_vote($id, $voter))
@@ -331,7 +331,7 @@ sub real_vote
 			push @{$votes{$id}->{'voters'}}, $voter;
 			return 1;
 		}
-		
+
 		return 0;
 	}
 	elsif($params =~ /^n(?:o(?:n)?)?$/i)
@@ -342,7 +342,7 @@ sub real_vote
 			push @{$votes{$id}->{'voters'}}, $voter;
 			return 1;
 		}
-		
+
 		return 0;
 	}
 	elsif($params =~ /^#?(\d+)\s+(.+)$/i)
@@ -350,13 +350,13 @@ sub real_vote
 		$vote_id = $1;
 		my $answer = $2;
 		$id = $chan." ".$vote_id;
-		
+
 		if(can_vote($id, $voter))
 		{
 			return real_vote($answer, $chan, $vote_id, $voter);
 		}
 	}
-	
+
 	return -1;
 } # Fin real_vote
 
@@ -368,14 +368,14 @@ sub real_vote
 sub can_vote
 {
 	my ($id, $user) = @_;
-	
+
 	my $lc_user = lc $user;
-	
+
 	if(grep { $_ eq $lc_user } @{$votes{$id}->{'voters'}})
 	{
 		return 0;
 	}
-	
+
 	$::logger->info("$user can vote for $id");
 	return 1;
 }
@@ -388,10 +388,10 @@ sub can_vote
 sub get_next_id
 {
 	my $base = shift;
-	
+
 	my $cpt = 0;
 	$cpt++ while(defined($votes{$base." ".$cpt}));
-	
+
 	return $base." ".$cpt;
 } # Fin get_next_id
 
@@ -403,16 +403,16 @@ sub get_next_id
 sub vote_help
 {
 	my ($conn, $event, $reply_to, $ref_params) = @_;
-	
+
 	$conn->privmsg($reply_to, "`".$Config::command_sign."vote new <question>` => "
-												."suggest a new vote");
+												."suggest a new yes/no vote");
 	$conn->privmsg($reply_to, "`".$Config::command_sign."vote {del|see} <id>` => "
 												."remove or see the vote with id <id>");
 	$conn->privmsg($reply_to, "`".$Config::command_sign."vote list [<#chan>]` => "
 												."list votes on <#chan> or the current one by default");
 	$conn->privmsg($reply_to, "`".$Config::command_sign."vote [<id>] {yes|no}` => "
 												."vote for the last created vote or the one specified by its <id>");
-	
+
 	return 1;
 } # Fin vote_help
 
@@ -425,9 +425,9 @@ sub vote_save
 {
 	my (undef, $folder, $reloading) = @_;
 	my $file_votes = $folder."/vote".$Config::suffixe.".sav";
-	
+
 	store [\%votes, \%last_added], $file_votes;
-	
+
 	return 1;
 } # Fin vote_save
 
@@ -441,13 +441,13 @@ sub vote_load
 	shift; # Pas besoin de la connexion au serveur
 	my $folder = shift;
 	my $file_votes = $folder."/vote".$Config::suffixe.".sav";
-	
+
 	my $file_content = retrieve $file_votes;
 	my ($ref_votes, $ref_last_added) = @{$file_content};
-	
+
 	%votes = %{$ref_votes};
 	%last_added = %{$ref_last_added};
-	
+
 	return 1;
 } # Fin vote_load
 
diff --git a/Net/IRC/EventQueue/Entry.pm b/Net/IRC/EventQueue/Entry.pm
index 94a38025c9e195efc3061053b5a44b6e75c52833..161ec23b870a16be9c05dd0558215a6a40a3fe45 100755
--- a/Net/IRC/EventQueue/Entry.pm
+++ b/Net/IRC/EventQueue/Entry.pm
@@ -1,40 +1,40 @@
 package Net::IRC::EventQueue::Entry;
-                                                                                                                                     
+
 use strict;
-                                                                                                                                     
+
 my $id = 0;
-                                                                                                                                     
+
 sub new {
   my $class = shift;
   my $time = shift;
   my $content = shift;
-                                                                                                                                     
+
   my $self = {
     'time'  => $time,
     'content' => $content,
     'id'    => "$time:" . $id++,
   };
-                                                                                                                                     
+
   bless $self, $class;
   return $self;
 }
-                                                                                                                                     
+
 sub id {
   my $self = shift;
   return $self->{'id'};
 }
-                                                                                                                                     
+
 sub time {
   my $self = shift;
   $self->{'time'} = $_[0] if @_;
   return $self->{'time'};
 }
-                                                                                                                                     
+
 sub content {
   my $self = shift;
   $self->{'content'} = $_[0] if @_;
   return $self->{'content'};
 }
-                                                                                                                                     
+
 1;