diff --git a/inc/TarLib.class.php b/inc/TarLib.class.php
index b804aa2b142395e032bb9cf7ecc7175de3f3be3f..36ae224eddc7711387a58987ba279eb961ed0ded 100644
--- a/inc/TarLib.class.php
+++ b/inc/TarLib.class.php
@@ -375,17 +375,23 @@ class TarLib {
     /**
      * Add files to an existing package.
      *
-     * This function does exactly the same than Create() exept it
-     * will append the given files at the end of the archive.  Please not the is
-     * safe to call Add() on a newly created archive whereas the
-     * contrary will fail !
+     * This function does exactly the same as Create() exept it
+     * will append the given files at the end of the archive.
+     *
+     * Note: This is only supported for dynamic in memory files and uncompressed
+     *       tar files
      *
      * This function returns a status code, you can use TarErrorStr() on
      * it to get the human-readable description of the error.
      */
     function Add($p_filelist, $p_add = '', $p_rem = '') {
-        if (($this->_nomf != TarLib::ARCHIVE_DYNAMIC && @is_file($this->_nomf)) ||
-            ($this->_nomf == TarLib::ARCHIVE_DYNAMIC && !$this->_memdat)){
+        if($this->_nomf !== TarLib::ARCHIVE_DYNAMIC &&
+           $this->_comptype !== TarLib::COMPRESS_NONE) {
+            return -12;
+        }
+
+        if (($this->_nomf !== TarLib::ARCHIVE_DYNAMIC && !$this->_fp) ||
+            ($this->_nomf === TarLib::ARCHIVE_DYNAMIC && !$this->_memdat)){
              return $this->Create($p_filelist, $p_add, $p_rem);
         }
 
@@ -450,7 +456,8 @@ class TarLib {
                 -8 => "Can't create the directory to extract files !",
                 -9 => "Please pass a archive name to send if you made created an ARCHIVE_DYNAMIC !",
                 -10 => "You didn't pass an archive filename and there is no stored ARCHIVE_DYNAMIC !",
-                -11 => "Given archive doesn't exist !"
+                -11 => "Given archive doesn't exist !",
+                -12 => "Appending not supported for compressed files"
                 );
 
         return isset($ecodes[$i]) ? $ecodes[$i] : $ecodes[0];
@@ -578,7 +585,7 @@ class TarLib {
 
     function _addFileList($p_fl, $p_addir, $p_remdir) {
         foreach($p_fl as $file) {
-            if(($file == $this->_nomf && $this->_nomf != TarLib::ARCHIVE_DYNAMIC) || !$file || (!is_array($file) && !file_exists($file)))
+            if(($file == $this->_nomf && $this->_nomf !== TarLib::ARCHIVE_DYNAMIC) || !$file || (!is_array($file) && !file_exists($file)))
                 continue;
 
             if (!$this->_addFile($file, $p_addir, $p_remdir))
@@ -688,12 +695,13 @@ class TarLib {
     function _append($p_filelist, $p_addir="", $p_remdir="") {
         if(!$this->_fp) if(!$this->_OpenWrite('a')) return -6;
 
-        if($this->_nomf == TarLib::ARCHIVE_DYNAMIC) {
-            $s = strlen($this->_memdat);
-            $this->_memdat = substr($this->_memdat,0,-512);
+        if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) {
+            $this->_memdat = substr($this->_memdat,0,-512*2); // remove footer
         } else {
+            clearstatcache();
             $s = filesize($this->_nomf);
-            $this->_seek($s-512);
+
+            $this->_seek($s - (512*2)); // remove footer
         }
 
         $ok = $this->_addFileList($p_filelist, $p_addir, $p_remdir);