diff --git a/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/files b/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/files
new file mode 100644
index 000000000..aef882dc3
--- /dev/null
+++ b/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/files
@@ -0,0 +1,3 @@
+pendulumAndSpring.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-pendulumAndSpring
diff --git a/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/options b/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/options
new file mode 100644
index 000000000..4a9d828b6
--- /dev/null
+++ b/applications/test/rigidBodyDynamics/pendulumAndSpring/Make/options
@@ -0,0 +1,5 @@
+EXE_INC = \
+ -I$(LIB_SRC)/rigidBodyDynamics/lnInclude
+
+EXE_LIBS = \
+ -lrigidBodyDynamics
diff --git a/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring b/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring
new file mode 100644
index 000000000..ec9c3517b
--- /dev/null
+++ b/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring
@@ -0,0 +1,64 @@
+solver
+{
+ type Newmark;
+}
+
+// It is necessary to iterate for the Newmark solver
+nIter 2;
+
+bodies
+{
+ M
+ {
+ type sphere;
+ parent root;
+ mass 6e4;
+ radius 0.01;
+ transform (1 0 0 0 1 0 0 0 1) (0 0 0);
+ joint
+ {
+ type composite;
+
+ joints
+ (
+ {
+ type Px;
+ }
+ {
+ type Rz;
+ }
+ );
+ }
+ }
+
+ m
+ {
+ type sphere;
+ parent M;
+ mass 6e3;
+ radius 0.01;
+ transform (1 0 0 0 1 0 0 0 1) (0 -5 0);
+ mergeWith M;
+ }
+}
+
+restraints
+{
+ spring
+ {
+ type linearSpring;
+ body M;
+ anchor (0 0 0);
+ refAttachmentPt (0 0 0);
+ stiffness 1e5;
+ damping 0;
+ restLength 0;
+ }
+}
+
+// Set the gravitational acceleration
+g (0 -9.81 0);
+
+// Set the initial offset of the pendulum to 1.5m
+// and the angle of the pendulum to 30deg
+q (1.5 0.5235987);
diff --git a/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring.C b/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring.C
new file mode 100644
index 000000000..94e151f69
--- /dev/null
+++ b/applications/test/rigidBodyDynamics/pendulumAndSpring/pendulumAndSpring.C
@@ -0,0 +1,92 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Application
+ pendulumAndSpring
+
+Description
+ Simple 2-DoF pendulum and spring simulation.
+
+\*---------------------------------------------------------------------------*/
+
+#include "rigidBodyMotion.H"
+#include "masslessBody.H"
+#include "sphere.H"
+#include "joints.H"
+#include "rigidBodyRestraint.H"
+#include "rigidBodyModelState.H"
+#include "IFstream.H"
+#include "OFstream.H"
+#include "constants.H"
+
+using namespace Foam;
+using namespace RBD;
+using namespace Foam::constant::mathematical;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+ dictionary pendulumAndSpringDict(IFstream("pendulumAndSpring")());
+
+ // Create the pendulumAndSpring model from dictionary
+ rigidBodyMotion pendulumAndSpring(pendulumAndSpringDict);
+
+ label nIter(readLabel(pendulumAndSpringDict.lookup("nIter")));
+
+ Info<< pendulumAndSpring << endl;
+ Info<< "// Joint state " << endl;
+ pendulumAndSpring.state().write(Info);
+
+ // Create the joint-space force field
+ scalarField tau(pendulumAndSpring.nDoF(), Zero);
+
+ // Create the external body force field
+ Field fx(pendulumAndSpring.nBodies(), Zero);
+
+ OFstream xFile("xVsTime");
+ OFstream omegaFile("omegaVsTime");
+
+ // Integrate the motion of the pendulumAndSpring for 100s
+ scalar deltaT = 0.01;
+ for (scalar t=0; t<20; t+=deltaT)
+ {
+ pendulumAndSpring.newTime();
+
+ for (label i=0; i.
+#
+# Script
+# pendulumAndSpring.gnuplot
+#
+# Description
+# Creates an PostScript graph file of Test-pendulumAndSpring results
+#
+#------------------------------------------------------------------------------
+
+reset
+
+set xlabel "Time/[s]"
+set ylabel "x"
+set y2label "omega"
+
+set ytics nomirror
+set y2tics
+
+set yrange [-1.5:1.5]
+set y2range [-35:35]
+
+set xzeroaxis
+
+set terminal postscript eps color enhanced solid
+set output "pendulumAndSpring.eps"
+
+plot \
+ "xVsTime" u 1:2 w l t "x", \
+ "omegaVsTime" u 1:(57.29578*$2) w l axes x1y2 t "omega"
+
+#------------------------------------------------------------------------------