We have developed a new method for modelling protein dynamics using normal-mode analysis in internal co-ordinates. This method, normal-mode dynamics, is particularly well suited for modelling collective motion, makes possible direct visualization of biologically interesting modes, and is complementary to the more time-consuming simulation of molecular dynamics trajectories. The essential assumption and limitation of normal-mode analysis is that the molecular potential energy varies quadratically. Our study starts with energy minimization of the X-ray co-ordinates with respect to the single-bond torsion angles. The main technical task is the calculation of second derivative matrices of kinetic and potential energy with respect to the torsion angle co-ordinates. These enter into a generalized eigenvalue problem, and the final eigenvalues and eigenvectors provide a complete description of the motion in the basic 0.1 to 10 picosecond range. Thermodynamic averages of amplitudes, fluctuations and correlations can be calculated efficiently using analytical formulae. The general method presented here is applied to four proteins, trypsin inhibitor, crambin, ribonuclease and lysozyme. When the resulting atomic motion is visualized by computer graphics, it is clear that the motion of each protein is collective with all atoms participating in each mode. The slow modes, with frequencies of below 10 cm-1 (a period of 3 ps), are the most interesting in that the motion in these modes is segmental. The root-mean-square atomic fluctuations, which are dominated by a few slow modes, agree well with experimental temperature factors (B values). The normal-mode dynamics of these four proteins have many features in common, although in the larger molecules, lysozyme and ribonuclease, there is low frequency domain motion about the active site.