ParseBlock* CostConfig::toBlock() const
{
    ParseBlock *ret = resolution::AlgorithmConfig::toBlock();
    
    // Type
    ret->setProperty("cost_type", objective_type);
    
    // Bounds
    
    ParseBlock *bounds_block = new ParseBlock;
    
    bounds_block->setProperty("upper", functions::printVector(upper_bounds));
    bounds_block->setProperty("lower", functions::printVector(lower_bounds));
    bounds_block->setProperty("speed", functions::printVector(speed_bounds));
    
    ret->setBlock("bounds", bounds_block);

    
    // Cost parameters
    ParseBlock *cost_block = new ParseBlock;
    
    cost_block -> setProperty("distance", numberToString(distance_cost));
    cost_block -> setProperty("collision_penalty", numberToString(collision_penalty));
    ret->setBlock("cost", cost_block);
    
    // Sampling parameters
    ret->setProperty("population", numberToString(population));
    ret->setProperty("generations", numberToString(generations));
    ret->setProperty("max_time", numberToString(max_time));
    
    ret->setProperty("waypoint_dimension", numberToString(waypoint_dimension));
    ret->setProperty("intermediate_waypoints", numberToString(intermediate_waypoints));
    ret->setProperty("altitude_levels", boolToString(altitude_levels));
    ret->setProperty("altitude_step", numberToString(altitude_step));
    ret->setProperty("export_evolution", boolToString(export_evolution));
    ret->setProperty("evolution_filename", evolution_file);
    ret->setProperty("time_exploration", boolToString(time_exploration));
    switch (time_exploration_type) {
      case INDEPENDENT_VELOCITY:
	ret->setProperty("time_exploration_type", numberToString(INDEPENDENT_VELOCITY));
	break;
	
      default:
	ret->setProperty("time_exploration_type", numberToString(MANTAIN_ETA));
    }
    ret->setProperty("speed_factor", numberToString(speed_factor));
    
    // MS-PSO stuff
    ret->setProperty("manoeuvre_selection", boolToString(manoeuvre_selection));
    ret->setProperty("min_z", numberToString(min_z));
    ret->setProperty("max_z", numberToString(max_z));
    ret->setProperty("max_course", numberToString(max_course));
    
    return ret;
}
ParseBlock *ThermalModelSimple::exportThermalData() const
{
  ParseBlock* block = new ParseBlock;
  for (unsigned int i = 0; i < updraft_vector.size(); i++) {
    block->setBlock("updraft", updraft_vector.at(i).toBlock());  
  }

  return block;
}