def merge(self, other):
		'''
		Returns a *copy* of this phoneme, with the features of other merged into this feature bundle.
		Other can be a list of phonemes, in which case the list is returned (for technical reasons).
		Other may also be a single feature value or a list of feature values.
		'''
		phoneme = deepcopy(self)

		# special case for list of phonemes
		if isinstance(other, list) and len(other) > 0 and isinstance(other[0], AbstractPhoneme):
			return other

		if isinstance(other, AbstractPhoneme):
			feature_values = other.features.values()
		elif type(other) != list and type(other) != tuple:
			feature_values = [other]
		else:
			feature_values = other

		for f in feature_values:
			if type(f) == list:
				for inner_f in f:
					phoneme[type(inner_f)] = inner_f
			elif isinstance(f, AbstractPhoneme):
				phoneme = phoneme << f
			else:
				phoneme[type(f)] = f

		if isinstance(other, AbstractPhoneme) and other.ipa is not None:
			phoneme.ipa = other.ipa

		return phoneme
Returns a *copy* of this phoneme, with the features of other merged into this feature bundle.
		Other can be a list of phonemes, in which case the list is returned (for technical reasons).
		Other may also be a single feature value or a list of feature values.