diff --git a/src/generic/DumpMassCharge.cpp b/src/generic/DumpMassCharge.cpp
index effc6b9bae89f5e5da82505d30f173b2caa29a1c..e1cfb47951ee57dd5d5b82abf8693eed5890c4a1 100644
--- a/src/generic/DumpMassCharge.cpp
+++ b/src/generic/DumpMassCharge.cpp
@@ -96,6 +96,8 @@ class DumpMassCharge:
   string file;
   bool first;
   bool second;
+  bool print_masses;
+  bool print_charges;
 public:
   explicit DumpMassCharge(const ActionOptions&);
   ~DumpMassCharge();
@@ -115,6 +117,8 @@ void DumpMassCharge::registerKeywords( Keywords& keys ) {
   keys.add("compulsory","STRIDE","1","the frequency with which the atoms should be output");
   keys.add("atoms", "ATOMS", "the atom indices whose charges and masses you would like to print out");
   keys.add("compulsory", "FILE", "file on which to output charges and masses.");
+  keys.addFlag("ONLY_MASSES",false,"Only output masses to file");
+  keys.addFlag("ONLY_CHARGES",false,"Only output charges to file");
 }
 
 DumpMassCharge::DumpMassCharge(const ActionOptions&ao):
@@ -122,7 +126,9 @@ DumpMassCharge::DumpMassCharge(const ActionOptions&ao):
   ActionAtomistic(ao),
   ActionPilot(ao),
   first(true),
-  second(true)
+  second(true),
+  print_masses(true),
+  print_charges(true)
 {
   vector<AtomNumber> atoms;
   parse("FILE",file);
@@ -137,12 +143,32 @@ DumpMassCharge::DumpMassCharge(const ActionOptions&ao):
     }
   }
 
+  bool only_masses = false;
+  parseFlag("ONLY_MASSES",only_masses);
+  if(only_masses) {
+    print_charges = false;
+    log.printf("  only masses will be written to file\n");
+  }
+  
+  bool only_charges = false; 
+  parseFlag("ONLY_CHARGES",only_charges);
+  if(only_charges) {
+    print_masses = false;
+    log.printf("  only charges will be written to file\n");
+  }
+  
+  
   checkRead();
 
   log.printf("  printing the following atoms:" );
   for(unsigned i=0; i<atoms.size(); ++i) log.printf(" %d",atoms[i].serial() );
   log.printf("\n");
   requestAtoms(atoms);
+  
+  if(only_masses && only_charges) {
+    plumed_merror("using both ONLY_MASSES and ONLY_CHARGES doesn't make sense");
+  }
+
 }
 
 void DumpMassCharge::prepare() {
@@ -163,8 +189,8 @@ void DumpMassCharge::update() {
   for(unsigned i=0; i<getNumberOfAtoms(); i++) {
     int ii=getAbsoluteIndex(i).index();
     of.printField("index",ii);
-    of.printField("mass",getMass(i));
-    of.printField("charge",getCharge(i));
+    if(print_masses) {of.printField("mass",getMass(i));}
+    if(print_charges) {of.printField("charge",getCharge(i));}
     of.printField();
   }
 }