Index: src/Fragmentation/Summation/SetValues/FragmentForces.cpp
===================================================================
--- src/Fragmentation/Summation/SetValues/FragmentForces.cpp	(revision f856ecd74c7c93e41e94dee02a23bcc67b6721ec)
+++ src/Fragmentation/Summation/SetValues/FragmentForces.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
@@ -52,5 +52,5 @@
   forces_t::const_iterator otheriter = other.begin();
   for (; iter != end(); ++iter, ++otheriter) {
-    if( iter->size() == otheriter->size())
+    if( iter->size() != otheriter->size())
       return false;
     force_t::const_iterator forceiter = iter->begin();
@@ -62,4 +62,21 @@
   }
   return true;
+}
+
+void FragmentForces::operator+=(const FragmentForces& other)
+{
+  ASSERT( size() == other.size(),
+      "FragmentForces::operator+=() - unequal number of force vectors.");
+  forces_t::iterator iter = begin();
+  forces_t::const_iterator otheriter = other.begin();
+  for (; iter != end(); ++iter, ++otheriter) {
+    ASSERT( iter->size() == otheriter->size(),
+        "FragmentForces::operator+=() - force vectors having unequal number of components.");
+    force_t::iterator forceiter = iter->begin();
+    force_t::const_iterator otherforceiter = otheriter->begin();
+    for (; forceiter != iter->end(); ++forceiter, ++otherforceiter) {
+      *forceiter += *otherforceiter;
+    }
+  }
 }
 
Index: src/Fragmentation/Summation/SetValues/FragmentForces.hpp
===================================================================
--- src/Fragmentation/Summation/SetValues/FragmentForces.hpp	(revision f856ecd74c7c93e41e94dee02a23bcc67b6721ec)
+++ src/Fragmentation/Summation/SetValues/FragmentForces.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
@@ -47,4 +47,6 @@
   }
 
+  void operator+=(const FragmentForces& other);
+
 private:
   friend class boost::serialization::access;
Index: src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.cpp
===================================================================
--- src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
@@ -0,0 +1,207 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2016 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder 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 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder 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 MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * FragmentForcesUnitTest.cpp
+ *
+ *  Created on: Aug 18, 2016
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include "FragmentForcesUnitTest.hpp"
+
+#include <algorithm>
+#include <limits>
+
+#include <boost/assign.hpp>
+#include <boost/foreach.hpp>
+
+#include <sstream>
+
+#include "CodePatterns/Assert.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+using namespace boost::assign;
+
+#include "Fragmentation/Summation/SetValues/FragmentForces.hpp"
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( FragmentForcesTest );
+
+
+void FragmentForcesTest::setUp()
+{
+  // failing asserts should be thrown
+  ASSERT_DO(Assert::Throw);
+}
+
+void FragmentForcesTest::tearDown()
+{
+}
+
+/** UnitTest for operator==()
+ */
+void FragmentForcesTest::equality_Test()
+{
+  // create different forces
+  FragmentForces::force_t zeroforce;
+  zeroforce += 0., 0., 0.;
+  FragmentForces::force_t oneforce;
+  oneforce += 1., 2., 3.;
+  FragmentForces::force_t twoforce;
+  twoforce += 0., 1., 4.;
+
+  FragmentForces emptyfragment;
+  FragmentForces fragment;
+  fragment += oneforce;
+  fragment += twoforce;
+  FragmentForces samefragment;
+  samefragment += oneforce;
+  samefragment += twoforce;
+  FragmentForces otherfragment;
+  otherfragment += twoforce;
+  otherfragment += twoforce;
+  FragmentForces largerfragment;
+  largerfragment += oneforce;
+  largerfragment += oneforce;
+  largerfragment += oneforce;
+  FragmentForces smallerfragment;
+  smallerfragment += oneforce;
+
+  // test against different instance with same contents
+  CPPUNIT_ASSERT( (fragment == samefragment) );
+  CPPUNIT_ASSERT( !(fragment != samefragment) );
+
+  // test against other fragment
+  CPPUNIT_ASSERT( !(fragment == otherfragment) );
+  CPPUNIT_ASSERT( fragment != otherfragment );
+
+  // test against larger fragment
+  CPPUNIT_ASSERT( !(fragment == largerfragment) );
+  CPPUNIT_ASSERT( fragment != largerfragment );
+
+  // test against smaller fragment
+  CPPUNIT_ASSERT( !(fragment == smallerfragment) );
+  CPPUNIT_ASSERT( fragment != smallerfragment );
+
+  // test against empty
+  CPPUNIT_ASSERT( !(fragment == emptyfragment) );
+  CPPUNIT_ASSERT( fragment != emptyfragment );
+
+  // tests against themselves
+  CPPUNIT_ASSERT( fragment == fragment );
+  CPPUNIT_ASSERT( samefragment == samefragment );
+  CPPUNIT_ASSERT( otherfragment == otherfragment );
+  CPPUNIT_ASSERT( largerfragment == largerfragment );
+  CPPUNIT_ASSERT( smallerfragment == smallerfragment );
+  CPPUNIT_ASSERT( emptyfragment == emptyfragment );
+}
+
+/** UnitTest for operator+=()
+ */
+void FragmentForcesTest::operatorPlusEqual_Test()
+{
+  // create different forces
+  FragmentForces::force_t zeroforce;
+  zeroforce += 0., 0., 0.;
+  FragmentForces::force_t oneforce;
+  oneforce += 1., 2., 3.;
+  FragmentForces::force_t twoforce;
+  twoforce += 0., 1., 4.;
+  FragmentForces::force_t resultforce;
+  resultforce += 1., 3., 7.;
+
+  FragmentForces fragment;
+  fragment += oneforce;
+  fragment += oneforce;
+  FragmentForces otherfragment;
+  otherfragment += twoforce;
+  otherfragment += twoforce;
+  FragmentForces resultfragment;
+  resultfragment += resultforce;
+  resultfragment += resultforce;
+
+  FragmentForces sumfragment = fragment;
+  sumfragment.operator+=(otherfragment);
+  CPPUNIT_ASSERT( sumfragment == resultfragment);
+}
+
+/** UnitTest for operator+=() with different number of components
+ */
+void FragmentForcesTest::operatorPlusEqual_NonOverlapping_Test()
+{
+  // create different forces
+  FragmentForces::force_t zeroforce;
+  zeroforce += 0., 0., 0.;
+  FragmentForces::force_t surplusforce;
+  surplusforce += 0., 0., 0., 1.;
+  FragmentForces::force_t oneforce;
+  oneforce += 1., 2., 3.;
+  FragmentForces::force_t twoforce;
+  twoforce += 0., 1., 4.;
+  FragmentForces::force_t resultforce;
+  resultforce += 1., 3., 7.;
+
+  FragmentForces fragment;
+  fragment += oneforce;
+  fragment += oneforce;
+  FragmentForces otherfragment;
+  otherfragment += twoforce;
+  FragmentForces surplusfragment;
+  surplusfragment += surplusforce;
+  surplusfragment += twoforce;
+
+  {
+    FragmentForces sumfragment = fragment;
+#ifndef NDEBUG
+    std::cout << "The following assertion is expected and does not mean a failure of the test." << std::endl;
+    CPPUNIT_ASSERT_THROW( (sumfragment.operator+=(otherfragment)) ,Assert::AssertionFailure);
+#endif
+  }
+  {
+    FragmentForces sumfragment = fragment;
+#ifndef NDEBUG
+    std::cout << "The following assertion is expected and does not mean a failure of the test." << std::endl;
+    CPPUNIT_ASSERT_THROW( (sumfragment.operator+=(surplusfragment)) ,Assert::AssertionFailure);
+#endif
+  }
+}
Index: src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.hpp
===================================================================
--- src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
@@ -0,0 +1,37 @@
+/*
+ * FragmentForcesUnitTest.hpp
+ *
+ *  Created on: Aug 18, 2016
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTFORCESUNITTEST_HPP_
+#define FRAGMENTFORCESUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/********************************************** Test classes **************************************/
+
+class FragmentForcesTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( FragmentForcesTest) ;
+    CPPUNIT_TEST ( equality_Test );
+    CPPUNIT_TEST ( operatorPlusEqual_NonOverlapping_Test );
+    CPPUNIT_TEST ( operatorPlusEqual_Test );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void equality_Test();
+      void operatorPlusEqual_NonOverlapping_Test();
+      void operatorPlusEqual_Test();
+
+};
+
+#endif /* FRAGMENTFORCESUNITTEST_HPP_ */
Index: src/Fragmentation/Summation/SetValues/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Summation/SetValues/unittests/Makefile.am	(revision f856ecd74c7c93e41e94dee02a23bcc67b6721ec)
+++ src/Fragmentation/Summation/SetValues/unittests/Makefile.am	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
@@ -4,4 +4,5 @@
 FRAGMENTATIONSETVALUESTESTSSOURCES = \
 	../Fragmentation/Summation/SetValues/unittests/EigenvaluesUnitTest.cpp \
+	../Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.cpp \
 	../Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp \
 	../Fragmentation/Summation/SetValues/unittests/HistogramUnitTest.cpp \
@@ -12,4 +13,5 @@
 FRAGMENTATIONSETVALUESTESTSHEADERS = \
 	../Fragmentation/Summation/SetValues/unittests/EigenvaluesUnitTest.hpp \
+	../Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.hpp \
 	../Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp \
 	../Fragmentation/Summation/SetValues/unittests/HistogramUnitTest.hpp \
@@ -20,4 +22,5 @@
 FRAGMENTATIONSETVALUESTESTS = \
 	EigenvaluesUnitTest \
+	FragmentForcesUnitTest \
 	FragmentUnitTest \
 	HistogramUnitTest \
@@ -41,4 +44,11 @@
 	../Fragmentation/Summation/SetValues/unittests/EigenvaluesUnitTest.hpp
 EigenvaluesUnitTest_LDADD = \
+	${FRAGMENTATIONSETVALUESLIBS} \
+	$(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS)
+
+FragmentForcesUnitTest_SOURCES = \
+	../Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.cpp \
+	../Fragmentation/Summation/SetValues/unittests/FragmentForcesUnitTest.hpp
+FragmentForcesUnitTest_LDADD = \
 	${FRAGMENTATIONSETVALUESLIBS} \
 	$(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS)
