         settings    : rtypes.immutable.Map.isRequired
         project_map : rtypes.immutable.Map.isRequired
 
+    shouldComponentUpdate: (next, next_state) ->
+        return next.settings != @props.settings or next.project_map != @props.project_map or \
+            next_state.show_students_pay_dialog != @stateshow_students_pay_dialog
+
     getInitialState: ->
-        show_students_pay_dialog        : false
+        show_students_pay_dialog : false
 
     ###
     # Editing title/description


        content += 'students = [\n'

        console.log "exporting py"
        for student in store.get_sorted_students()
            grades   = (("'#{store.get_grade(assignment, student) ? ''}'") for assignment in assignments).join(',')
            grades   = grades.replace(/\n/g, "\\n")

        <Alert bsStyle='info'>
            <h3><Icon name='arrow-circle-up' /> Require students to upgrade</h3>
            <hr/>
            <span>Click the following checkbox to require that all students in the course pay a special discounted <b>one-time $9</b> fee to move their projects to members-only computers and enable full internet access, for four months.  Members-only computers are not randomly rebooted constantly and have far fewer users. Student projects that are already on members-only hosts will not be impacted.  <em>You will not be charged.</em></span>

            {@render_students_pay_checkbox()}
            {@render_require_students_pay_when() if @props.settings.get('pay')}
