diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee
index 84ed7fe45..b93a02306 100644
--- a/app/lib/LevelLoader.coffee
+++ b/app/lib/LevelLoader.coffee
@@ -245,7 +245,7 @@ module.exports = class LevelLoader extends CocoClass
     if extantRequiredThangTypes.length < requiredThangTypes.length
       console.error "Some Thang had a blank required ThangType in components list:", components
     for thangType in extantRequiredThangTypes
-      url = "/db/thang.type/#{thangType}/version?project=name,components,original,rasterIcon,kind"
+      url = "/db/thang.type/#{thangType}/version?project=name,components,original,rasterIcon,kind,prerenderedSpriteSheetData"
       @worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
 
   onThangNamesLoaded: (thangNames) ->
diff --git a/app/lib/sprites/SpriteBuilder.coffee b/app/lib/sprites/SpriteBuilder.coffee
index 43c967c4a..3329a27d3 100644
--- a/app/lib/sprites/SpriteBuilder.coffee
+++ b/app/lib/sprites/SpriteBuilder.coffee
@@ -128,6 +128,7 @@ module.exports = class SpriteBuilder
     @colorMap = {}
     colorGroups = @thangType.get('colorGroups')
     return if _.isEmpty colorGroups
+    return unless _.size @shapeStore  # We don't have the shapes loaded because we are doing a prerendered spritesheet approach
     colorConfig = @options.colorConfig
 #    colorConfig ?= {team: {hue:0.4, saturation: -0.5, lightness: -0.5}} # test config
     return if not colorConfig
diff --git a/app/lib/surface/LayerAdapter.coffee b/app/lib/surface/LayerAdapter.coffee
index c7a380a63..52569ac7f 100644
--- a/app/lib/surface/LayerAdapter.coffee
+++ b/app/lib/surface/LayerAdapter.coffee
@@ -151,7 +151,7 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
     lank.layer = @
     @listenTo(lank, 'action-needs-render', @onActionNeedsRender)
     @lanks.push lank
-    lank.thangType.initPrerenderedSpriteSheets()
+    lank.thangType.initPrerenderedSpriteSheets() unless currentView.getQueryVariable 'jitSpritesheets'
     prerenderedSpriteSheet = lank.thangType.getPrerenderedSpriteSheet(lank.options.colorConfig, @defaultSpriteType)
     prerenderedSpriteSheet?.markToLoad()
     @loadThangType(lank.thangType)
@@ -273,6 +273,7 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
         builder.buildAsync()
       catch e
         @resolutionFactor *= 0.9
+        #console.log "  Rerendering sprite sheet didn't fit, going down to resolutionFactor", @resolutionFactor, "async", async
         return @_renderNewSpriteSheet(async)
       builder.on 'complete', @onBuildSpriteSheetComplete, @, true, builder
       @asyncBuilder = builder
@@ -290,7 +291,8 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
       # get a rough estimate of how much smaller the spritesheet needs to be
       for image, index in builder.spriteSheet._images
         total += image.height / builder.maxHeight
-      @resolutionFactor /= (Math.max(1.1, Math.sqrt(total)))
+      @resolutionFactor /= (Math.max(1.25, Math.sqrt(total)))
+      #console.log "#{@name} rerendering new sprite sheet with resolutionFactor", @resolutionFactor, "async", e.async
       @_renderNewSpriteSheet(e.async)
       return
 
@@ -357,6 +359,7 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
     if prerenderedSpriteSheet and not prerenderedSpriteSheet.loadedImage
       return
     containersToRender = thangType.getContainersForActions(actionNames)
+    #console.log 'render segmented', thangType.get('name'), actionNames, colorConfig, 'because we do not have prerendered sprite sheet?', prerenderedSpriteSheet
     spriteBuilder = new SpriteBuilder(thangType, {colorConfig: colorConfig})
     for containerGlobalName in containersToRender
       containerKey = @renderGroupingKey(thangType, containerGlobalName, colorConfig)
@@ -387,6 +390,8 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
         sprite = new createjs.Sprite(prerenderedSpriteSheet.spriteSheet)
         sprite.gotoAndStop(i)
         prerenderedFramesMap[i] = spriteSheetBuilder.addFrame(sprite, null, scale)
+    #else
+    #  console.log '    Rerendering singular thang type', thangType.get('name'), thangType.get('spriteType'), colorConfig, actionNames
 
     actionObjects = _.values(thangType.getActions())
     animationActions = []
diff --git a/server/levels/thangs/thang_type_handler.coffee b/server/levels/thangs/thang_type_handler.coffee
index 56f06b625..246c6b4bd 100644
--- a/server/levels/thangs/thang_type_handler.coffee
+++ b/server/levels/thangs/thang_type_handler.coffee
@@ -80,4 +80,16 @@ ThangTypeHandler = class ThangTypeHandler extends Handler
     else
       super(arguments...)
 
+  # Was testing to see what the bandwidth savings are here. This would need more logic to determine whether we need the vector data, probably with extra info from the client.
+  #formatEntity: (req, document) ->
+  #  result = document?.toObject()
+  #  if false and result.prerenderedSpriteSheetData and result.raw and result.kind isnt 'Mark'
+  #    if false and result.spriteType is 'singular'  # Wait, do we need animations and containers for Singular?
+  #      result.raw = shapes: {}, containers: {}, animations: {}
+  #    else
+  #      result.raw.shapes = {}
+  #      #result.raw.containers = {}  # Segmented and Singular sprites currently look at the bounds of containers to determine scale sometimes; wonder if we need that, or if containers are ever even that big
+  #  result
+
+
 module.exports = new ThangTypeHandler()