_DebugMessage(100, "startBackupNode_DBI state = %d\n", state);
 
-        sp->fname = full_path;
-        sp->link = full_path;
-        sp->statp.st_mode = 0700 | S_IFREG;
-        sp->statp.st_ctime = now;
-        sp->statp.st_mtime = now;
-        sp->statp.st_atime = now;
-        sp->statp.st_size = (uint64_t)-1;
-        sp->type = FT_REG;
-
-        return bRC_OK;
+        if (context->job_level == 'F') {
+                sp->fname = full_path;
+                sp->link = full_path;
+                       sp->statp.st_mode = 0700 | S_IFREG;
+               sp->statp.st_ctime = now;
+               sp->statp.st_mtime = now;
+               sp->statp.st_atime = now;
+               sp->statp.st_size = (uint64_t)-1;
+               sp->type = FT_REG;
+               return bRC_OK;
+        }
+        else
+        {
+                bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+               return bRC_Seen;
+        }
 }
 
 bRC
 
         exchange_fd_context_t *context = (exchange_fd_context_t *)ctx->pContext;
         char *name;
         int i, intval;
+        int accurate;
 
         switch (event->eventType) {
         case bEventJobStart:
                 break;
         case bEventStartBackupJob:
                 _DebugMessage(0, "BackupStart\n");
+                bfuncs->getBaculaValue(ctx, bVarAccurate, (void *)&accurate);
+                context->accurate = accurate;
                 context->job_type = JOB_TYPE_BACKUP;
                 // level should have been specified by now - check it
                 // if level is D or I, since should have been specified too
         do {
                 current_node  = context->current_node;
                 retval = current_node->startBackupFile(context, sp);
+                if (retval == bRC_Seen)
+                       endBackupFile(ctx);
         } while (current_node != context->current_node);
         _DebugMessage(100, "startBackupFile done - type = %d, fname = %s, retval = %d\n", sp->type, sp->fname, retval);
         return retval;
 
 #define FT_REG        3
 #define FT_DIREND     5
 
-
 #define _REENTRANT    1
 #define _THREAD_SAFE  1
 #define _POSIX_PTHREAD_SEMANTICS 1
 #include "host.h"
 #endif
 
-
 #define EXCHANGE_PLUGIN_VERSION 1
 
 #define JOB_TYPE_BACKUP 1
         time_t job_since;
         bool notrunconfull_option;
         bool truncate_logs;
+        bool accurate;
 };
 
 static inline char *tocharstring(WCHAR *src)
 
         time_t now = time(NULL);
         _DebugMessage(100, "startBackupNode_FILE state = %d\n", state);
 
-        sp->fname = full_path;
-        sp->link = full_path;
-        _DebugMessage(100, "fname = %s\n", sp->fname);
-        sp->statp.st_mode = 0700 | S_IFREG;
-        sp->statp.st_ctime = now;
-        sp->statp.st_mtime = now;
-        sp->statp.st_atime = now;
-        sp->statp.st_size = (uint64_t)-1;
-        sp->type = FT_REG;
-
-        return bRC_OK;
+       if (context->job_level == 'F' || parent->type == NODE_TYPE_STORAGE_GROUP) {
+               sp->fname = full_path;
+               sp->link = full_path;
+               _DebugMessage(100, "fname = %s\n", sp->fname);
+               sp->statp.st_mode = 0700 | S_IFREG;
+               sp->statp.st_ctime = now;
+               sp->statp.st_mtime = now;
+               sp->statp.st_atime = now;
+               sp->statp.st_size = (uint64_t)-1;
+               sp->type = FT_REG;
+               return bRC_OK;
+        } else {
+                bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+               return bRC_Seen;
+        }
 }
 
 bRC
 
                         logfile_ptr = NULL;
                         if (context->job_level == 'F')
                         {
-                                _DebugMessage(100, "Calling HrESEBackupSetup\n");
+                                _DebugMessage(100, "Calling HrESEBackupSetup (BACKUP_TYPE_FULL)\n");
                                 result = HrESEBackupSetup(hccx, ibi->hInstanceId, BACKUP_TYPE_FULL);
-                                state = 1;
+                               state = 1;
                         }
                         else
                         {
-                                _DebugMessage(100, "Calling HrESEBackupSetup\n");
+                                _DebugMessage(100, "Calling HrESEBackupSetup (BACKUP_TYPE_LOGS_ONLY)\n");
                                 result = HrESEBackupSetup(hccx, ibi->hInstanceId, BACKUP_TYPE_LOGS_ONLY);
-                                state = 2;
+                               if (context->accurate)
+                                       state = 1;
+                                else
+                                       state = 2;
                         }
                         if (result != 0)
                         {
                                 _JobMessage(M_ERROR, "HrESEBackupSetup failed with error 0x%08x - %s\n", result, ESEErrorMessage(result));
+                                state = 999;
                                 return bRC_Error;
                         }
                         break;
                                 }
                                 else
                                 {
-                                        //_DebugMessage(100, "NOT including file %S\n", logfile_ptr);
+                                       if (context->accurate) {
+                                                tmp = new char[strlen(full_path) + wcslen(tmp_logfile_ptr) + 1];
+                                               strcpy(tmp, full_path);
+                                               wcstombs(tmp + strlen(full_path), tmp_logfile_ptr, wcslen(tmp_logfile_ptr) + 1);
+                                                _JobMessage(M_WARNING, "Marking '%s' as seen\n", tmp);
+                                               bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)tmp);
+                                               delete tmp;
+                                        }
                                 }
 
                                 if (handle != INVALID_HANDLE_VALUE)
 
                 context->current_node = file_node;
                 break;
         case 3:
-                time_t now = time(NULL);
-                sp->fname = full_path;
-                sp->link = full_path;
-                sp->statp.st_mode = 0700 | S_IFDIR;
-                sp->statp.st_ctime = now;
-                sp->statp.st_mtime = now;
-                sp->statp.st_atime = now;
-                sp->statp.st_size = 0;
-                sp->type = FT_DIREND;
+                if (context->job_level == 'F')
+                {
+                        time_t now = time(NULL);
+                        sp->fname = full_path;
+                        sp->link = full_path;
+                        sp->statp.st_mode = 0700 | S_IFDIR;
+                        sp->statp.st_ctime = now;
+                        sp->statp.st_mtime = now;
+                        sp->statp.st_atime = now;
+                        sp->statp.st_size = 0;
+                        sp->type = FT_DIREND;
+                }
+                else
+                {
+                        bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+                       return bRC_Seen;
+                }
                 break;
         }