diff --git a/Kernel/Modules/CustomerTicketZoom.pm b/Kernel/Modules/CustomerTicketZoom.pm
index c59f818..f24edab 100644
--- a/Kernel/Modules/CustomerTicketZoom.pm
+++ b/Kernel/Modules/CustomerTicketZoom.pm
@@ -54,6 +54,10 @@ sub new {
         $Self->{FormID} = $Self->{UploadCachObject}->FormIDCreate();
     }
 
+    if ( !$Self->{ZoomExpand} ) {
+        $Self->{ZoomExpand} = $Self->{ParamObject}->GetParam( Param => 'ZoomExpand' );
+    }
+
     $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::$Self->{Action}");
 
     return $Self;
@@ -381,21 +385,7 @@ sub _Mask {
         }
     }
 
-    # try to use the latest non internal agent article
-    if ( !$ArticleID ) {
-        $ArticleID = $ArticleBox[-1]->{ArticleID};
-    }
-
-    # try to use the latest customer article
-    if ( !$ArticleID && $LastCustomerArticleID ) {
-        $ArticleID = $LastCustomerArticleID;
-    }
-
     # build thread string
-    $Self->{LayoutObject}->Block(
-        Name => 'Tree',
-        Data => {%Param},
-    );
     my $CounterTree    = 0;
     my $Counter        = '';
     my $Space          = '';
@@ -495,125 +485,140 @@ sub _Mask {
     }
 
     my $ArticleOB = $ArticleBox[$LastCustomerArticle];
-    my %Article   = %$ArticleOB;
-
-    my $ArticleArray = 0;
-    for my $ArticleTmp (@ArticleBox) {
-        my %ArticleTmp1 = %$ArticleTmp;
-        if ( $ArticleID eq $ArticleTmp1{ArticleID} ) {
-            %Article = %ArticleTmp1;
+    my %Article;
+    foreach my $ArticleOB (@ArticleBox) {
+        %Article   = %$ArticleOB;
+
+        my $ArticleArray = 0;
+        if ( !$Self->{ZoomExpand}) {
+            for my $ArticleTmp (@ArticleBox) {
+                my %ArticleTmp1 = %$ArticleTmp;
+                if ( $ArticleID eq $ArticleTmp1{ArticleID} ) {
+                    %Article = %ArticleTmp1;
+                }
+            }
         }
-    }
-
-    # get attachment string
-    my %AtmIndex = ();
-    if ( $Article{Atms} ) {
-        %AtmIndex = %{ $Article{Atms} };
-    }
-
-    # add block for attachments
-    if (%AtmIndex) {
-        $Self->{LayoutObject}->Block(
-            Name => 'ArticleAttachment',
-            Data => { Key => 'Attachment', },
-        );
-        for my $FileID ( sort keys %AtmIndex ) {
-            my %File = %{ $AtmIndex{$FileID} };
+    
+        # get attachment string
+        my %AtmIndex = ();
+        if ( $Article{Atms} ) {
+            %AtmIndex = %{ $Article{Atms} };
+        }
+    
+        # add block for attachments
+        if (%AtmIndex) {
             $Self->{LayoutObject}->Block(
-                Name => 'ArticleAttachmentRow',
-                Data => { %File, },
+                Name => 'ArticleAttachment',
+                Data => { Key => 'Attachment', },
             );
-
-            # download type
-            my $Type = $Self->{ConfigObject}->Get('AttachmentDownloadType') || 'attachment';
-
-            # if attachment will be forced to download, don't open a new download window!
-            my $Target = '';
-            if ( $Type =~ /inline/i ) {
-                $Target = 'target="attachment" ';
+            for my $FileID ( sort keys %AtmIndex ) {
+                my %File = %{ $AtmIndex{$FileID} };
+                $Self->{LayoutObject}->Block(
+                    Name => 'ArticleAttachmentRow',
+                    Data => { %File, },
+                );
+    
+                # download type
+                my $Type = $Self->{ConfigObject}->Get('AttachmentDownloadType') || 'attachment';
+    
+                # if attachment will be forced to download, don't open a new download window!
+                my $Target = '';
+                if ( $Type =~ /inline/i ) {
+                    $Target = 'target="attachment" ';
+                }
+                $Self->{LayoutObject}->Block(
+                    Name => 'ArticleAttachmentRowLink',
+                    Data => {
+                        %File,
+                        Action => 'Download',
+                        Link =>
+                            "\$Env{\"CGIHandle\"}/\$QData{\"Filename\"}?Action=CustomerTicketAttachment&ArticleID=$Article{ArticleID}&FileID=$FileID",
+                        Image  => 'disk-s.png',
+                        Target => $Target,
+                    },
+                );
             }
-            $Self->{LayoutObject}->Block(
-                Name => 'ArticleAttachmentRowLink',
-                Data => {
-                    %File,
-                    Action => 'Download',
-                    Link =>
-                        "\$Env{\"CGIHandle\"}/\$QData{\"Filename\"}?Action=CustomerTicketAttachment&ArticleID=$Article{ArticleID}&FileID=$FileID",
-                    Image  => 'disk-s.png',
-                    Target => $Target,
-                },
+        }
+    
+        # just body if html email
+        if ( $Param{"ShowHTMLeMail"} ) {
+    
+            # generate output
+            return $Self->{LayoutObject}->Attachment(
+                Filename => $Self->{ConfigObject}->Get('Ticket::Hook')
+                    . "-$Article{TicketNumber}-$Article{TicketID}-$Article{ArticleID}",
+                Type        => 'inline',
+                ContentType => "$Article{MimeType}; charset=$Article{Charset}",
+                Content     => $Article{Body},
             );
         }
-    }
+    
+        # check if just a only html email
+        if ( my $MimeTypeText = $Self->{LayoutObject}->CheckMimeType( %Param, %Article ) ) {
+            $Param{'Article::TextNote'} = $MimeTypeText;
+            $Param{'Article::Text'}     = '';
+        }
+        else {
+    
+            # html quoting
+            $Param{'Article::Text'} = $Self->{LayoutObject}->Ascii2Html(
+                NewLine        => $Self->{ConfigObject}->Get('DefaultViewNewLine'),
+                Text           => $Article{Body},
+                VMax           => $Self->{ConfigObject}->Get('DefaultViewLines') || 5000,
+                HTMLResultMode => 1,
+                LinkFeature    => 1,
+            );
+    
+            # do charset check
+            if ( my $CharsetText = $Self->{LayoutObject}->CheckCharset( %Param, %Article ) ) {
+                $Param{'Article::TextNote'} = $CharsetText;
+            }
+        }
 
-    # just body if html email
-    if ( $Param{"ShowHTMLeMail"} ) {
 
-        # generate output
-        return $Self->{LayoutObject}->Attachment(
-            Filename => $Self->{ConfigObject}->Get('Ticket::Hook')
-                . "-$Article{TicketNumber}-$Article{TicketID}-$Article{ArticleID}",
-            Type        => 'inline',
-            ContentType => "$Article{MimeType}; charset=$Article{Charset}",
-            Content     => $Article{Body},
+        $Self->{LayoutObject}->Block(
+            Name => 'Tree',
+            Data => {
+                %Param,
+                %Article,
+            },
         );
-    }
 
-    # check if just a only html email
-    if ( my $MimeTypeText = $Self->{LayoutObject}->CheckMimeType( %Param, %Article ) ) {
-        $Param{'Article::TextNote'} = $MimeTypeText;
-        $Param{'Article::Text'}     = '';
-    }
-    else {
-
-        # html quoting
-        $Param{'Article::Text'} = $Self->{LayoutObject}->Ascii2Html(
-            NewLine        => $Self->{ConfigObject}->Get('DefaultViewNewLine'),
-            Text           => $Article{Body},
-            VMax           => $Self->{ConfigObject}->Get('DefaultViewLines') || 5000,
-            HTMLResultMode => 1,
-            LinkFeature    => 1,
+        # show plain or html body
+        my $ViewType = 'Plain';
+    
+        # in case show plain article body (if no html body as attachment exists of if rich
+        # text is not enabled)
+        my $RichText = $Self->{ConfigObject}->Get('Frontend::RichText');
+        if ( $RichText && $Article{AttachmentIDOfHTMLBody} ) {
+            $ViewType = 'HTML';
+        }
+        $Self->{LayoutObject}->Block(
+            Name => 'Body' . $ViewType,
+            Data => {
+                %Param,
+                %Article,
+            },
         );
 
-        # do charset check
-        if ( my $CharsetText = $Self->{LayoutObject}->CheckCharset( %Param, %Article ) ) {
-            $Param{'Article::TextNote'} = $CharsetText;
+        # do some strips && quoting
+        for (qw(From To Cc Subject)) {
+            if ( $Article{$_} ) {
+                $Self->{LayoutObject}->Block(
+                    Name => 'Row',
+                    Data => {
+                        Key   => $_,
+                        Value => $Article{$_},
+                    },
+                );
+            }
         }
-    }
 
-    # show plain or html body
-    my $ViewType = 'Plain';
-
-    # in case show plain article body (if no html body as attachment exists of if rich
-    # text is not enabled)
-    my $RichText = $Self->{ConfigObject}->Get('Frontend::RichText');
-    if ( $RichText && $Article{AttachmentIDOfHTMLBody} ) {
-        $ViewType = 'HTML';
+        last unless $Self->{ZoomExpand};
     }
-    $Self->{LayoutObject}->Block(
-        Name => 'Body' . $ViewType,
-        Data => {
-            %Param,
-            %Article,
-        },
-    );
-
     # get article id
     $Param{'Article::ArticleID'} = $Article{ArticleID};
 
-    # do some strips && quoting
-    for (qw(From To Cc Subject)) {
-        if ( $Article{$_} ) {
-            $Self->{LayoutObject}->Block(
-                Name => 'Row',
-                Data => {
-                    Key   => $_,
-                    Value => $Article{$_},
-                },
-            );
-        }
-    }
-
     # check follow up permissions
     my $FollowUpPossible = $Self->{QueueObject}->GetFollowUpOption( QueueID => $Article{QueueID}, );
     my %State = $Self->{StateObject}->StateGet(
@@ -766,6 +771,41 @@ sub _Mask {
         }
     }
 
+    # check if expand view is usable (only for less then 400 article)
+    # if you have more articles is going to be slow and not usable
+    my $ArticleMaxLimit = 400;
+    if ( $Self->{ZoomExpand} && $#ArticleBox > $ArticleMaxLimit ) {
+        $Self->{ZoomExpand} = 0;
+    }
+
+    # check if expand/collapse view is usable (only for less then 300 articles)
+    if ( $#ArticleBox < $ArticleMaxLimit ) {
+        if ( $Self->{ZoomExpand} ) {
+            $Self->{LayoutObject}->Block(
+                Name => 'Collapse',
+                Data => {
+                    %Article,
+                    ArticleID      => $ArticleID,
+                    ZoomExpand     => $Self->{ZoomExpand},
+                    ZoomExpandSort => $Self->{ZoomExpandSort},
+                },
+            );
+        }
+        else {
+            $Self->{LayoutObject}->Block(
+                Name => 'Expand',
+                Data => {
+                    %Article,
+                    ArticleID      => $ArticleID,
+                    ZoomExpand     => $Self->{ZoomExpand},
+                    ZoomExpandSort => $Self->{ZoomExpandSort},
+                },
+            );
+        }
+    }
+
+
+
     # select the output template
     return $Self->{LayoutObject}->Output(
         TemplateFile => 'CustomerTicketZoom',
diff --git a/Kernel/Output/HTML/Standard/CustomerTicketZoom.dtl b/Kernel/Output/HTML/Standard/CustomerTicketZoom.dtl
index a0f9274..5b354b2 100644
--- a/Kernel/Output/HTML/Standard/CustomerTicketZoom.dtl
+++ b/Kernel/Output/HTML/Standard/CustomerTicketZoom.dtl
@@ -64,7 +64,6 @@ function submit_compose() {
 <table border="0" width="100%" cellspacing="0" cellpadding="3">
     <tr>
         <td valign="top" width="75%" class="small">
-<!-- dtl:block:Tree -->
             <table border="0" width="100%" cellspacing="0" cellpadding="1">
 <!-- dtl:block:TreeItem -->
                 <tr class="$QData{"SenderType"}-$QData{"ArticleType"}" onmouseover="this.className='highlight';" onmouseout="this.className='$QData{"SenderType"}-$QData{"ArticleType"}';">
@@ -90,6 +89,18 @@ function submit_compose() {
                 </tr>
 <!-- dtl:block:TreeItem -->
             </table>
+            <div valign="top" align="right">
+<!-- dtl:block:Expand -->
+                <div title="$Text{"Expand View"}">
+                    <a href="$Env{"Baselink"}Action=CustomerTicketZoom&TicketID=$QData{"TicketID"}&ArticleID=$QData{"ArticleID"}&ZoomExpand=1" onmouseover="window.status='$JSText{"Expand View"}'; return true;" onmouseout="window.status='';"><img border="0" src="$Config{"Frontend::ImagePath"}expand.png"></a>
+                </div>
+<!-- dtl:block:Expand -->
+<!-- dtl:block:Collapse -->
+                <div title="$Text{"Collapse View"}">
+                    <a href="$Env{"Baselink"}Action=CustomerTicketZoom&TicketID=$QData{"TicketID"}&ArticleID=$QData{"ArticleID"}&ZoomExpand=0" onmouseover="window.status='$JSText{"Collapse View"}'; return true;" onmouseout="window.status='';"><img border="0" src="$Config{"Frontend::ImagePath"}collapse.png"></a>
+                </div>
+<!-- dtl:block:Collapse -->
+            </div>
 <!-- dtl:block:Tree -->
             <hr>
             <table border="0" width="100%" cellspacing="0" cellpadding="1">
@@ -164,6 +175,7 @@ $Data{"Article::Text"}
                 </div>
 <!-- dtl:block:BodyHTML -->
             </p>
+<!-- dtl:block:Tree -->
 <!-- dtl:block:FollowUp -->
             <hr>
             <form action="$Env{"CGIHandle"}" method="post" enctype="multipart/form-data" name="compose">
