diff --git a/acb_extract_orig_cri/CriAcbFile.cs b/acb_extract_cri/CriAcbFile.cs
index e81f6c1..ec86138 100644
--- a/acb_extract_orig_cri/CriAcbFile.cs
+++ b/acb_extract_cri/CriAcbFile.cs
@@ -15,6 +15,7 @@ namespace vgm_acb.extract
         public byte ReferenceType { set; get; }
         public ushort ReferenceIndex { set; get; }
 
+        public ushort numWaveforms { set; get; }
         public bool IsWaveformIdentified { set; get; }
         public ushort WaveformIndex { set; get; }
         public ushort WaveformId { set; get; }
@@ -24,6 +25,12 @@ namespace vgm_acb.extract
         public string CueName { set; get; }
     }
     
+    public class CriAcbSeqRecord
+    {
+        public ushort NumTracks { set; get; }
+        public ushort[] TrackIndex { set; get; }
+        public byte Type { set; get; }
+    }
     public class CriAcbFile : CriUtfTable
     {
         public const string EXTRACTION_FOLDER_FORMAT = "_vgmt_acb_ext_{0}";
@@ -127,7 +134,17 @@ namespace vgm_acb.extract
             }
         }
 
+        public ulong SeqTableOffset
+        {
+            get
+            {
+                return CriUtfTable.GetOffsetForUtfFieldForRow(this, 0, "SequenceTable");
+            }
+        }
+
         public CriAcbCueRecord[] CueList { set; get; }
+        public CriAcbSeqRecord[] SeqList { set; get; }
+
         public Dictionary<string, ushort> CueNamesToWaveforms { set; get; }
 
         public byte[] AcfMd5Hash
@@ -229,8 +246,34 @@ namespace vgm_acb.extract
             CriUtfTable synthTableUtf = new CriUtfTable();
             synthTableUtf.Initialize(fs, (long)this.SynthTableOffset);
 
+            CriUtfTable seqTableUtf = new CriUtfTable();
+            seqTableUtf.Initialize(fs, (long)this.SeqTableOffset);
+
+
+            this.SeqList = new CriAcbSeqRecord[seqTableUtf.NumberOfRows];
             this.CueList = new CriAcbCueRecord[cueTableUtf.NumberOfRows];
 
+            for (int i = 0; i < seqTableUtf.NumberOfRows; i++)
+            {
+                this.SeqList[i] = new CriAcbSeqRecord();
+
+                this.SeqList[i].NumTracks = (ushort)CriUtfTable.GetUtfFieldForRow(seqTableUtf, i, "NumTracks");
+                this.SeqList[i].Type = (byte)CriUtfTable.GetUtfFieldForRow(seqTableUtf, i, "Type");
+
+                var tindex = (byte[])CriUtfTable.GetUtfFieldForRow(seqTableUtf, i, "TrackIndex");
+                this.SeqList[i].TrackIndex = new ushort[(int)Math.Ceiling(tindex.Length / 2.0)];
+
+                Buffer.BlockCopy(tindex, 0, this.SeqList[i].TrackIndex, 0, tindex.Length);
+
+                for (int j = 0; j < this.SeqList[i].NumTracks; j++) {
+                    // i'm a lazy bastard and don't want to look up a better way
+                    // byte order is dumb
+                    ushort a = (ushort) (this.SeqList[i].TrackIndex[j] & 0xff00u);
+                    ushort b = (ushort) (this.SeqList[i].TrackIndex[j] & 0xffu);
+                    this.SeqList[i].TrackIndex[j] = (ushort) ((b << 8) | (a >> 8));
+                }
+            }
+
             for (int i = 0; i < cueTableUtf.NumberOfRows; i++)
             {
                 this.CueList[i] = new CriAcbCueRecord();
@@ -240,6 +283,8 @@ namespace vgm_acb.extract
                 this.CueList[i].ReferenceType = (byte)CriUtfTable.GetUtfFieldForRow(cueTableUtf, i, "ReferenceType");
                 this.CueList[i].ReferenceIndex = (ushort)CriUtfTable.GetUtfFieldForRow(cueTableUtf, i, "ReferenceIndex");
 
+                this.CueList[i].numWaveforms = this.SeqList[i].NumTracks;
+
                 switch (this.CueList[i].ReferenceType)
                 {
                     case 2:
@@ -257,12 +302,13 @@ namespace vgm_acb.extract
                         }
                         else
                         {
-                            referenceCorrection += 4; // relative to previous offset, do not lookup
+                            //referenceCorrection += 4; // relative to previous offset, do not lookup
                                                       // @TODO: Should this do a referenceItemsSize - 2 for the ReferenceIndex?  Need to find 
                                                       //    one where size > 4.
                             //referenceItemsOffset = (ulong)CriUtfTable.GetOffsetForUtfFieldForRow(synthTableUtf, this.CueList[i].ReferenceIndex, "ReferenceItems");
                             //referenceItemsSize = CriUtfTable.GetSizeForUtfFieldForRow(synthTableUtf, this.CueList[i].ReferenceIndex, "ReferenceItems");
                             //referenceCorrection = referenceItemsSize - 2;
+                            referenceCorrection += 4 * (ulong)this.SeqList[i-1].NumTracks; // skip extra waveforms
                         }
                         break;
                     default:
