diff --git src/bp-templates/bp-nouveau/includes/messages/functions.php src/bp-templates/bp-nouveau/includes/messages/functions.php
index 191a85381..cbc9a00a4 100644
--- src/bp-templates/bp-nouveau/includes/messages/functions.php
+++ src/bp-templates/bp-nouveau/includes/messages/functions.php
@@ -77,6 +77,26 @@ function bp_nouveau_messages_enqueue_scripts() {
 	add_filter( 'tiny_mce_before_init', 'bp_nouveau_messages_at_on_tinymce_init', 10, 2 );
 }
 
+/**
+ * Should the Private Messages UI be used as a Single Page Application?
+ *
+ * @since  3.0.1
+ *
+ * @return boolean True to use as a SPA. False otherwise.
+ */
+function bp_nouveau_messages_is_spa() {
+	/**
+	 * Filter here to use Private messages as a Single Page Application
+	 * by returning true.
+	 *
+	 * Some plugins functionality may not work as expected in this case.
+	 *
+	 * @param boolean $value True to use as a SPA. False otherwise.
+	 *                       Default false.
+	 */
+	return (bool) apply_filters( 'bp_nouveau_messages_is_spa', false );
+}
+
 /**
  * Localize the strings needed for the messages UI
  *
@@ -114,6 +134,8 @@ function bp_nouveau_messages_localize_scripts( $params = array() ) {
 			'one'  => __( '(and 1 other)', 'buddypress' ),
 			'more' => __( '(and %d others)', 'buddypress' ),
 		),
+		'isSpa'   => bp_nouveau_messages_is_spa(),
+		'rootUrl' => trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() ),
 	);
 
 	// Star private messages.
@@ -179,7 +201,11 @@ function bp_nouveau_messages_adjust_nav() {
 		if ( 'notices' === $secondary_nav_item->slug ) {
 			bp_core_remove_subnav_item( bp_get_messages_slug(), $secondary_nav_item->slug, 'members' );
 		} else {
-			$params = array( 'link' => '#' . $secondary_nav_item->slug );
+			if ( bp_nouveau_messages_is_spa() ) {
+				$params = array( 'link' => '#' . $secondary_nav_item->slug );
+			} else {
+				$params = array( 'link' => $secondary_nav_item->link . '#' . $secondary_nav_item->slug );
+			}
 
 			// Make sure Admins won't write a messages from the user's account.
 			if ( 'compose' === $secondary_nav_item->slug ) {
@@ -208,7 +234,11 @@ function bp_nouveau_messages_adjust_admin_nav( $admin_nav ) {
 			if ( 'notices' === $nav_id ) {
 				$admin_nav[ $nav_iterator ]['href'] = esc_url( add_query_arg( array( 'page' => 'bp-notices' ), bp_get_admin_url( 'users.php' ) ) );
 			} else {
-				$admin_nav[ $nav_iterator ]['href'] = $user_messages_link . '#' . trim( $nav_id );
+				if ( bp_nouveau_messages_is_spa() ) {
+					$admin_nav[ $nav_iterator ]['href'] = $user_messages_link . '#' . trim( $nav_id );
+				} else {
+					$admin_nav[ $nav_iterator ]['href'] .= '#' . trim( $nav_id );
+				}
 			}
 		}
 	}
diff --git src/bp-templates/bp-nouveau/js/buddypress-messages.js src/bp-templates/bp-nouveau/js/buddypress-messages.js
index 7c1ad32d4..0d113225e 100644
--- src/bp-templates/bp-nouveau/js/buddypress-messages.js
+++ src/bp-templates/bp-nouveau/js/buddypress-messages.js
@@ -73,7 +73,7 @@ window.bp = window.bp || {};
 
 					// Otherwise load it
 					} else {
-						self.router.navigate( 'compose', { trigger: true } );
+						self.routeUrl( 'compose' );
 					}
 
 				// Other views are classic.
@@ -82,7 +82,7 @@ window.bp = window.bp || {};
 					if ( self.box !== view_id || ! _.isUndefined( self.views.get( 'compose' ) ) ) {
 						self.clearViews();
 
-						self.router.navigate( view_id, { trigger: true } );
+						self.routeUrl( view_id );
 					}
 				}
 			} );
@@ -215,6 +215,20 @@ window.bp = window.bp || {};
 			this.views.add( { id: 'single', view: single_thread } );
 
 			single_thread.inject( '.bp-messages-content' );
+		},
+
+		/**
+		 * Uses the Single Page Application route or opens an URL.
+		 *
+		 * @param  {string} slug The URL slug to root the User to.
+		 * @return {void}
+		 */
+		routeUrl: function( slug ) {
+			if ( BP_Nouveau.messages.isSpa ) {
+				this.router.navigate( slug, { trigger: true } );
+			} else {
+				window.location.href = BP_Nouveau.messages.rootUrl + slug + '/#' + slug;
+			}
 		}
 	};
 
@@ -616,7 +630,7 @@ window.bp = window.bp || {};
 				form.get( 'view' ).remove();
 				bp.Nouveau.Messages.views.remove( { id: 'compose', view: form } );
 
-				bp.Nouveau.Messages.router.navigate( 'sentbox', { trigger: true } );
+				bp.Nouveau.Messages.routeUrl( 'sentbox' );
 			} ).fail( function( response ) {
 				if ( response.feedback ) {
 					bp.Nouveau.Messages.displayFeedback( response.feedback, response.type );
@@ -726,9 +740,8 @@ window.bp = window.bp || {};
 		loadSingleView: function( event ) {
 			event.preventDefault();
 
-			bp.Nouveau.Messages.router.navigate(
-				'view/' + $( event.currentTarget ).closest( '.thread-content' ).data( 'thread-id' ),
-				{ trigger: true }
+			bp.Nouveau.Messages.routeUrl(
+				'view/' + $( event.currentTarget ).closest( '.thread-content' ).data( 'thread-id' )
 			);
 		}
 	} );
