in.__sizeattributes = i;
        in.attributes = conf->attrs;
 
-/*
-       // XXX: we need C -> WSDL conversion function !
-       query.attr = conf->query[0][0].attr;
-       query.op = conf->query[0][0].op;        // XXX: nasty, needs conversion
-       query.origin = malloc(sizeof(*query.origin));
-       *query.origin = jptype__attrOrig__USER;
-       value.string = conf->query[0][0].value; // XXX: hope string
-//     memset(&blob, 0, sizeof(blob));
-//     value.blob = &blob;
-       value.blob = NULL;
-       query.value = &value;
-       query.value2 = NULL;
-*/
-       for (i=0; conf->query[i]; i++);
-       in.__sizeconditions = i;
-       in.conditions = malloc(i * sizeof(*in.conditions));
+       for (in.__sizeconditions=0; conf->query[in.__sizeconditions]; in.__sizeconditions++);
+       in.conditions = malloc(in.__sizeconditions * sizeof(*in.conditions));
 
        for (i=0; conf->query[i]; i++) {
                if (glite_jpis_QueryCondToSoap(soap, conf->query[i], &(in.conditions[i])) != SOAP_OK) {
                }
        }
 
-       in.conditions[0] = &query;      // XXX: supp. only one dimensional queries ! (no ORs)
-                                       // for 2D queries one more _sizeconditions needed IMO
-
        in.history = conf->history;
        in.continuous = conf->continuous;
 
 
        
         assert(in); assert(out);
        if ( !(val = soap_malloc(soap, sizeof(*val))) ) return SOAP_FAULT;
+       memset(val, 0, sizeof(*val) );
 
         if (binary) {
                val->string = NULL;
                if ( !(val->string = soap_strdup(soap, in)) )  return SOAP_FAULT;
        }
 
+       *out = val;
+
        return SOAP_OK;
 }