static void multipath_status(struct dm_target *ti, status_type_t type,
                             unsigned status_flags, char *result, unsigned maxlen)
 {
-       int sz = 0;
+       int sz = 0, pg_counter, pgpath_counter;
        unsigned long flags;
        struct multipath *m = ti->private;
        struct priority_group *pg;
                break;
 
        case STATUSTYPE_IMA:
+               sz = 0; /*reset the result pointer*/
+
                DMEMIT_TARGET_NAME_VERSION(ti->type);
+               DMEMIT(",nr_priority_groups=%u", m->nr_priority_groups);
+
+               pg_counter = 0;
                list_for_each_entry(pg, &m->priority_groups, list) {
                        if (pg->bypassed)
                                state = 'D';    /* Disabled */
                                state = 'A';    /* Currently Active */
                        else
                                state = 'E';    /* Enabled */
-                       DMEMIT(",pg_state=%c", state);
-                       DMEMIT(",nr_pgpaths=%u", pg->nr_pgpaths);
-                       DMEMIT(",path_selector_name=%s", pg->ps.type->name);
+                       DMEMIT(",pg_state_%d=%c", pg_counter, state);
+                       DMEMIT(",nr_pgpaths_%d=%u", pg_counter, pg->nr_pgpaths);
+                       DMEMIT(",path_selector_name_%d=%s", pg_counter, pg->ps.type->name);
 
+                       pgpath_counter = 0;
                        list_for_each_entry(p, &pg->pgpaths, list) {
-                               DMEMIT(",path_name=%s,is_active=%c,fail_count=%u",
-                                      p->path.dev->name, p->is_active ? 'A' : 'F',
-                                      p->fail_count);
+                               DMEMIT(",path_name_%d_%d=%s,is_active_%d_%d=%c,fail_count_%d_%d=%u",
+                                      pg_counter, pgpath_counter, p->path.dev->name,
+                                      pg_counter, pgpath_counter, p->is_active ? 'A' : 'F',
+                                      pg_counter, pgpath_counter, p->fail_count);
                                if (pg->ps.type->status) {
-                                       DMEMIT(",path_selector_status=");
+                                       DMEMIT(",path_selector_status_%d_%d=",
+                                              pg_counter, pgpath_counter);
                                        sz += pg->ps.type->status(&pg->ps, &p->path,
                                                                  type, result + sz,
                                                                  maxlen - sz);
                                }
+                               pgpath_counter++;
                        }
+                       pg_counter++;
                }
                DMEMIT(";");
                break;