diff --git a/src/dird/dir_plugins.c b/src/dird/dir_plugins.c
index e7a2559..3229d4f 100644
--- a/src/dird/dir_plugins.c
+++ b/src/dird/dir_plugins.c  
@@ -135,9 +135,10 @@ int generate_plugin_event(JCR *jcr, bDirEventType eventType, void *value, bool r
       return bRC_OK;                  /* Return if no plugins loaded */
    }
 
-   if (jcr->is_job_canceled()) {
-      return bRC_Cancel;
-   }
+   // Canceled jobs should pass through the plugin too
+   //if (jcr->is_job_canceled()) {
+   //   return bRC_Cancel;
+   //} 
 
    bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list;
    event.eventType = eventType; 
@@ -164,6 +165,10 @@ int generate_plugin_event(JCR *jcr, bDirEventType eventType, void *value, bool r
          }
       }
    }
+   
+   if (jcr->is_job_canceled()) {
+      return bRC_Cancel;
+   }
 
    return rc;
 }
@@ -506,6 +511,18 @@ static bRC bareosGetValue(bpContext *ctx, brDirVariable var, void *value)
          *((int *)value) = jcr->SDJobStatus;
          Dmsg1(dbglvl, "BAREOS: return bDirVarSDJobStatus=%c\n", jcr->SDJobStatus);
          break;
+      case bDirVarLastRate:
+         *((int *)value) = jcr->LastRate;
+         Dmsg1(dbglvl, "BAREOS: return bDirVarLastRate=%d\n", jcr->LastRate);
+         break;
+      case bDirVarJobBytes:
+         *((int *)value) = jcr->JobBytes;
+         Dmsg1(dbglvl, "BAREOS: return bDirVarJobBytes=%d\n", jcr->JobBytes);
+         break;
+      case bDirVarReadBytes:
+         *((int *)value) = jcr->ReadBytes;
+         Dmsg1(dbglvl, "BAREOS: return bDirVarReadBytes=%d\n", jcr->ReadBytes);
+         break;
       default:
          break;
       }
diff --git a/src/dird/dir_plugins.h b/src/dird/dir_plugins.h
index 2069793..cf3d02b 100644
--- a/src/dird/dir_plugins.h
+++ b/src/dird/dir_plugins.h
@@ -80,7 +80,10 @@ typedef enum {
   bDirVarSDErrors = 21, 
   bDirVarFDJobStatus = 22,
   bDirVarSDJobStatus = 23,
-  bDirVarPluginDir = 24 
+  bDirVarPluginDir = 24,
+  bDirVarLastRate = 25,
+  bDirVarJobBytes = 26,
+  bDirVarReadBytes = 27
 } brDirVariable;
   
 /*
diff --git a/src/plugins/dird/bareos_dir_consts.py b/src/plugins/dird/bareos_dir_consts.py
index 941adfe..d2a82f5 100644
--- a/src/plugins/dird/bareos_dir_consts.py
+++ b/src/plugins/dird/bareos_dir_consts.py
@@ -40,7 +40,10 @@ brDirVariable = dict(
     bDirVarSDJobFiles = 20, 
     bDirVarSDErrors = 21,   
     bDirVarFDJobStatus = 22,
-    bDirVarSDJobStatus = 23    
+    bDirVarSDJobStatus = 23,   
+    bDirVarLastRate = 25,      
+    bDirVarJobBytes = 26,            
+    bDirVarReadBytes = 27
 )
 
 bwDirVariable = dict(
diff --git a/src/plugins/dird/python-dir.c b/src/plugins/dird/python-dir.c
index e713205..f79f5af 100644
--- a/src/plugins/dird/python-dir.c
+++ b/src/plugins/dird/python-dir.c
@@ -545,10 +545,6 @@ static PyObject *PyBareosGetValue(PyObject *self, PyObject *args)
    case bDirVarNumVols:  
    case bDirVarJobStatus:
    case bDirVarPriority: 
-   case bDirVarJobErrors: 
-   case bDirVarJobFiles:  
-   case bDirVarSDJobFiles: 
-   case bDirVarSDErrors:     
    case bDirVarFDJobStatus:  
    case bDirVarSDJobStatus: {
       int value;
@@ -559,6 +555,21 @@ static PyObject *PyBareosGetValue(PyObject *self, PyObject *args)
       }
       break;
    }
+   case bDirVarJobErrors:
+   case bDirVarSDErrors:  
+   case bDirVarJobFiles:  
+   case bDirVarSDJobFiles:
+   case bDirVarLastRate:   
+   case bDirVarJobBytes:   
+   case bDirVarReadBytes: {
+      uint64_t value;
+
+      ctx = PyGetbpContext(pyCtx);
+      if (bfuncs->getBareosValue(ctx, (brDirVariable)var, &value) == bRC_OK) {
+         pRetVal = PyLong_FromUnsignedLong(value);
+      }
+      break;
+   }
    case bDirVarJobName:
    case bDirVarJob:  
    case bDirVarClient:

