diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 91288bab20e42c0d793f325e297b1192dc2eaae0..fff902eeddd32ae903fc936a3023202595eece91 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -38,13 +38,6 @@ tbd Sun Microsystems, Inc.
 	* Output of lfs quota has been made less detailed by default,
 	  old (verbose) output can be obtained by using -v option.
 
-Severity   : normal
-Bugzilla   : 16679
-Description: more cleanup in mds_lov
-Details    : add workaround for get valid ost count for avoid warnings about 
-             drop too big messages, not init llog cat under semphore which
-             can be blocked on reconnect and break normal replay, fix access
-             to wrong pointer.
 
 Severity   : enhancement
 Bugzilla   : 16573
@@ -98,6 +91,22 @@ Details    : Apply the MGS_CONNECT_SUPPORTED mask at reconnect time so
 	* Output of lfs quota has been made less detailed by default,
 	  old (verbose) output can be obtained by using -v option.
 
+Severity   : normal
+Bugzilla   : 15139
+Frequency  : rare
+Description: avoid ASSERTION(client_stat->nid_exp_ref_count == 0) failed
+Details    : release reference to stats when client disconnected, not
+             when export destroyed for avoid races when client destroyed
+             after main ost export.
+
+Severity   : normal
+Bugzilla   : 16679
+Description: more cleanup in mds_lov
+Details    : add workaround for get valid ost count for avoid warnings about 
+             drop too big messages, not init llog cat under semphore which
+             can be blocked on reconnect and break normal replay, fix access
+             to wrong pointer.
+
 Severity   : normal
 Bugzilla   : 16006
 Description: Properly propagate oinfo flags from lov to osc for statfs
diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c
index 941185bc68d962752efad092951216d7ef501741..b763e3db15614ba4139a9b7b506848d74c593372 100644
--- a/lustre/mds/handler.c
+++ b/lustre/mds/handler.c
@@ -530,6 +530,9 @@ static int mds_disconnect(struct obd_export *exp)
         if (exp->exp_obd->obd_namespace != NULL)
                 ldlm_cancel_locks_for_export(exp);
 
+        /* release nid stat refererence */
+        lprocfs_exp_cleanup(exp);
+
         /* complete all outstanding replies */
         spin_lock(&exp->exp_lock);
         while (!list_empty(&exp->exp_outstanding_replies)) {
diff --git a/lustre/mds/mds_fs.c b/lustre/mds/mds_fs.c
index cb9c31ab552007dd7c02d6696d5fb7d7611dcbe7..e59eb197d5aa35551948a6700bcbfd45931c22d6 100644
--- a/lustre/mds/mds_fs.c
+++ b/lustre/mds/mds_fs.c
@@ -236,7 +236,6 @@ int mds_client_free(struct obd_export *exp)
 
         LASSERT(mds->mds_client_bitmap != NULL);
 
-        lprocfs_exp_cleanup(exp);
 
         off = med->med_lr_off;
 
diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c
index 23e4f1b4104daa065d248bf11a9df5f90b9b1050..2f07b7001d043908c29a0f9d92fdd88150150507 100644
--- a/lustre/mgs/mgs_fs.c
+++ b/lustre/mgs/mgs_fs.c
@@ -117,7 +117,7 @@ int mgs_client_add(struct obd_device *obd,
 /* Remove client export data from the MGS */
 int mgs_client_free(struct obd_export *exp)
 {
-        return lprocfs_exp_cleanup(exp);
+        return 0; 
 }
 
 /* Same as mds_fid2dentry */
diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
index 21fee82d54e7538425f8aea91b130358f06e0fd6..62d333e46a6e4c0f8903ed185f874d69570f469c 100644
--- a/lustre/mgs/mgs_handler.c
+++ b/lustre/mgs/mgs_handler.c
@@ -133,6 +133,8 @@ static int mgs_disconnect(struct obd_export *exp)
         rc = class_disconnect(exp);
         ldlm_cancel_locks_for_export(exp);
 
+        lprocfs_exp_cleanup(exp);
+
         /* complete all outstanding replies */
         spin_lock(&exp->exp_lock);
         while (!list_empty(&exp->exp_outstanding_replies)) {
diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c
index 958bee64fe38f1af957ae63f4789add62f2a462e..681e3d1f02e45bbd589b83ef7448fef30e8ce0e8 100644
--- a/lustre/obdfilter/filter.c
+++ b/lustre/obdfilter/filter.c
@@ -2394,7 +2394,6 @@ static int filter_destroy_export(struct obd_export *exp)
         if (obd_uuid_equals(&exp->exp_client_uuid, &exp->exp_obd->obd_uuid))
                 RETURN(0);
 
-        lprocfs_exp_cleanup(exp);
 
         if (exp->exp_obd->obd_replayable)
                 filter_client_free(exp);
@@ -2430,6 +2429,8 @@ static int filter_disconnect(struct obd_export *exp)
         if (exp->exp_obd->obd_namespace != NULL)
                 ldlm_cancel_locks_for_export(exp);
 
+        lprocfs_exp_cleanup(exp);
+
         /* flush any remaining cancel messages out to the target */
         ctxt = llog_get_context(obd, LLOG_MDS_OST_REPL_CTXT);
         err = llog_sync(ctxt, exp);