diff --git a/doc/src/info.txt b/doc/src/info.txt
index 43b430f746451f05f5a2308520eefdd7f0062c42..d5b5bd97b942842c03a26011d66ce7049b1c3a27 100644
--- a/doc/src/info.txt
+++ b/doc/src/info.txt
@@ -12,7 +12,7 @@ info command :h3
 
 info args :pre
 
-args = one or more of the following keywords: {out}, {all}, {system}, {memory}, {communication}, {computes}, {dumps}, {fixes}, {groups}, {regions}, {variables}, {styles}, {time}, or {configuration}
+args = one or more of the following keywords: {out}, {all}, {system}, {memory}, {communication}, {computes}, {dumps}, {fixes}, {groups}, {regions}, {variables}, {coeffs}, {styles}, {time}, or {configuration}
      {out} values = {screen}, {log}, {append} filename, {overwrite} filename
      {styles} values = {all}, {angle}, {atom}, {bond}, {compute}, {command}, {dump}, {dihedral}, {fix}, {improper}, {integrate}, {kspace}, {minimize}, {pair}, {region} :ul
 
@@ -81,6 +81,11 @@ The {variables} category prints a list of all currently defined
 variables, their names, styles, definition and last computed value, if
 available.
 
+The {coeffs} category prints a list for each defined force style
+(pair, bond, angle, dihedral, improper) indicating which of the
+corresponding coefficients have been set. This can be very helpful
+to debug error messages like "All pair coeffs are not set".
+
 The {styles} category prints the list of styles available in the
 current LAMMPS binary. It supports one of the following options
 to control which category of styles is printed out:
diff --git a/src/info.cpp b/src/info.cpp
index 03eb1e10ed5a6c865473d4ec5d9d7e984a502e8a..c8cf25d871d2a23bbdabef9139819cb09124c282 100644
--- a/src/info.cpp
+++ b/src/info.cpp
@@ -28,6 +28,10 @@
 #include "force.h"
 #include "pair.h"
 #include "pair_hybrid.h"
+#include "bond.h"
+#include "angle.h"
+#include "dihedral.h"
+#include "improper.h"
 #include "group.h"
 #include "input.h"
 #include "modify.h"
@@ -75,20 +79,21 @@ enum {COMPUTES=1<<0,
       VARIABLES=1<<8,
       SYSTEM=1<<9,
       COMM=1<<10,
-      ATOM_STYLES=1<<11,
-      INTEGRATE_STYLES=1<<12,
-      MINIMIZE_STYLES=1<<13,
-      PAIR_STYLES=1<<14,
-      BOND_STYLES=1<<15,
-      ANGLE_STYLES=1<<16,
-      DIHEDRAL_STYLES=1<<17,
-      IMPROPER_STYLES=1<<18,
-      KSPACE_STYLES=1<<19,
-      FIX_STYLES=1<<20,
-      COMPUTE_STYLES=1<<21,
-      REGION_STYLES=1<<22,
-      DUMP_STYLES=1<<23,
-      COMMAND_STYLES=1<<24,
+      COEFFS=1<<11,
+      ATOM_STYLES=1<<12,
+      INTEGRATE_STYLES=1<<13,
+      MINIMIZE_STYLES=1<<14,
+      PAIR_STYLES=1<<15,
+      BOND_STYLES=1<<16,
+      ANGLE_STYLES=1<<17,
+      DIHEDRAL_STYLES=1<<18,
+      IMPROPER_STYLES=1<<19,
+      KSPACE_STYLES=1<<20,
+      FIX_STYLES=1<<21,
+      COMPUTE_STYLES=1<<22,
+      REGION_STYLES=1<<23,
+      DUMP_STYLES=1<<24,
+      COMMAND_STYLES=1<<25,
       ALL=~0};
 
 static const int STYLES = ATOM_STYLES | INTEGRATE_STYLES | MINIMIZE_STYLES
@@ -183,6 +188,9 @@ void Info::command(int narg, char **arg)
     } else if (strncmp(arg[idx],"system",3) == 0) {
       flags |= SYSTEM;
       ++idx;
+    } else if (strncmp(arg[idx],"coeffs",3) == 0) {
+      flags |= COEFFS;
+      ++idx;
     } else if (strncmp(arg[idx],"styles",3) == 0) {
       if (idx+1 < narg) {
         ++idx;
@@ -440,6 +448,69 @@ void Info::command(int narg, char **arg)
     }
   }
 
+  if (domain->box_exist && (flags & COEFFS)) {
+    Pair *pair=force->pair;
+
+    fprintf(out,"\nCoeff information:\n");
+    if (pair) {
+      fprintf(out,"Pair Coeffs:\n");
+      for (int i=1; i <= atom->ntypes; ++i)
+        for (int j=i; j <= atom->ntypes; ++j) {
+          fprintf(out,"%3d %3d :",i,j);
+          if (pair->allocated && pair->setflag[i][j]) fputs(" is set\n",out);
+          else fputs (" is not set\n",out);
+        }
+    }
+    if (force->bond) {
+      Bond *bond=force->bond;
+
+      if (bond) {
+        fprintf(out,"Bond Coeffs:\n");
+        for (int i=1; i <= atom->nbondtypes; ++i) {
+          fprintf(out,"%3d :",i);
+          if (bond->allocated && bond->setflag[i]) fputs(" is set\n",out);
+          else fputs (" is not set\n",out);
+        }
+      }
+    }
+    if (force->angle) {
+      Angle *angle=force->angle;
+
+      if (angle) {
+        fprintf(out,"Angle Coeffs:\n");
+        for (int i=1; i <= atom->nangletypes; ++i) {
+          fprintf(out,"%3d :",i);
+          if (angle->allocated && angle->setflag[i]) fputs(" is set\n",out);
+          else fputs (" is not set\n",out);
+        }
+      }
+    }
+    if (force->dihedral) {
+      Dihedral *dihedral=force->dihedral;
+
+      if (dihedral) {
+        fprintf(out,"Dihedral Coeffs:\n");
+        for (int i=1; i <= atom->ndihedraltypes; ++i) {
+          fprintf(out,"%3d :",i);
+          if (dihedral->allocated && dihedral->setflag[i]) fputs(" is set\n",out);
+          else fputs (" is not set\n",out);
+        }
+      }
+    }
+    if (force->improper) {
+      Improper *b=force->improper;
+
+      if (b) {
+        fprintf(out,"Improper Coeffs:\n");
+        for (int i=1; i <= atom->nimpropertypes; ++i) {
+          fprintf(out,"%3d :",i);
+          if (b->allocated && b->setflag[i]) fputs(" is set\n",out);
+          else fputs (" is not set\n",out);
+        }
+      }
+    }
+  }
+
   if (flags & GROUPS) {
     int ngroup = group->ngroup;
     char **names = group->names;