This paper is concerned with the planning of multiple-leg journeys using public transport services, typically (but not necessarily) in an intra-urban context. The repertoire of transport services may include walking, fixed-route public transport, and demand-responsive modes such as taxis. A journey-planning problem is defined by a request to travel at minimal generalised cost from a given origin to a given destination, subject to timing constraints. The paper presents a comprehensive cost-minimising formulation for such problems, allowing for the possibility of non-linear generalised-cost functions. An optimisation procedure is outlined for problems involving an "early-departure" style of travel. The new procedure is based on Dijkstra's label-setting shortest-path algorithm, and can be inverted to meet the needs of a "late-arrival" style of travel. An adaptation to a dilatory or "sightseeing" style of travel is also possible, but may be problematic with respect to computational performance.