diff --git a/modelling/pymod/_pipeline.py b/modelling/pymod/_pipeline.py
index b8895042d83adfa364b2c413f0abf08f5a174e6d..ec1e88f70ff43aa7ebf9d881ff4359133d0c4f9e 100644
--- a/modelling/pymod/_pipeline.py
+++ b/modelling/pymod/_pipeline.py
@@ -309,11 +309,16 @@ def MinimizeModelEnergy(mhandle, max_iterations=12, max_iter_sd=20,
     # setup mm simulation
     sim = _SetupMmSimulation(mhandle.model, force_fields)
 
-    # check for certain failure -> we get NaN if atoms are on top each other
-    if math.isnan(sim.GetEnergy()):
+    # check for certain failure -> we get NaN/Inf if atoms are on top each other
+    cur_energy = sim.GetEnergy()
+    if math.isnan(cur_energy):
         ost.LogError("OpenMM could not minimize energy as atoms are on top of "
                      "each other!")
         return
+    if math.isinf(cur_energy):
+        ost.LogError("OpenMM could not minimize energy as atoms are almost "
+                     "on top of each other!")
+        return
         
     # settings to check for stereochemical problems
     clashing_distances = mol.alg.DefaultClashingDistances()
@@ -323,7 +328,7 @@ def MinimizeModelEnergy(mhandle, max_iterations=12, max_iter_sd=20,
     for i in range(max_iterations):
         # update atoms
         ost.LogInfo("Perform energy minimization "
-                    "(iteration %d, energy: %g)" % (i+1, sim.GetEnergy()))
+                    "(iteration %d, energy: %g)" % (i+1, cur_energy))
         sim.ApplySD(tolerance = 1.0, max_iterations = max_iter_sd)
         sim.ApplyLBFGS(tolerance = 1.0, max_iterations = max_iter_lbfgs)
         sim.UpdatePositions()
@@ -344,10 +349,11 @@ def MinimizeModelEnergy(mhandle, max_iterations=12, max_iter_sd=20,
         if ignore_stereo_log:
             ost.PopVerbosityLevel()
         # checks above would remove bad atoms
+        cur_energy = sim.GetEnergy()
         if len(temp_ent_stereo_checked.Select("ele!=H").atoms) \
            == len(temp_ent.Select("ele!=H").atoms):
             ost.LogInfo("No more stereo-chemical problems "
-                        "-> final energy: %g" % (sim.GetEnergy()))
+                        "-> final energy: %g" % cur_energy)
             break
 
     # update model
diff --git a/modelling/tests/data/gly_almost_on_top.pdb b/modelling/tests/data/gly_almost_on_top.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..2a097faf2861d597de40edd9874d451a679a8d83
--- /dev/null
+++ b/modelling/tests/data/gly_almost_on_top.pdb
@@ -0,0 +1,82 @@
+ATOM      1  N   GLY A   1       0.001   0.001   0.001  1.00  0.00           N  
+ATOM      2  CA  GLY A   1       1.456   0.001   0.001  1.00  0.00           C  
+ATOM      3  C   GLY A   1       1.942   1.417   0.001  1.00  0.00           C  
+ATOM      4  O   GLY A   1       2.853   1.778   0.745  1.00  0.00           O  
+ATOM      5  N   GLY A   2       1.346   2.282  -0.844  1.00  0.00           N  
+ATOM      6  CA  GLY A   2       1.728   3.683  -0.937  1.00  0.00           C  
+ATOM      7  C   GLY A   2       1.528   4.331   0.397  1.00  0.00           C  
+ATOM      8  O   GLY A   2       2.380   5.077   0.878  1.00  0.00           O  
+ATOM      9  N   GLY A   3       0.380   4.069   1.053  1.00  0.00           N  
+ATOM     10  CA  GLY A   3       0.068   4.637   2.356  1.00  0.00           C  
+ATOM     11  C   GLY A   3       1.115   4.210   3.336  1.00  0.00           C  
+ATOM     12  O   GLY A   3       1.617   5.011   4.124  1.00  0.00           O  
+ATOM     13  N   GLY A   4       1.490   2.915   3.325  1.00  0.00           N  
+ATOM     14  CA  GLY A   4       2.497   2.377   4.227  1.00  0.00           C  
+ATOM     15  C   GLY A   4       3.789   3.097   3.998  1.00  0.00           C  
+ATOM     16  O   GLY A   4       4.473   3.494   4.941  1.00  0.00           O  
+ATOM     17  N   GLY A   5       4.176   3.295   2.723  1.00  0.00           N  
+ATOM     18  CA  GLY A   5       5.410   3.981   2.370  1.00  0.00           C  
+ATOM     19  C   GLY A   5       5.368   5.372   2.923  1.00  0.00           C  
+ATOM     20  O   GLY A   5       6.338   5.856   3.504  1.00  0.00           O  
+ATOM     21  N   GLY A   6       4.229   6.074   2.762  1.00  0.00           N  
+ATOM     22  CA  GLY A   6       4.064   7.433   3.254  1.00  0.00           C  
+ATOM     23  C   GLY A   6       4.249   7.438   4.740  1.00  0.00           C  
+ATOM     24  O   GLY A   6       4.935   8.296   5.293  1.00  0.00           O  
+ATOM     25  N   GLY A   7       3.637   6.469   5.449  1.00  0.00           N  
+ATOM     26  CA  GLY A   7       3.739   6.366   6.897  1.00  0.00           C  
+ATOM     27  C   GLY A   7       5.179   6.192   7.270  1.00  0.00           C  
+ATOM     28  O   GLY A   7       5.679   6.830   8.195  1.00  0.00           O  
+ATOM     29  N   GLY A   8       5.906   5.309   6.557  1.00  0.00           N  
+ATOM     30  CA  GLY A   8       7.314   5.051   6.822  1.00  0.00           C  
+ATOM     31  C   GLY A   8       8.082   6.325   6.657  1.00  0.00           C  
+ATOM     32  O   GLY A   8       8.932   6.668   7.477  1.00  0.00           O  
+ATOM     33  N   GLY A   9       7.808   7.083   5.576  1.00  0.00           N  
+ATOM     34  CA  GLY A   9       8.486   8.342   5.304  1.00  0.00           C  
+ATOM     35  C   GLY A   9       8.238   9.283   6.442  1.00  0.00           C  
+ATOM     36  O   GLY A   9       9.150   9.950   6.928  1.00  0.00           O  
+ATOM     37  N   GLY A  10       6.979   9.374   6.913  1.00  0.00           N  
+ATOM     38  CA  GLY A  10       6.610  10.252   8.014  1.00  0.00           C  
+ATOM     39  C   GLY A  10       7.392   9.862   9.230  1.00  0.00           C  
+ATOM     40  O   GLY A  10       7.924  10.728   9.923  1.00  0.00           O  
+ATOM     41  N   GLY A  11       0.000   0.000   0.000  1.00  0.00           N  
+ATOM     42  CA  GLY A  11       1.455   0.000   0.000  1.00  0.00           C  
+ATOM     43  C   GLY A  11       1.941   1.416   0.000  1.00  0.00           C  
+ATOM     44  O   GLY A  11       2.852   1.777   0.744  1.00  0.00           O  
+ATOM     45  N   GLY A  12       1.345   2.281  -0.845  1.00  0.00           N  
+ATOM     46  CA  GLY A  12       1.727   3.682  -0.938  1.00  0.00           C  
+ATOM     47  C   GLY A  12       1.527   4.330   0.396  1.00  0.00           C  
+ATOM     48  O   GLY A  12       2.379   5.076   0.877  1.00  0.00           O  
+ATOM     49  N   GLY A  13       0.379   4.068   1.052  1.00  0.00           N  
+ATOM     50  CA  GLY A  13       0.067   4.636   2.355  1.00  0.00           C  
+ATOM     51  C   GLY A  13       1.114   4.209   3.335  1.00  0.00           C  
+ATOM     52  O   GLY A  13       1.616   5.010   4.123  1.00  0.00           O  
+ATOM     53  N   GLY A  14       1.489   2.914   3.324  1.00  0.00           N  
+ATOM     54  CA  GLY A  14       2.496   2.376   4.226  1.00  0.00           C  
+ATOM     55  C   GLY A  14       3.788   3.096   3.997  1.00  0.00           C  
+ATOM     56  O   GLY A  14       4.472   3.493   4.940  1.00  0.00           O  
+ATOM     57  N   GLY A  15       4.175   3.294   2.722  1.00  0.00           N  
+ATOM     58  CA  GLY A  15       5.409   3.980   2.369  1.00  0.00           C  
+ATOM     59  C   GLY A  15       5.367   5.371   2.922  1.00  0.00           C  
+ATOM     60  O   GLY A  15       6.337   5.855   3.503  1.00  0.00           O  
+ATOM     61  N   GLY A  16       4.228   6.073   2.761  1.00  0.00           N  
+ATOM     62  CA  GLY A  16       4.063   7.432   3.253  1.00  0.00           C  
+ATOM     63  C   GLY A  16       4.248   7.437   4.739  1.00  0.00           C  
+ATOM     64  O   GLY A  16       4.934   8.295   5.292  1.00  0.00           O  
+ATOM     65  N   GLY A  17       3.636   6.468   5.448  1.00  0.00           N  
+ATOM     66  CA  GLY A  17       3.738   6.365   6.896  1.00  0.00           C  
+ATOM     67  C   GLY A  17       5.178   6.191   7.269  1.00  0.00           C  
+ATOM     68  O   GLY A  17       5.678   6.829   8.194  1.00  0.00           O  
+ATOM     69  N   GLY A  18       5.905   5.308   6.556  1.00  0.00           N  
+ATOM     70  CA  GLY A  18       7.313   5.050   6.821  1.00  0.00           C  
+ATOM     71  C   GLY A  18       8.081   6.324   6.656  1.00  0.00           C  
+ATOM     72  O   GLY A  18       8.931   6.667   7.476  1.00  0.00           O  
+ATOM     73  N   GLY A  19       7.807   7.082   5.575  1.00  0.00           N  
+ATOM     74  CA  GLY A  19       8.485   8.341   5.303  1.00  0.00           C  
+ATOM     75  C   GLY A  19       8.237   9.282   6.441  1.00  0.00           C  
+ATOM     76  O   GLY A  19       9.149   9.949   6.927  1.00  0.00           O  
+ATOM     77  N   GLY A  20       6.978   9.373   6.912  1.00  0.00           N  
+ATOM     78  CA  GLY A  20       6.609  10.251   8.013  1.00  0.00           C  
+ATOM     79  C   GLY A  20       7.391   9.861   9.229  1.00  0.00           C  
+ATOM     80  O   GLY A  20       7.923  10.727   9.922  1.00  0.00           O  
+TER      81      GLY A  20                                                      
+END   
diff --git a/modelling/tests/test_pipeline.py b/modelling/tests/test_pipeline.py
index 0654915a03a25ef84c71702846839c7c85b4a517..65a43b325782640bd7720cc197bdb80402c217ea 100644
--- a/modelling/tests/test_pipeline.py
+++ b/modelling/tests/test_pipeline.py
@@ -305,6 +305,29 @@ class PipelineTests(unittest.TestCase):
         modelling.MinimizeModelEnergy(mhandle)
         self.compare(mhandle.model, 'data/1crn_final.pdb')
 
+    def testMinimizeModelEnergy(self):
+        '''Check energy minimization fails.'''
+        # setup log
+        log = _FetchLog()
+        ost.PushLogSink(log)
+        ost.PushVerbosityLevel(1)
+        # catch atoms on top
+        mhandle = self.getMockModel(io.LoadPDB('data/gly_on_top.pdb'))
+        log.messages['ERROR'] = list()
+        modelling.MinimizeModelEnergy(mhandle)
+        self.assertEqual(len(log.messages['ERROR']), 1)
+        self.assertEqual(log.messages['ERROR'][0],
+                         "OpenMM could not minimize energy as atoms are on "
+                         "top of each other!")
+        # catch atoms almost on top
+        mhandle = self.getMockModel(io.LoadPDB('data/gly_almost_on_top.pdb'))
+        log.messages['ERROR'] = list()
+        modelling.MinimizeModelEnergy(mhandle)
+        self.assertEqual(len(log.messages['ERROR']), 1)
+        self.assertEqual(log.messages['ERROR'][0],
+                         "OpenMM could not minimize energy as atoms are "
+                         "almost on top of each other!")
+
     def testBuildFromRawModel(self):
         '''Check that BuildFromRawModel works.'''
         # get raw model