 		}
 	}
 	
-	func visit(object: DatePickerFormItem) {
-		var model = DatePickerCellModel()
-		model.title = object.title
-		model.toolbarMode = self.model.toolbarMode
-		model.datePickerMode = mapDatePickerMode(object.datePickerMode)
-		model.locale = object.locale
-		model.minimumDate = object.minimumDate
-		model.maximumDate = object.maximumDate
-		
-		weak var weakObject = object
-		model.valueDidChange = { (date: NSDate) in
-			SwiftyFormLog("value did change \(date)")
-			weakObject?.innerValue = date
-			return
-		}
-		
-		let cell = DatePickerCell(model: model)
-		
-		SwiftyFormLog("will assign date \(object.value)")
-		cell.setDateWithoutSync(object.value, animated: false)
-		SwiftyFormLog("did assign date \(object.value)")
-		cells.append(cell)
-		
-		weak var weakCell = cell
-		object.syncCellWithValue = { (date: NSDate?, animated: Bool) in
-			SwiftyFormLog("sync date \(date)")
-			weakCell?.setDateWithoutSync(date, animated: animated)
-			return
-		}
-	}
-	
-	func visit(object: ButtonFormItem) {
-		var model = ButtonCellModel()
-		model.title = object.title
-		model.action = object.action
-		let cell = ButtonCell(model: model)
-		cells.append(cell)
-	}
-
+	
+	// MARK: MetaFormItem
+	
+	func visit(object: MetaFormItem) {
+		// this item is not visual
+	}
+	
+	
+	// MARK: OptionPickerFormItem
+	
+	func visit(object: OptionPickerFormItem) {
+		var model = OptionViewControllerCellModel()
+		model.title = object.title
+		model.placeholder = object.placeholder
+		model.optionField = object
+		model.selectedOptionRow = object.selected
+
+		weak var weakObject = object
+		model.valueDidChange = { (value: OptionRowModel?) in
+			SwiftyFormLog("propagate from cell to model. value \(value)")
+			weakObject?.innerSelected = value
+			weakObject?.valueDidChange(selected: value)
+		}
+		
+		let cell = OptionViewControllerCell(
+			parentViewController: self.model.viewController,
+			model: model
+		)
+		cells.append(cell)
+		
+		weak var weakCell = cell
+		object.syncCellWithValue = { (selected: OptionRowModel?) in
+			SwiftyFormLog("propagate from model to cell. option: \(selected?.title)")
+			weakCell?.setSelectedOptionRowWithoutPropagation(selected)
+		}
+	}
+	
+	
+	// MARK: OptionRowFormItem
+	
 	func visit(object: OptionRowFormItem) {
 		weak var weakViewController = self.model.viewController
 		let cell = OptionCell(model: object) {

		closeSection(footerBlock)
	}
	
	func visit(object: SegmentedControlFormItem) {
		var model = SegmentedControlCellModel()
		model.title = object.title

		cells.append(cell)
	}
	
	
	// MARK: PrecisionSliderFormItem
	
	func visit(object: PrecisionSliderFormItem) {
		let model = PrecisionSliderCellModel()
