       @observer = @observe @view.models, @keypath, @sync
       @model = @observer.target
 
+  parseFormatterArguments: (args, formatterIndex) =>
+    args = (Rivets.TypeParser.parse(arg) for arg in args)
+    processedArgs = []
+
+    for arg, ai in args
+      processedArgs.push if arg.type is Rivets.TypeParser.types.primitive
+        arg.value
+      else
+        @formatterObservers[formatterIndex] or= {}
+
+        unless observer = @formatterObservers[formatterIndex][ai]
+          observer = @observe @view.models, arg.value, @sync
+          @formatterObservers[formatterIndex][ai] = observer
+
+        observer.value()
+
+    processedArgs
+
   # Applies all the current formatters to the supplied value and returns the
   # formatted value.
   formattedValue: (value) =>

    if @observer
      value = @getValue @el

      for formatter in @formatters.slice(0).reverse()
        args = formatter.split /\s+/
        id = args.shift()

        if @view.formatters[id]?.publish
          value = @view.formatters[id].publish value, args...

      @observer.setValue value


      id = args.shift()
      formatter = @view.formatters[id]

      processedArgs = @parseFormatterArguments args, fi

      if formatter?.read instanceof Function
        value = formatter.read.call @model, value, processedArgs...
