    - parameter into: Sorted list of locations to add the new ones into. Typically starts and ends at a hotel.
    - returns: Observable sequence of the region where the problem starts and the id of the problem on the server.
    */
-  private static func rx_createProblem(locations: [TKAgendaInputItem], into: [TKAgendaInputItem]) -> Observable<(SVKRegion, String)> {
+  private static func rx_createProblem(locations: [TKAgendaInputItem], into: [TKAgendaInputItem], dateComponents: NSDateComponents) -> Observable<(SVKRegion, String)> {
     
     guard let first = into.first else {
       preconditionFailure("`into` needs at least one item")
     }
     
     let server = SVKServer.sharedInstance()
-    let paras = createInput(locations, into: into)
     
     return server
       .rx_requireRegion(first.start)
       .flatMap { region -> Observable<(SVKRegion, String)> in
-        
+        let paras = createInput(region, insert: locations, into: into, dateComponents: dateComponents)
         if let cachedId = TKTTPifierCache.problemId(forParas: paras) {
           return Observable.just((region, cachedId))
         }

    // Got enough data to query server!
    let (list, set) = TKTTPifier.split(items)
    // return TKTTPifierFaker.fakeInsert(new, into: previous)
    return TKTTPifier.insert(set, into: list)
  }
  
  public static func split(items: [TKAgendaInputItem]) -> (list: [TKAgendaInputItem], set: [TKAgendaInputItem])

  /**
   Creates the input as required by the `tpp/` endpoint.
   */
  private static func createInput(region: SVKRegion, insert: [TKAgendaInputItem], into: [TKAgendaInputItem], dateComponents: NSDateComponents) -> [String: AnyObject] {
    return [
      "date": "\(dateComponents.year)-\(dateComponents.month)-\(dateComponents.day)",
      "modes": region.modeIdentifiers,
      "insertInto": createInput(into),
      "insert": createInput(insert)
    ]
  }
  
