function menuStretch( menuList, verticalAdjustment, itemHeightOverride, wrapperHeightOverride ){

	//	Get the total width of the menu
	var mw = parseInt($_(menuList).css('width').substr(0, $_(menuList).css('width').length - 2));

	//	Get the total height of the menu
	var mh = parseInt($_(menuList).css('height').substr(0, $_(menuList).css('height').length - 2));
	
	//	Get the number of LIs
	var ic = $_(menuList + ' li').length;
	
	//	Get the height of the LIs
	if ( $_(menuList + ' li').css('height').indexOf('px') ==-1 ){
		var ih = 0;
	} else {
		var ih = parseInt($_(menuList + ' li').css('height').substr(0, $_(menuList).css('height').length - 2));
	}
	var nih = Math.max(mh, ih);

	//	But if we can't get it, use the override
	if ( typeof nih != 'number' || isNaN(nih) ){
		var nih = itemHeightOverride;
	}
	
	//	Escape if we're going to divide by zero because we all know that will make the internet explode
	if ( ic < 1 ){
		return
	}
	
	//	Derive the item height
	var iwr = mw/ic;
	
	//	Make it an integer
	var iw = Math.floor(iwr);
	
	//	Do the assignments
	$_( menuList + ' li' ).css('width', iw + 'px');
	$_( menuList + ' li' ).css('height', nih + 'px');
	$_( menuList + ' li a' ).css('width', iw + 'px');
	$_( menuList + ' li a' ).css('height', nih + 'px');
	$_( menuList + ' li a' ).css('margin', '0px');
	$_( menuList + ' li a' ).css('padding', '0px');
	
	//	Run away if we're in IE 'cos none of this stuff works!
	/*if( $_.browser.msie ){
		return
	}*/
	
	//	Wrap link text for vertical centring 
	$_( menuList + ' li a' ).wrapInner('<div class="menustretcherlinktextwrapper"></div>');
	
	//	Adjust padding on each wrapper in order to centre the text vertically
	$_( menuList + ' li a .menustretcherlinktextwrapper' ).each(function(i, tw){
	
		//	Try to fit multiple lines into the available space by adjusting the line height, then checking; but get out of the loop once the line height reaches zero because if it hasn't stopped then it's never going to!
		while ( parseInt($_(tw).css('height').substr(0, $_(tw).css('height').length -2)) > nih && parseInt($_(tw).css('line-height').substr(0, $_(tw).css('line-height').length -2)) > 0){
			var tlh = parseInt($_(tw).css('line-height').substr(0, $_(tw).css('line-height').length -2));
			$_(tw).css('line-height', (tlh - 1) + 'px' );
		}

		//	Get the wrapper height
		var twh = parseInt($_(tw).css('height').substr(0, $_(tw).css('height').length -2));
		
		//	But if it doesn't work then use the override
		if ( typeof twh != 'number' || isNaN(twh) ){
			twh = wrapperHeightOverride;
		}

		//	Get the available space
		var avs = nih - twh;
		
		//	Get the raw padding
		var tpr = avs/2;
		
		//	Make the padding
		var tpt = Math.floor(tpr);
		
		var tpb = tpt;
		
		//	Account for left-over pixel in the case of an odd number of available pixels
		if ( tpt < tpr ){
			tpb += 1;
		}
		
		//	Adjust
		tpt -= verticalAdjustment;
		tpb += verticalAdjustment;
		
		//alert('tpt: ' + tpt + ' ' + 'tpb: ' + tpb );
		
		//	Assign	
		$_(tw).css('margin-top', (tpt + 'px') );
		$_(tw).css('margin-bottom', (tpb + 'px') );
	});
}