         priceIsVolatile
       }
 
-  handleSubscriptionType: ->
+  getSubscriptionOptions:->
+
+    selectOptions = [
+      { title: "Recurs every month",     value: 'mo' }
+      { title: "Recurs every 3 months",  value: '3 mo' }
+      { title: "Recurs every 6 months",  value: '6 mo' }
+      { title: "Recurs every year",      value: 'yr' }
+      { title: "Recurs every 2 years",   value: '2 yr' }
+      { title: "Recurs every 5 years",   value: '5 yr' }
+    ]
+
+    if @getOptions().isRecurOptional
+      selectOptions.push { title: "Single payment", value: 'single' }
+
+    return selectOptions
+
+  subscriptionTypeChanged: ->
     subscriptionType = @inputs.subscriptionType.getValue()
     if subscriptionType is 'single'
       @inputs.perMonth.hide()
     else
       @inputs.perMonth.show()
       @inputs.perMonth.updatePartial "/ #{subscriptionType}"
+
+  feeChanged: (num) ->
+    num = parseFloat @getValue()
+
+    @setValue if isNaN num then '' else num.toFixed(2)
+
+  priceVolatilityChanged: ->
+    enabled = @inputs.priceIsVolatile.getValue()
+    do @fields.feeAmount[if enabled then 'hide' else 'show']
        label         : "Price is volatile"
        itemClass     : KDOnOffSwitch
        defaultValue  : data.priceIsVolatile
        callback      : =>
          enabled = @inputs.priceIsVolatile.getValue()
          do @fields.feeAmount[if enabled then 'hide' else 'show']

    if options.showOverage
      options.fields.overageEnabled =

      defaultValue    :
        if data.feeAmount
        then (data.feeAmount / 100).toFixed(2)
      change          : @bound 'feeChanged'
      nextElementFlat :

        perMonth      :
