soap.recvfd = fd;
        soap_begin_recv(&soap);
        memset(&out, 0, sizeof(out));
-                                       
+
+       soap_default__jpelem__ServerConfigurationResponse(&soap, &out);
        if (!soap_get__jpelem__ServerConfigurationResponse(&soap, &out, "ServerConfiguration", NULL)) {
                 soap_end_recv(&soap);
                 soap_end(&soap);
                        conf->feeds[i] = calloc(1, sizeof(*conf->feeds[i]));
                        conf->feeds[i]->PS_URL=strdup(feed->primaryServer);
 
-                       if (feed->__sizecondition) {
-                               glite_jpis_SoapToPrimaryQueryConds(&soap, feed->__sizecondition,
-                                       feed->condition, &conf->feeds[i]->query);
-                       }
+                       if (glite_jpis_SoapToPrimaryQueryConds(&soap, feed->__sizecondition,
+                               feed->condition, &conf->feeds[i]->query)) return EINVAL;
                        
                        conf->feeds[i]->history = feed->history;
                        conf->feeds[i]->continuous = feed->continuous;
 
        size_t datalen;
 
        if ((ret = array_init(blob, len, &maxlen, 1024)) != 0) return ret;
-       query = *queries;
+       query = queries ? *queries : NULL;
        while(query && query->attr) {
                if ((ret = array_add_long(blob, len, &maxlen, COND_MAGIC)) != 0) goto fail;
                datalen = strlen(query->attr) + 1;
 
        glite_jp_query_rec_t    *qr;    
 
 
-       assert(in); assert(out);
-       qr = calloc(2, sizeof(*qr));    
+       assert(in && in->attr); assert(out);
+       *out = qr = calloc(2, sizeof(*qr));     
 
        qr[0].attr = strdup(in->attr);
        glite_jpis_SoapToQueryOp(in->op, &(qr[0].op));
        
        glite_jpis_SoapToAttrOrig(soap, in->origin, &(qr[0].origin) );
        
-       *out = qr;
-
        return 0;
 }
 
        glite_jp_query_rec_t    **qr;
        int                     i;
 
-       assert(in); assert(out);
+       assert(in || !size); assert(out);
         qr = calloc(size+1, sizeof(*qr));
 
        for (i=0; i<size; i++) {
                if ( SoapToPrimaryQueryCond(soap, GLITE_SECURITY_GSOAP_LIST_GET(in, i), &(qr[i])) ) {
                        *out = NULL;
+                       free(qr);
                        return 1;
                }
        }
 
        case GLITE_JP_QUERYOP_WITHIN:
                if (QueryRecordValToSoap(soap, in->binary, in->size2, in->value2, &qr->value2)) 
                        return SOAP_FAULT;
-       default:
+       case GLITE_JP_QUERYOP_EQUAL:
+       case GLITE_JP_QUERYOP_UNEQUAL:
+       case GLITE_JP_QUERYOP_LESS:
+       case GLITE_JP_QUERYOP_GREATER:
                if (QueryRecordValToSoap(soap, in->binary, in->size, in->value, &qr->value)) 
                         return SOAP_FAULT;
+       case GLITE_JP_QUERYOP_EXISTS:
+               break;
+       default:
+               assert(0); // unknown or undefined operation
                break;
        }
 
 
 Record JP tag:
 --------------
 
-$ jpps-test RecordTag JPBID TagA 1 blah
+$ jpps-test RecordTag JOBID TagA 1 blah
 
 
 TODO