The implementation has the following features:
 Choice between Legendre, Chebyshev, central differences, trapezoidal or HermiteSimpson discretization.
 Large scale nonlinear programming using IPOPT and (optionally) SNOPT.
 Estimation of the discretization error.
 Automatic mesh refinement.
 Automatic scaling
 Automatic differentiation using the ADOLC library
 Numerical differentiation by using sparse finite differences
 Automatic identification of the sparsity of the derivative matrices.
 DAE formulation, so that differential and algebraic constraints can be implemented in the same C++ function.
 Easy to use interface to GNUplot to produce graphical output, including 2D plots, 3D curves and surfaces, and polar plots.
 Automatic generation of LaTeX code to produce a table that summarizes the mesh refinement process.

