to = now;
        from = now - 60;
 
-       if (edg_wll_StateRate(ctx,group,atoi(argv[2]),argc >=4 ? atoi(argv[3]) : 0,
+       if (edg_wll_StateRates(ctx,group,atoi(argv[2]),argc >=4 ? atoi(argv[3]) : 0,
                                &from,&to,&vals,&groups,&from_res,&to_res))
        {
                char    *et,*ed;
 
        if (http_check_status(ctx,response))
                goto err;
 
-       edg_wll_ParseStatsResult(ctx,message, from, to, rates, 
+       edg_wll_ParseStatsResultFull(ctx,message, from, to, rates, 
                ¬_returned, ¬_returned, groups, res_from, res_to);
 
 err:
        if (http_check_status(ctx,response))
                goto err;
 
-       edg_wll_ParseStatsResult(ctx,message, from, to, ¬_returned, 
+       edg_wll_ParseStatsResultFull(ctx,message, from, to, ¬_returned, 
                durations, ¬_returned, groups, res_from, res_to);
 
 err:
         if (http_check_status(ctx,response))
                 goto err;
 
-        edg_wll_ParseStatsResult(ctx,message, from, to, ¬_returned,
+        edg_wll_ParseStatsResultFull(ctx,message, from, to, ¬_returned,
                         durations, dispersions, groups, res_from, res_to);
 
 err:
 
 
 extern int edg_wll_StatsDurationFTRequestToXML(edg_wll_Context,const char *,const edg_wll_QueryRec *,edg_wll_JobStatCode,edg_wll_JobStatCode,int,time_t *,time_t *,char **);
        
-extern edg_wll_ErrorCode edg_wll_ParseStatsResult(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float **rate, float **duration, float **dispersion, char ***group, int *res_from, int *res_to);
+extern edg_wll_ErrorCode edg_wll_ParseStatsResult(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float *rate, float *duration, int *res_from, int *res_to);
+
+extern edg_wll_ErrorCode edg_wll_ParseStatsResultFull(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float **rate, float **duration, float **dispersion, char ***group, int *res_from, int *res_to);
 
 #ifdef __cplusplus
 }
 
 
 
 /* parse statistics result from client */
-edg_wll_ErrorCode edg_wll_ParseStatsResult(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float **rate, float **duration, float **dispersion, char ***group, int *res_from, int *res_to)
+
+/* this is backward-compatible version, edg_wll_ParseStatsResultFull is prefered*/
+edg_wll_ErrorCode edg_wll_ParseStatsResult(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float *rate, float *duration, int *res_from, int *res_to)
+{
+       float *rates, *durations, *dispersions;
+       char **groups;
+       edg_wll_ErrorCode ret;
+       int i;
+
+       ret = edg_wll_ParseStatsResultFull(ctx, messageBody, from, to, &rates, &durations, &dispersions, &groups, res_from, res_to);
+
+       if (groups && groups[0]){
+               if (rates) {
+                       *rate = rates[0];
+                       free(rates);
+               }
+               if (durations) {
+                       *duration = durations[0];
+                       free(durations);
+               }
+               if (dispersions)
+                       free(dispersions);
+               for(i = 0; groups[i]; i++)  
+                       free(groups[i]);
+       }
+       if (groups)
+               free(groups);
+
+       return ret;
+}
+
+edg_wll_ErrorCode edg_wll_ParseStatsResultFull(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float **rate, float **duration, float **dispersion, char ***group, int *res_from, int *res_to)
 {
        edg_wll_XML_ctx XMLCtx;
        edg_wll_ErrorCode errorCode;