Index: src/bp-templates/bp-legacy/buddypress/members/register.php
===================================================================
--- src/bp-templates/bp-legacy/buddypress/members/register.php	(revision 11382)
+++ src/bp-templates/bp-legacy/buddypress/members/register.php	(working copy)
@@ -174,6 +174,10 @@
 							$field_type = bp_xprofile_create_field_type( bp_get_the_profile_field_type() );
 							$field_type->edit_field_html();
 
+							if ( bp_get_the_profile_field_description() ) : ?>
+								<p class="description" id="<?php bp_the_profile_field_input_name(); ?>-3"><?php bp_the_profile_field_description(); ?></p>
+							<?php endif;
+
 							/**
 							 * Fires before the display of the visibility options for xprofile fields.
 							 *
@@ -182,7 +186,7 @@
 							do_action( 'bp_custom_profile_edit_fields_pre_visibility' );
 
 							if ( bp_current_user_can( 'bp_xprofile_change_field_visibility' ) ) : ?>
-								<p class="field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>">
+								<p class="field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>"><span id="<?php bp_the_profile_field_input_name(); ?>-2">
 									<?php
 									printf(
 										__( 'This field can be seen by: %s', 'buddypress' ),
@@ -189,9 +193,11 @@
 										'<span class="current-visibility-level">' . bp_get_the_profile_field_visibility_level_label() . '</span>'
 									);
 									?>
-									<button type="button" class="visibility-toggle-link"><?php _ex( 'Change', 'Change profile field visibility level', 'buddypress' ); ?></button>
+									</span>
+									<button type="button" class="visibility-toggle-link" aria-describedby="<?php bp_the_profile_field_input_name(); ?>-2"><?php _ex( 'Change', 'Change profile field visibility level', 'buddypress' ); ?></button>
 								</p>
 
+
 								<div class="field-visibility-settings" id="field-visibility-settings-<?php bp_the_profile_field_id() ?>">
 									<fieldset>
 										<legend><?php _e( 'Who can see this field?', 'buddypress' ) ?></legend>
@@ -222,8 +228,6 @@
 							 */
 							do_action( 'bp_custom_profile_edit_fields' ); ?>
 
-							<p class="description"><?php bp_the_profile_field_description(); ?></p>
-
 						</div>
 
 					<?php endwhile; ?>
Index: src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
===================================================================
--- src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php	(revision 11382)
+++ src/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php	(working copy)
@@ -43,6 +43,10 @@
 				$field_type = bp_xprofile_create_field_type( bp_get_the_profile_field_type() );
 				$field_type->edit_field_html();
 
+				if ( bp_get_the_profile_field_description() ) : ?>
+					<p class="description" id="<?php bp_the_profile_field_input_name(); ?>-3"><?php bp_the_profile_field_description(); ?></p>
+				<?php endif;
+
 				/**
 				 * Fires before the display of visibility options for the field.
 				 *
@@ -52,7 +56,7 @@
 				?>
 
 				<?php if ( bp_current_user_can( 'bp_xprofile_change_field_visibility' ) ) : ?>
-					<p class="field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>">
+					<p class="field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>"><span id="<?php bp_the_profile_field_input_name(); ?>-2">
 						<?php
 						printf(
 							__( 'This field can be seen by: %s', 'buddypress' ),
@@ -59,7 +63,8 @@
 							'<span class="current-visibility-level">' . bp_get_the_profile_field_visibility_level_label() . '</span>'
 						);
 						?>
-						<button type="button" class="visibility-toggle-link"><?php _e( 'Change', 'buddypress' ); ?></button>
+						</span>
+						<button type="button" class="visibility-toggle-link" aria-describedby="<?php bp_the_profile_field_input_name(); ?>-2"><?php _ex( 'Change', 'Change profile field visibility level', 'buddypress' ); ?></button>
 					</p>
 
 					<div class="field-visibility-settings" id="field-visibility-settings-<?php bp_the_profile_field_id() ?>">
@@ -91,7 +96,6 @@
 				 */
 				do_action( 'bp_custom_profile_edit_fields' ); ?>
 
-				<p class="description"><?php bp_the_profile_field_description(); ?></p>
 			</div>
 
 		<?php endwhile; ?>
Index: src/bp-xprofile/bp-xprofile-template.php
===================================================================
--- src/bp-xprofile/bp-xprofile-template.php	(revision 11382)
+++ src/bp-xprofile/bp-xprofile-template.php	(working copy)
@@ -1282,10 +1282,10 @@
 		// Parse optional arguments.
 		$r = bp_parse_args( $args, array(
 			'field_id'     => bp_get_the_profile_field_id(),
-			'before'       => '<ul class="radio">',
-			'after'        => '</ul>',
-			'before_radio' => '<li class="%s">',
-			'after_radio'  => '</li>',
+			'before'       => '<div class="radio">',
+			'after'        => '</div>',
+			'before_radio' => '',
+			'after_radio'  => '',
 			'class'        => 'bp-xprofile-visibility'
 		), 'xprofile_visibility_radio_buttons' );
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-checkbox.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-checkbox.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-checkbox.php	(working copy)
@@ -82,8 +82,6 @@
 				'user_id' => $user_id
 			) ); ?>
 
-		</fieldset>
-
 		<?php
 	}
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-datebox.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-datebox.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-datebox.php	(working copy)
@@ -138,7 +138,6 @@
 
 			</div>
 
-		</fieldset>
 	<?php
 	}
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-multiselectbox.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-multiselectbox.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-multiselectbox.php	(working copy)
@@ -73,8 +73,11 @@
 			'name'     => bp_get_the_profile_field_input_name() . '[]',
 		) ); ?>
 
+		<fieldset class="multiselectbox">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>[]">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -83,7 +86,7 @@
 		/** This action is documented in bp-xprofile/bp-xprofile-classes */
 		do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-		<select <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+		<select <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3">
 			<?php bp_the_profile_field_options( array(
 				'user_id' => $user_id
 			) ); ?>
@@ -91,7 +94,7 @@
 
 		<?php if ( ! bp_get_the_profile_field_is_required() ) : ?>
 
-			<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>[]' );">
+			<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>[]' );" role="button">
 				<?php esc_html_e( 'Clear', 'buddypress' ); ?>
 			</a>
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-number.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-number.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-number.php	(working copy)
@@ -65,8 +65,11 @@
 			'value' =>  bp_get_the_profile_field_edit_value()
 		) ); ?>
 
+		<fieldset class="number-type">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -75,7 +78,7 @@
 		/** This action is documented in bp-xprofile/bp-xprofile-classes */
 		do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3">
 
 		<?php
 	}
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-radiobutton.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-radiobutton.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-radiobutton.php	(working copy)
@@ -87,8 +87,6 @@
 
 			<?php endif; ?>
 
-		</fieldset>
-
 		<?php
 	}
 
@@ -176,7 +174,7 @@
 			return;
 		} ?>
 
-		<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );">
+		<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );" role="button">
 			<?php esc_html_e( 'Clear', 'buddypress' ); ?>
 		</a>
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-selectbox.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-selectbox.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-selectbox.php	(working copy)
@@ -65,8 +65,11 @@
 			$user_id = bp_displayed_user_id();
 		} ?>
 
+		<fieldset class="selectbox">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -75,7 +78,7 @@
 		/** This action is documented in bp-xprofile/bp-xprofile-classes */
 		do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-		<select <?php echo $this->get_edit_field_html_elements( $raw_properties ); ?>>
+		<select <?php echo $this->get_edit_field_html_elements( $raw_properties ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3">
 			<?php bp_the_profile_field_options( array( 'user_id' => $user_id ) ); ?>
 		</select>
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-textarea.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-textarea.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-textarea.php	(working copy)
@@ -63,8 +63,11 @@
 
 		$richtext_enabled = bp_xprofile_is_richtext_enabled_for_field(); ?>
 
+		<fieldset class="textarea">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -81,7 +84,7 @@
 
 			?>
 
-			<textarea <?php echo $this->get_edit_field_html_elements( $r ); ?>><?php bp_the_profile_field_edit_value(); ?></textarea>
+			<textarea <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3"><?php bp_the_profile_field_edit_value(); ?></textarea>
 
 			<?php
 
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-textbox.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-textbox.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-textbox.php	(working copy)
@@ -64,8 +64,11 @@
 			'value' => bp_get_the_profile_field_edit_value(),
 		) ); ?>
 
+		<fieldset class="textbox">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -74,7 +77,7 @@
 		/** This action is documented in bp-xprofile/bp-xprofile-classes */
 		do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3">
 
 		<?php
 	}
Index: src/bp-xprofile/classes/class-bp-xprofile-field-type-url.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-field-type-url.php	(revision 11382)
+++ src/bp-xprofile/classes/class-bp-xprofile-field-type-url.php	(working copy)
@@ -66,8 +66,11 @@
 			'value'     => esc_url( bp_get_the_profile_field_edit_value() ),
 		) ); ?>
 
+		<fieldset class="url">
+		<legend><?php bp_the_profile_field_name(); ?></legend>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>">
-			<?php bp_the_profile_field_name(); ?>
+			<span class="bp-screen-reader-text"><?php bp_the_profile_field_name(); ?></span>
 			<?php bp_the_profile_field_required_label(); ?>
 		</label>
 
@@ -76,7 +79,7 @@
 		/** This action is documented in bp-xprofile/bp-xprofile-classes */
 		do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3">
 
 		<?php
 	}
