diff --git a/Core/Chans.pm b/Core/Chans.pm
index 84c42ae60fdec0c90c17806f1ff6480867d4b52c..cd31c9bd9117fdd0dc5d209d42115cf12949f2e3 100644
--- a/Core/Chans.pm
+++ b/Core/Chans.pm
@@ -21,9 +21,6 @@ our %chans = ();
 #      `---> chan2 --> ...
 
 
-# On veut pouvoir chopper les changements de pseudos
-$ChangeNickController::change_nick->register(\&change_nick);
-
 
 
 # ###
@@ -494,7 +491,10 @@ sub is_on_chan
 # ###
 sub change_nick
 {
-	my ($old_nick, $new_nick) = @_;
+	my (undef, $event) = @_;
+	
+	my $old_nick = $event->{'nick'};
+	my $new_nick = $event->{'args'}[0];
 	
 	return unless($old_nick, $new_nick);
 	
@@ -585,6 +585,12 @@ sub chans_save
 	
 	close CHANS;
 	
+	if($reloading)
+	{
+		# On se désenregistre, sinon on risque d'avoir deux fois le handler d'appelé
+		EventHandler::remove_event("nick", "before", \&change_nick);
+	}
+	
 	return 1;
 } # Fin chans_save
 
@@ -597,7 +603,11 @@ sub chans_load
 {
 	my ($conn, $folder, $reloading) = @_;
 	
-	# Si on est en train de démarrer le bot
+	# On ajoute un event handler sur le changement de pseudo (= l'évènement 'nick')
+	EventHandler::add_event("nick", "before", \&change_nick);
+	
+	
+	# Si on est en train de démarrer le bot, on s'arrête là
 	return 1 if(!defined($reloading) || !$reloading);
 	
 	# Si on est en train de recharger le module
diff --git a/Core/CommandProcess.pm b/Core/CommandProcess.pm
index f7c53b641e3437f609c955a44edb9c9b7b059312..a1714fa7e58fa8d9668d4120b81e114ec58f4744 100644
--- a/Core/CommandProcess.pm
+++ b/Core/CommandProcess.pm
@@ -198,7 +198,7 @@ sub reload_command
 	my $command = undef;
 	my $package = undef;
 	
-	$::logger->debug("(Re)loading $file...") if(defined($::logger));
+	$::logger->debug("(Re)loading $file...");
 	open FILE, "<", $self->{'_modules_dir'}.$file or return 0;
 	my $line = <FILE>;
 	chomp $line;
@@ -223,7 +223,7 @@ sub reload_command
 			@commands = ($command);
 		}
 		
-		$::logger->debug("$file: package=$package; perms=$perm") if(defined($::logger));
+		$::logger->debug("$file: package=$package; perms=$perm");
 # 		$package = defined($package) ? $package : ucfirst substr $file, 0, -3;
 		
 		my $main = "";
diff --git a/Core/EventHandler.pm b/Core/EventHandler.pm
index 47ceb39ce93f83b5091bfd1ab5cd7e04da7995ca..e434c4e771e2781b614d4116e8b39f24529a2f05 100644
--- a/Core/EventHandler.pm
+++ b/Core/EventHandler.pm
@@ -5,30 +5,6 @@ package EventHandler;
 my %changed_events = ();
 
 
-# ###
-#  init_add_event
-# Ajoute un handler (à utiliser au chargement du module)
-# ... en vrai, ça l'enregistre pour l'ajout, utiliser flush_init_events pour que
-# ça l'ajoute vraiment
-# ###
-sub init_add_event
-{
-	return _register_event(@_);
-} # Fin init_add_event
-
-
-# ###
-#  flush_init_events
-# Ajoute les handlers enregistrés par init_add_event
-# ###
-sub flush_init_events
-{
-	foreach my $e (keys %changed_events)
-	{
-		_do_change_event($e);
-	}
-} # Fin flush_init_events
-
 
 # ###
 #  add_event
@@ -61,8 +37,9 @@ sub _register_event
 	unless(defined($changed_events{$event}))
 	{
 		$changed_events{$event} = {
-			'before' => [],
-			'after'  => [],
+			'before'  => [],
+			'after'   => [],
+			'default' => undef
 		};
 	}
 	
@@ -85,6 +62,17 @@ sub _do_change_event
 	
 	# Changement (ou rien du tout si on est déjà passé par là pour cet event)
 	# de la fonction pour cet évènement
+	if(defined($Hook::conn->{_handler}->{$event}))
+	{
+		my $may_default = $Hook::conn->{_handler}->{$event}->[0];
+		if($may_default ne \&dispatch_event)
+		{
+			$changed_events{$event}{'default'} = $may_default;
+			$::logger->debug("Registering default action for event $event");
+		}
+	}
+	
+	$::logger->info("Catching event $event from now on");
 	$Hook::conn->{_handler}->{$event} = [\&dispatch_event, 0];
 	
 	return 1;
@@ -115,6 +103,7 @@ sub remove_event
 		}
 		
 		$changed_events{$event}{lc $when} = \@new_list;
+		$::logger->info("One handler for $event event removed");
 	}
 	else
 	{
@@ -176,17 +165,14 @@ sub dispatch_event
 	# autorisé
 	if(not prevent_default($event))
 	{
-		my $type = $event->{'type'};
-		my $fn = '';
-		
-		no strict 'refs';
-		my $symtab = "Hook::";
-		for my $symbol (keys %$symtab)
+		if(defined($changed_events{$event->{'type'}}{'default'}))
 		{
-			$fn = $symbol if($symbol =~ /^on_$type$/);
+			no strict 'refs';
+			
+			&{$changed_events{$event->{'type'}}{'default'}}($conn, $event);
+			
+			use strict;
 		}
-		&{"Hook::$fn"}($conn, $event) if($fn);
-		use strict;
 	}
 	
 	# Events enregistrés dans la partie 'after'
@@ -217,6 +203,7 @@ sub do_events
 			return;
 		}
 		
+		
 		foreach my $hdls (@{$changed_events{$event->{'type'}}{lc $when}})
 		{
 			# TODO find $hdls way
diff --git a/Core/Hook.pm b/Core/Hook.pm
index fa6091b56f3ea9ff16f11732f61fd682d604b77f..0a6c840d1a941baf0156c12697a401ecb8d1d230 100644
--- a/Core/Hook.pm
+++ b/Core/Hook.pm
@@ -3,7 +3,6 @@ package Hook;
 use strict;
 use warnings;
 
-use Core::ChangeNickController;
 use Core::Chans;
 use Core::CommandProcess;
 use Core::Display;
@@ -25,10 +24,11 @@ our $done = sprintf "[%c[32m Done%c[0m ]\n", 0x1B, 0x1B;
 our $error = sprintf "[%c[31m Error%c[0m ]\n", 0x1B, 0x1B;
 our $stars = sprintf "%c[31m****%c[0m",  0x1B, 0x1B;
 our $handlers_routines = sprintf "%s Installing handler routines...", $stars;
+our $handlers_routines_done = sprintf "%s Handler routines installed...", $stars;
 our $starting = sprintf "%s Starting...", $stars;
 our $connection_auto_channel = sprintf "%s Connection to $Config::channel...", $stars;
 our $identification_server = sprintf "%s Identification...", $stars;
-our $reload_vars = sprintf "%s Reloading variables...", $stars;
+our $reload_func = sprintf "%s Calling load functions...", $stars;
 our $init_saver = sprintf "%s Initializing the variables saver...", $stars;
 our $save_vars = sprintf "%s Saving variables...", $stars;
 our $program_reinit = sprintf "%s Program reinitialisation...", $stars;
@@ -52,9 +52,7 @@ our $fifo = new Fifo($Config::fifo, $conn);
 
 # On initialise les commandes
 # C'est ici qu'on va charger les modules et les commandes
-our $commandtool = new CommandProcess( 
-                                      $Config::modules_dir,
-                                      $conn);
+our $commandtool = new CommandProcess($Config::modules_dir, $conn);
 
 
 
@@ -118,11 +116,12 @@ sub on_connect
 	$conn->{"vars"} = [];
 	
 	# On recharge les variables qu'on avait sauvegardées en s'éteignant la dernière fois
-	$::logger->info($reload_vars);
+	$::logger->info($reload_func);
 	$VarLoader::loader->load($conn);
 	
 	$::logger->info($init_saver);
 	$Save::saver->init($conn);
+	
 	$::logger->info(sprintf "\t\t%c[4mYou can talk to me now%c[0m\n", 0x1B,0x1B);
 } # Fin on_connect
 
@@ -238,7 +237,7 @@ sub on_private
 	my ($conn, $event) = @_;
 	
 	$event->{'to'}[0] = $event->{'nick'};
-	if($Config::debug && $event->{"nick"} ne $Config::owner)
+	if($Config::debug && $event->{'nick'} ne $Config::owner)
 	{
 		$conn->privmsg($Config::owner, "There's ".$event->{'nick'}." who is telling me: ".$event->{'args'}[0]);
 	}
@@ -280,7 +279,7 @@ sub on_nick
 	my $old_nick = $event->{'nick'};
 	my $new_nick = $event->{'args'}[0];
 	
-	$ChangeNickController::change_nick->change($old_nick, $new_nick);
+	$::logger->debug("$old_nick -> $new_nick");
 } # Fin on_nick
 
 # Pas de nick
diff --git a/Core/Logging.pm b/Core/Logging.pm
index 455a65c428812de984839fcd234b984f9d1aeac3..02e15b5b144b30447d32058bc2a0c4b1cc7bf1e1 100644
--- a/Core/Logging.pm
+++ b/Core/Logging.pm
@@ -513,13 +513,14 @@ sub end_pending
 		}
 		else
 		{
-			$done = sprintf " Error \n";
+			$done = sprintf " Error ";
 		}
 		
 		$done .= "☒" if($self->utf8);
 	}
 	
-	$done .= "\e[0m\n" if($self->colored);
+	$done .= "\e[0m" if($self->colored);
+	$done .= "\n";
 	
 	
 	# À partir d'ici, $done peut vouloir dire que c'est bon, ou pas
diff --git a/Modules/BugReport.pm b/Modules/BugReport.pm
index 4d90b82fc69ad292dd3d7b9f607c81aafd249693..139531d78430131c7fac1fea2da5085e572f4606 100644
--- a/Modules/BugReport.pm
+++ b/Modules/BugReport.pm
@@ -4,9 +4,6 @@ use strict;
 use warnings;
 
 
-# Ajout d'un handler pour pouvoir répondre aux demandes publiques
-EventHandler::add_event("public", "after", \&bugreport_on_public);
-
 
 # On matche là-dessus
 our %reports = (
@@ -98,6 +95,9 @@ sub bugreport_save
 # ###
 sub bugreport_load
 {
+	# Ajout d'un handler pour pouvoir répondre aux demandes publiques
+	EventHandler::add_event("public", "after", \&bugreport_on_public);
+	
 	return 1;
 } # Fin bugreport_load
 
diff --git a/Modules/Ignore.pm b/Modules/Ignore.pm
index f786f631071b072c3be46ab90ee98967b563d925..fcbdda5c9afeed928b0a49ed17e1e40a2ba9be5b 100644
--- a/Modules/Ignore.pm
+++ b/Modules/Ignore.pm
@@ -216,7 +216,7 @@ sub ignore_load
 	%ignore__list = %{$stateref};
 	
 	# Ajout d'un handler pour ignorer les gens lorsqu'ils disent quelque chose
-	EventHandler::init_add_event("public", "before", \&ignore_on_public);
+	EventHandler::add_event("public", "before", \&ignore_on_public);
 	
 	return 1;
 } # Fin ignore_load
diff --git a/Modules/Invite.pm b/Modules/Invite.pm
index 9d625d1616841c45fddec708cf7247c0f15135c1..490b7d7c8424d45d127ad35b6a68b24f92917364 100644
--- a/Modules/Invite.pm
+++ b/Modules/Invite.pm
@@ -17,9 +17,6 @@ my %auto_invite = ();
 #  $chan -> 1|0
 
 
-EventHandler::init_add_event("join", "before", \&on_join_on_chan);
-
-
 
 # ###
 #  invite_main
@@ -562,6 +559,9 @@ sub invite_load
 	
 	close INVITE_LISTS;
 	
+	
+	EventHandler::add_event("join", "before", \&on_join_on_chan);
+	
 	return 1;
 } # Fin invite_load
 
diff --git a/Modules/Join.pm b/Modules/Join.pm
index d5f0568644f627b73ef8f7fee8e2d41aacdcfe07..6dbbdf2b648d7bfe38d59df9f510b6d408fa6ff2 100644
--- a/Modules/Join.pm
+++ b/Modules/Join.pm
@@ -9,13 +9,6 @@ my %joining_chans = ();
 #              `---> ...
 
 
-# On ajoute les handlers
-EventHandler::add_event("namreply", "before", \&namreply_handle);
-EventHandler::add_event("toomanychannels", "before", \&toomanychannels_handle);
-EventHandler::add_event("inviteonlychan", "before", \&inviteonlychan_handle);
-EventHandler::add_event("channelisfull", "before", \&channelisfull_handle);
-EventHandler::add_event("bannedfromchannel", "before", \&bannedfromchannel_handle);
-
 
 
 # ###
@@ -178,7 +171,7 @@ sub bannedfromchannel_handle
 # ###
 sub join_save
 {
-	my ($conn, $folder, $reloading) = @_;
+	my (undef, undef, $reloading) = @_;
 	
 	
 	if($reloading)
@@ -201,6 +194,14 @@ sub join_save
 # ###
 sub join_load
 {
+	# On ajoute les handlers
+	EventHandler::add_event("namreply", "before", \&namreply_handle);
+	EventHandler::add_event("toomanychannels", "before", \&toomanychannels_handle);
+	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
 
diff --git a/Modules/Postit.pm b/Modules/Postit.pm
index e03b3342853eb43290a3a9c9db5e0ee528b13408..cbc946cfa8f88db686efc5056ba37bcfbf8b6508 100644
--- a/Modules/Postit.pm
+++ b/Modules/Postit.pm
@@ -13,8 +13,6 @@ use warnings;
 # ...
 our %postits = ();
 
-# On veut pouvoir chopper les changements de pseudos
-$ChangeNickController::change_nick->register(\&change_owner);
 
 
 # Hash de correspondance des mois
@@ -249,7 +247,11 @@ sub write_postit
 # ###
 sub change_owner
 {
-	my ($old_nick, $new_nick) = @_;
+	my (undef, $event) = @_;
+	
+	my $old_nick = $event->{'nick'};
+	my $new_nick = $event->{'args'}[0];
+	
 	
 	my $ref_postits = \%postits;
 	
@@ -305,8 +307,7 @@ sub postit_help
 # ###
 sub postit_save
 {
-	shift;
-	my $folder = shift;
+	my (undef, $folder, $reloading) = @_;
 	my $file_postit = "/postits".$Config::suffixe.".sav";
 	
 	open POSTITS, ">", $folder.$file_postit or die "Unable to create $folder$file_postit";
@@ -324,6 +325,13 @@ sub postit_save
 	
 	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
 
@@ -369,6 +377,11 @@ sub postit_load
 	
 	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/bot.pl b/bot.pl
index 774c7caa1a07d1009614cf8cfad3c492cc1dc6a0..5c7d1a60906b610cc72ee6d1c59a31ccdbec33f8 100755
--- a/bot.pl
+++ b/bot.pl
@@ -20,6 +20,7 @@ BEGIN {
 	use Core::Getpass;
 	use Core::Logging;
 	
+	
 	# Ça c'est pour utiliser nos librairies avant celles installées sur le système
 	# Ça sert notamment pour Net::IRC, vu que je l'ai patchée (http://coltel.iiens.net/patch_Net_IRC)
 	my $incpath = pop @INC;
@@ -48,6 +49,13 @@ BEGIN {
 		Command_line_args::process_args(\@ARGV);
 	}
 	
+	# On initialise le module en charge des logs
+	our $logger = new Logging(
+							$Config::debug > 1 ? "STDOUT": $Config::logfile,
+							1
+							);
+	$logger->utf8(1);
+	
 	if($Config::want_nick_register)
 	{
 		# Récupérons notre mdp Nickserv de celui qui lance le bignouf
@@ -63,13 +71,6 @@ use Core::Refresh;
 use Net::Domain qw(hostfqdn);
 
 
-# On initialise le module en charge des logs
-our $logger = new Logging(
-						  $Config::debug > 1 ? "STDOUT": $Config::logfile,
-						  1
-						 );
-$logger->utf8(1);
-
 
 # On initialise le module pour l'affichage ici
 our $displayer = new Display($Hook::conn);
@@ -80,7 +81,7 @@ our $refresher = new Refresh();
 
 
 # On installe les fonctions de Hook (un grand homme celui-là...) :
-$logger->pending_info($Hook::handlers_routines);
+$logger->info($Hook::handlers_routines);
 $Hook::conn->add_handler('376', \&Hook::on_connect);					# Fin du MOTD => on est connecté
 $Hook::conn->add_handler('public', \&Hook::on_public);					# Sur un chan => quelqu'un parle
 $Hook::conn->add_handler('msg', \&Hook::on_private);					# En privé => quelqu'un parle
@@ -107,9 +108,7 @@ $Hook::conn->add_handler('433', \&Hook::on_nicknameinuse);				# Le nick est en c
 $Hook::conn->add_handler('471', \&Hook::on_channelisfull);				# Trop de monde sur le chan
 $Hook::conn->add_handler('473', \&Hook::on_inviteonlychan);				# Chan en mode invite only
 $Hook::conn->add_handler('474', \&Hook::on_bannedfromchannel);			# On a été banni du chan
-# On flush les handlers pour les évènements enregistrés par les modules
-EventHandler::flush_init_events;
-$logger->end_pending(1, $logger->INFO);
+$logger->info($Hook::handlers_routines_done);