diff --git a/BurnOutSharp.Wrappers/CFB.cs b/BurnOutSharp.Wrappers/CFB.cs
index 4a50bbd9..67c67817 100644
--- a/BurnOutSharp.Wrappers/CFB.cs
+++ b/BurnOutSharp.Wrappers/CFB.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
namespace BurnOutSharp.Wrappers
@@ -158,6 +159,74 @@ namespace BurnOutSharp.Wrappers
#endregion
+ #region Data
+
+ ///
+ /// Get the ordered FAT sector chain for a given starting sector
+ ///
+ /// Initial FAT sector
+ /// Ordered list of sector numbers, null on error
+ public List GetFATSectorChain(uint startingSector)
+ {
+ // If we have an invalid sector
+ if (startingSector < 0 || startingSector >= FATSectorNumbers.Length)
+ return null;
+
+ // Setup the returned list
+ var sectors = new List { (Models.CFB.SectorNumber)startingSector };
+
+ var lastSector = (Models.CFB.SectorNumber)startingSector;
+ while (true)
+ {
+ // Get the next sector from the lookup table
+ var nextSector = FATSectorNumbers[(uint)lastSector];
+
+ // If we have an end of chain or free sector
+ if (nextSector == Models.CFB.SectorNumber.ENDOFCHAIN || nextSector == Models.CFB.SectorNumber.FREESECT)
+ break;
+
+ // Add the next sector to the list and replace the last sector
+ sectors.Add(nextSector);
+ lastSector = nextSector;
+ }
+
+ return sectors;
+ }
+
+ ///
+ /// Get the ordered Mini FAT sector chain for a given starting sector
+ ///
+ /// Initial Mini FAT sector
+ /// Ordered list of sector numbers, null on error
+ public List GetMiniFATSectorChain(uint startingSector)
+ {
+ // If we have an invalid sector
+ if (startingSector < 0 || startingSector >= MiniFATSectorNumbers.Length)
+ return null;
+
+ // Setup the returned list
+ var sectors = new List { (Models.CFB.SectorNumber)startingSector };
+
+ var lastSector = (Models.CFB.SectorNumber)startingSector;
+ while (true)
+ {
+ // Get the next sector from the lookup table
+ var nextSector = MiniFATSectorNumbers[(uint)lastSector];
+
+ // If we have an end of chain or free sector
+ if (nextSector == Models.CFB.SectorNumber.ENDOFCHAIN || nextSector == Models.CFB.SectorNumber.FREESECT)
+ break;
+
+ // Add the next sector to the list and replace the last sector
+ sectors.Add(nextSector);
+ lastSector = nextSector;
+ }
+
+ return sectors;
+ }
+
+ #endregion
+
#region Printing
///