diff --git a/lib/App/FrameUtils.pm b/lib/App/FrameUtils.pm
index ab99e8d04fa04d967295783b7eb6ab6fdfe3f497..3915dde4668b2a8b10a7e4688977413efc1e8cf7 100644
--- a/lib/App/FrameUtils.pm
+++ b/lib/App/FrameUtils.pm
@@ -2,7 +2,7 @@ package FrameUtils;
 
 use strict;
 use warnings;
-use Data::Dumper;
+use Data::Printer;
 
 BEGIN
 {
@@ -10,35 +10,33 @@ BEGIN
 }
 
 use App::Utils;
+use App::MasterUtils;
 
 sub get_syubetsu
 {
     my %frame = %{ $_[0] };
-    my $index = $_[1];
+    my $rosen_id = $_[1];
+    my $index = $_[2];
 
-    if ($index >= scalar @{ $frame{'syubetsu'} }) { die "Index error"; }
-    return %{ @{ $frame{'syubetsu'} }[$index] }{'name'};
-}
-
-sub get_ekimei
-{
-    my %frame = %{ $_[0] };
-    my $eki = $_[1];
-
-    if ($eki >= $frame{'eki_num'}) { die "Index error" };
-    return @{ $frame{'eki'} }[$eki];
+    my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
+    my @syubetsus = @{ $rosen->{'syubetsu'} };
+    if ($index >= scalar @syubetsus) { die "Index error"; }
+    return %{ $syubetsus[$index] }{'name'};
 }
 
 sub get_destination
 {
     my %frame = %{ $_[0] };
-    my @jikoku = @{ $_[1] };
-    my $offset = $_[2];
-    my $is_down = $_[3];
+    my $rosen_id = $_[1];
+    my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
+    my @jikoku = @{ $_[2] };
+    my $offset = $_[3];
+    my $is_down = $_[4];
 
-    return get_ekimei \%frame, $is_down
-	? scalar $offset + @jikoku - 1
-	: $frame{'eki_num'} - $offset - @jikoku;
+    return (MasterUtils::sta_from_index \%frame, $rosen_id, $is_down
+	    ? scalar $offset + @jikoku - 1
+	    : $rosen->{'eki_num'} - $offset - @jikoku)
+	->{'ekimei'};
 }
 
 sub hassya_hyou
@@ -46,17 +44,20 @@ sub hassya_hyou
     my %frame = %{ $_[0] };
     my $eki = $_[1];
 
-    if ($eki >= $frame{'eki_num'}) { die "Index error" };
-    print "Timetable for station @{ $frame{'eki'} }[$eki]\n";
+    my @rosens = MasterUtils::get_routes \%frame, $eki;
+
+    my %sta_info = %{ MasterUtils::sta_from_id \%frame, $eki };
 
     sub process_ressya_list
     {
-	my @ressyas = @{ $_[0] };
-	my $is_down = $_[2];
-	my $target_absolute = $_[1];
+	my $rosen_id = $_[0];
+	my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
+	my @ressyas = @{ $_[1] };
+	my $is_down = $_[3];
+	my $target_absolute = MasterUtils::get_eki_position \%frame, $rosen_id, $_[2];
 	my $target_relative = $is_down
 	    ? $target_absolute
-	    : $frame{'eki_num'} - $target_absolute - 1;
+	    : $rosen->{'eki_num'} - $target_absolute - 1;
 	
 	foreach my $ressya (@ressyas)
 	{
@@ -68,13 +69,16 @@ sub hassya_hyou
 	    
 	    my %ts = %{ $jikoku[0] };
 	    my $time = $ts{'hatsu'};
+	    # Timestamp has no dep time (only arrival time for ex)
 	    if (!defined $time) { next; }
+	    # This service does not stop here
+	    if (%ts{'mode'} != 1) { next; }
 	    # Format: time (tab) destination (tab) type (with eventual name)
-	    my $syubetsu = get_syubetsu \%frame, $data{'syubetsu'};
-	    print Utils::format_time $time
+	    my $syubetsu = get_syubetsu \%frame, $rosen_id, $data{'syubetsu'};
+	    print ((Utils::format_time $time)
 		   . "\tfor "
-		   . (get_destination \%frame, \@jikoku, $target_relative, $is_down)
-		   . "\t$syubetsu"
+		   . (get_destination \%frame, $rosen_id, \@jikoku, $target_relative, $is_down)
+		   . "\t$syubetsu")
 		;
 	    if (defined $data{'meisyo'})
 	    {
@@ -85,10 +89,19 @@ sub hassya_hyou
 	print "\n";
     }
 
-    print "=================== Down ===================\n";
-    process_ressya_list \@{ $frame{'dia'}{'kudari'} }, $eki, 1;
-    print "==================== Up ====================\n";
-    process_ressya_list \@{ $frame{'dia'}{'nobori'} }, $eki, 0;
+    foreach my $rosen_id (@rosens)
+    {
+	my $rosenmei = MasterUtils::get_rosenmei \%frame, $rosen_id;
+	print "$rosenmei timetable for station $sta_info{'ekimei'}\n";
+
+	my $dia = $frame{'rosen'}->{$rosen_id}->{'dia'};
+
+	print "=================== Down ===================\n";
+	process_ressya_list $rosen_id, $dia->{'kudari'}, $eki, 1;
+	print "==================== Up ====================\n";
+	process_ressya_list $rosen_id, $dia->{'nobori'}, $eki, 0;
+
+    }
 }
 
 1;
diff --git a/lib/App/MasterUtils.pm b/lib/App/MasterUtils.pm
index 9742aca608ed32b86a2ce6b03de0535b55a26710..45b93df009f5b907134e26a0c88b7a0cf98edd5f 100644
--- a/lib/App/MasterUtils.pm
+++ b/lib/App/MasterUtils.pm
@@ -9,6 +9,8 @@ BEGIN
 }
 
 use App::Log;
+
+use List::Util qw(first);
 use Data::Printer;
 
 sub sta_from_id
@@ -24,6 +26,51 @@ sub sta_from_id
     Log::e "Station id $id not found.";
 }
 
+sub get_ekimei
+{
+    return (sta_from_id $_[0], $_[1])->{'ekimei'};
+}
+
+sub get_rosen_frame
+{
+    my %master = %{ $_[0] };
+    my $rosen_id = $_[1];
+    if (!defined $rosen_id) { Log::e 'Please specify a route id.'; }
+    foreach my $rosen (keys %{ $master{'rosen'} })
+    {
+	if ($rosen eq $rosen_id) { return $master{'rosen'}->{$rosen}; }
+    }
+    Log::e "Route id $rosen_id not found.";
+}
+
+sub get_rosenmei
+{
+    return (get_rosen_frame $_[0], $_[1])->{'rosenmei'};
+}
+
+sub get_eki_position
+{
+    my %master = %{ $_[0] };
+    my $rosen_id = $_[1];
+    my $id = $_[2];
+    my $rosen = get_rosen_frame \%master, $rosen_id;
+    my @ekis = @{ $rosen->{'eki'} };
+
+    return first { $ekis[$_] eq $id } 0..$#ekis;
+}
+
+sub sta_from_index
+{
+    my %master = %{ $_[0] };
+    my $rosen_id = $_[1];
+    my $index = $_[2];
+    if (!defined $rosen_id) { Log::e 'Please specify a route id.'; }
+    if (!defined $index) { Log::e 'Please specify a station index.'; }
+
+    my $rosen = get_rosen_frame \%master, $rosen_id;
+    return sta_from_id \%master, @{ $rosen->{'eki'} }[$index];
+}
+
 sub get_routes
 {
     my %master = %{ $_[0] };
diff --git a/src/oud2_parser.pl b/src/oud2_parser.pl
index cb39b81b98577d3f1af8f39bff6576c0a9537b25..47eb083adb5572c30af2f994256a4c6c92d3fe73 100644
--- a/src/oud2_parser.pl
+++ b/src/oud2_parser.pl
@@ -326,4 +326,5 @@ foreach my $frame (values %{ $master{'rosen'} })
     $frame->{'eki'} = \@new_ekis;
 }
 
-MasterUtils::get_routes \%master, 'konpoku_10';
+# MasterUtils::get_routes \%master, 'konpoku_9';
+FrameUtils::hassya_hyou \%master, 'konpoku_9';