Index: bp-xprofile/bp-xprofile-filters.php
===================================================================
--- bp-xprofile/bp-xprofile-filters.php	(revision 3510)
+++ bp-xprofile/bp-xprofile-filters.php	(working copy)
@@ -1,36 +1,44 @@
 <?php
+// Apply WordPress defined filters
+add_filter( 'bp_get_the_profile_field_value',          'wp_filter_kses', 1 );
+add_filter( 'bp_get_the_profile_field_name',           'wp_filter_kses', 1 );
+add_filter( 'bp_get_the_profile_field_edit_value',     'wp_filter_kses', 1 );
+add_filter( 'bp_get_the_profile_field_description',    'wp_filter_kses', 1 );
 
-/* Apply WordPress defined filters */
+add_filter( 'bp_get_the_profile_field_value',          'wptexturize'        );
+add_filter( 'bp_get_the_profile_field_value',          'convert_smilies', 2 );
+add_filter( 'bp_get_the_profile_field_value',          'convert_chars'      );
+add_filter( 'bp_get_the_profile_field_value',          'wpautop'            );
+add_filter( 'bp_get_the_profile_field_value',          'make_clickable'     );
+add_filter( 'bp_get_the_profile_field_value',          'force_balance_tags' );
 
-add_filter( 'bp_get_the_profile_field_value',         'wp_filter_kses', 1 );
-add_filter( 'bp_get_the_profile_field_name',          'wp_filter_kses', 1 );
-add_filter( 'bp_get_the_profile_field_edit_value',    'wp_filter_kses', 1 );
-add_filter( 'bp_get_the_profile_field_description',   'wp_filter_kses', 1 );
+add_filter( 'bp_get_the_profile_field_value',          'stripslashes' );
+add_filter( 'bp_get_the_profile_field_name',           'stripslashes' );
+add_filter( 'bp_get_the_profile_field_edit_value',     'stripslashes' );
+add_filter( 'bp_get_the_profile_field_description',    'stripslashes' );
 
-add_filter( 'bp_get_the_profile_field_value',         'wptexturize'        );
-add_filter( 'bp_get_the_profile_field_value',         'convert_smilies', 2 );
-add_filter( 'bp_get_the_profile_field_value',         'convert_chars'      );
-add_filter( 'bp_get_the_profile_field_value',         'wpautop'            );
-add_filter( 'bp_get_the_profile_field_value',         'make_clickable'     );
-add_filter( 'bp_get_the_profile_field_value',         'force_balance_tags' );
 
-add_filter( 'bp_get_the_profile_field_value',         'stripslashes' );
-add_filter( 'bp_get_the_profile_field_edit_value',    'stripslashes' );
-add_filter( 'bp_get_the_profile_field_name',          'stripslashes' );
-add_filter( 'bp_get_the_profile_field_description',   'stripslashes' );
+add_filter( 'xprofile_get_field_data',                 'wp_filter_kses', 1 );
+add_filter( 'xprofile_field_name_before_save',         'wp_filter_kses', 1 );
+add_filter( 'xprofile_field_description_before_save',  'wp_filter_kses', 1 );
+add_filter( 'xprofile_field_option_value_before_save', 'wp_filter_kses', 1 );
 
-add_filter( 'xprofile_get_field_data',                'wp_filter_kses', 1 );
-add_filter( 'xprofile_field_name_before_save',        'wp_filter_kses', 1 );
-add_filter( 'xprofile_field_description_before_save', 'wp_filter_kses', 1 );
+add_filter( 'xprofile_get_field_data',                 'force_balance_tags' );
+add_filter( 'xprofile_field_name_before_save',         'force_balance_tags' );
+add_filter( 'xprofile_field_description_before_save',  'force_balance_tags' );
+add_filter( 'xprofile_field_option_value_before_save', 'force_balance_tags' );
 
-add_filter( 'xprofile_get_field_data',                'force_balance_tags' );
-add_filter( 'xprofile_field_name_before_save',        'force_balance_tags' );
-add_filter( 'xprofile_field_description_before_save', 'force_balance_tags' );
+add_filter( 'xprofile_get_field_data',                 'stripslashes' );
+add_filter( 'xprofile_field_name_before_save',         'stripslashes' );
+add_filter( 'xprofile_field_description_before_save',  'stripslashes' );
+add_filter( 'xprofile_field_type_before_save',         'stripslashes' );
+add_filter( 'xprofile_field_option_value_before_save', 'stripslashes' );
 
-add_filter( 'xprofile_get_field_data',                'stripslashes' );
+add_filter( 'xprofile_group_name_before_save',         'stripslashes' );
+add_filter( 'xprofile_group_description_before_save',  'stripslashes' );
 
-/* Custom BuddyPress filters */
 
+// Custom BuddyPress filters
 add_filter( 'bp_get_the_profile_field_value',         'xprofile_filter_format_field_value', 1, 2 );
 add_filter( 'bp_get_the_site_member_profile_data',    'xprofile_filter_format_field_value', 1, 2 );
 add_filter( 'bp_get_the_profile_field_value',         'xprofile_filter_link_profile_data', 50, 2 );
@@ -47,7 +55,6 @@
  * @return string
  */
 function xprofile_sanitize_data_value_before_save ( $field_value, $field_id ) {
-
 	// Return if empty
 	if ( empty( $field_value ) )
 		return;
@@ -57,14 +64,14 @@
 
 	// Filter single value
 	if ( !is_array( $field_value ) ) {
-		$kses_field_value     = wp_filter_kses( $field_value );
+		$kses_field_value     = stripslashes( wp_filter_kses( $field_value ) );
 		$filtered_field_value = force_balance_tags( $kses_field_value );
 
 	// Filter each array item independently
 	} else {
 		foreach ( (array)$field_value as $value ) {
-			$kses_field_value       = wp_filter_kses( $value );
-			$filtered_values[] = force_balance_tags( $kses_field_value );
+			$kses_field_value   = stripslashes( wp_filter_kses( $value ) );
+			$filtered_values[]  = force_balance_tags( $kses_field_value );
 		}
 
 		$filtered_field_value = serialize( $filtered_values );
@@ -143,5 +150,4 @@
 	return $comments;
 }
 add_filter( 'comments_array', 'xprofile_filter_comments', 10, 2 );
-
-?>
+?>
\ No newline at end of file
Index: bp-xprofile/bp-xprofile-templatetags.php
===================================================================
--- bp-xprofile/bp-xprofile-templatetags.php	(revision 3508)
+++ bp-xprofile/bp-xprofile-templatetags.php	(working copy)
@@ -387,7 +387,7 @@
 					$option_values = maybe_unserialize( BP_XProfile_ProfileData::get_value_byid( $options[$k]->parent_id ) );
 					$option_values = (array)$option_values;
 
-					/* Check for updated posted values, but errors preventing them from being saved first time */
+					// Check for updated posted values, but errors preventing them from being saved first time
 					foreach( (array)$option_values as $i => $option_value ) {
 						if ( isset( $_POST['field_' . $field->id] ) && $_POST['field_' . $field->id] != $option_value ) {
 							if ( !empty( $_POST['field_' . $field->id] ) )
@@ -395,13 +395,12 @@
 						}
 					}
 
-					if ( in_array( $options[$k]->name, (array)$option_values ) || $options[$k]->is_default_option ) {
+					if ( in_array( $options[$k]->name, (array)$option_values ) || empty( $option_value ) && $options[$k]->is_default_option )
 						$selected = ' selected="selected"';
-					} else {
+					else
 						$selected = '';
-					}
 
-					$html .= apply_filters( 'bp_get_the_profile_field_options_select', '<option' . $selected . ' value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '">' . stripslashes( esc_attr( $options[$k]->name ) ) . '</option>', $options[$k] );
+					$html .= apply_filters( 'bp_get_the_profile_field_options_select', '<option' . $selected . ' value="' . esc_attr( $options[$k]->name ) . '">' . esc_attr( $options[$k]->name ) . '</option>', $options[$k] );
 				}
 				break;
 
@@ -411,19 +410,18 @@
 				for ( $k = 0; $k < count($options); $k++ ) {
 					$option_value = BP_XProfile_ProfileData::get_value_byid($options[$k]->parent_id);
 
-					/* Check for updated posted values, but errors preventing them from being saved first time */
+					// Check for updated posted values, but errors preventing them from being saved first time
 					if ( isset( $_POST['field_' . $field->id] ) && $option_value != $_POST['field_' . $field->id] ) {
 						if ( !empty( $_POST['field_' . $field->id] ) )
 							$option_value = $_POST['field_' . $field->id];
 					}
 
-					if ( $option_value == $options[$k]->name || $value == $options[$k]->name || ( empty( $option_value ) && $options[$k]->is_default_option ) ) {
+					if ( $option_value == $options[$k]->name || $value == $options[$k]->name || empty( $option_value ) && $options[$k]->is_default_option )
 						$selected = ' checked="checked"';
-					} else {
+					else
 						$selected = '';
-					}
 
-					$html .= apply_filters( 'bp_get_the_profile_field_options_radio', '<label><input' . $selected . ' type="radio" name="field_' . $field->id . '" id="option_' . $options[$k]->id . '" value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '"> ' . stripslashes( esc_attr( $options[$k]->name ) ) . '</label>', $options[$k] );
+					$html .= apply_filters( 'bp_get_the_profile_field_options_radio', '<label><input' . $selected . ' type="radio" name="field_' . $field->id . '" id="option_' . $options[$k]->id . '" value="' . esc_attr( $options[$k]->name ) . '"> ' . esc_attr( $options[$k]->name ) . '</label>', $options[$k] );
 				}
 
 				$html .= '</div>';
@@ -432,7 +430,7 @@
 			case 'checkbox':
 				$option_values = BP_XProfile_ProfileData::get_value_byid($options[0]->parent_id);
 
-				/* Check for updated posted values, but errors preventing them from being saved first time */
+				// Check for updated posted values, but errors preventing them from being saved first time
 				if ( isset( $_POST['field_' . $field->id] ) && $option_values != maybe_serialize( $_POST['field_' . $field->id] ) ) {
 					if ( !empty( $_POST['field_' . $field->id] ) )
 						$option_values = $_POST['field_' . $field->id];
@@ -442,13 +440,13 @@
 
 				for ( $k = 0; $k < count($options); $k++ ) {
 					for ( $j = 0; $j < count($option_values); $j++ ) {
-						if ( $option_values[$j] == $options[$k]->name || @in_array( $options[$k]->name, $value ) || $options[$k]->is_default_option ) {
+						if ( $option_values[$j] == $options[$k]->name || @in_array( $options[$k]->name, $value ) || empty( $option_value ) && $options[$k]->is_default_option ) {
 							$selected = ' checked="checked"';
 							break;
 						}
 					}
 
-					$html .= apply_filters( 'bp_get_the_profile_field_options_checkbox', '<label><input' . $selected . ' type="checkbox" name="field_' . $field->id . '[]" id="field_' . $options[$k]->id . '_' . $k . '" value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '"> ' . stripslashes( esc_attr( $options[$k]->name ) ) . '</label>', $options[$k] );
+					$html .= apply_filters( 'bp_get_the_profile_field_options_checkbox', '<label><input' . $selected . ' type="checkbox" name="field_' . $field->id . '[]" id="field_' . $options[$k]->id . '_' . $k . '" value="' . esc_attr( $options[$k]->name ) . '"> ' . esc_attr( $options[$k]->name ) . '</label>', $options[$k] );
 					$selected = '';
 				}
 				break;
Index: bp-xprofile/bp-xprofile-classes.php
===================================================================
--- bp-xprofile/bp-xprofile-classes.php	(revision 3508)
+++ bp-xprofile/bp-xprofile-classes.php	(working copy)
@@ -34,8 +34,8 @@
 	function save() {
 		global $wpdb, $bp;
 
-		$this->name			= apply_filters( 'xprofile_group_name_before_save', $this->name, $this->id );
-		$this->description	= apply_filters( 'xprofile_group_description_before_save', $this->description, $this->id );
+		$this->name        = apply_filters( 'xprofile_group_name_before_save', $this->name, $this->id );
+		$this->description = apply_filters( 'xprofile_group_description_before_save', $this->description, $this->id );
 
 		do_action( 'xprofile_group_before_save', $this );
 
@@ -297,8 +297,8 @@
 			$this->group_id          = $field->group_id;
 			$this->parent_id         = $field->parent_id;
 			$this->type              = $field->type;
-			$this->name              = stripslashes( $field->name );
-			$this->description       = stripslashes( $field->description );
+			$this->name              = $field->name;
+			$this->description       = $field->description;
 			$this->is_required       = $field->is_required;
 			$this->can_delete        = $field->can_delete;
 			$this->field_order       = $field->field_order;
@@ -412,7 +412,9 @@
 								$is_default = 1;
 						}
 
-						if ( '' != $option_value ) {
+						if ( !empty( $option_value ) ) {
+							$option_value = apply_filters( 'xprofile_field_option_value_before_save', $option_value, $this->group_id );
+
 							if ( !$wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->profile->table_name_fields} (group_id, parent_id, type, name, description, is_required, option_order, is_default_option) VALUES (%d, %d, 'option', %s, '', 0, %d, %d)", $this->group_id, $parent_id, $option_value, $counter, $is_default ) ) )
 								return false;
 						}
@@ -740,7 +742,7 @@
 			$this->id           = $profiledata->id;
 			$this->user_id      = $profiledata->user_id;
 			$this->field_id     = $profiledata->field_id;
-			$this->value        = stripslashes( $profiledata->value );
+			$this->value        = $profiledata->value;
 			$this->last_updated = $profiledata->last_updated;
 		}
 	}
@@ -964,5 +966,4 @@
 		return $data[BP_XPROFILE_FULLNAME_FIELD_NAME];
 	}
 }
-
 ?>
\ No newline at end of file
Index: bp-xprofile.php
===================================================================
--- bp-xprofile.php	(revision 3508)
+++ bp-xprofile.php	(working copy)
@@ -663,6 +663,7 @@
 
 	/* Check the value is an acceptable value */
 	if ( 'checkbox' == $field->type || 'radio' == $field->type || 'selectbox' == $field->type || 'multiselectbox' == $field->type ) {
+		$value = stripslashes_deep( $value );
 		$options = $field->get_children();
 
 		foreach( $options as $option )
