diff --git a/app/templates/courses/course-details.jade b/app/templates/courses/course-details.jade
index f3c9a4d59..9f7215f6c 100644
--- a/app/templates/courses/course-details.jade
+++ b/app/templates/courses/course-details.jade
@@ -272,8 +272,8 @@ mixin invite-tab
       #invite-emails-sending-alert.alert.alert-info.hide(data-i18n="common.sending")
       #invite-emails-success-alert.alert.alert-success.hide(data-i18n="play_level.done")
 
-  h3 Class Capacity
-  if view.prepaid.loaded
+  if view.prepaid.loaded && pricePerSeat > 0
+    h3 Class Capacity
     p
       span.spr(data-i18n="courses.capacity_used")
       span #{view.prepaid.get('redeemers').length} / #{view.prepaid.get('maxRedeemers')}.
diff --git a/app/templates/courses/course-enroll.jade b/app/templates/courses/course-enroll.jade
index c18d47006..2b90d8255 100644
--- a/app/templates/courses/course-enroll.jade
+++ b/app/templates/courses/course-enroll.jade
@@ -37,14 +37,18 @@ block content
           if courses.length > 1
             option(value="All Courses", data-i18n="courses.all_courses")
 
-      h3
-        span 2.
-        span.spl(data-i18n="courses.number_students")
-      p(data-i18n="courses.enter_number_students")
-      input.input-seats(type='text', value="#{seats}")
+      if price > 0
+        h3
+          span 2.
+          span.spl(data-i18n="courses.number_students")
+        p(data-i18n="courses.enter_number_students")
+        input.input-seats(type='text', value="#{seats}")
 
       h3
-        span 3.
+        if price > 0
+          span 3.
+        else
+          span 2.
         span.spl(data-i18n="courses.name_class")
       p(data-i18n="courses.displayed_course_page")
       input.class-name(type='text', placeholder="Mrs. Smith's 4th Period", value="#{className ? className : ''}")
@@ -55,7 +59,7 @@ block content
           span.spl(data-i18n="courses.buy") Buy
       else
         h3
-          span 4.
+          span 3.
           span.spl(data-i18n="courses.create_class")
       p
         if price > 0
diff --git a/app/views/courses/CourseDetailsView.coffee b/app/views/courses/CourseDetailsView.coffee
index f8bde2ab9..bcd2c9d58 100644
--- a/app/views/courses/CourseDetailsView.coffee
+++ b/app/views/courses/CourseDetailsView.coffee
@@ -54,6 +54,7 @@ module.exports = class CourseDetailsView extends RootView
     context.memberUserMap = @memberUserMap ? {}
     context.noCourseInstance = @noCourseInstance
     context.noCourseInstanceSelected = @noCourseInstanceSelected
+    context.pricePerSeat = @course.get('pricePerSeat')
     context.showExpandedProgress = @showExpandedProgress
     context.sortedMembers = @sortedMembers ? []
     context.userConceptStateMap = @userConceptStateMap ? {}
diff --git a/app/views/courses/CourseEnrollView.coffee b/app/views/courses/CourseEnrollView.coffee
index b34850e25..43e6b5386 100644
--- a/app/views/courses/CourseEnrollView.coffee
+++ b/app/views/courses/CourseEnrollView.coffee
@@ -58,15 +58,16 @@ module.exports = class CourseEnrollView extends RootView
   onClickBuy: (e) ->
     return @openModalView new AuthModal() if me.isAnonymous()
 
-    if @seats < 1 or not _.isFinite(@seats)
-      alert("Please enter the maximum number of students needed for your class.")
-      return
-
     if @price is 0
+      @seats = 9999
       @state = 'creating'
       @createClass()
       return
 
+    if @seats < 1 or not _.isFinite(@seats)
+      alert("Please enter the maximum number of students needed for your class.")
+      return
+
     @state = undefined
     @stateMessage = undefined
     @render()