diff --git a/app/views/editor/level/modals/TerrainRandomizeModal.coffee b/app/views/editor/level/modals/TerrainRandomizeModal.coffee
index f6919c297..a79599259 100644
--- a/app/views/editor/level/modals/TerrainRandomizeModal.coffee
+++ b/app/views/editor/level/modals/TerrainRandomizeModal.coffee
@@ -24,7 +24,7 @@ clusters = {
     'margin': 1
     }
   'wood': {
-    'thangs': ['Firewood 1', 'Firewood 2', 'Firewood 3', 'Barrel']
+    'thangs': ['Firewood 1', 'Firewood 2', 'Firewood 3']
     'margin': 1
     }
   'farm': {
@@ -39,6 +39,18 @@ clusters = {
     'thangs': ['Gargoyle', 'Rock Cluster 1', 'Rock Cluster 2', 'Rock Cluster 3']
     'margin': 1
     }
+  'torch': {
+    'thangs': ['Torch']
+    'margin': 0
+  }
+  'chains': {
+    'thangs': ['Chains']
+    'margin': 0
+  }
+  'barrel': {
+    'thangs': ['Barrel']
+    'margin': 1
+  }
   'doors': {
     'thangs': ['Dungeon Door']
     'margin': -1
@@ -75,6 +87,7 @@ presets = {
     'borders':'dungeon_wall'
     'borderNoise':0
     'borderSize':4
+    'borderThickness':1
     'floors':'dungeon_floor'
     'decorations': {
       'Room': {
@@ -84,6 +97,13 @@ presets = {
         'thickness': [2,2]
         'cluster': 'dungeon_wall'
       }
+      'Barrels': {
+        'num': [1,1]
+        'width': [8, 12]
+        'height': [8, 12]
+        'numBarrels': [4,6]
+        'cluster': 'barrel' 
+      }
       'cave': {
         'num':[1,1]
         'width': 10
@@ -100,6 +120,7 @@ presets = {
     'borders':'indoor_wall'
     'borderNoise':0
     'borderSize':4
+    'borderThickness':1
     'floors':'indoor_floor'
     'decorations': {
       'Room': {
@@ -124,6 +145,7 @@ presets = {
     'borders':'trees'
     'borderNoise':1
     'borderSize':0
+    'borderThickness':3
     'floors':'grass_floor'
     'decorations': {
       'house': {
@@ -156,10 +178,12 @@ presetSizes = {
   'small': {
     'x':80
     'y':68
+    'sizeFactor':1
   }
   'large': {
     'x':160
     'y':136
+    'sizeFactor':2
   }
 }
 
@@ -171,7 +195,6 @@ thangSizes = {
   'borderSize': {
     'x':4
     'y':4
-    'thickness':3
   }
 }
 
@@ -221,7 +244,8 @@ module.exports = class TerrainRandomizeModal extends ModalView
 
   randomizeBorder: (preset, presetSize, noiseFactor=1) ->
     for i in _.range(0, presetSize.x, thangSizes.borderSize.x)
-      for j in _.range(thangSizes.borderSize.thickness)
+      for j in _.range(preset.borderThickness)
+        # Bottom wall
         while not @addThang {
           'id': @getRandomThang(clusters[preset.borders].thangs)
           'pos': {
@@ -231,6 +255,8 @@ module.exports = class TerrainRandomizeModal extends ModalView
           'margin': clusters[preset.borders].margin
         }
           continue
+
+        # Top wall
         while not @addThang {
           'id': @getRandomThang(clusters[preset.borders].thangs)
           'pos': {
@@ -241,8 +267,38 @@ module.exports = class TerrainRandomizeModal extends ModalView
         }
           continue
 
+        # Double wall on top
+        if preset.type is 'dungeon'
+          @addThang {
+            'id': @getRandomThang(clusters[preset.borders].thangs)
+            'pos': {
+              'x': i + preset.borderSize/2 
+              'y': presetSize.y - 3 * preset.borderSize/2
+            }
+            'margin': clusters[preset.borders].margin
+          } 
+          if ( i / preset.borderSize ) % 2 and i isnt presetSize.x - thangSizes.borderSize.x
+            @addThang {
+              'id': @getRandomThang(clusters['torch'].thangs)
+              'pos': {
+                'x': i + preset.borderSize 
+                'y': presetSize.y - preset.borderSize
+              }
+              'margin': clusters['torch'].margin
+            } 
+          else if ( i / preset.borderSize ) % 2 is 0 and i and _.random(100) < 30
+            @addThang {
+              'id': @getRandomThang(clusters['chains'].thangs)
+              'pos': {
+                'x': i + preset.borderSize 
+                'y': presetSize.y - preset.borderSize
+              }
+              'margin': clusters['chains'].margin
+            } 
+
     for i in _.range(0, presetSize.y, thangSizes.borderSize.y)
-      for j in _.range(3)
+      for j in _.range(preset.borderThickness)
+        # Left wall
         while not @addThang {
           'id': @getRandomThang(clusters[preset.borders].thangs)
           'pos': {
@@ -252,6 +308,8 @@ module.exports = class TerrainRandomizeModal extends ModalView
           'margin': clusters[preset.borders].margin
         }
           continue
+
+        # Right wall
         while not @addThang {
           'id': @getRandomThang(clusters[preset.borders].thangs)
           'pos': {
@@ -263,9 +321,8 @@ module.exports = class TerrainRandomizeModal extends ModalView
           continue
 
   randomizeDecorations: (preset, presetSize)->
-    if presetSize is presetSizes['small'] then sizeFactor = 1 else sizeFactor = 2
     for name, decoration of preset.decorations
-      for num in _.range(sizeFactor * _.random(decoration.num[0], decoration.num[1]))
+      for num in _.range(presetSize.sizeFactor * _.random(decoration.num[0], decoration.num[1]))
         if @['build'+name] isnt undefined
           @['build'+name](preset, presetSize, decoration)
           continue
@@ -291,15 +348,14 @@ module.exports = class TerrainRandomizeModal extends ModalView
               continue
 
   buildRoom: (preset, presetSize, room) ->
-    if presetSize is presetSizes['small'] then sizeFactor = 1 else sizeFactor = 2
     while true
       rect = {
-        'width':sizeFactor * (room.width[0] + preset.borderSize * _.random(0, (room.width[1] - room.width[0])/preset.borderSize))
-        'height':sizeFactor * (room.height[0] + preset.borderSize * _.random(0, (room.height[1] - room.height[0])/preset.borderSize))
+        'width':presetSize.sizeFactor * (room.width[0] + preset.borderSize * _.random(0, (room.width[1] - room.width[0])/preset.borderSize))
+        'height':presetSize.sizeFactor * (room.height[0] + preset.borderSize * _.random(0, (room.height[1] - room.height[0])/preset.borderSize))
       }
       roomThickness = _.random(room.thickness[0], room.thickness[1])
       rect.x = _.random(rect.width/2 + preset.borderSize * (roomThickness+1.5), presetSize.x - rect.width/2 - preset.borderSize * (roomThickness+1.5))
-      rect.y = _.random(rect.height/2 + preset.borderSize * (roomThickness+2.5), presetSize.y - rect.height/2 - preset.borderSize * (roomThickness+2.5))
+      rect.y = _.random(rect.height/2 + preset.borderSize * (roomThickness+2.5), presetSize.y - rect.height/2 - preset.borderSize * (roomThickness+3.5))
       # Snap room walls to the wall grid.
       rect.x = Math.round((rect.x - preset.borderSize / 2) / preset.borderSize) * preset.borderSize + preset.borderSize / 2
       rect.y = Math.round((rect.y - preset.borderSize / 2) / preset.borderSize) * preset.borderSize + preset.borderSize / 2
@@ -318,6 +374,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
 
     for t in _.range(0, roomThickness+1)
       for i in _.range(rect.x - rect.width/2 - (t-1) * preset.borderSize, rect.x + rect.width/2 + t * preset.borderSize, preset.borderSize)
+        # Bottom wall
         thang = {
           'id': @getRandomThang(clusters[room.cluster].thangs)
           'pos': {
@@ -331,6 +388,18 @@ module.exports = class TerrainRandomizeModal extends ModalView
           thang.pos.y -= preset.borderSize/3
         @addThang thang unless i is bottomDoorX and t isnt roomThickness and bottomDoor
 
+        if t is roomThickness and i isnt rect.x - rect.width/2 - (t-1) * preset.borderSize and preset.type is 'dungeon'
+          if ( i isnt bottomDoorX and i isnt bottomDoorX + preset.borderSize ) or not bottomDoor
+            @addThang {
+              'id': @getRandomThang(clusters['torch'].thangs)
+              'pos': {
+                'x': thang.pos.x - preset.borderSize / 2
+                'y': thang.pos.y + preset.borderSize / 2
+              } 
+              'margin': clusters['torch'].margin
+            }
+
+        # Top wall
         thang = {
           'id': @getRandomThang(clusters[room.cluster].thangs)
           'pos': {
@@ -346,6 +415,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
 
     for t in _.range(0, roomThickness)
       for i in _.range(rect.y - rect.height/2 - t * preset.borderSize, rect.y + rect.height/2 + (t+1) * preset.borderSize, preset.borderSize)
+        # Left wall 
         @addThang {
           'id': @getRandomThang(clusters[room.cluster].thangs)
           'pos': {
@@ -355,6 +425,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
           'margin': clusters[room.cluster].margin
         }
 
+        # Right wall 
         @addThang {
           'id': @getRandomThang(clusters[room.cluster].thangs)
           'pos': {
@@ -364,6 +435,35 @@ module.exports = class TerrainRandomizeModal extends ModalView
           'margin': clusters[room.cluster].margin
         }
 
+  buildBarrels: (preset, presetSize, decoration) ->
+    rect = {
+      'width':presetSize.sizeFactor * ( _.random( decoration.width[0], decoration.width[1] ) )
+      'height':presetSize.sizeFactor * ( _.random( decoration.height[0], decoration.height[1] ) )
+    }
+    x = [ rect.width/2 + preset.borderSize , presetSize.x - rect.width/2 - preset.borderSize ]
+    y = [ rect.height/2 + preset.borderSize , presetSize.y - rect.height/2 - 2 * preset.borderSize ]
+
+    for i in x
+      for j in y
+        if _.random(100) < 40
+          rect = {
+            'x': i
+            'y': j
+            'width': rect.width
+            'height': rect.height
+          }
+          if @addRect rect
+            for num in _.range( _.random( decoration.numBarrels[0], decoration.numBarrels[1] ) )
+              while not @addThang {
+                'id': @getRandomThang(clusters[decoration.cluster].thangs)
+                'pos': {
+                  'x': _.random(rect.x - rect.width/2, rect.x + rect.width/2)
+                  'y': _.random(rect.y - rect.height/2, rect.y + rect.height/2)
+                }
+                'margin': clusters[decoration.cluster].margin
+              }
+                continue
+
   addThang: (thang) ->
     if @falseCount > 100
       console.log 'infinite loop', thang