diff --git a/actions/doc/index.rst b/actions/doc/index.rst
index aa14b3f87cf571511cc3d02b519a87508350340e..6f997647d88c93065000eaf46b0f9163c40ba73d 100644
--- a/actions/doc/index.rst
+++ b/actions/doc/index.rst
@@ -123,19 +123,25 @@ You can (re-)construct the sidechains in a model from the command line.
 
 .. code-block:: console
 
-  $ pm build-sidechains [-h] [-o <FILENAME>] [-k] [-n] [-r] in_file
+  $ usage: build-sidechains [-h] (-p <FILE> | -e <FILE>) [-o <FILENAME>] [-k] 
+                            [-n] [-r]
 
 Example usage:
 
 .. code-block:: console
 
-  $ pm build-sidechains input.pdb
+  $ pm build-sidechains -p input.pdb
 
 This reads a structure stored in in.pdb, strips all sidechains, 
 detects and models disulfid bonds and reconstructs all sidechains with the 
 flexible rotamer model. The result is stored as :file:`out.pdb`. 
 The output filename can be controlled with the ``-o`` flag.
 
+A structure can be provided in PDB (``-p``) or in any format readable by the
+:func:`ost.io.LoadEntity` method (``-e``). In the latter case, the format is
+chosen by file ending. Recognized File Extensions: ``.ent``, ``.pdb``,
+``.ent.gz``, ``.pdb.gz``, ``.cif``, ``.cif.gz``. 
+
 Several flags control the modelling behaviour:
 
 .. option:: -k, --keep-sidechains 
diff --git a/actions/pm-build-sidechains b/actions/pm-build-sidechains
index f67a32c3ac5b335c417b41835e78bc82dcae96b1..a04cd7b1b927994ee2603f7b24280ab2e500f3b4 100644
--- a/actions/pm-build-sidechains
+++ b/actions/pm-build-sidechains
@@ -20,20 +20,16 @@ ost.PushVerbosityLevel(2)
 # parse command line
 parser = pm3argparse.PM3ArgumentParser(__doc__, action=True)
 
-parser.add_argument('in_file', type=str, help='File to load coordinates ' +
-                                              '(PDB format)')
-
+parser.AddStructure()
+parser.AssembleParser()
 parser.add_argument('-o', '--out-file', metavar='<FILENAME>', type=str,
                     default='out.pdb', help='File to store coordinates ' +
                                             '(default: %(default)s)')
-
 parser.add_argument('-k', '--keep-sidechains', action='store_true',
                     help='Keep existing sidechains')
-
 parser.add_argument('-n', '--no-disulfids', action='store_true',
                     help='Do not build disulfid bonds before sidechain ' + 
                          'optimization')
-
 parser.add_argument('-r', '--rigid-rotamers', action='store_true',
                     help='Do not use rotamers with subrotamers')
 
@@ -41,10 +37,10 @@ opts = parser.Parse()
 
 ost.PushVerbosityLevel(3)
 
-if not os.path.isfile(opts.in_file):
-    helper.MsgErrorAndExit("Failed to load input file '%s'." % opts.in_file, 4)
+if len(opts.structures) != 1:
+    helper.MsgErrorAndExit("Expect exactly one input structure", 4)
 
-prot = io.LoadPDB(opts.in_file)
+prot = opts.structures[0]
 rotamer_model = "frm"
 if opts.rigid_rotamers:
     rotamer_model = "rrm"