diff --git a/lib/SLUB/LZA/Rosetta/TA.pm b/lib/SLUB/LZA/Rosetta/TA.pm
index 5e6b01838403f7f7caa3e0e2fd41050e0295352d..7227ccbbb4737f9880a627901471f5e9cbf26860 100644
--- a/lib/SLUB/LZA/Rosetta/TA.pm
+++ b/lib/SLUB/LZA/Rosetta/TA.pm
@@ -9,6 +9,8 @@ use Carp qw( croak );
 use feature qw(say);
 use Regexp::Optimizer;
 use IO::Zlib;
+use Text::CSV_PP;
+
 # ABSTRACT: main module for ta-tool
 
 our %config;
@@ -64,6 +66,87 @@ sub sru_search {
     }
 }
 
+{
+    my $bred = "\e[1;31m";
+    my $red = "\e[31m";
+    my $green = "\e[32m";
+    my $blue = "\e[34m";
+    my $bblue = "\e[1;34m";
+    my $gray = "\e[90m]";
+    my $reversed = "\e[7m";
+    my $reset = "\e[0m";
+    my $back_yellow = "\e[103m";
+    my $back_cyan = "\e[45m";
+    my $back_green = "\e[43m";
+    my $datetime_rx=qr/\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/;
+    sub colorize {
+        my $line = shift;
+        my $opt = shift;
+        my $match_rx = shift;
+        # patterns in common interest:
+        $line =~ s/^($datetime_rx)/${blue}$1${reset}/;
+        if ($opt->{match} ne ".*") {
+            $line =~ s/( (DEBUG|INFO|WARN|ERROR)  .*?)($match_rx)/$1${reversed}$3${reset}/; # order important!
+        }
+        $line =~ s/ (DEBUG) / ${gray}$1${reset} /
+            || $line =~ s/ (INFO) / ${green}$1${reset} /
+            || $line =~ s/ (WARN) / ${red}$1${reset} /
+            || $line =~ s/ (ERROR) / ${bred}$1${reset} /;
+        $line =~ s/(SIP ?\d+)/${back_yellow}$1${reset}/g;
+        $line =~ s/(IE ?\d+)/${back_yellow}$1${reset}/g;
+        $line =~ s/(dc.identifier)/${back_cyan}$1${reset}/g;
+        return $line;
+    }
+    sub colorize_trace {
+        my $line = shift;
+        my $deposit_dir = shift;
+        my $deposit_id = shift;
+        my $sip_id = shift;
+        my $ie_pid = shift;
+        my $rep_id = shift;
+        # patterns in common interest:
+        $line =~ s/^($datetime_rx)/${blue}$1${reset}/;
+        $line =~ s/ (DEBUG) / ${gray}$1${reset} /
+            || $line =~ s/ (INFO) / ${green}$1${reset} /
+            || $line =~ s/ (WARN) / ${red}$1${reset} /
+            || $line =~ s/ (ERROR) / ${bred}$1${reset} /;
+        if (defined $deposit_dir) {$line =~ s/($deposit_dir)/${back_green}$1${reset}/g;}
+        if (defined $deposit_id ) {$line =~ s/(dep_|Deposit Activity ID=|depositId=)($deposit_id)/$1${back_green}$2${reset}/g;}
+        if (defined $sip_id     ) {$line =~ s/((sipId|SIP|PID|pid)[ =]?)($sip_id)/$1${back_green}$2${reset}/g;}
+        if (defined $ie_pid     ) {$line =~ s/(IE ?)($ie_pid)/$1${back_green}$2${reset}/g;}
+        if (defined $rep_id     ) {$line =~ s/(Representation )($rep_id)/$1${back_green}$2${reset}/g;}
+        return $line;
+    }
+}
+
+{
+    my $csv;
+    sub csv {
+        my $line = shift;
+        my $opt = shift;
+        my $match_rx = shift;
+        my $ret;
+        if (!defined $csv) {
+            $csv = Text::CSV_PP->new(
+                {
+                    sep_char => ";",
+
+                }
+            );
+            $ret=join(";", qw(date time level where msg))."\n";
+        }
+        my $date_rx=qr/\d\d\d\d-\d\d-\d\d/;
+        my $time_rx=qr/\d\d:\d\d:\d\d,\d\d\d/;
+        my $level_rx=qr/DEBUG|INFO|WARN|ERROR/;
+        my $where_rx=qr/\[.*?\]/;
+        my $msg_rx=qr/.*$/;
+        $line =~ m/^($date_rx) ($time_rx) ($level_rx)  ($where_rx) ($msg_rx)/;
+        $csv->combine($1, $2, $3, $4, $5);
+        $ret.= $csv->string;
+    }
+}
+
+
 sub helper_scan_log {
     my $directory = shift;
     my $fh_processing = shift;
@@ -86,6 +169,8 @@ sub helper_scan_log {
 
 sub trace_log {
     my $with_trace=shift;
+    my $with_color=shift;
+    my $output_filter=shift;
     my $directory = path($config{logdir});
     my $deposit_id;
     my $deposit_dir;
@@ -101,10 +186,23 @@ sub trace_log {
     # 3. ... SIP 13156, Deposit Activity ID=17589Properties
 
     my $sip_rx = qr/(SIP |sipId=)/;
-    my $pre_rx = qr/\d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO  .*/;
-    my $line_rx1= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(originalDirName=|depositId=|$sip_rx)$searchid});
-    my $line_rx2= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(SIP |Deposit Activity ID=)$searchid});
-    my $line_rx3= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: .*$searchid});
+    my $date_rx = qr/\d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/;
+    my $pre_rx = qr/$date_rx INFO  .*/;
+    my $line_rx1 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(originalDirName=|depositId=|$sip_rx)$searchid});
+    my $line_rx2 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(SIP |Deposit Activity ID=)$searchid});
+    my $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: .*$searchid});
+    my $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*((Representation $searchid IE \d+)|(Representation \d+ IE $searchid)) Copy ID: \d+});
+    if ($with_trace =~ m/^SIP/) { # search specific sip
+        $line_rx1 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*($sip_rx)$searchid});
+        $line_rx2 = $line_rx1;
+    } elsif ($with_trace =~ m/^IE/) { # search specific IE
+        $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: REP\d+ \(IE$searchid\)});
+        $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Representation \d+ IE $searchid Copy ID: \d+});
+    } elsif ($with_trace =~ m/^REP/) {
+        $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: REP$searchid \(IE\d+\)});
+        $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Representation $searchid IE \d+ Copy ID: \d+});
+    }
+
 #    my $search_rxo = Regexp::Optimizer->new->optimize(qr/^$date_rx [^ ]* $level_rx  (.*?)$match_rx(.*?)$/);
     my $fh_processing_stage1 = sub {
         my $fh = shift;
@@ -117,25 +215,58 @@ sub trace_log {
             if (! m/$searchid/) {next;}
             chomp;
             if ( m/$line_rx1/ ) {
-                if (!defined $deposit_dir and m/originalDirName=([^,]*),/) { $deposit_dir = $1; }
                 if (!defined $sip_id      and m/$sip_rx(\d{6}),/) { $sip_id = "SIP" . $2; }
+                if (!defined $deposit_dir and m/originalDirName=([^,]*),/) { $deposit_dir = $1; }
                 if (!defined $deposit_id  and m/depositId=(\d{6}),/) { $deposit_id = $1;}
             } elsif (m/$line_rx2/) {
-                if (!defined $deposit_id and m/Deposit Activity ID=(\d{6})/) { $deposit_id = $1;}
                 if (!defined $sip_id and m/SIP (\d{6})/) { $sip_id = $1;}
+                if (!defined $deposit_id and m/Deposit Activity ID=(\d{6})/) { $deposit_id = $1;}
             } elsif (m/$line_rx3/) {
-                if (!defined $rep_id and m/Loaded \d+ files for: (REP\d+)/) { $rep_id = $1;}
                 if (!defined $ie_pid and m/Loaded \d+ files for: REP\d+ \((IE\d+)/) { $ie_pid = $1;}
+                if (!defined $rep_id and m/Loaded \d+ files for: (REP\d+)/) { $rep_id = $1;}
+            } elsif (m/$line_rx4/) {
+                my $rx = qr/Representation (\d{6}) IE (\d{6})/;
+                if (!defined $ie_pid and m/$rx/) { $ie_pid = $2;}
+                if (!defined $rep_id and m/$rx/) { $rep_id = $1;}
             }
         }
         return 1;
     };
     helper_scan_log($directory, $fh_processing_stage1);
+    no warnings;
     my $match= "found: DIR=$deposit_dir, DEPOSITID=$deposit_id, SIPID=$sip_id, IEPID=$ie_pid, REPID=$rep_id";
+    use warnings;
     say "$match";
     say "-"x(length($match));
     # now call scan_log and use own colorizer
+    if ($with_color) {
+        $output_filter = sub {colorize_trace($_[0], $deposit_dir, $deposit_id, $sip_id, $ie_pid, $rep_id)};
+    }
     my $fh_processing_stage2 = sub {
+        my $fh = shift;
+        no warnings;
+        my $nextline_rx1= Regexp::Optimizer->new->optimize(qr{originalDirName=$deposit_dir|(depositID|Deposit Activity ID)[= ]$deposit_id|(sipId|SIP[= ]?)$sip_id});
+        my $nextline_rx2=Regexp::Optimizer->new->optimize(qr{IE[ ]?$ie_pid|REP[ ]?$rep_id});
+        use warnings;
+        while(<$fh>) {
+            if (
+                (
+                    defined $deposit_dir
+                and defined $deposit_id
+                and defined $sip_id
+                and !m/$nextline_rx1/
+                ) or (
+                    defined $ie_pid
+                and defined $rep_id
+                and !m/$nextline_rx2/
+                )
+            ) {
+                next;
+            }
+            chomp;
+            my $line = $output_filter->( $_ );
+            say $line;
+        }
     };
     helper_scan_log($directory, $fh_processing_stage2);
 }
@@ -155,11 +286,11 @@ sub scan_log {
     my $fh_processing = sub {
         my $fh = shift;
         while(<$fh>) {
-            chomp;
             if (! m/$search_rxo/) {
                 #print "no match for '$_'";
                 next;
             }
+            chomp;
             my $line = $output_filter->( $_ );
             say $line;
         }
diff --git a/lib/SLUB/LZA/Rosetta/TA/Command/log.pm b/lib/SLUB/LZA/Rosetta/TA/Command/log.pm
index de41f940d0f7b206c042ae789abf9970df67ab03..1b19cb12fadea150b41d624629285cf58b83fa8e 100644
--- a/lib/SLUB/LZA/Rosetta/TA/Command/log.pm
+++ b/lib/SLUB/LZA/Rosetta/TA/Command/log.pm
@@ -5,7 +5,6 @@ use feature qw(say);
 use Regexp::Optimizer;
 use DateTime;
 use DateTime::Format::DateParse;
-use Text::CSV_PP;
 
 use SLUB::LZA::Rosetta::TA -command;
 
@@ -100,64 +99,6 @@ sub create_regex_from_to {
     my $rxo = Regexp::Optimizer->new->optimize(qr/$date_rx_string/);
     return $rxo;
 }
-{
-    my $bred = "\e[1;31m";
-    my $red = "\e[31m";
-    my $green = "\e[32m";
-    my $blue = "\e[34m";
-    my $bblue = "\e[1;34m";
-    my $gray = "\e[90m]";
-    my $reversed = "\e[7m";
-    my $reset = "\e[0m";
-    my $back_yellow = "\e[103m";
-    my $back_cyan = "\e[45m";
-    my $datetime_rx=qr/\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/;
-    sub colorize {
-        my $line = shift;
-        my $opt = shift;
-        my $match_rx = shift;
-        # patterns in common interest:
-        $line =~ s/^($datetime_rx)/${blue}$1${reset}/;
-        if ($opt->{match} ne ".*") {
-            $line =~ s/( (DEBUG|INFO|WARN|ERROR)  .*?)($match_rx)/$1${reversed}$3${reset}/; # order important!
-        }
-        $line =~ s/ (DEBUG) / ${gray}$1${reset} /
-            || $line =~ s/ (INFO) / ${green}$1${reset} /
-            || $line =~ s/ (WARN) / ${red}$1${reset} /
-            || $line =~ s/ (ERROR) / ${bred}$1${reset} /;
-        $line =~ s/(SIP ?\d+)/${back_yellow}$1${reset}/g;
-        $line =~ s/(IE ?\d+)/${back_yellow}$1${reset}/g;
-        $line =~ s/(dc.identifier)/${back_cyan}$1${reset}/g;
-        return $line;
-    }
-}
-
-{
-    my $csv;
-    sub csv {
-        my $line = shift;
-        my $opt = shift;
-        my $match_rx = shift;
-        my $ret;
-        if (!defined $csv) {
-            $csv = Text::CSV_PP->new(
-                {
-                    sep_char => ";",
-
-                }
-            );
-            $ret=join(";", qw(date time level where msg))."\n";
-        }
-        my $date_rx=qr/\d\d\d\d-\d\d-\d\d/;
-        my $time_rx=qr/\d\d:\d\d:\d\d,\d\d\d/;
-        my $level_rx=qr/DEBUG|INFO|WARN|ERROR/;
-        my $where_rx=qr/\[.*?\]/;
-        my $msg_rx=qr/.*$/;
-        $line =~ m/^($date_rx) ($time_rx) ($level_rx)  ($where_rx) ($msg_rx)/;
-        $csv->combine($1, $2, $3, $4, $5);
-        $ret.= $csv->string;
-    }
-}
 
 sub execute {
     my ($self, $opt, $args) = @_;
@@ -186,9 +127,14 @@ sub execute {
     my $with_trace;
     if (defined $opt->trace_sip) {
         $with_trace = $opt->trace_sip;
-        SLUB::LZA::Rosetta::TA::trace_log($with_trace);
+        if (defined $opt->colorize) {
+            $output_filter = sub { colorize($_[0], $opt, $match_rx); };
+        } else {
+            $output_filter=sub { $_[0]; };
+        }
+        SLUB::LZA::Rosetta::TA::trace_log($with_trace, $opt->colorize, $output_filter);
     } else {
-        SLUB::LZA::Rosetta::TA::scan_log($date_rx, $level_rx, $match_rx, $output_filter, $with_trace);
+        SLUB::LZA::Rosetta::TA::scan_log($date_rx, $level_rx, $match_rx, $output_filter);
     }
 }