A dynamic positioning (DP) system includes different control functions for automatic positioning and guidance of marine vessels by means of thruster and propeller actions. This paper describes the control functions which provide station-keeping and tracking. The DP controller is designed using model-based control, where a new modified LQG feedback controller and a model reference feedforward controller are applied. A reference model calculates appropriate reference trajectories. Since it is not desirable nor even possible to counteract the wave-frequency movement caused by first-order wave loads, the control action of the propulsion system should be produced by the low-frequency part of the vessel movement caused by current, wind and second-order mean and slowly varying wave loads. A Kalman filter based state estimator and a Luenberger observer are used to compute the low-frequency feedback and feedforward control signals. Full-scale experiments with a supply vessel demonstrate the performance of the proposed controller.