function _fnFeatureHtmlTable(settings) {
		var table = $(settings.nTable);

		// Scrolling from here on in
		var scroll = settings.oScroll;

		if (scroll.sX === '' && scroll.sY === '') {
			return settings.nTable;
		}

		var scrollX = scroll.sX;
		var scrollY = scroll.sY;
		var classes = settings.oClasses.scrolling;
		var caption = settings.captionNode;
		var captionSide = caption ? caption._captionSide : null;
		var headerClone = $(table[0].cloneNode(false));
		var footerClone = $(table[0].cloneNode(false));
		var footer = table.children('tfoot');
		var _div = '<div/>';
		var size = function (s) {
			return !s ? null : _fnStringToCss(s);
		};

		if (!footer.length) {
			footer = null;
		}

		/*
		 * The HTML structure that we want to generate in this function is:
		 *  div - scroller
		 *    div - scroll head
		 *      div - scroll head inner
		 *        table - scroll head table
		 *          thead - thead
		 *    div - scroll body
		 *      table - table (master table)
		 *        thead - thead clone for sizing
		 *        tbody - tbody
		 *    div - scroll foot
		 *      div - scroll foot inner
		 *        table - scroll foot table
		 *          tfoot - tfoot
		 */
		var scroller = $(_div, { 'class': classes.container })
			.append(
				$(_div, { 'class': classes.header.self })
					.css({
						overflow: 'hidden',
						position: 'relative',
						border: 0,
						width: scrollX ? size(scrollX) : '100%'
					})
					.append(
						$(_div, { 'class': classes.header.inner })
							.css({
								'box-sizing': 'content-box',
								width: scroll.sXInner || '100%'
							})
							.append(
								headerClone
									.removeAttr('id')
									.css('margin-left', 0)
									.append(captionSide === 'top' ? caption : null)
									.append(
										table.children('thead')
									)
							)
					)
			)
			.append(
				$(_div, { 'class': classes.body })
					.css({
						position: 'relative',
						overflow: 'auto',
						width: size(scrollX)
					})
					.append(table)
			);

		if (footer) {
			scroller.append(
				$(_div, { 'class': classes.footer.self })
					.css({
						overflow: 'hidden',
						border: 0,
						width: scrollX ? size(scrollX) : '100%'
					})
					.append(
						$(_div, { 'class': classes.footer.inner })
							.append(
								footerClone
									.removeAttr('id')
									.css('margin-left', 0)
									.append(captionSide === 'bottom' ? caption : null)
									.append(
										table.children('tfoot')
									)
							)
					)
			);
		}

		var children = scroller.children();
		var scrollHead = children[0];
		var scrollBody = children[1];
		var scrollFoot = footer ? children[2] : null;

		// When the body is scrolled, then we also want to scroll the headers
		$(scrollBody).on('scroll.DT', function () {
			var scrollLeft = this.scrollLeft;

			scrollHead.scrollLeft = scrollLeft;

			if (footer) {
				scrollFoot.scrollLeft = scrollLeft;
			}
		});

		// When focus is put on the header cells, we might need to scroll the body
		$('th, td', scrollHead).on('focus', function () {
			var scrollLeft = scrollHead.scrollLeft;

			scrollBody.scrollLeft = scrollLeft;

			if (footer) {
				scrollBody.scrollLeft = scrollLeft;
			}
		});

		$(scrollBody).css('max-height', scrollY);
		if (!scroll.bCollapse) {
			$(scrollBody).css('height', scrollY);
		}

		settings.nScrollHead = scrollHead;
		settings.nScrollBody = scrollBody;
		settings.nScrollFoot = scrollFoot;

		// On redraw - align columns
		settings.aoDrawCallback.push(_fnScrollDraw);

		return scroller[0];
	}
Add any control elements for the table - specifically scrolling
 @param {object} settings dataTables settings object
 @returns {node} Node to add to the DOM
 @memberof DataTable#oApi