for (i=0; fd_cmds[i].cmd; i++) {
          if (strncmp(fd_cmds[i].cmd, fd->msg, strlen(fd_cmds[i].cmd)) == 0) {
             found = true;               /* indicate command found */
+            jcr->errmsg[0] = 0;
             if (!fd_cmds[i].func(jcr) || job_canceled(jcr)) {    /* do command */
+               /* Note fd->msg command may be destroyed by comm activity */
+               if (jcr->errmsg[0]) {
+                  Jmsg1(jcr, M_FATAL, 0, _("Command error with FD, hanging up. %s\n"),
+                        jcr->errmsg);
+               } else {
+                  Jmsg0(jcr, M_FATAL, 0, _("Command error with FD, hanging up.\n"));
+               }
                set_jcr_job_status(jcr, JS_ErrorTerminated);
                quit = true;
             }
          }
       }
       if (!found) {                   /* command not found */
+         Jmsg1(jcr, M_FATAL, 0, _("FD command not found: %s\n"), fd->msg);
          Dmsg1(110, "<filed: Command not found: %s\n", fd->msg);
          fd->fsend(ferrmsg);
          break;
       if (do_append_data(jcr)) {
          return true;
       } else {
+         pm_strcpy(jcr->errmsg, _("Append data error.\n"));
          bnet_suppress_error_messages(fd, 1); /* ignore errors at this point */
          fd->fsend(ERROR_append);
       }
    } else {
+      pm_strcpy(jcr->errmsg, _("Attempt to append on non-open session.\n"));
       fd->fsend(NOT_opened);
    }
    return false;
 
    Dmsg1(120, "store<file: %s", fd->msg);
    if (!jcr->session_opened) {
+      pm_strcpy(jcr->errmsg, _("Attempt to close non-open session.\n"));
       fd->fsend(NOT_opened);
       return false;
    }
 
    Dmsg1(120, "Append open session: %s", fd->msg);
    if (jcr->session_opened) {
+      pm_strcpy(jcr->errmsg, _("Attempt to open already open session.\n"));
       fd->fsend(NO_open);
       return false;
    }
 
    Dmsg1(120, "<filed: %s", fd->msg);
    if (!jcr->session_opened) {
+      pm_strcpy(jcr->errmsg, _("Attempt to close non-open session.\n"));
       fd->fsend(NOT_opened);
       return false;
    }
       Dmsg1(120, "<bfiled: %s", fd->msg);
       return do_read_data(jcr);
    } else {
+      pm_strcpy(jcr->errmsg, _("Attempt to read on non-open session.\n"));
       fd->fsend(NOT_opened);
       return false;
    }
 
    Dmsg1(120, "%s\n", fd->msg);
    if (jcr->session_opened) {
+      pm_strcpy(jcr->errmsg, _("Attempt to open read on non-open session.\n"));
       fd->fsend(NO_open);
       return false;
    }
          &jcr->read_VolSessionTime, &jcr->read_StartFile, &jcr->read_EndFile,
          &jcr->read_StartBlock, &jcr->read_EndBlock) == 7) {
       if (jcr->session_opened) {
+         pm_strcpy(jcr->errmsg, _("Attempt to open read on non-open session.\n"));
          fd->fsend(NOT_opened);
          return false;
       }