- bugfix in match_status (several missed breaks in switch on condition attributes)
                                        GS(buf);
                                        free(buf);
                                        break;
+                               case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                                       /*XXX op. within not implemented  */
+                                       GS(edg_wll_VMStatToString((edg_wll_JobStatCode)l2->value.i));
+                                       break;
                                default:
                                        assert(! "Unknown condition attribute!");
                                        break;
 
                                                goto err;
                                        }
                                        break;
+                               case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                                       if ( 0 > (conds[i][j].value.i = edg_wll_StringToVMStat(value))) {
+                                                asprintf(&errmsg, "Unknown VM job state \"%s\" in query", value);
+                                                err = edg_wll_SetError(ctx, EINVAL, errmsg);
+                                                goto err;
+                                        }
+                                       break;
                                default:
                                        asprintf(&errmsg, "Value conversion for attribute \"%s\" not supported in current implementation", attribute);
                                        err = edg_wll_SetError(ctx, ENOSYS, errmsg);
 
                                                edg_wll_from_string_to_edg_wll_StatJobtype(XMLCtx);
 
                                break;
+                       case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                                       XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].value.i =
+                                               edg_wll_from_string_to_edg_wll_StatVm_state(XMLCtx);
+                               break;
                        default: 
                                edg_wll_freeBuf(XMLCtx);
                                XMLCtx->level--;
                                                        edg_wll_from_string_to_edg_wll_StatJobtype(XMLCtx);
 
                                        break;
+                               case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                                               XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].value.i =
+                                                       edg_wll_from_string_to_edg_wll_StatVm_state(XMLCtx);
                                default: 
                                        edg_wll_freeBuf(XMLCtx);
                                        XMLCtx->level--;
 
                        ct++;
                        break;
 
+               case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                       if ( ec[m][n].op != EDG_WLL_QUERY_OP_EQUAL && ec[m][n].op != EDG_WLL_QUERY_OP_UNEQUAL )
+                       {
+                               edg_wll_SetError(ctx, EINVAL, "only `=' and '!=' supported with VM status");
+                               return NULL;
+                       }
+                       ct++;
+                       break;
+
                default:
                        sprintf(msg, "ec_to_head_where(): attr=%d unsupported", ec[m][n].attr);
                        edg_wll_SetError(ctx, EINVAL, msg);
                        ct++;
                        break;
 
+               case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                        if ( jc[m][n].op != EDG_WLL_QUERY_OP_EQUAL && jc[m][n].op != EDG_WLL_QUERY_OP_UNEQUAL )
+                        {
+                                edg_wll_SetError(ctx, EINVAL, "only `=' and '!=' supported with VM status");
+                                return NULL;
+                        }
+                        ct++;
+                        break;
+
 
                default:
                        sprintf(msg, "jc_to_head_where(): attr=%d unsupported", jc[m][n].attr);
                case EDG_WLL_QUERY_ATTR_EXITCODE:
                case EDG_WLL_QUERY_ATTR_STATUS:
                case EDG_WLL_QUERY_ATTR_JOB_TYPE:
+               case EDG_WLL_QUERY_ATTR_VM_STATUS:
                        if (   !is_indexed(&(jc[m][n]), ctx)
                                || !(cname = edg_wll_QueryRecToColumn(&(jc[m][n]))) )
                        {
                                        } else if ( conds[i][j].op == EDG_WLL_QUERY_OP_UNEQUAL ) goto or_satisfied;
                                        // TODO: EDG_WLL_QUERY_OP_LESS, EDG_WLL_QUERY_OP_GREATER, EDG_WLL_QUERY_OP_WITHIN, EDG_WLL_QUERY_OP_CHANGED
                                }
+                               break;
                        case EDG_WLL_QUERY_ATTR_NETWORK_SERVER:
                                if ( stat->network_server )
                                {
                                        if (oldstat->stateEnterTime.tv_sec != stat->stateEnterTime.tv_sec) goto or_satisfied;
                                        break;
                                }
+                               break;
                        case EDG_WLL_QUERY_ATTR_LASTUPDATETIME:
                                if ( !stat->lastUpdateTime.tv_sec )
                                        break;
                                        if (oldstat->lastUpdateTime.tv_sec != stat->lastUpdateTime.tv_sec) goto or_satisfied;
                                        break;
                                }
+                               break;
                        case EDG_WLL_QUERY_ATTR_JOB_TYPE: 
                                switch ( conds[i][j].op )
                                {
                                        if ( conds[i][j].value.i != stat->jobtype ) goto or_satisfied;
                                        break;
                                }
+                               break;
+                       case EDG_WLL_QUERY_ATTR_VM_STATUS:
+                               switch ( conds[i][j].op )
+                                {
+                                case EDG_WLL_QUERY_OP_EQUAL:
+                                        if ( conds[i][j].value.i == stat->vm_state ) goto or_satisfied;
+                                        break;
+                                case EDG_WLL_QUERY_OP_UNEQUAL:
+                                        if ( conds[i][j].value.i != stat->vm_state ) goto or_satisfied;
+                                        break;
+                                }
+                               break;
                        default:
                                break;
                        }
 
 #define LASTUPDATETIME lbt__queryAttr__LASTUPDATETIME
 #define NETWORKSERVER  lbt__queryAttr__NETWORKSERVER
 #define JOBTYPE                lbt__queryAttr__JOBTYPE
+#define VM_STATUS       lbt__queryAttr__VM_USCORESTATUS
 
 #define EQUAL          lbt__queryOp__EQUAL
 #define UNEQUAL                lbt__queryOp__UNEQUAL
 
 
 int edg_wll_SoapToAttr(const enum lbt__queryAttr in, edg_wll_QueryAttr *out)
 {
-       assert(EDG_WLL_QUERY_ATTR_JOB_TYPE + 1 == EDG_WLL_QUERY_ATTR__LAST);
+       assert(EDG_WLL_QUERY_ATTR_VM_STATUS + 1 == EDG_WLL_QUERY_ATTR__LAST);
 
        switch ( in )
        {
        case LASTUPDATETIME: *out = EDG_WLL_QUERY_ATTR_LASTUPDATETIME; break;
        case NETWORKSERVER: *out = EDG_WLL_QUERY_ATTR_NETWORK_SERVER; break;
        case JOBTYPE: *out = EDG_WLL_QUERY_ATTR_JOB_TYPE; break;
+       case VM_STATUS: *out = EDG_WLL_QUERY_ATTR_VM_STATUS; break;
        default: return 0;
        }
 
 
 int edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum lbt__queryAttr *out)
 {
-       assert(EDG_WLL_QUERY_ATTR_JOB_TYPE + 1 == EDG_WLL_QUERY_ATTR__LAST);
+       assert(EDG_WLL_QUERY_ATTR_VM_STATUS + 1 == EDG_WLL_QUERY_ATTR__LAST);
 
        switch ( in )
        {
        case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: *out = LASTUPDATETIME; break;
        case EDG_WLL_QUERY_ATTR_NETWORK_SERVER: *out = NETWORKSERVER; break;
        case EDG_WLL_QUERY_ATTR_JOB_TYPE: *out = JOBTYPE; break;
+       case EDG_WLL_QUERY_ATTR_VM_STATUS: *out = VM_STATUS; break;
        default: return 0;
        }
 
        case EDG_WLL_QUERY_ATTR_RESUBMITTED:
        case EDG_WLL_QUERY_ATTR_EXITCODE:
        case EDG_WLL_QUERY_ATTR_JOB_TYPE:
+       case EDG_WLL_QUERY_ATTR_VM_STATUS:
                VALUEQR_SET(out, i, soap_malloc(soap, sizeof(*(VALUEQR_GET(out, i)))));
                if ( !VALUEQR_GET(out, i) ) return SOAP_FAULT;
                *(VALUEQR_GET(out, i)) = in->i;