public function save_user_meta( $id, $user_meta = null, $strict = false, $fields = array() ) {

		$simple_tableless_objects = PodsForm::simple_tableless_objects();

		$conflicted = pods_no_conflict_check( 'user' );

		if ( ! $conflicted ) {
			pods_no_conflict_on( 'user' );
		}

		if ( ! is_array( $user_meta ) ) {
			$user_meta = array();
		}

		$id = (int) $id;

		$meta = get_user_meta( $id );

		foreach ( $user_meta as $meta_key => $meta_value ) {
			if ( null === $meta_value ) {
				$old_meta_value = '';

				if ( isset( $meta[ $meta_key ] ) ) {
					$old_meta_value = $meta[ $meta_key ];
				}

				delete_user_meta( $id, $meta_key, $old_meta_value );
			} else {
				$simple = false;

				if ( isset( $fields[ $meta_key ] ) ) {
					$field_data = $fields[ $meta_key ];

					$simple = ( 'pick' === $field_data['type'] && in_array( pods_var( 'pick_object', $field_data ), $simple_tableless_objects ) );
				}

				if ( $simple ) {
					delete_user_meta( $id, $meta_key );

					if ( ! is_array( $meta_value ) ) {
						$meta_value = array( $meta_value );
					}

					foreach ( $meta_value as $value ) {
						add_user_meta( $id, $meta_key, $value );
					}
				} else {
					update_user_meta( $id, $meta_key, $meta_value );
				}
			}
		}

		if ( $strict ) {
			foreach ( $meta as $meta_key => $meta_value ) {
				if ( ! isset( $user_meta[ $meta_key ] ) ) {
					delete_user_meta( $id, $meta_key, $user_meta[ $meta_key ] );
				}
			}
		}

		if ( ! $conflicted ) {
			pods_no_conflict_off( 'user' );
		}

		return $id;
	}