diff --git a/modules/io/src/mol/pdb_reader.cc b/modules/io/src/mol/pdb_reader.cc
index 6fa089e2c2721d70b813f199edc2886e12b35659..7178667b3bc57cf337defa972c4371d830ce3b19 100644
--- a/modules/io/src/mol/pdb_reader.cc
+++ b/modules/io/src/mol/pdb_reader.cc
@@ -695,10 +695,10 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num,
     occ=std::make_pair(true, Real(1.0));
     temp=std::make_pair(true, Real(0.0));
     if (line.length()>=60) {
-      charge=line.substr(54,6).ltrim().to_float();      
+      charge=line.substr(55,7).ltrim().to_float();
     }
-    if (line.length()>=66) {
-      radius=line.substr(60, 6).ltrim().to_float();      
+    if (line.length()>=68) {
+      radius=line.substr(63,6).ltrim().to_float();
     }
   } else {
     if (line.length()>=60) {
diff --git a/modules/io/src/mol/pdb_writer.cc b/modules/io/src/mol/pdb_writer.cc
index 506345758233ec642be9c142d4104f3b178e7c99..17f891d57226ae479893a854f302008e16d7b231 100644
--- a/modules/io/src/mol/pdb_writer.cc
+++ b/modules/io/src/mol/pdb_writer.cc
@@ -130,8 +130,8 @@ void write_atom(std::ostream& ostr, FormattedLine& line,
     line(46, 8)=fmt::LPaddedFloat(p[2],  3);
     
     if (is_pqr) {
-      line(54, 6)=fmt::LPaddedFloat(atom.GetCharge(), 2);
-      line(60, 6)=fmt::LPaddedFloat(atom.GetRadius(), 2);
+      line(55, 7)=fmt::LPaddedFloat(atom.GetCharge(), 4);
+      line(63, 6)=fmt::LPaddedFloat(atom.GetRadius(), 4);
     } else {
       line(54, 6)=fmt::LPaddedFloat(atom.GetOccupancy(), 2);
       Real bfac=atom.GetBFactor();
@@ -351,6 +351,9 @@ PDBWriter::PDBWriter(const boost::filesystem::path& filename,
   charmm_style_(profile.dialect=="CHARMM"), is_pqr_(false),
   profile_(profile), filename_("")
 {
+  if (boost::iequals(".pqr", boost::filesystem::extension(filename))) {
+    is_pqr_=true;
+  }
   if (boost::iequals(".gz", boost::filesystem::extension(filename))) {
     out_.push(boost::iostreams::gzip_compressor());
   }
@@ -362,6 +365,9 @@ PDBWriter::PDBWriter(const String& filename, const IOProfile& profile):
   multi_model_(false), charmm_style_(profile.dialect=="CHARMM"), 
   is_pqr_(false), profile_(profile), filename_(filename)
 {
+  if (boost::iequals(".pqr", boost::filesystem::extension(filename))) {
+    is_pqr_=true;
+  }
   if (boost::iequals(".gz", boost::filesystem::extension(filename))) {
     out_.push(boost::iostreams::gzip_compressor());
   }
diff --git a/modules/io/tests/test_io_pdb.cc b/modules/io/tests/test_io_pdb.cc
index 6a055b83fe0624cf9cb783162bc1028039b055ed..0056bd194eb54d6624482acfdb2eca1e1605c68e 100644
--- a/modules/io/tests/test_io_pdb.cc
+++ b/modules/io/tests/test_io_pdb.cc
@@ -855,4 +855,88 @@ BOOST_AUTO_TEST_CASE(write_charmm_ter)
                             "testfiles/pdb/charmm_ter-out.pdb"));
 }
 
+BOOST_AUTO_TEST_CASE(test_pqr_import_handler)
+{
+  String fname("testfiles/test_in.pqr");
+
+  mol::EntityHandle eh=mol::CreateEntity();
+  EntityIOPDBHandler pdbh;
+
+  BOOST_CHECK(EntityIOPDBHandler::ProvidesImport(fname));
+  BOOST_CHECK(EntityIOPDBHandler::ProvidesImport("test_in.PQR"));
+
+  BOOST_CHECK(EntityIOPDBHandler::ProvidesExport(fname));
+  BOOST_CHECK(EntityIOPDBHandler::ProvidesExport("test_in.PQR"));
+
+  pdbh.Import(eh,"testfiles/pdb/simple.pqr");
+}
+
+
+BOOST_AUTO_TEST_CASE(test_pqr_read_atom)
+{
+  String fname("testfiles/pdb/simple.pqr");
+  PDBReader reader(fname, IOProfile());
+  mol::EntityHandle ent=mol::CreateEntity();
+  reader.Import(ent);
+  BOOST_REQUIRE_EQUAL(ent.GetChainCount(), 1);
+  BOOST_REQUIRE_EQUAL(ent.GetResidueCount(), 5);
+  BOOST_REQUIRE_EQUAL(ent.GetAtomCount(), 91);
+  mol::AtomHandle a1=ent.FindAtom(" ", mol::ResNum(1), "N");
+  BOOST_REQUIRE(a1.IsValid());
+  BOOST_CHECK_EQUAL(a1.GetName(), "N");
+  BOOST_CHECK_EQUAL(a1.GetResidue().GetName(), "MET");
+  BOOST_CHECK_EQUAL(a1.GetResidue().GetChain().GetName(), " ");
+
+
+  BOOST_CHECK_EQUAL(a1.GetPos(), geom::Vec3(21.6, 35.3, 56.7));
+  BOOST_CHECK_EQUAL(a1.GetElement(), "");
+  BOOST_CHECK_EQUAL(a1.IsHetAtom(), false);
+  BOOST_CHECK_CLOSE(a1.GetCharge(), Real(-0.3755), Real(1e-4));
+  BOOST_CHECK_CLOSE(a1.GetRadius(), Real(2.0005), Real(1e-4));
+
+  mol::AtomHandle a2=ent.FindAtom(" ", mol::ResNum(2), "CZ");
+  BOOST_REQUIRE(a2.IsValid());
+  BOOST_CHECK_EQUAL(a2.GetName(), "CZ");
+  BOOST_CHECK_EQUAL(a2.GetResidue().GetName(), "ARG");
+  BOOST_CHECK_EQUAL(a2.GetResidue().GetChain().GetName(), " ");
+
+  BOOST_CHECK_EQUAL(a2.GetPos(), geom::Vec3(23.9, 28.7, 56.5));
+  BOOST_CHECK_EQUAL(a2.GetElement(), "");
+  BOOST_CHECK_EQUAL(a2.IsHetAtom(), false);
+  BOOST_CHECK_CLOSE(a2.GetCharge(), Real(0.2507), Real(1e-4));
+  BOOST_CHECK_CLOSE(a2.GetRadius(), Real(1.7503), Real(1e-4));
+}
+
+BOOST_AUTO_TEST_CASE(test_pqr_write_atom)
+{
+  std::stringstream out;
+  PDBWriter writer(out, IOProfile());
+  writer.SetIsPQR(true);
+
+  mol::EntityHandle ent=mol::CreateEntity();
+  mol::XCSEditor edi=ent.EditXCS();
+  mol::ChainHandle ch=edi.InsertChain("A");
+  mol::ResidueHandle r=edi.AppendResidue(ch, "GLY");
+
+  mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), "C");
+  a.SetOccupancy(1.0);
+  a.SetBFactor(128.0);
+  a.SetCharge(-0.6543);
+  a.SetRadius(1.2345);
+  mol::AtomHandle a2=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), "C");
+  a2.SetOccupancy(1.0);
+  a2.SetBFactor(128.0);
+  a2.SetCharge(0.1234);
+  a2.SetRadius(2.5432);
+  writer.Write(ent);
+  String s=out.str();
+  BOOST_CHECK_EQUAL(s.substr(0, 54),
+                    "ATOM      1  CA  GLY A   1      32.000-128.000  -2.500");
+  BOOST_CHECK_EQUAL(s.substr(54, 26),
+                    " -0.6543 1.2345        C  ");
+
+  PDBWriter fwriter(String("testfiles/pdb/pqr_atom-out.pqr"), IOProfile());
+  BOOST_CHECK_EQUAL(fwriter.IsPQR(), true);
+}
+
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/modules/io/tests/testfiles/pdb/simple.pqr b/modules/io/tests/testfiles/pdb/simple.pqr
new file mode 100644
index 0000000000000000000000000000000000000000..57b48919b6f94b1ace9a91597b0c301b0b6adf23
--- /dev/null
+++ b/modules/io/tests/testfiles/pdb/simple.pqr
@@ -0,0 +1,100 @@
+REMARK   1 PQR file generated by PDB2PQR (Version 1.4.0)
+REMARK   1
+REMARK   1 Forcefield Used: parse
+REMARK   1
+REMARK   5 Gap in backbone detected between LEU A 3 and MET A 255!
+REMARK   5 Gap in backbone detected between MET B 1 and SER B 256!
+REMARK   5
+REMARK   6 Total charge on this protein: 1.0000 e
+REMARK   6
+ATOM      1  N   MET     1      21.600  35.300  56.700 -0.3755 2.0005
+ATOM      2  CA  MET     1      20.601  35.494  57.793  0.3300 2.0000
+ATOM      3  C   MET     1      19.654  34.300  57.789  0.5500 1.7000
+ATOM      4  O   MET     1      18.447  34.456  57.595 -0.5500 1.4000
+ATOM      5  CB  MET     1      19.789  36.783  57.639  0.0000 2.0000
+ATOM      6  CG  MET     1      20.629  38.055  57.606  0.2650 2.0000
+ATOM      7  SD  MET     1      21.638  38.325  59.084 -0.5300 1.8500
+ATOM      8  CE  MET     1      23.233  37.697  58.529  0.2650 2.0000
+ATOM      9  HE1 MET     1      23.125  37.266  57.634  0.0000 0.0000
+ATOM     10  HE2 MET     1      23.881  38.455  58.461  0.0000 0.0000
+ATOM     11  HE3 MET     1      23.571  37.025  59.187  0.0000 0.0000
+ATOM     12  H2  MET     1      22.177  34.580  56.869  0.3300 0.0000
+ATOM     13  H3  MET     1      21.135  35.294  55.831  0.3300 0.0000
+ATOM     14  HG2 MET     1      21.223  38.027  56.761  0.0000 0.0000
+ATOM     15  HG3 MET     1      19.996  38.856  57.448  0.0000 0.0000
+ATOM     16  H   MET     1      22.175  36.206  56.703  0.3300 0.0000
+ATOM     17  HA  MET     1      21.099  35.502  58.665  0.0000 0.0000
+ATOM     18  HB3 MET     1      19.138  36.853  58.408  0.0000 0.0000
+ATOM     19  HB2 MET     1      19.255  36.733  56.783  0.0000 0.0000
+ATOM     20  N   ARG     2      20.202  33.112  58.011 -0.4000 1.5000
+ATOM     21  CA  ARG     2      19.396  31.903  58.033 -0.0000 2.0000
+ATOM     22  C   ARG     2      18.608  31.739  59.328  0.5500 1.7000
+ATOM     23  O   ARG     2      17.651  30.965  59.381 -0.5500 1.4000
+ATOM     24  CB  ARG     2      20.284  30.681  57.801  0.0000 2.0000
+ATOM     25  CG  ARG     2      20.665  30.488  56.342  0.0000 2.0000
+ATOM     26  CD  ARG     2      21.557  29.281  56.154  0.3500 2.0000
+ATOM     27  NE  ARG     2      22.931  29.557  56.551 -0.3500 1.5000
+ATOM     28  CZ  ARG     2      23.900  28.700  56.500  0.2507 1.7503
+ATOM     29  NH1 ARG     2      23.640  27.417  56.130 -0.7000 1.5000
+ATOM     30  NH2 ARG     2      25.132  28.980  56.893 -0.7000 1.5000
+ATOM     31  HG3 ARG     2      21.156  31.294  56.019  0.0000 0.0000
+ATOM     32  HA  ARG     2      18.738  31.934  57.260  0.0000 0.0000
+ATOM     33  HE  ARG     2      23.157  30.486  56.860  0.4500 1.0000
+ATOM     34  HG2 ARG     2      19.838  30.356  55.799  0.0000 0.0000
+ATOM     35 HH22 ARG     2      25.859  28.300  56.895  0.4000 1.0000
+ATOM     36 HH21 ARG     2      25.336  29.925  57.170  0.4000 1.0000
+ATOM     37  H   ARG     2      21.227  33.124  58.163  0.4000 1.0000
+ATOM     38  HD3 ARG     2      21.537  29.027  55.190  0.0000 0.0000
+ATOM     39  HD2 ARG     2      21.197  28.537  56.711  0.0000 0.0000
+ATOM     40 HH12 ARG     2      24.383  26.727  56.133  0.4000 1.0000
+ATOM     41 HH11 ARG     2      22.728  27.161  55.829  0.4000 1.0000
+ATOM     42  HB3 ARG     2      19.790  29.875  58.100  0.0000 0.0000
+ATOM     43  HB2 ARG     2      21.118  30.797  58.325  0.0000 0.0000
+ATOM     44  N   LEU     3      19.003  32.473  60.366 -0.4000 1.5000
+ATOM     45  CA  LEU     3      18.330  32.402  61.664 -0.0000 2.0000
+ATOM     46  C   LEU     3      17.884  33.787  62.117  0.5500 1.7000
+ATOM     47  O   LEU     3      17.853  34.091  63.308 -0.5500 1.4000
+ATOM     48  CB  LEU     3      19.269  31.793  62.710  0.0000 2.0000
+ATOM     49  CG  LEU     3      19.695  30.340  62.501  0.0000 2.0000
+ATOM     50  CD1 LEU     3      20.585  29.897  63.648  0.0000 2.0000
+ATOM     51  CD2 LEU     3      18.461  29.459  62.420  0.0000 2.0000
+ATOM     52 HD22 LEU     3      17.888  29.751  61.653  0.0000 0.0000
+ATOM     53 HD23 LEU     3      18.736  28.507  62.283  0.0000 0.0000
+ATOM     54 HD21 LEU     3      17.938  29.533  63.270  0.0000 0.0000
+ATOM     55  H   LEU     3      19.817  33.091  60.179  0.4000 1.0000
+ATOM     56 HD13 LEU     3      20.084  29.973  64.512  0.0000 0.0000
+ATOM     57 HD12 LEU     3      20.863  28.945  63.510  0.0000 0.0000
+ATOM     58 HD11 LEU     3      21.400  30.478  63.686  0.0000 0.0000
+ATOM     59  HA  LEU     3      17.516  31.820  61.570  0.0000 0.0000
+ATOM     60  HG  LEU     3      20.197  30.269  61.643  0.0000 0.0000
+ATOM     61  HB3 LEU     3      18.811  31.845  63.597  0.0000 0.0000
+ATOM     62  HB2 LEU     3      20.102  32.347  62.730  0.0000 0.0000
+ATOM     63  N   MET   255      29.709   5.069  60.642 -0.4000 1.5000
+ATOM     64  CA  MET   255      28.701   5.164  59.592 -0.0000 2.0000
+ATOM     65  C   MET   255      27.302   4.748  60.005  0.5500 1.7000
+ATOM     66  O   MET   255      27.057   3.586  60.326 -0.5500 1.4000
+ATOM     67  CB  MET   255      29.146   4.331  58.399  0.0000 2.0000
+ATOM     68  CG  MET   255      30.558   4.642  57.948  0.2650 2.0000
+ATOM     69  SD  MET   255      31.116   3.394  56.790 -0.5300 1.8500
+ATOM     70  CE  MET   255      31.526   2.062  57.912  0.2650 2.0000
+ATOM     71  HG2 MET   255      30.571   5.563  57.524  0.0000 0.0000
+ATOM     72  HE1 MET   255      32.437   1.708  57.695  0.0000 0.0000
+ATOM     73  HE2 MET   255      31.518   2.401  58.854  0.0000 0.0000
+ATOM     74  HE3 MET   255      30.854   1.325  57.820  0.0000 0.0000
+ATOM     75  HB2 MET   255      29.096   3.355  58.642  0.0000 0.0000
+ATOM     76  HG3 MET   255      31.163   4.679  58.762  0.0000 0.0000
+ATOM     77  H   MET   255      26.414  14.773  61.903  0.4000 1.0000
+ATOM     78  HA  MET   255      28.661   6.140  59.286  0.0000 0.0000
+ATOM     79  HB3 MET   255      28.520   4.500  57.628  0.0000 0.0000
+ATOM     80  N   SER   256      26.376   5.699  59.965 -0.4000 1.5000
+ATOM     81  CA  SER   256      24.998   5.430  60.347 -0.0000 2.0000
+ATOM     82  C   SER   256      24.040   5.839  59.231  0.1000 1.7000
+ATOM     83  O   SER   256      24.543   6.294  58.186 -0.5500 1.4000
+ATOM     84  CB  SER   256      24.664   6.188  61.642  0.0000 2.0000
+ATOM     85  OG  SER   256      25.569   5.836  62.681 -0.4900 1.4000
+ATOM     86  OXT SER   256      22.811   5.701  59.408 -0.5500 1.4000
+ATOM     87  H   SER   256      26.714   6.626  59.646  0.4000 1.0000
+ATOM     88  HA  SER   256      24.898   4.440  60.490  0.0000 0.0000
+ATOM     89  HB3 SER   256      23.741   5.949  61.922  0.0000 0.0000
+ATOM     90  HB2 SER   256      24.734   7.163  61.468  0.0000 0.0000
+ATOM     91  HG  SER   256      26.464   6.235  62.490  0.4900 1.0000