diff --git a/Modules/Remind.pm b/Modules/Remind.pm
index a134631c7ba470e65fed4a19c8adaf316a52225c..0c751f321a1cd9841420b8ff9f4483999675af13 100644
--- a/Modules/Remind.pm
+++ b/Modules/Remind.pm
@@ -154,19 +154,30 @@ sub parse_string
 		}
 	);
 	
+	my $re_during = '(?: during (?<tps_during>\d+)?\s*(?<during>\w+))?';
+	my $re_every = '(?:every (?<tps_period>\d+)?\s*(?<period>[^ ]+)' . $re_during . ',? ?)?';
 	
-	if($string =~ /^(?:every (\d+)?\s*([^ ]+)(?: during (\d+)?\s*(\w+))?,? ?)?(in (\d+)\s*[^ ]+|([^ ]+ )?at (\d{1,2})[h'](\d{2})?)?(?:\s*:\s*)?\s+(.*)/i)
+	my $re_in = 'in (?:(?<in_hour>\d{1,2})h(?<in_mins>\d\d)|(?<time_period>\d+)\s*(?<in_period>\w+))';
+	my $re_at = '(?<day>[^ ]+ )?at (?<hour>\d{1,2})[h\'](?<minutes>\d{2})?';
+	my $re_in_at = '(?<in_or_at>' . $re_in . '|' . $re_at . ')?';
+	
+	my $re_colon = '(?:\s*:\s*)?';
+	
+	if($string =~ /^$re_every$re_in_at$re_colon\s+(?<msg>.*)/i)
 	{
-		my $tps_period = $1;
-		my $every = $2;
-		my $tps_during = $3;
-		my $period_during = $4;
-		my $in_or_at = $5;
-		my $time_period = $6;
-		my $day = $7;
-		my $hour = $8;
-		my $minutes = $9;
-		my $msg = $10;
+		my $tps_period = $+{'tps_period'};
+		my $every = $+{'period'};
+		my $tps_during = $+{'tps_during'};
+		my $period_during = $+{'during'};
+		my $in_or_at = $+{'in_or_at'};
+		my $time_period = $+{'time_period'};
+		my $in_period = $+{'in_period'};
+		my $in_hour = $+{'in_hour'};
+		my $in_mins = $+{'in_mins'};
+		my $day = $+{'day'};
+		my $hour = $+{'hour'};
+		my $minutes = $+{'minutes'};
+		my $msg = $+{'msg'};
 		
 		# Première gestion des erreurs
 		return "You have to define a 'every <period>', a 'in <some time>' or a 'at <hour>h'."
@@ -221,14 +232,25 @@ sub parse_string
 		# Gestion du "in" ou du "at"
 		if(defined($in_or_at) && $in_or_at =~ /^in/i)
 		{
-			return "You have to specify a time number." if(!defined $time_period);
-			
-			$in_or_at =~ s/^in (?:\d+ ?)?//;
-			$sched_infos{"in or at"}{"in"} = "$time_period $in_or_at";
-			
-			return "Period not recognized: '$in_or_at'." if(!is_period($in_or_at));
-			
-			$sched_infos{"sleep time"} = $time_period * &period_to_int($in_or_at);
+			if(defined($time_period))
+			{
+				$sched_infos{"in or at"}{"in"} = "$time_period $in_period";
+				
+				return "Period not recognized: '$in_period'." unless is_period($in_period);
+				
+				$sched_infos{"sleep time"} = $time_period * &period_to_int($in_period);
+			}
+			elsif(defined($in_hour))
+			{
+				$sched_infos{"in or at"}{"in"} = "${in_hour}h${in_mins}";
+				
+				$sched_infos{"sleep time"}  = $in_hour * &period_to_int("hour");
+				$sched_infos{"sleep time"} += $in_mins * &period_to_int("min");
+			}
+			else
+			{
+				return "You have to specify a time number.";
+			}
 		}
 		elsif(defined($in_or_at))
 		{