diff --git a/app/styles/editor/level/modal/artisan-guide-modal.sass b/app/styles/editor/level/modal/artisan-guide-modal.sass
index 0240381c2..d87e6898f 100644
--- a/app/styles/editor/level/modal/artisan-guide-modal.sass
+++ b/app/styles/editor/level/modal/artisan-guide-modal.sass
@@ -1,3 +1,3 @@
 #artisan-guide-modal
   .centered-stack
-    text-align: center
\ No newline at end of file
+    text-align: center
diff --git a/app/styles/editor/level/tasks-tab.sass b/app/styles/editor/level/tasks-tab.sass
index 0852f47d9..96d5c6e85 100644
--- a/app/styles/editor/level/tasks-tab.sass
+++ b/app/styles/editor/level/tasks-tab.sass
@@ -2,7 +2,9 @@
   td
     cursor: pointer
   .taskCheck
-    width: 5%
+    width: 5em
+  .editCell
+    width: 5em
   .taskCheck *
     text-align: center
     margin: auto
@@ -12,4 +14,4 @@
     cursor: pointer
     text-align:center
   .noArticle
-    color: rgba(160, 0, 0, 1)
\ No newline at end of file
+    color: rgba(160, 0, 0, 1)
diff --git a/app/templates/editor/level/modal/artisan-guide-modal.jade b/app/templates/editor/level/modal/artisan-guide-modal.jade
index a9a861c35..92f740f79 100644
--- a/app/templates/editor/level/modal/artisan-guide-modal.jade
+++ b/app/templates/editor/level/modal/artisan-guide-modal.jade
@@ -2,12 +2,16 @@ extends /templates/core/modal-base
 
 block modal-header-content
   h3 Artisan Compendium
+
 block modal-body-content
+  p
+
   p
     | Welcome to the Artisan Compendium. Below you will find a series of helpful guides and tutorials for getting your levels to Master Artisan quality
-    if creator == meID
+    if view.creator === view.meID
       |, as well as a way to submit your level for official Artisan review
-    |! If you have any feedback on the Level Editor, please contact us at: artisans@codecombat.com
+    |! If you have any feedback on the Level Editor, please contact us at: 
+    a(href='mailto:artisans@codecombat.com') artisans@codecombat.com
   div.centered-stack
     div
       a(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home', target='_blank') Wiki Homepage
@@ -15,7 +19,7 @@ block modal-body-content
       a(href='https://github.com/codecombat/codecombat/wiki/Artisan-How-To-Index', target='_blank') Basic How-tos
     div
       a(href='http://direct.codecombat.com/community', target='_blank') Artisan Rankings
-  if creator == meID
+  if view.creator === view.meID
     h4 Level Submission
     p
       | Do you want your level to be added to the campaign? Please take a moment to fill out the questions below! Don’t worry, this isn’t a timed quiz. It is just a way for the artisans at CodeCombat HQ to get a feel for the purpose of this level. If it doesn’t quite yet meet our standards for release we will give you feedback to help polish it further!
@@ -33,9 +37,8 @@ block modal-body-content
         label.control-label(for='level-location') Where in the campaign do you think this level belongs?
         textarea#level-location.form-control(name='levelLocation', rows=4)
       
-
 block modal-footer-content
   div
     a(href='#', data-dismiss="modal", aria-hidden="true").btn Close
-    if creator == meID
-      button.btn.btn-primary#level-submit Submit
\ No newline at end of file
+    if view.creator === view.meID
+      button.btn.btn-primary#level-submit Submit
diff --git a/app/templates/editor/level/tasks-tab.jade b/app/templates/editor/level/tasks-tab.jade
new file mode 100644
index 000000000..3555720be
--- /dev/null
+++ b/app/templates/editor/level/tasks-tab.jade
@@ -0,0 +1,41 @@
+mixin task-row(task)
+  - var taskName = task.get('name');
+  - var isComplete = task.get('complete')
+  - var taskLink = view.defaultTaskLinks[taskName]
+  tr.taskRow(data-task=task)
+    td.taskCheck
+      div.checkbox
+        input(type='checkbox', checked=(isComplete || false)).taskInput
+    if task.get('curEdit') === true
+      td.editCell
+      td
+        input(type="input", value=taskName)#curEdit
+    else
+      td.editCell
+        span.startEdit ✎
+      td
+        if taskLink
+          if taskLink === './'
+            a.noArticle(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home', target='blank')= taskName
+          else
+            a(href=taskLink, target='_blank')= taskName
+        else
+          span= taskName
+
+block
+  table.table.table-striped.table-hover
+    tr
+      th.taskCheck Complete
+      th Edit
+      th Incomplete Tasks
+    for task in (view.taskArray() || [])
+      if task.get('revert').complete !== true
+        +task-row(task)
+    tr
+      th
+      th
+      th Completed Tasks
+    for task in (view.taskArray() || [])
+      if task.get('revert').complete === true
+        +task-row(task)
+  button#createTask.btn.btn-default Add Task
diff --git a/app/templates/editor/level/tasks_tab.jade b/app/templates/editor/level/tasks_tab.jade
deleted file mode 100644
index ef2298515..000000000
--- a/app/templates/editor/level/tasks_tab.jade
+++ /dev/null
@@ -1,40 +0,0 @@
-mixin taskRow(task)
-  tr.taskRow(data=task.name)
-    td.taskCheck
-      div.checkbox
-        input(type='checkbox', checked=(task.complete || false), data=task.name, placeholder='Enter a description of the task.').taskInput
-    if task.curEdit == true
-      td
-      td
-        input(type="input", value=task.name)#curEdit
-    else
-      td
-        span.startEdit(data=task.name) ✎
-      td
-        if view.defaultTaskLinks[task.name]
-          if view.defaultTaskLinks[task.name] === './'
-            a.noArticle(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home' target='_blank')= task.name
-          else
-            a(href=view.defaultTaskLinks[task.name], target='_blank')= task.name
-        else
-          span= task.name
-block
-  if view.tasks
-    table.table.table-striped.table-hover
-      tr
-        th.taskCheck Complete
-        th Edit
-        th Incomplete Tasks
-      for task in view.tTasks
-        if task.reversion !== true
-          +taskRow(task)
-      tr
-        th
-        th
-        th Completed Tasks
-      for task in view.tTasks
-        if task.reversion === true
-          +taskRow(task)
-    button#createTask.btn.btn-default Add Task
-  else
-  div Wrong!
\ No newline at end of file
diff --git a/app/templates/editor/thangTasksView.jade b/app/templates/editor/thangTasksView.jade
index 6574a4807..48a216782 100644
--- a/app/templates/editor/thangTasksView.jade
+++ b/app/templates/editor/thangTasksView.jade
@@ -26,4 +26,4 @@ mixin thangRow(thang)
         for task in (thang.tasks || [])
           if !task.complete
             tr
-              td= task.name
\ No newline at end of file
+              td= task.name
diff --git a/app/views/editor/level/modals/ArtisanGuideModal.coffee b/app/views/editor/level/modals/ArtisanGuideModal.coffee
index dd50438cb..a0887a3c4 100644
--- a/app/views/editor/level/modals/ArtisanGuideModal.coffee
+++ b/app/views/editor/level/modals/ArtisanGuideModal.coffee
@@ -23,17 +23,11 @@ module.exports = class ArtisanGuideModal extends ModalView
   events:
     'click #level-submit': 'levelSubmit'
 
-  constructor: (options) ->
-    super options
+  initialize: (options) ->
     @level = options.level
     @options = level: @level.get 'name'
-    @render()
-
-  getRenderData: ->
-    c = super()
-    c.creator = @level.get 'creator'
-    c.meID = me.id
-    c
+    @creator = @level.get 'creator'
+    @meID = me.id
 
   levelSubmit: ->
     @playSound 'menu-button-click'
diff --git a/app/views/editor/level/tasks/TasksTabView.coffee b/app/views/editor/level/tasks/TasksTabView.coffee
index a2e385be3..c67751cf9 100644
--- a/app/views/editor/level/tasks/TasksTabView.coffee
+++ b/app/views/editor/level/tasks/TasksTabView.coffee
@@ -1,5 +1,5 @@
 CocoView = require 'views/core/CocoView'
-template = require 'templates/editor/level/tasks_tab'
+template = require 'templates/editor/level/tasks-tab'
 Level = require 'models/Level'
 
 module.exports = class TasksTabView extends CocoView
@@ -7,11 +7,11 @@ module.exports = class TasksTabView extends CocoView
   className: 'tab-pane'
   template: template
   events:
-    'click .taskRow': 'onTaskRowClicked'
-    'click .taskInput': 'onTaskCompletionClicked'
-    'click .startEdit': 'onTaskEditClicked'
-    'click #createTask': 'onTaskCreateClicked'
-    'keydown #curEdit': 'onCurEditKeyDown'
+    'click .taskRow': 'onClickTaskRow'
+    'click .taskInput': 'onClickTaskInput'
+    'click .startEdit': 'onClickStartEdit'
+    'click #createTask': 'onClickCreateTask'
+    'keydown #curEdit': 'onKeyDownCurEdit'
 
   subscriptions:
     'editor:level-loaded': 'onLevelLoaded'
@@ -54,123 +54,96 @@ module.exports = class TasksTabView extends CocoView
     'Do thorough set decoration.':'./'
     'Add a walkthrough video.':'./'
 
-  constructor: (options) ->
-    super options
-    @render()
+  taskMap: ->
+    return @tasks?.map((_obj) -> return (name: _obj.get('name'), complete: (_obj.get('complete') || false)))
+
+  taskArray: ->
+    return @tasks?.toArray()
+
+  findTask: (_name) ->
+    return @tasks.findWhere(name:_name)
 
   onLoaded: ->
   onLevelLoaded: (e) ->
     @level = e.level
-    if e.level._revertAttributes
-      @revertTasks = e.level._revertAttributes.tasks
-    else
-      @revertTasks = @level.get 'tasks'
-    @tasks = @level.get 'tasks'
-    @tTasks = _.clone @tasks, true
-    for task in @tTasks
-      if @revertTasks[_.findKey(@revertTasks, {'name':task.name})]
-        task.reversion = @revertTasks[_.findKey(@revertTasks, {'name':task.name})].complete || null
-      else
-        task.reversion = false
+    Task = Backbone.Model.extend({
+      initialize: ->
+        if e?.level?._revertAttributes?.tasks?
+          if _.find(e.level._revertAttributes.tasks, {name:arguments[0].name})
+            @set 'revert', _.find(e.level._revertAttributes.tasks, {name:arguments[0].name})
+          else
+            @set 'revert', arguments[0]
+        else
+          @set 'revert', arguments[0]
+    })
+    TaskList = Backbone.Collection.extend({
+      model: Task
+    })
+    @tasks = new TaskList(@level.get 'tasks')
     @render()
-  
-  getRenderData: ->
-    c = super()
-    c.tasks = @tasks
-    c.status
-    c
+
 
   pushTasks: ->
-    for task in @tTasks
-      taskKey = @findTaskByName(@tasks, task.name)
-      oTaskKey = @findTaskByName(@tasks, task.oldName)
-      if taskKey?
-        @tasks[taskKey].complete = task.complete
-      else if oTaskKey?
-        if task.name is ''
-          @tasks.splice(oTaskKey, 1)
-          @tTasks.splice(@tTasks.indexOf(task), 1)
-          break
-          @pushTasks()
-        else
-          @tasks[oTaskKey].name = task.name
-          @tasks[oTaskKey].complete = task.complete
-      else
-        if task.name is ''
-          @tasks.splice(oTaskKey, 1)
-          @tTasks.splice(@tTasks.indexOf(task), 1)
-        else
-          @tasks.push
-            name: task.name
-            complete: task.complete
-    @level.set 'tasks', @tasks
-    @parent.renderSelectors '#tasks-tab'
+    @level.set 'tasks', @taskMap()
 
-  onTaskRowClicked: (e) ->
+  onClickTaskRow: (e) ->
     if not $(e.target).is('input') and not $(e.target).is('a') and not $(e.target).hasClass('startEdit')
-      checkBox = $(e.currentTarget).find('.taskInput')[0]
-      tTaskKey = @findTaskByName(@tTasks, @getData e)
-      if tTaskKey?
-        if checkBox.checked
-          checkBox.checked = false
-        else
-          checkBox.checked = true
-        console.log(checkBox.checked)
-        @tTasks[tTaskKey].complete = checkBox.checked
+      task = @findTask($(e.target).closest('tr').data('task').name)
+      checkbox = $(e.currentTarget).find('.taskInput')[0]
+      if task.get 'complete'
+        task.set 'complete', false
+      else
+        task.set 'complete', true
+      checkbox.checked = task.get 'complete'
       @pushTasks()
 
-  onTaskCompletionClicked: (e) ->
-    tTaskKey = @findTaskByName(@tTasks, @getData e)
-    if tTaskKey?
-      @tTasks[tTaskKey].complete = e.currentTarget.checked
+  onClickTaskInput: (e) ->
+    task = @findTask($(e.target).closest('tr').data('task').name)
+    task.set 'complete', e.currentTarget.checked
     @pushTasks()
 
-  onTaskCreateClicked: (e) ->
+  onClickStartEdit: (e) ->
     if $('#curEdit').length is 0
-      @tTasks.push
-        name: ''
-        complete: false
-        reversion: false
-        curEdit: true
+      task = @findTask($(e.target).closest('tr').data('task').name)
+      task.set 'curEdit', true
       @render()
     editDiv = $('#curEdit')[0]
     editDiv.focus()
     len = editDiv.value.length * 2
     editDiv.setSelectionRange len, len
 
-  onCurEditKeyDown: (e) ->
-    editDiv = $('#curEdit')[0]
+  onKeyDownCurEdit: (e) ->
     if e.keyCode is 13
-      taskIndex = @findTaskByName(@tasks, editDiv.value)
-      tTaskIndex = _.findKey(@tTasks, {'curEdit':true})
-      if taskIndex? and tTaskIndex? and taskIndex isnt tTaskIndex
+      editDiv = $('#curEdit')[0]
+      task = @findTask($(e.target).closest('tr').data('task').name)
+      potentialTask = @findTask(editDiv.value)
+      if potentialTask and potentialTask isnt task
         noty
           timeout: 5000
-          text: 'Task with name already exists.'
+          text: 'Task with name already exists!'
           type: 'error'
           layout: 'topCenter'
+      else if editDiv.value is ''
+        @tasks.remove task
+        @pushTasks()
+        @render()
       else
-        @tTasks[tTaskIndex].oldName = @tTasks[tTaskIndex].name
-        @tTasks[tTaskIndex].name = curEdit.value
-        @tTasks[tTaskIndex].curEdit = false
+        task.set 'name', editDiv.value
+        task.set 'curEdit', false
+        @pushTasks()
+        @render()
 
-      @pushTasks()
-      @render()
-
-  onTaskEditClicked: (e) ->
+  onClickCreateTask: (e) ->
     if $('#curEdit').length is 0
-      taskIndex = @findTaskByName(@tTasks, @getData e)
-      @tTasks[taskIndex].curEdit = true
+      @tasks.add
+        name: ''
+        complete: false
+        curEdit: true
+        revert:
+          name: 'null'
+          complete: false
       @render()
     editDiv = $('#curEdit')[0]
     editDiv.focus()
     len = editDiv.value.length * 2
     editDiv.setSelectionRange len, len
-
-  findTaskByName: (obj, name) ->
-    return _.findKey(obj, {'name':name})
-
-  getData: (elem) ->
-    return elem.currentTarget.getAttribute('data')
-
-    
\ No newline at end of file