Index: src/bp-templates/bp-nouveau/includes/template-tags.php
===================================================================
--- src/bp-templates/bp-nouveau/includes/template-tags.php	(revision 11764)
+++ src/bp-templates/bp-nouveau/includes/template-tags.php	(working copy)
@@ -739,6 +739,7 @@
 		}
 
 	} elseif ( ! empty( $bp_nouveau->object_nav ) ) {
+
 		$bp_nouveau->displayed_nav = $bp_nouveau->object_nav;
 
 		/**
@@ -751,6 +752,7 @@
 		 * @param array $n   The arguments of the Navigation loop.
 		 */
 		$nav = apply_filters( 'bp_nouveau_get_nav', $nav, $n );
+
 	}
 
 	$bp_nouveau->sorted_nav = array_values( $nav );
@@ -2132,22 +2134,38 @@
 			$attribute_type = ' ' . checked( $value, $submitted, false );
 		}
 
-		if ( ! empty( $class ) ) {
-			// In case people are adding classes..
-			$classes = explode( ' ', $class );
-			$class = ' class="' . esc_attr( join( ' ', array_map( 'sanitize_html_class', $classes ) ) ) . '"';
-		}
+		// Do not run function to display errors for the private radio.
+		if ( 'private' !== $value ) {
 
-		// Do not fire the do_action to display errors for the private radio.
-		if ( 'private' !== $value ) {
 			/**
-			 * Fires and displays any member registration field errors.
+			 * Fetch & display any BP member registration field errors.
 			 *
-			 * @since 1.1.0 (BuddyPress)
+			 * Passes BP signup errors to Nouveau's template function to
+			 * render suitable markup for error string.
 			 */
-			do_action( "bp_{$name}_errors" );
+			if( isset( buddypress()->signup->errors[$name] ) ) {
+				nouveau_error_template( buddypress()->signup->errors[$name], 'error' );
+
+				// If we have BP errors lets set a class for the input to style as an error.
+				$class .= ' invalid';
+			}
 		}
 
+		if ( ! empty( $class ) ) {
+
+			// In case people are adding classes
+			// &/or we have an error class to add.
+			$classes = explode( ' ', $class );
+		}
+
+		if ( isset( $classes ) ) {
+
+			// If we only have one token then lets trim the empty space
+			$str_spacer = ( count( $classes ) > 2 )? ' ' : '';
+
+			$class = ' class="' . esc_attr( join( $str_spacer, array_map( 'sanitize_html_class', $classes ) ) ) . '"';
+		}
+
 		// Set the input.
 		$field_output = sprintf( '<input type="%1$s" name="%2$s" id="%3$s" %4$s value="%5$s" %6$s />',
 			esc_attr( $type ),
@@ -2231,3 +2249,33 @@
 		do_action( $submit_data['after'] );
 	}
 }
+
+/**
+ * Display supplemental error or feedback messages
+ *
+ * This template handles in page error or feedback messages e.g signup fields
+ * 'Username exists' type registration fields error notice.
+ *
+ * @param  string $string required: the message to display.
+ * @param  string $type optional: the type of error message e.g 'error'.
+ *
+ * @todo Could this requirement to handle additional messages be better served by
+ *       passing strings into the main Nouveau feedback messages array to be rendered
+ *       by the main template include for notices.
+ *
+ * @since 1.0.0
+ */
+function nouveau_error_template( $string = '', $type = '' ) {
+
+	if ( ! $string )
+		return;
+	?>
+
+	<div class="bp-messages bp-feedback <?php echo esc_attr( $type ); ?>">
+		<span class="bp-icon" aria-hidden="true"></span>
+		<p><?php echo esc_html( $string ); ?></p>
+	</div>
+
+	<?php
+	return;
+}
