$.fn.dataTableExt.oApi.fnAddTr = function (oSettings, oData, bRedraw) {
        if (typeof bRedraw == 'undefined') {
            bRedraw = true;
        }
 
        var nTrs = oData.getElementsByTagName('tr');
        for (var y = 0; y < nTrs.length; y++) {
            //var nTds = nTr.getElementsByTagName('td');
            var nTds = nTrs[y].getElementsByTagName('td');
            if (nTds.length != oSettings.aoColumns.length) {
                alert('Warning: not adding new TR - columns and TD elements must match');
                return;
            }
            var aData = [];
            for (var i = 0; i < nTds.length; i++) {
                aData.push(nTds[i].innerHTML);
            }

            /* Add the data and then replace DataTable's generated TR with ours */
            var iIndex = this.oApi._fnAddData(oSettings, aData);
            oData._DT_RowIndex = iIndex;
            //oSettings.aoData[iIndex].oData = nTrs[y];
 
            oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
 
            if (bRedraw) {
                this.oApi._fnReDraw(oSettings);
            }
        }
    }