diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 7eaf9e44cc333073e19bf0ab0f614473538170a4..28e142b9bf503e9f661aa24e83d4ee0cfbba7d7f 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -38,6 +38,10 @@ 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   : 16907
+Description: Prevent import from entering FULL state when server in recovery
+
 Severity   : major
 Bugzilla   : 16750
 Description: service mount cannot take device name with ":"
diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
index 5d7252d781fad99980d7272947276cf722b47c26..bfb7b3cbb6132cbaffd50c00eb5c7f6c3f55af1e 100644
--- a/lustre/ptlrpc/import.c
+++ b/lustre/ptlrpc/import.c
@@ -676,7 +676,17 @@ static int ptlrpc_connect_interpret(struct ptlrpc_request *request,
                 imp->imp_remote_handle =
                                 *lustre_msg_get_handle(request->rq_repmsg);
 
-                IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL);
+                /* Initial connects are allowed for clients with non-random
+                 * uuids when servers are in recovery.  Simply signal the
+                 * servers replay is complete and wait in REPLAY_WAIT. */
+                if (msg_flags & MSG_CONNECT_RECOVERING) {
+                        CDEBUG(D_HA, "connect to %s during recovery\n",
+                               obd2cli_tgt(imp->imp_obd));
+                        IMPORT_SET_STATE(imp, LUSTRE_IMP_REPLAY_LOCKS);
+                } else {
+                        IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL);
+                }
+
                 spin_lock(&imp->imp_lock);
                 if (imp->imp_invalid) {
                         spin_unlock(&imp->imp_lock);