       var rows:int = Math.floor(this.bounds.height / this.tileWidth);
       var cols:int = Math.floor(this.bounds.width / this.tileHeight);
       // Smarts of our algo.
-      var cStart:uint, cEnd:uint, facing:uint, rSize:int, rSpacing:int, sizeRange:uint, spacingRange:uint, inverse:Boolean;
+      var cStart:uint, cEnd:uint, facing:uint, rSize:int, rSpacing:int, 
+          sizeRange:uint, spacingRange:uint, inverse:Boolean,
+          rStart:int, rEnd:int;
       // Grunts of our algo.
       var r:int, c:int, l:int, col:Array;
       // Subroutines.
-      var addRow:Function, setupEmptyRow:Function, setupFloorRow:Function, setupLedgeRow:Function, setupEachRow:Function;
+      var addRow:Function, setupEmptyRow:Function, setupFloorRow:Function, 
+          setupLedgeRow:Function, setupEachRow:Function;
       
       mapData = '';
       sizeRange = (this.maxLedgeSize - this.minLedgeSize);
       spacingRange = (this.maxLedgeSpacing.y - this.minLedgeSpacing.y);
       facing = FlxObject.RIGHT;
+      if (this.tilingStart == FlxObject.FLOOR)
+      {
+        rStart = rows-1;
+        rEnd = 0;
+      }
+      else
+      {
+        rEnd = rows-1;
+        rStart = 0;
+      }
       
       addRow = function():void
       {

    public const SIDE_TO_SIDE:uint = 1;
    
    public var tilingMode:uint;
    
    public var hasCeiling:Boolean;
    public var hasFloor:Boolean;

          col = [];
        }
      };
      for (r = rStart; 
           (rStart < rEnd && r < rEnd) || (rStart > rEnd && r >= rEnd); 
           (rEnd != 0) ? r++ : r--) // For each row. // TODO - Optimize throughout. 
      {
        if (r == rStart && this.tilingStart == FlxObject.FLOOR && this.hasFloor)
        {
          setupFloorRow.call(this);
          rSpacing = this.minLedgeSpacing.y;
        }
        else 
        {
