Index: AUTHORS
===================================================================
--- AUTHORS	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ AUTHORS	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,1 +1,5 @@
-Frederik Heber	(heber@ins.uni-bonn.de)
+Tillmann Crueger	(crueger@ins.uni-bonn.de)
+Daniel Dueck		(dueck@ins.uni-bonn.de)
+Frederik Heber		(heber@ins.uni-bonn.de)
+Saskia Metzler		(metzler@ins.uni-bonn.de)
+Christian Neuen		(neuen@ins.uni-bonn.de)
Index: COPYING
===================================================================
--- COPYING	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ COPYING	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,23 +1,2 @@
-<<<<<<< HEAD
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-=======
 		    GNU GENERAL PUBLIC LICENSE
 		       Version 2, June 1991
@@ -38,5 +17,4 @@
 using it.  (Some other Free Software Foundation software is covered by
 the GNU Library General Public License instead.)  You can apply it to
->>>>>>> FETCH_HEAD
 your programs, too.
 
@@ -44,605 +22,4 @@
 price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
-<<<<<<< HEAD
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-=======
 this service if you wish), that you receive source code or can get it
 if you want it, that you can change the software or use pieces of it
@@ -909,5 +286,4 @@
 
 	    How to Apply These Terms to Your New Programs
->>>>>>> FETCH_HEAD
 
   If you develop a new program, and you want it to be of the greatest
@@ -917,23 +293,13 @@
   To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
-<<<<<<< HEAD
-state the exclusion of warranty; and each file should have at least
-=======
 convey the exclusion of warranty; and each file should have at least
->>>>>>> FETCH_HEAD
 the "copyright" line and a pointer to where the full notice is found.
 
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-<<<<<<< HEAD
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-=======
+    MoleCuilder - to create and alter molecular systems
+    Copyright (C) 2010  Frederik Heber
+
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
->>>>>>> FETCH_HEAD
     (at your option) any later version.
 
@@ -944,15 +310,4 @@
 
     You should have received a copy of the GNU General Public License
-<<<<<<< HEAD
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-=======
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -964,27 +319,12 @@
 when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
->>>>>>> FETCH_HEAD
+    MoleCuilder version ??, Copyright (C) 2010  Frederik Heber
+    MoleCuilder comes with ABSOLUTELY NO WARRANTY; for details type 
+    `molecuilder --help-warranty'.
     This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
+    under certain conditions; type `molecuilder --help-redistribute' 
+    for details.
 
 The hypothetical commands `show w' and `show c' should show the appropriate
-<<<<<<< HEAD
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-=======
 parts of the General Public License.  Of course, the commands you use may
 be called something other than `show w' and `show c'; they could even be
@@ -995,9 +335,8 @@
 necessary.  Here is a sample; alter the names:
 
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
+  University of Bonn, hereby disclaims all copyright interest in the program
+  `MoleCuilder' (which creates molecular systems) written by Frederik Heber.
+
+  Frederik Heber, 17 Aug 2010
 
 This General Public License does not permit incorporating your program into
@@ -1006,3 +345,2 @@
 library.  If this is what you want to do, use the GNU Library General
 Public License instead of this License.
->>>>>>> FETCH_HEAD
Index: README
===================================================================
--- README	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ README	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,45 +1,27 @@
-<<<<<<< HEAD
-# Project: Molecuilder
+# Project: MoleCuilder
 #
 # heber@ins.uni-bonn.de
 
-	Molecuilder
+	MoleCuilder
 
-... is a tool that started as a mean to edit pcp configuration files (adding/remvoing groups of atoms, measuring bond lengths and so forth) and has grown into the many-body fragmentation test base of a new method coined BOSSANOVA (Bond Order diSSection in an ANOVA (ANalysis Of VAriance) -like fashion). It spills out configuration files for each fragment and includes joining and analyzing programs, to put together the partial energies and forces of each fragment to the total energy and forces. It allows for a complete Born-Oppenheimer molecular dynamics run.
-=======
-# Project: ParallelCarParrinello
-# Jan Hamaekers
-# Frederik Heber
-# 2005
-#
-# File: README
+... is a tool that started as a mean to edit pcp configuration files (adding/
+removing groups of atoms, measuring bond lengths and so forth), grew forth into 
+a many-body fragmentation test base of a new method coined BOSSANOVA (Bond
+Order diSSection in an ANOVA (ANalysis Of VAriance) - like fashion). It spilled 
+out configuration files for each fragment and included joining and analyzing 
+programs, to put together the partial energies and forces of each fragment to 
+the total energy and forces. Since then it has evolved into a complete toolbox
+for creating molecular systems and worlds.
 
-	Electronic Structure PACKage
-
-Is a collection of mathematical-physical programs to calculate via various ab-initio methods
-such as density functional theory or Hartree-Fock electronic(-magnetic) properties including
-the molecular (Car&Parrinello) dynamics of a many electron system. Especially, the linear
-response of the system to a external magnetic field in a perturbation approach in terms of 
-susceptibility and chemical shielding is implemented via the Density Functional Perturbation
-Theory. It was developed mainly by Jan Hamaekers (pcp) with additional code by Frederik Heber 
-(dfpt part in pcp) and also Ralf Wildenhuis (Gauss) at the Institute for Numerical Simulation 
-at the University of Bonn[1].
-
-
->>>>>>> FETCH_HEAD
 
 INSTALLATION NOTES
 ==================
 
-<<<<<<< HEAD
 The following packages are needed
 * GCC or alike
 * GSL (GNU Scientific Library, available at http://www.gnu.org/software/gsl)
 * Boost 1.4 or newer
-=======
-In general gcc or alike is needed to compile the sources, for more specific demands see the README files in the sub directory of each package part.
 
 LINKS
 =====
 [1] http://www.ins.uni-bonn.de/
->>>>>>> FETCH_HEAD
Index: togen.sh
===================================================================
--- autogen.sh	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,2 +1,0 @@
-#!/bin/sh
-autoreconf --force --install -I config -I m4
Index: bootstrap
===================================================================
--- bootstrap	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ bootstrap	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,14 @@
+#! /bin/sh
+# bootstrap git sources
+# This file is not distributed.
+
+set -x
+
+if git log > ChangeLog.t \
+   && diff ChangeLog.t ChangeLog >/dev/null 2>&1; then
+	mv -f ChangeLog.t ChangeLog
+else
+	rm -f ChangeLog.t
+fi
+
+autoreconf -v -i -I config -I m4
Index: configure.ac
===================================================================
--- configure.ac	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ configure.ac	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -3,5 +3,5 @@
 
 AC_PREREQ(2.59)
-AC_INIT(Molecuilder, 1.0, heber@ins.uni-bonn.de, molecuilder)
+AC_INIT(MoleCuilder, 1.0.0, heber@ins.uni-bonn.de, molecuilder)
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_SRCDIR([src/builder.cpp])
@@ -9,5 +9,5 @@
 AC_CONFIG_MACRO_DIR([m4])
 
-AM_INIT_AUTOMAKE(dist-bzip2 parallel-tests)
+AM_INIT_AUTOMAKE([dist-bzip2 1.11 parallel-tests color-tests])
 
 # Checks for programs.
@@ -15,6 +15,4 @@
 AC_PROG_CXX
 AC_PROG_CC
-# obselete by LT_INIT
-#AC_PROG_RANLIB
 AC_PROG_INSTALL
 AC_CHECK_PROG([LATEX],[latex],[latex],[:])
@@ -82,5 +80,5 @@
 fi
 
-# add replacement/saturation hydrogen or not 
+# use CppUnit TestRunner or not
 AC_ARG_ENABLE([ecut],AS_HELP_STRING([--enable-ecut],[Use ECut TestRunnerClient (default is no)]),
               [enable_ecut=$enableval], [enable_ecut=no])
@@ -88,4 +86,24 @@
   AC_DEFINE(HAVE_ECUT,1, ["Use ECut TestRunnerClient instead of our own."])
   AC_SUBST(HAVE_ECUT)
+fi
+
+# with valgrinding testsuite or not
+AC_ARG_WITH([valgrind],AS_HELP_STRING([--with-valgrind],[Use Valgrind on the testsuite (default is no)]),
+              [with_valgrind=$withval], [with_valgrind=no])
+if test x"$with_valgrind" = xyes; then
+  AC_CHECK_HEADER([valgrind/valgrind.h],
+    [
+      # check header
+      AC_DEFINE(HAVE_VALGRIND_TESTSUITE,1, ["Use Valgrind to check the testsuite."])
+      # check path
+      AC_PATH_PROG(VALGRIND, [valgrind], [/bin/false])
+      # set variables 
+      AC_SUBST(HAVE_VALGRIND_TESTSUITE)
+      AC_SUBST(VALGRIND)
+    ],
+    [
+      AC_MSG_ERROR(["Valgrind support requested but headers not available."])
+    ]
+  )
 fi
 
Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/Action.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Action.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ActionHistory.cpp
===================================================================
--- src/Actions/ActionHistory.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ActionHistory.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ActionHistory.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ActionRegistry.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Registry<Action>.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ActionSequence.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ActionSequenze.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/AnalysisAction/MolecularVolumeAction.cpp
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MolecularVolumeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/AnalysisAction/MolecularVolumeAction.hpp
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -8,4 +8,9 @@
 #ifndef MOLECULARVOLUMEACTION_HPP_
 #define MOLECULARVOLUMEACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Actions/Action.hpp"
Index: src/Actions/AnalysisAction/PairCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PairCorrelationAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -75,5 +87,5 @@
   ofstream output;
   ofstream binoutput;
-  std::vector< element *> elements;
+  std::vector<const element *> elements;
   string type;
   Vector Point;
Index: src/Actions/AnalysisAction/PairCorrelationAction.hpp
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/PairCorrelationAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -8,4 +8,9 @@
 #ifndef PAIRCORRELATIONACTION_HPP_
 #define PAIRCORRELATIONACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Actions/Action.hpp"
Index: src/Actions/AnalysisAction/PointCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PointCorrelationAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -21,4 +33,5 @@
 #include "World.hpp"
 
+#include <cmath>
 #include <iostream>
 #include <string>
@@ -76,5 +89,5 @@
   ofstream output;
   ofstream binoutput;
-  std::vector< element *> elements;
+  std::vector<const element *> elements;
   string type;
   Vector Point;
@@ -96,6 +109,6 @@
   cout << "Point to correlate to is  " << Point << endl;
   CorrelationToPointMap *correlationmap = NULL;
-  for(std::vector< element *>::iterator iter = elements.begin(); iter != elements.end(); ++iter)
-    cout << "element is " << (*iter)->symbol << endl;
+  for(std::vector<const element *>::iterator iter = elements.begin(); iter != elements.end(); ++iter)
+    cout << "element is " << (*iter)->getSymbol() << endl;
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
   if (periodic)
Index: src/Actions/AnalysisAction/PointCorrelationAction.hpp
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/PointCorrelationAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -8,4 +8,9 @@
 #ifndef POINTCORRELATIONACTION_HPP_
 #define POINTCORRELATIONACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Actions/Action.hpp"
Index: src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PrincipalAxisSystemAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -64,5 +76,5 @@
       Vector x = (*iter)->getPosition();
       x -= *CenterOfGravity;
-      const double mass = (*iter)->getType()->mass;
+      const double mass = (*iter)->getType()->getMass();
       InertiaTensor.at(0,0) += mass*(x[1]*x[1] + x[2]*x[2]);
       InertiaTensor.at(0,1) += mass*(-x[0]*x[1]);
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SurfaceCorrelationAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -79,5 +91,5 @@
   ofstream output;
   ofstream binoutput;
-  std::vector< element *> elements;
+  std::vector<const element *> elements;
   string type;
   Vector Point;
@@ -112,4 +124,5 @@
   // find biggest molecule
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
+  std::cout << "There are " << molecules.size() << " selected molecules." << std::endl;
   LCList = new LinkedCell(Boundary, LCWidth);
   FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
Index: src/Actions/AtomAction/AddAction.cpp
===================================================================
--- src/Actions/AtomAction/AddAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/AddAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AddAction.cpp
@@ -6,8 +13,14 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
 #include "Actions/AtomAction/AddAction.hpp"
 #include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "atom.hpp"
 #include "element.hpp"
@@ -26,4 +39,18 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+// memento to remember the state when undoing
+
+class AtomAddState : public ActionState {
+public:
+  AtomAddState(const Vector &_position, const element *_elemental, const atomId_t _id) :
+    position(_position),
+    elemental(_elemental),
+    id(_id)
+  {}
+  Vector position;
+  const element *elemental;
+  atomId_t id;
+};
 
 const char AtomAddAction::NAME[] = "add-atom";
@@ -52,5 +79,5 @@
 
 Action::state_ptr AtomAddAction::performCall() {
-  element * elemental = NULL;
+  const element * elemental = NULL;
   Vector position;
 
@@ -63,5 +90,5 @@
   first->setType(elemental);
   first->setPosition(position);
-  DoLog(1) && (Log() << Verbose(1) << "Adding new atom with element " << first->getType()->name << " at " << (first->getPosition()) << "." << endl);
+  DoLog(1) && (Log() << Verbose(1) << "Adding new atom with element " << first->getType()->getName() << " at " << (first->getPosition()) << "." << endl);
   // TODO: remove when all of World's atoms are stored.
   std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
@@ -70,27 +97,41 @@
     (*iter)->AddAtom(first);
   }
-  return Action::success;
+  return Action::state_ptr(new AtomAddState(position, elemental, first->getId()));
 }
 
 Action::state_ptr AtomAddAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomAddState *state = assert_cast<AtomAddState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  DoLog(1) && (Log() << Verbose(1) << "Removing atom with id " << state->id << "." << endl);
+  World::getInstance().destroyAtom(state->id);
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomAddAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomAddState *state = assert_cast<AtomAddState*>(_state.get());
+
+  atom * first = World::getInstance().createAtom();
+  first->setType(state->elemental);
+  first->setPosition(state->position);
+  DoLog(1) && (Log() << Verbose(1) << "Re-adding new atom with element " << state->elemental->getName() << " at " << state->position << "." << endl);
+  // TODO: remove when all of World's atoms are stored.
+  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
+  if (!molecules.empty()) {
+    std::vector<molecule *>::iterator iter = molecules.begin();
+    (*iter)->AddAtom(first);
+  }
+  if (first->getId() != state->id)
+    if (!first->changeId(state->id))
+      return Action::failure;
+  return Action::state_ptr(_state);
 }
 
 bool AtomAddAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomAddAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/AtomAction/ChangeElementAction.cpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/ChangeElementAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ChangeElementAction.cpp
@@ -6,8 +13,14 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
 #include "Actions/AtomAction/ChangeElementAction.hpp"
 #include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "atom.hpp"
 #include "element.hpp"
@@ -19,4 +32,5 @@
 
 #include <iostream>
+#include <map>
 #include <string>
 
@@ -26,4 +40,18 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+typedef std::map<int, const element *> ElementMap;
+
+// memento to remember the state when undoing
+
+class AtomChangeElementState : public ActionState {
+public:
+  AtomChangeElementState(ElementMap _Elements, const element *_elemental) :
+    Elements(_Elements),
+    elemental(_elemental)
+  {}
+  ElementMap Elements;
+  const element *elemental;
+};
 
 const char AtomChangeElementAction::NAME[] = "change-element";
@@ -51,12 +79,19 @@
 Action::state_ptr AtomChangeElementAction::performCall() {
   atom *first = NULL;
-  element *elemental = NULL;
+  const element *elemental;
   molecule *mol = NULL;
 
   ValueStorage::getInstance().queryCurrentValue(NAME, elemental);
 
+  // create undo state
+  ElementMap Elements;
+  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
+    Elements.insert(std::pair<int, const element *> (iter->second->getId(), iter->second->getType()));
+  }
+  AtomChangeElementState *UndoState = new AtomChangeElementState(Elements, elemental);
+
   for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
     first = iter->second;
-    DoLog(1) && (Log() << Verbose(1) << "Changing atom " << *first << " to element " << elemental->symbol << "." << endl);
+    DoLog(1) && (Log() << Verbose(1) << "Changing atom " << *first << " to element " << *elemental << "." << endl);
     mol = first->getMolecule();
     first->removeFromMolecule(); // remove atom
@@ -64,27 +99,45 @@
     mol->AddAtom(first);  // add atom to ensure correctness of formula
   }
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
 Action::state_ptr AtomChangeElementAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get());
+  atom *first = NULL;
+  molecule *mol = NULL;
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) {
+    first = World::getInstance().getAtom(AtomById(iter->first));
+    mol = first->getMolecule();
+    first->removeFromMolecule(); // remove atom
+    first->setType(iter->second);
+    mol->AddAtom(first);  // add atom to ensure correctness of formula
+  }
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomChangeElementAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get());
+  atom *first = NULL;
+  molecule *mol = NULL;
+
+  for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) {
+    first = World::getInstance().getAtom(AtomById(iter->first));
+    mol = first->getMolecule();
+    first->removeFromMolecule(); // remove atom
+    first->setType(state->elemental);
+    mol->AddAtom(first);  // add atom to ensure correctness of formula
+  }
+
+  return Action::state_ptr(_state);
 }
 
 bool AtomChangeElementAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomChangeElementAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/AtomAction/RemoveAction.cpp
===================================================================
--- src/Actions/AtomAction/RemoveAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/RemoveAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * RemoveAction.cpp
@@ -6,4 +13,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
@@ -11,4 +23,5 @@
 #include "Actions/ActionRegistry.hpp"
 #include "atom.hpp"
+#include "AtomicInfo.hpp"
 #include "Descriptors/AtomDescriptor.hpp"
 #include "Helpers/Log.hpp"
@@ -25,4 +38,14 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+// memento to remember the state when undoing
+
+class AtomRemoveState : public ActionState {
+public:
+  AtomRemoveState(std::vector<AtomicInfo> _Walkers) :
+    Walkers(_Walkers)
+  {}
+  std::vector<AtomicInfo> Walkers;
+};
 
 const char AtomRemoveAction::NAME[] = "remove-atom";
@@ -50,38 +73,68 @@
   atom *first = NULL;
 
-  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
+  // create undo state
+  std::vector<AtomicInfo> Walkers;
+  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
+    Walkers.push_back(AtomicInfo(*(iter->second)));
+  }
+  AtomRemoveState *UndoState = new AtomRemoveState(Walkers);
+
+  // remove all selected atoms
+//  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
   for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
     first = iter->second;
     DoLog(1) && (Log() << Verbose(1) << "Removing atom " << first->getId() << "." << endl);
-    // TODO: this is not necessary when atoms and their storing to file are handled by the World
-    // simply try to erase in every molecule found
-    for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) {
-      (*iter)->erase(first);
-    }
+//    // TODO: this is not necessary when atoms and their storing to file are handled by the World
+//    // simply try to erase in every molecule found
+//    for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) {
+//      (*iter)->erase(first);
+//    }
     World::getInstance().destroyAtom(first);
   }
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
 Action::state_ptr AtomRemoveAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  size_t i=0;
+  for (; i<state->Walkers.size(); ++i) {
+    // re-create the atom
+    DoLog(1) && (Log() << Verbose(1) << "Re-adding atom " << state->Walkers[i].getId() << "." << endl);
+    atom *Walker = World::getInstance().createAtom();
+    if (!state->Walkers[i].setAtom(*Walker)) {
+      DoeLog(1) && (eLog() << Verbose(1) << "Failed to set id." << endl);
+      World::getInstance().destroyAtom(Walker);
+      break;
+    }
+  }
+  if (i<state->Walkers.size()) {
+    // remove all previous ones, too
+    for (size_t j=0;j<i;++j)
+      World::getInstance().destroyAtom(state->Walkers[j].getId());
+    // and announce the failure of the undo
+    return Action::failure;
+  }
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomRemoveAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
+
+  // simple remove again all previously added atoms
+  for (size_t i=0; i<state->Walkers.size(); ++i) {
+    DoLog(1) && (Log() << Verbose(1) << "Re-removing atom " << state->Walkers[i].getId() << "." << endl);
+    World::getInstance().destroyAtom(state->Walkers[i].getId());
+  }
+
+  return Action::state_ptr(_state);
 }
 
 bool AtomRemoveAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomRemoveAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp
===================================================================
--- src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * RotateAroundOriginByAngleAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -17,4 +29,5 @@
 
 
+#include <cmath>
 #include <iostream>
 #include <fstream>
Index: src/Actions/AtomAction/TranslateAction.cpp
===================================================================
--- src/Actions/AtomAction/TranslateAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/TranslateAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TranslateAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -32,10 +44,12 @@
 class AtomTranslateState : public ActionState {
 public:
-  AtomTranslateState(std::vector<atom*> _selectedAtoms, Vector &_v) :
+  AtomTranslateState(const std::vector<atom*> &_selectedAtoms, const Vector &_v, const bool _periodic) :
     selectedAtoms(_selectedAtoms),
-    v(_v)
+    v(_v),
+    periodic(_periodic)
   {}
   std::vector<atom*> selectedAtoms;
   Vector v;
+  bool periodic;
 };
 
@@ -49,6 +63,7 @@
 {}
 
-void AtomTranslate(Vector &x) {
+void AtomTranslate(Vector &x, bool periodic = false) {
   ValueStorage::getInstance().setCurrentValue(AtomTranslateAction::NAME, x);
+  ValueStorage::getInstance().setCurrentValue("periodic", periodic);
   ActionRegistry::getInstance().getActionByName(AtomTranslateAction::NAME)->call(Action::NonInteractive);
 };
@@ -58,4 +73,5 @@
 
   dialog->queryVector(NAME, false, ValueStorage::getInstance().getDescription(NAME));
+  dialog->queryBoolean("periodic", ValueStorage::getInstance().getDescription("periodic"));
 
   return dialog;
@@ -64,33 +80,46 @@
 Action::state_ptr AtomTranslateAction::performCall() {
   Vector v;
+  bool periodic = false;
+  Box &domain = World::getInstance().getDomain();
   std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
 
   ValueStorage::getInstance().queryCurrentValue(NAME, v);
+  if (!ValueStorage::getInstance().queryCurrentValue("periodic", periodic, true))
+    periodic = false;
 
   // TODO: use AtomSet::translate
   for (std::vector<atom *>::iterator iter = selectedAtoms.begin(); iter != selectedAtoms.end(); ++iter) {
     *(*iter) += v;
+    if (periodic)
+      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
   }
-  return Action::state_ptr(new AtomTranslateState(selectedAtoms, v));
+
+  return Action::state_ptr(new AtomTranslateState(selectedAtoms, v, periodic));
 }
 
 Action::state_ptr AtomTranslateAction::performUndo(Action::state_ptr _state) {
   AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get());
+  Box &domain = World::getInstance().getDomain();
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
     *(*iter) -= state->v;
+    if (state->periodic)
+      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
   }
 
-  return Action::state_ptr(new AtomTranslateState(state->selectedAtoms, state->v));
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomTranslateAction::performRedo(Action::state_ptr _state){
   AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get());
+  Box &domain = World::getInstance().getDomain();
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
     *(*iter) += state->v;
+    if (state->periodic)
+      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
   }
 
-  return Action::state_ptr(new AtomTranslateState(state->selectedAtoms, state->v));
+  return Action::state_ptr(_state);
 }
 
Index: src/Actions/AtomAction/TranslateAction.hpp
===================================================================
--- src/Actions/AtomAction/TranslateAction.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/AtomAction/TranslateAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -15,5 +15,5 @@
 
 class AtomTranslateAction : public Action {
-  friend void AtomTranslate(Vector &x);
+  friend void AtomTranslate(Vector &x, bool periodic);
 
 public:
Index: src/Actions/CmdAction/BondLengthTableAction.cpp
===================================================================
--- src/Actions/CmdAction/BondLengthTableAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/BondLengthTableAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BondLengthTableAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/CmdAction/ElementDbAction.cpp
===================================================================
--- src/Actions/CmdAction/ElementDbAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/ElementDbAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ElementDbAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/CmdAction/FastParsingAction.cpp
===================================================================
--- src/Actions/CmdAction/FastParsingAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/FastParsingAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * FastParsingAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -28,8 +40,10 @@
 class CommandLineFastParsingState : public ActionState {
 public:
-  CommandLineFastParsingState(bool _bool) :
-    boolean(_bool)
+  CommandLineFastParsingState(const bool _oldvalue, const bool _newvalue) :
+    oldvalue(_oldvalue),
+    newvalue(_newvalue)
   {}
-  bool boolean;
+  bool oldvalue;
+  bool newvalue;
 };
 
@@ -58,12 +72,14 @@
 
 Action::state_ptr CommandLineFastParsingAction::performCall() {
-
   config *configuration = World::getInstance().getConfig();
-  ValueStorage::getInstance().queryCurrentValue(NAME, configuration->FastParsing);
+  bool oldvalue = configuration->FastParsing;
+  bool newvalue;
+  ValueStorage::getInstance().queryCurrentValue(NAME, newvalue);
+  configuration->FastParsing = newvalue;
   if (configuration->FastParsing)
     DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
   else
     DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
-  return Action::success;
+  return Action::state_ptr(new CommandLineFastParsingState(oldvalue, newvalue));
 }
 
@@ -72,11 +88,24 @@
 
   config *configuration = World::getInstance().getConfig();
-  configuration->FastParsing = state->boolean;
+  configuration->FastParsing = state->oldvalue;
+  if (configuration->FastParsing)
+    DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
+  else
+    DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
 
-  return Action::state_ptr(new CommandLineFastParsingState(!state->boolean));
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr CommandLineFastParsingAction::performRedo(Action::state_ptr _state){
-  return performUndo(_state);
+  CommandLineFastParsingState *state = assert_cast<CommandLineFastParsingState*>(_state.get());
+
+  config *configuration = World::getInstance().getConfig();
+  configuration->FastParsing = state->newvalue;
+  if (configuration->FastParsing)
+    DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
+  else
+    DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
+
+  return Action::state_ptr(_state);
 }
 
Index: src/Actions/CmdAction/HelpAction.cpp
===================================================================
--- src/Actions/CmdAction/HelpAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/HelpAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * HelpAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/CmdAction/VerboseAction.cpp
===================================================================
--- src/Actions/CmdAction/VerboseAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/VerboseAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * VerboseAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -26,8 +38,10 @@
 class CommandLineVerboseState : public ActionState {
 public:
-  CommandLineVerboseState(int _verbosity) :
-    verbosity(_verbosity)
+  CommandLineVerboseState(const int _oldverbosity, const int _newverbosity) :
+    oldverbosity(_oldverbosity),
+    newverbosity(_newverbosity)
   {}
-  int verbosity;
+  int oldverbosity;
+  int newverbosity;
 };
 
@@ -56,11 +70,18 @@
 
 Action::state_ptr CommandLineVerboseAction::performCall() {
-  int verbosity = 2;
+  int oldverbosity = getVerbosity();
+  int newverbosity = 2;
 
-  ValueStorage::getInstance().queryCurrentValue(NAME, verbosity);
+  ValueStorage::getInstance().queryCurrentValue(NAME, newverbosity);
 
-  setVerbosity(verbosity);
-  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity to " << verbosity << "." << endl);
-  return Action::success;
+  if (oldverbosity != newverbosity) {
+    CommandLineVerboseState *UndoState = new CommandLineVerboseState(oldverbosity, newverbosity);
+    setVerbosity(newverbosity);
+    DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << oldverbosity << " to " << newverbosity << "." << endl);
+    return Action::state_ptr(UndoState);
+  } else {
+    DoLog(0) && (Log() << Verbose(0) << "Verbosity remains unchanged at " << oldverbosity << "." << endl);
+    return Action::failure;
+  }
 }
 
@@ -68,13 +89,17 @@
   CommandLineVerboseState *state = assert_cast<CommandLineVerboseState*>(_state.get());
 
-  int verbosity = 2;
-  ValueStorage::getInstance().queryCurrentValue(NAME, verbosity);
+  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << state->newverbosity << " to " << state->oldverbosity << "." << endl);
+  setVerbosity(state->oldverbosity);
 
-  setVerbosity(state->verbosity);
-  return Action::state_ptr(new CommandLineVerboseState(verbosity));
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr CommandLineVerboseAction::performRedo(Action::state_ptr _state){
-  return performUndo(_state);
+  CommandLineVerboseState *state = assert_cast<CommandLineVerboseState*>(_state.get());
+
+  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << state->oldverbosity << " to " << state->newverbosity << "." << endl);
+  setVerbosity(state->newverbosity);
+
+  return Action::state_ptr(_state);
 }
 
Index: src/Actions/CmdAction/VersionAction.cpp
===================================================================
--- src/Actions/CmdAction/VersionAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/CmdAction/VersionAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * VersionAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -37,5 +49,5 @@
   ASSERT(dialog,"No Dialog given when filling action dialog");
 
-  dialog->queryEmpty(NAME, ESPACKVersion);
+  dialog->queryEmpty(NAME, MOLECUILDERVERSION);
 
   return dialog;
Index: src/Actions/ErrorAction.cpp
===================================================================
--- src/Actions/ErrorAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ErrorAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ErrorAction.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/FragmentationAction/DepthFirstSearchAction.cpp
===================================================================
--- src/Actions/FragmentationAction/DepthFirstSearchAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/FragmentationAction/DepthFirstSearchAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * DepthFirstSearchAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/FragmentationAction/FragmentationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * FragmentationAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/FragmentationAction/SubgraphDissectionAction.cpp
===================================================================
--- src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SubgraphDissectionAction.cpp
@@ -6,8 +13,14 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
 #include "Actions/FragmentationAction/SubgraphDissectionAction.hpp"
 #include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "Descriptors/MoleculeDescriptor.hpp"
 
@@ -17,4 +30,5 @@
 #include "config.hpp"
 #include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
 #include "molecule.hpp"
 #include "stackclass.hpp"
@@ -30,4 +44,16 @@
 #include "Actions/ValueStorage.hpp"
 
+// memento to remember the state when undoing
+
+typedef std::map< moleculeId_t, std::vector<atomId_t> > MolAtomList;
+
+class FragmentationSubgraphDissectionState : public ActionState {
+public:
+  FragmentationSubgraphDissectionState(const MolAtomList &_moleculelist) :
+   moleculelist(_moleculelist)
+  {}
+  MolAtomList moleculelist;
+};
+
 const char FragmentationSubgraphDissectionAction::NAME[] = "subgraph-dissect";
 
@@ -39,4 +65,6 @@
 {}
 
+/** Dissects given \a *mol into connected subgraphs and inserts them as new molecules but with old atoms into \a this.
+ */
 void FragmentationSubgraphDissection() {
   ActionRegistry::getInstance().getActionByName(FragmentationSubgraphDissectionAction::NAME)->call(Action::NonInteractive);
@@ -54,10 +82,22 @@
 Action::state_ptr FragmentationSubgraphDissectionAction::performCall() {
   DoLog(1) && (Log() << Verbose(1) << "Dissecting molecular system into a set of disconnected subgraphs ... " << endl);
-  // @TODO rather do the dissection afterwards
+
+  // first create undo state
+  MolAtomList moleculelist;
+  vector<molecule *> allmolecules = World::getInstance().getAllMolecules();
+  for (vector<molecule *>::const_iterator moliter = allmolecules.begin(); moliter != allmolecules.end(); ++moliter) {
+    std::vector<atomId_t> atomlist;
+    atomlist.resize((*moliter)->size());
+    for (molecule::const_iterator atomiter = (*moliter)->begin(); atomiter != (*moliter)->end(); ++atomiter) {
+      atomlist.push_back((*atomiter)->getId());
+    }
+    moleculelist.insert( std::pair< moleculeId_t, std::vector<atomId_t> > ((*moliter)->getId(), atomlist));
+  }
+  FragmentationSubgraphDissectionState *UndoState = new FragmentationSubgraphDissectionState(moleculelist);
+
   MoleculeListClass *molecules = World::getInstance().getMolecules();
   config * const configuration = World::getInstance().getConfig();
 
   // 0a. remove all present molecules
-  vector<molecule *> allmolecules = World::getInstance().getAllMolecules();
   for (vector<molecule *>::iterator MolRunner = allmolecules.begin(); MolRunner != allmolecules.end(); ++MolRunner) {
     molecules->erase(*MolRunner);
@@ -67,9 +107,11 @@
   // 0b. remove all bonds and construct a molecule with all atoms
   molecule *mol = World::getInstance().createMolecule();
-  vector <atom *> allatoms = World::getInstance().getAllAtoms();
-  for(vector<atom *>::iterator AtomRunner = allatoms.begin(); AtomRunner != allatoms.end(); ++AtomRunner) {
-    for(BondList::iterator BondRunner = (*AtomRunner)->ListOfBonds.begin(); !(*AtomRunner)->ListOfBonds.empty(); BondRunner = (*AtomRunner)->ListOfBonds.begin())
-      delete(*BondRunner);
-    mol->AddAtom(*AtomRunner);
+  {
+    vector <atom *> allatoms = World::getInstance().getAllAtoms();
+    for(vector<atom *>::iterator AtomRunner = allatoms.begin(); AtomRunner != allatoms.end(); ++AtomRunner) {
+      for(BondList::iterator BondRunner = (*AtomRunner)->ListOfBonds.begin(); !(*AtomRunner)->ListOfBonds.empty(); BondRunner = (*AtomRunner)->ListOfBonds.begin())
+        delete(*BondRunner);
+      mol->AddAtom(*AtomRunner);
+    }
   }
 
@@ -92,89 +134,75 @@
   delete(BackEdgeStack);
   if ((Subgraphs == NULL) || (Subgraphs->next == NULL)) {
-    World::getInstance().destroyMolecule(mol);
+    //World::getInstance().destroyMolecule(mol);
     DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms." << endl);
     return Action::failure;
   }
-
-  // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in
-  // the original one as parsed in)
-  // TODO: Optimize this, when molecules just contain pointer list of global atoms!
-
-  // 4a. create array of molecules to fill
-  const int MolCount = Subgraphs->next->Count();
-  char number[MAXSTRINGSIZE];
-  molecule **moleculelist = new molecule *[MolCount];
+  int FragmentCounter = Subgraphs->next->Count();
+
+  // TODO: When DepthFirstSearchAnalysis does not use AddCopyAtom() anymore, we don't need to delete all original atoms
+  {
+    // 3a. destroy the original molecule
+    for (molecule::iterator AtomRunner = mol->begin(); !mol->empty(); AtomRunner = mol->begin())
+      World::getInstance().destroyAtom(*AtomRunner);
+    World::getInstance().destroyMolecule(mol);
+    // 3b. correct fathers (AddCopyAtom sets father to original atom, which has been destroyed).
+    vector <atom *> allatoms = World::getInstance().getAllAtoms();
+    for(vector<atom *>::iterator AtomRunner = allatoms.begin(); AtomRunner != allatoms.end(); ++AtomRunner) {
+      (*AtomRunner)->father = *AtomRunner;
+    }
+  }
+
+  // 4. free Leafs
   MoleculeLeafClass *MolecularWalker = Subgraphs;
-  for (int i=0;i<MolCount;i++) {
-    MolecularWalker = MolecularWalker->next;
-    moleculelist[i] = World::getInstance().createMolecule();
-    moleculelist[i]->ActiveFlag = true;
-    strncpy(moleculelist[i]->name, mol->name, MAXSTRINGSIZE);
-    if (MolCount > 1) {
-      sprintf(number, "-%d", i+1);
-      strncat(moleculelist[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
-    }
-    DoLog(1) && (Log() << Verbose(1) << "MolName is " << moleculelist[i]->name << ", id is " << moleculelist[i]->getId() << endl);
-    for (molecule::iterator iter = MolecularWalker->Leaf->begin(); iter != MolecularWalker->Leaf->end(); ++iter) {
-      DoLog(1) && (Log() << Verbose(1) << **iter << endl);
-    }
-    molecules->insert(moleculelist[i]);
-  }
-
-  // 4b. create and fill map of which atom is associated to which connected molecule (note, counting starts at 1)
-  int FragmentCounter = 0;
-  map<int, atom *> AtomToFragmentMap;
-  MolecularWalker = Subgraphs;
   while (MolecularWalker->next != NULL) {
-    MolecularWalker = MolecularWalker->next;
-    for (molecule::iterator iter = MolecularWalker->Leaf->begin(); !MolecularWalker->Leaf->empty(); iter = MolecularWalker->Leaf->begin()) {
-      atom * Walker = *iter;
-      DoLog(1) && (Log() << Verbose(1) << "Re-linking " << Walker << "..." << endl);
-      MolecularWalker->Leaf->erase(iter);
-      moleculelist[FragmentCounter]->AddAtom(Walker);    // counting starts at 1
-    }
-    FragmentCounter++;
-  }
-  // TODO: When DepthFirstSearchAnalysis does not use AddCopyAtom() anymore, we don't need to delete all original atoms.
-  // 4d. destroy the original molecule
-  for (molecule::iterator AtomRunner = mol->begin(); !mol->empty(); AtomRunner = mol->begin())
-    World::getInstance().destroyAtom(*AtomRunner);
-  World::getInstance().destroyMolecule(mol);
-
-  // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintain their ListOfBonds, but we have to remove them from first..last list
-  // TODO: check whether this is really not needed anymore
-  // 4e. free Leafs
-  MolecularWalker = Subgraphs;
-  while (MolecularWalker->next != NULL) {
+    MolecularWalker->Leaf = NULL;
     MolecularWalker = MolecularWalker->next;
     delete(MolecularWalker->previous);
   }
+  MolecularWalker->Leaf = NULL;
   delete(MolecularWalker);
-  delete[](moleculelist);
   DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl);
 
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
 Action::state_ptr FragmentationSubgraphDissectionAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
-
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  FragmentationSubgraphDissectionState *state = assert_cast<FragmentationSubgraphDissectionState*>(_state.get());
+
+  {
+    // remove all present molecules
+    MoleculeListClass *molecules = World::getInstance().getMolecules();
+    vector<molecule *> allmolecules = World::getInstance().getAllMolecules();
+    for (vector<molecule *>::iterator MolRunner = allmolecules.begin(); MolRunner != allmolecules.end(); ++MolRunner) {
+      molecules->erase(*MolRunner);
+      World::getInstance().destroyMolecule(*MolRunner);
+    }
+  }
+
+  {
+    // construct the old state
+    molecule *mol = NULL;
+    for (MolAtomList::const_iterator iter = state->moleculelist.begin(); iter != state->moleculelist.end(); ++iter) {
+      mol = World::getInstance().createMolecule();
+      if (mol->getId() != (*iter).first)
+        World::getInstance().changeMoleculeId(mol->getId(), (*iter).first);
+      for (std::vector<atomId_t>::const_iterator atomiter = (*iter).second.begin(); atomiter != (*iter).second.end(); ++atomiter)
+        mol->AddAtom(World::getInstance().getAtom(AtomById(*atomiter)));
+    }
+  }
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr FragmentationSubgraphDissectionAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  return performCall();
 }
 
 bool FragmentationSubgraphDissectionAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool FragmentationSubgraphDissectionAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/Makefile.am	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -118,30 +118,46 @@
 SELECTIONACTIONSOURCE = \
 	SelectionAction/AllAtomsAction.cpp \
+	SelectionAction/AllAtomsInsideCuboidAction.cpp \
+	SelectionAction/AllAtomsInsideSphereAction.cpp \
 	SelectionAction/AllAtomsOfMoleculeAction.cpp \
 	SelectionAction/AllMoleculesAction.cpp \
+	SelectionAction/AtomByElementAction.cpp \
 	SelectionAction/AtomByIdAction.cpp \
 	SelectionAction/ClearAllAtomsAction.cpp \
 	SelectionAction/ClearAllMoleculesAction.cpp \
+	SelectionAction/MoleculeByFormulaAction.cpp \
 	SelectionAction/MoleculeByIdAction.cpp \
 	SelectionAction/MoleculeOfAtomAction.cpp \
 	SelectionAction/NotAllAtomsAction.cpp \
+	SelectionAction/NotAllAtomsInsideCuboidAction.cpp \
+	SelectionAction/NotAllAtomsInsideSphereAction.cpp \
 	SelectionAction/NotAllAtomsOfMoleculeAction.cpp \
 	SelectionAction/NotAllMoleculesAction.cpp \
+	SelectionAction/NotAtomByElementAction.cpp \
 	SelectionAction/NotAtomByIdAction.cpp \
+	SelectionAction/NotMoleculeByFormulaAction.cpp \
 	SelectionAction/NotMoleculeByIdAction.cpp \
 	SelectionAction/NotMoleculeOfAtomAction.cpp
 SELECTIONACTIONHEADER = \
 	SelectionAction/AllAtomsAction.hpp \
+	SelectionAction/AllAtomsInsideCuboidAction.hpp \
+	SelectionAction/AllAtomsInsideSphereAction.hpp \
 	SelectionAction/AllAtomsOfMoleculeAction.hpp \
 	SelectionAction/AllMoleculesAction.hpp \
+	SelectionAction/AtomByElementAction.hpp \
 	SelectionAction/AtomByIdAction.hpp \
 	SelectionAction/ClearAllAtomsAction.hpp \
 	SelectionAction/ClearAllMoleculesAction.hpp \
+	SelectionAction/MoleculeByFormulaAction.hpp \
 	SelectionAction/MoleculeByIdAction.hpp \
 	SelectionAction/MoleculeOfAtomAction.hpp \
 	SelectionAction/NotAllAtomsAction.hpp \
+	SelectionAction/NotAllAtomsInsideCuboidAction.hpp \
+	SelectionAction/NotAllAtomsInsideSphereAction.hpp \
 	SelectionAction/NotAllAtomsOfMoleculeAction.hpp \
 	SelectionAction/NotAllMoleculesAction.hpp \
+	SelectionAction/NotAtomByElementAction.hpp \
 	SelectionAction/NotAtomByIdAction.hpp \
+	SelectionAction/NotMoleculeByFormulaAction.hpp \
 	SelectionAction/NotMoleculeByIdAction.hpp \
 	SelectionAction/NotMoleculeOfAtomAction.cpp
@@ -162,5 +178,4 @@
   WorldAction/InputAction.cpp \
   WorldAction/OutputAction.cpp \
-  WorldAction/RemoveSphereOfAtomsAction.cpp \
   WorldAction/RepeatBoxAction.cpp \
   WorldAction/ScaleBoxAction.cpp \
@@ -176,5 +191,4 @@
   WorldAction/InputAction.hpp \
   WorldAction/OutputAction.hpp \
-  WorldAction/RemoveSphereOfAtomsAction.hpp \
   WorldAction/RepeatBoxAction.hpp \
   WorldAction/ScaleBoxAction.hpp \
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MakroAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MakroAction.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ManipulateAtomsProcess.cpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ManipulateAtomsProcess.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ManipulateAtomsProcess.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MapOfActions.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MapOfActions.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -67,15 +79,23 @@
 #include "Actions/ParserAction/SaveXyzAction.hpp"
 #include "Actions/SelectionAction/AllAtomsAction.hpp"
+#include "Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp"
+#include "Actions/SelectionAction/AllAtomsInsideSphereAction.hpp"
 #include "Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp"
 #include "Actions/SelectionAction/AllMoleculesAction.hpp"
+#include "Actions/SelectionAction/AtomByElementAction.hpp"
 #include "Actions/SelectionAction/AtomByIdAction.hpp"
 #include "Actions/SelectionAction/ClearAllAtomsAction.hpp"
 #include "Actions/SelectionAction/ClearAllMoleculesAction.hpp"
+#include "Actions/SelectionAction/MoleculeByFormulaAction.hpp"
 #include "Actions/SelectionAction/MoleculeByIdAction.hpp"
 #include "Actions/SelectionAction/MoleculeOfAtomAction.hpp"
 #include "Actions/SelectionAction/NotAllAtomsAction.hpp"
+#include "Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp"
+#include "Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp"
 #include "Actions/SelectionAction/NotAllAtomsOfMoleculeAction.hpp"
 #include "Actions/SelectionAction/NotAllMoleculesAction.hpp"
+#include "Actions/SelectionAction/NotAtomByElementAction.hpp"
 #include "Actions/SelectionAction/NotAtomByIdAction.hpp"
+#include "Actions/SelectionAction/NotMoleculeByFormulaAction.hpp"
 #include "Actions/SelectionAction/NotMoleculeByIdAction.hpp"
 #include "Actions/SelectionAction/NotMoleculeOfAtomAction.hpp"
@@ -89,5 +109,4 @@
 #include "Actions/WorldAction/InputAction.hpp"
 #include "Actions/WorldAction/OutputAction.hpp"
-#include "Actions/WorldAction/RemoveSphereOfAtomsAction.hpp"
 #include "Actions/WorldAction/RepeatBoxAction.hpp"
 #include "Actions/WorldAction/ScaleBoxAction.hpp"
@@ -212,5 +231,4 @@
   DescriptionMap["redo"] = "redo last action";
   DescriptionMap["remove-atom"] = "remove a specified atom";
-  DescriptionMap["remove-sphere"] = "remove sphere of atoms of around a specified atom";
   DescriptionMap["repeat-box"] = "create periodic copies of the simulation box per axis";
   DescriptionMap["rotate-origin"] = "rotate selected atoms by a specific angle around origin";
@@ -224,6 +242,10 @@
   DescriptionMap["select-all-atoms"] = "select all atoms";
   DescriptionMap["select-all-molecules"] = "select all molecules";
+  DescriptionMap["select-atom-by-element"] = "select an atom by element";
   DescriptionMap["select-atom-by-id"] = "select an atom by index";
+  DescriptionMap["select-atoms-inside-cuboid"] = "select all atoms inside a cuboid";
+  DescriptionMap["select-atoms-inside-sphere"] = "select all atoms inside a sphere";
   DescriptionMap["select-molecule-by-id"] = "select a molecule by index";
+  DescriptionMap["select-molecule-by-formula"] = "select a molecule by chemical formula";
   DescriptionMap["select-molecule-of-atom"] = "select a molecule to which a given atom belongs";
   DescriptionMap["select-molecules-atoms"] = "select all atoms of a molecule";
@@ -237,5 +259,9 @@
   DescriptionMap["unselect-all-atoms"] = "unselect all atoms";
   DescriptionMap["unselect-all-molecules"] = "unselect all molecules";
+  DescriptionMap["unselect-atom-by-element"] = "unselect an atom by element";
   DescriptionMap["unselect-atom-by-id"] = "unselect an atom by index";
+  DescriptionMap["unselect-atoms-inside-cuboid"] = "unselect all atoms inside a cuboid";
+  DescriptionMap["unselect-atoms-inside-sphere"] = "unselect all atoms inside a sphere";
+  DescriptionMap["unselect-molecule-by-formula"] = "unselect a molecule by chemical formula";
   DescriptionMap["unselect-molecule-by-id"] = "unselect a molecule by index";
   DescriptionMap["unselect-molecule-of-atom"] = "unselect a molecule to which a given atom belongs";
@@ -245,4 +271,7 @@
   DescriptionMap["version"] = "show version";
   // keys for values
+  DescriptionMap["angle-x"] = "angle of a rotation around x axis";
+  DescriptionMap["angle-y"] = "angle of a rotation around y axis";
+  DescriptionMap["angle-z"] = "angle of a rotation around z axis";
   DescriptionMap["bin-output-file"] = "name of the bin output file";
   DescriptionMap["bin-end"] = "start of the last bin";
@@ -293,5 +322,4 @@
   ShortFormMap["parse-xyz"] = "p";
   ShortFormMap["remove-atom"] = "r";
-  ShortFormMap["remove-sphere"] = "R";
   ShortFormMap["repeat-box"] = "d";
   ShortFormMap["rotate-to-pas"] = "m";
@@ -310,5 +338,5 @@
 
   // value types for the actions
-  TypeMap["add-atom"] = &typeid(element);
+  TypeMap["add-atom"] = &typeid(const element);
   TypeMap["bond-file"] = &typeid(std::string);
   TypeMap["bond-table"] = &typeid(std::string);
@@ -316,5 +344,5 @@
   TypeMap["center-in-box"] = &typeid(BoxValue);
   TypeMap["change-box"] = &typeid(BoxValue);
-  TypeMap["change-element"] = &typeid(element);
+  TypeMap["change-element"] = &typeid(const element);
   TypeMap["change-molname"] = &typeid(std::string);
   TypeMap["clear-atom-selection"] = &typeid(void);
@@ -338,5 +366,4 @@
   TypeMap["redo"] = &typeid(void);
   TypeMap["remove-atom"] = &typeid(void);
-  TypeMap["remove-sphere"] = &typeid(double);
   TypeMap["repeat-box"] = &typeid(VectorValue);
   TypeMap["rotate-origin"] = &typeid(double);
@@ -349,5 +376,9 @@
   TypeMap["select-all-atoms"] = &typeid(void);
   TypeMap["select-all-molecules"] = &typeid(void);
+  TypeMap["select-atom-by-element"] = &typeid(const element);
   TypeMap["select-atom-by-id"] = &typeid(atom);
+  TypeMap["select-atoms-inside-cuboid"] = &typeid(VectorValue);
+  TypeMap["select-atoms-inside-sphere"] = &typeid(double);
+  TypeMap["select-molecule-by-formula"] = &typeid(std::string);
   TypeMap["select-molecule-by-id"] = &typeid(molecule);
   TypeMap["select-molecule-of-atom"] = &typeid(atom);
@@ -362,5 +393,9 @@
   TypeMap["unselect-all-atoms"] = &typeid(void);
   TypeMap["unselect-all-molecules"] = &typeid(void);
+  TypeMap["unselect-atom-by-element"] = &typeid(const element);
   TypeMap["unselect-atom-by-id"] = &typeid(atom);
+  TypeMap["unselect-atoms-inside-cuboid"] = &typeid(VectorValue);
+  TypeMap["unselect-atoms-inside-sphere"] = &typeid(double);
+  TypeMap["unselect-molecule-by-formula"] = &typeid(std::string);
   TypeMap["unselect-molecule-by-id"] = &typeid(molecule);
   TypeMap["unselect-molecule-of-atom"] = &typeid(atom);
@@ -370,4 +405,7 @@
 
   // value types for the values
+  TypeMap["angle-x"] = &typeid(double);
+  TypeMap["angle-y"] = &typeid(double);
+  TypeMap["angle-z"] = &typeid(double);
   TypeMap["bin-output-file"] = &typeid(std::string);
   TypeMap["bin-end"] = &typeid(double);
@@ -378,6 +416,6 @@
   TypeMap["distances"] = &typeid(VectorValue);
   TypeMap["DoRotate"] = &typeid(bool);
-  TypeMap["element"] = &typeid(element);
-  TypeMap["elements"] = &typeid(std::vector<element *>);
+  TypeMap["element"] = &typeid(const element);
+  TypeMap["elements"] = &typeid(std::vector<const element *>);
   TypeMap["end-step"] = &typeid(int);
   TypeMap["id-mapping"] = &typeid(bool);
@@ -408,6 +446,6 @@
   TypeEnumMap[&typeid(atom)] = Atom;
   TypeEnumMap[&typeid(std::vector<atom *>)] = ListOfAtoms;
-  TypeEnumMap[&typeid(element)] = Element;
-  TypeEnumMap[&typeid(std::vector<element *>)] = ListOfElements;
+  TypeEnumMap[&typeid(const element)] = Element;
+  TypeEnumMap[&typeid(std::vector<const element *>)] = ListOfElements;
 
   // default values for any action that needs one (always string!)
@@ -468,11 +506,19 @@
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-all-atoms") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-all-molecules") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atom-by-element") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atom-by-id") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atoms-inside-cuboid") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atoms-inside-sphere") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-by-id") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-by-formula") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-of-atom") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecules-atoms") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-atoms") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-molecules") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atom-by-element") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atom-by-id") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atoms-inside-cuboid") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atoms-inside-sphere") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-by-formula") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-by-id") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-of-atom") );
@@ -489,5 +535,4 @@
   MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "input") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "output") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "remove-sphere") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "repeat-box") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "scale-box") );
@@ -528,5 +573,4 @@
   generic.insert("redo");
   generic.insert("remove-atom");
-  generic.insert("remove-sphere");
   generic.insert("repeat-box");
   generic.insert("rotate-origin");
@@ -539,6 +583,10 @@
   generic.insert("select-all-atoms");
   generic.insert("select-all-molecules");
+  generic.insert("select-atom-by-element");
   generic.insert("select-atom-by-id");
+  generic.insert("select-atoms-inside-cuboid");
+  generic.insert("select-atoms-inside-sphere");
   generic.insert("select-molecule-by-id");
+  generic.insert("select-molecule-by-formula");
   generic.insert("select-molecule-of-atom");
   generic.insert("select-molecules-atoms");
@@ -552,5 +600,9 @@
   generic.insert("unselect-all-atoms");
   generic.insert("unselect-all-molecules");
+  generic.insert("unselect-atom-by-element");
   generic.insert("unselect-atom-by-id");
+  generic.insert("unselect-atoms-inside-cuboid");
+  generic.insert("unselect-atoms-inside-sphere");
+  generic.insert("unselect-molecule-by-formula");
   generic.insert("unselect-molecule-by-id");
   generic.insert("unselect-molecule-of-atom");
@@ -564,4 +616,7 @@
 
     // hidden arguments
+  hidden.insert("angle-x");
+  hidden.insert("angle-y");
+  hidden.insert("angle-z");
   hidden.insert("bin-end");
   hidden.insert("bin-output-file");
@@ -595,4 +650,9 @@
 }
 
+bool MapOfActions::isCurrentValuePresent(const char *name) const
+{
+  return (CurrentValue.find(name) != CurrentValue.end());
+}
+
 void MapOfActions::queryCurrentValue(const char * name, class atom * &_T)
 {
@@ -608,7 +668,7 @@
 }
 
-void MapOfActions::queryCurrentValue(const char * name, class element * &_T)  {
+void MapOfActions::queryCurrentValue(const char * name, const element * &_T)  {
   int Z = -1;
-  if (typeid( element ) == *TypeMap[name]) {
+  if (typeid(const element ) == *TypeMap[name]) {
     if (CurrentValue.find(name) == CurrentValue.end())
       throw MissingValueException(__FILE__, __LINE__);
@@ -692,9 +752,9 @@
 }
 
-void MapOfActions::queryCurrentValue(const char * name, std::vector<element *>&_T)
+void MapOfActions::queryCurrentValue(const char * name, std::vector<const element *>&_T)
 {
   int Z = -1;
-  element *elemental = NULL;
-  if (typeid( std::vector<element *> ) == *TypeMap[name]) {
+  const element *elemental = NULL;
+  if (typeid( std::vector<const element *> ) == *TypeMap[name]) {
     if (CurrentValue.find(name) == CurrentValue.end())
       throw MissingValueException(__FILE__, __LINE__);
@@ -744,9 +804,9 @@
 }
 
-void MapOfActions::setCurrentValue(const char * name, class element * &_T)
-{
-  if (typeid( element ) == *TypeMap[name]) {
+void MapOfActions::setCurrentValue(const char * name, const element * &_T)
+{
+  if (typeid(const element ) == *TypeMap[name]) {
     std::ostringstream stream;
-    stream << _T->Z;
+    stream << _T->getAtomicNumber();
     CurrentValue[name] = stream.str();
   } else
@@ -804,10 +864,10 @@
 }
 
-void MapOfActions::setCurrentValue(const char * name, std::vector<element *>&_T)
-{
-  if (typeid( std::vector<element *> ) == *TypeMap[name]) {
+void MapOfActions::setCurrentValue(const char * name, std::vector<const element *>&_T)
+{
+  if (typeid( std::vector<const element *> ) == *TypeMap[name]) {
     std::ostringstream stream;
-    for (std::vector<element *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter)->Z << " ";
+    for (std::vector<const element *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+      stream << (*iter)->getAtomicNumber() << " ";
     }
     CurrentValue[name] = stream.str();
@@ -873,13 +933,21 @@
   new SelectionClearAllMoleculesAction();
   new SelectionAllAtomsAction();
+  new SelectionAllAtomsInsideCuboidAction();
+  new SelectionAllAtomsInsideSphereAction();
   new SelectionAllAtomsOfMoleculeAction();
   new SelectionAllMoleculesAction();
+  new SelectionAtomByElementAction();
   new SelectionAtomByIdAction();
   new SelectionMoleculeByIdAction();
+  new SelectionMoleculeByFormulaAction();
   new SelectionMoleculeOfAtomAction();
   new SelectionNotAllAtomsAction();
+  new SelectionNotAllAtomsInsideCuboidAction();
+  new SelectionNotAllAtomsInsideSphereAction();
   new SelectionNotAllAtomsOfMoleculeAction();
   new SelectionNotAllMoleculesAction();
+  new SelectionNotAtomByElementAction();
   new SelectionNotAtomByIdAction();
+  new SelectionNotMoleculeByFormulaAction();
   new SelectionNotMoleculeByIdAction();
   new SelectionNotMoleculeOfAtomAction();
@@ -895,5 +963,4 @@
   new WorldInputAction();
   new WorldOutputAction();
-  new WorldRemoveSphereOfAtomsAction();
   new WorldRepeatBoxAction();
   new WorldScaleBoxAction();
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MapOfActions.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -163,11 +163,12 @@
   void populateActions();
 
+  bool isCurrentValuePresent(const char *name) const;
   void queryCurrentValue(const char * name, class atom * &_T);
-  void queryCurrentValue(const char * name, class element * &_T);
+  void queryCurrentValue(const char * name, const element * &_T);
   void queryCurrentValue(const char * name, class molecule * &_T);
   void queryCurrentValue(const char * name, class Box &_T);
   void queryCurrentValue(const char * name, class Vector &_T);
   void queryCurrentValue(const char * name, std::vector<atom *>&_T);
-  void queryCurrentValue(const char * name, std::vector<element *>&_T);
+  void queryCurrentValue(const char * name, std::vector<const element *>&_T);
   void queryCurrentValue(const char * name, std::vector<molecule *>&_T);
   template<typename T> void queryCurrentValue(const char * name, T &_T)
@@ -198,10 +199,10 @@
 
   void setCurrentValue(const char * name, class atom * &_T);
-  void setCurrentValue(const char * name, class element * &_T);
+  void setCurrentValue(const char * name, const element * &_T);
   void setCurrentValue(const char * name, class molecule * &_T);
   void setCurrentValue(const char * name, class Box &_T);
   void setCurrentValue(const char * name, class Vector &_T);
   void setCurrentValue(const char * name, std::vector<atom *>&_T);
-  void setCurrentValue(const char * name, std::vector<element *>&_T);
+  void setCurrentValue(const char * name, std::vector<const element *>&_T);
   void setCurrentValue(const char * name, std::vector<molecule *>&_T);
   template<class T> void setCurrentValue(const char * name, T &_T)
Index: src/Actions/MethodAction.cpp
===================================================================
--- src/Actions/MethodAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MethodAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MethodAction.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/BondFileAction.cpp
===================================================================
--- src/Actions/MoleculeAction/BondFileAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/BondFileAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BondFileAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/ChangeNameAction.cpp
===================================================================
--- src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ChangeNameAction.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/FillWithMoleculeAction.cpp
===================================================================
--- src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * FillWithMoleculeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp
===================================================================
--- src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * LinearInterpolationofTrajectoriesAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * RotateAroundSelfByAngleAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * RotateToPrincipalAxisSystemAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -85,5 +97,5 @@
       Vector x = (*iter)->getPosition();
       x -= *CenterOfGravity;
-      const double mass = (*iter)->getType()->mass;
+      const double mass = (*iter)->getType()->getMass();
       InertiaTensor.at(0,0) += mass*(x[1]*x[1] + x[2]*x[2]);
       InertiaTensor.at(0,1) += mass*(-x[0]*x[1]);
@@ -136,5 +148,5 @@
       Vector x = (*iter)->getPosition();
       x -= *CenterOfGravity;
-      const double mass = (*iter)->getType()->mass;
+      const double mass = (*iter)->getType()->getMass();
       InertiaTensor.at(0,0) += mass*(x[1]*x[1] + x[2]*x[2]);
       InertiaTensor.at(0,1) += mass*(-x[0]*x[1]);
Index: src/Actions/MoleculeAction/SaveAdjacencyAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SaveAdjacencyAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/SaveBondsAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SaveBondsAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/SaveTemperatureAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SaveTemperatureAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/SuspendInWaterAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SuspendInWaterAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/MoleculeAction/VerletIntegrationAction.cpp
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * VerletIntegrationAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ParserAction/LoadXyzAction.cpp
===================================================================
--- src/Actions/ParserAction/LoadXyzAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ParserAction/LoadXyzAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * LoadXyzAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -74,32 +86,6 @@
   input.open(filename.c_str());
   if (!input.fail()) {
-    // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
-    set <atom*> UniqueList;
-    {
-      vector<atom *> ListBefore = World::getInstance().getAllAtoms();
-      for (vector<atom *>::iterator runner = ListBefore.begin();runner != ListBefore.end(); ++runner)
-        UniqueList.insert(*runner);
-    }
     XyzParser parser; // briefly instantiate a parser which is removed at end of focus
     parser.load(&input);
-    {
-      vector<atom *> ListAfter = World::getInstance().getAllAtoms();
-      pair< set<atom *>::iterator, bool > Inserter;
-      if (UniqueList.size() != ListAfter.size()) { // only create if new atoms have been parsed
-        MoleculeListClass *molecules = World::getInstance().getMolecules();
-        molecule *mol = World::getInstance().createMolecule();
-        molecules->insert(mol);
-        for (vector<atom *>::iterator runner = ListAfter.begin(); runner != ListAfter.end(); ++runner) {
-          Inserter = UniqueList.insert(*runner);
-          if (Inserter.second) { // if not present, then new (just parsed) atom, add ...
-            cout << "Adding new atom " << **runner << " to new mol." << endl;
-            mol->AddAtom(*runner);
-          }
-        }
-        mol->doCountAtoms();
-      } else {
-        cout << "No atoms parsed?" << endl;
-      }
-    }
   } else {
     DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << filename << "." << endl);
Index: src/Actions/ParserAction/SaveXyzAction.cpp
===================================================================
--- src/Actions/ParserAction/SaveXyzAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ParserAction/SaveXyzAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SaveXyzAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/Process.cpp
===================================================================
--- src/Actions/Process.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/Process.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Process.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/AllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/AllAtomsAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AllAtomsAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,156 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsInsideCuboidAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Matrix.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionAllAtomsInsideCuboidState : public ActionState {
+public:
+  SelectionAllAtomsInsideCuboidState(std::vector<atom*> _selectedAtoms, const Vector &_position, const Vector &_extension, const double _Xangle, const double _Yangle, const double _Zangle) :
+    selectedAtoms(_selectedAtoms),
+    position(_position),
+    extension(_extension),
+    Xangle(_Xangle),
+    Yangle(_Yangle),
+    Zangle(_Zangle)
+  {}
+  std::vector<atom*> selectedAtoms;
+  Vector position;
+  Vector extension;
+  double Xangle;
+  double Yangle;
+  double Zangle;
+};
+
+const char SelectionAllAtomsInsideCuboidAction::NAME[] = "select-atoms-inside-cuboid";
+
+SelectionAllAtomsInsideCuboidAction::SelectionAllAtomsInsideCuboidAction() :
+  Action(NAME)
+{}
+
+SelectionAllAtomsInsideCuboidAction::~SelectionAllAtomsInsideCuboidAction()
+{}
+
+void SelectionAllAtomsInsideCuboid(const Vector &position, const Vector &extension) {
+  ValueStorage::getInstance().setCurrentValue(SelectionAllAtomsInsideCuboidAction::NAME, extension);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ActionRegistry::getInstance().getActionByName(SelectionAllAtomsInsideCuboidAction::NAME)->call(Action::NonInteractive);
+};
+
+void SelectionAllAtomsInsideCuboid(const Vector &position, const Vector &extension, const double Xangle, const double Yangle, const double Zangle) {
+  ValueStorage::getInstance().setCurrentValue(SelectionAllAtomsInsideCuboidAction::NAME, extension);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ValueStorage::getInstance().setCurrentValue("angle-x", Xangle);
+  ValueStorage::getInstance().setCurrentValue("angle-y", Yangle);
+  ValueStorage::getInstance().setCurrentValue("angle-z", Zangle);
+  ActionRegistry::getInstance().getActionByName(SelectionAllAtomsInsideCuboidAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionAllAtomsInsideCuboidAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryVector(NAME, false, ValueStorage::getInstance().getDescription(NAME));
+  dialog->queryVector("position", false, ValueStorage::getInstance().getDescription("position"));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performCall() {
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  Vector position;
+  Vector extension;
+  double Xangle = 0.;
+  double Yangle = 0.;
+  double Zangle = 0.;
+  Matrix RotationMatrix;
+
+  ValueStorage::getInstance().queryCurrentValue("position", position);
+  ValueStorage::getInstance().queryCurrentValue(NAME, extension);
+  // check whether a rotation is given.
+  if (ValueStorage::getInstance().queryCurrentValue("angle-x", Xangle, true))
+    Xangle = 0.;
+  if (ValueStorage::getInstance().queryCurrentValue("angle-y", Yangle, true))
+    Yangle = 0.;
+  if (ValueStorage::getInstance().queryCurrentValue("angle-z", Zangle, true))
+    Zangle = 0.;
+  RotationMatrix.rotation(Xangle, Yangle, Zangle);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << position << " and extension of " << extension << "." << endl);
+  Shape s = translate(transform(stretch(Cuboid(),extension),RotationMatrix),position);
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionAllAtomsInsideCuboidState(selectedAtoms, position, extension, Xangle, Yangle, Zangle));
+}
+
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
+  Matrix RotationMatrix;
+
+  RotationMatrix.rotation(state->Xangle, state->Yangle, state->Zangle);
+  Shape s = translate(transform(stretch(Cuboid(),state->extension),RotationMatrix),state->position);
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllAtomsInsideCuboidAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsInsideCuboidAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionAllAtomsInsideCuboidAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,39 @@
+/*
+ * AllAtomsInsideCuboidAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSINSIDECUBOIDACTION_HPP_
+#define ALLATOMSINSIDECUBOIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class Vector;
+
+void SelectionAllAtomsInsideCuboid();
+
+class SelectionAllAtomsInsideCuboidAction : public Action {
+  friend void SelectionAllAtomsInsideCuboid(const Vector &position, const Vector &extension);
+  friend void SelectionAllAtomsInsideCuboid(const Vector &position, const Vector &extension, const double Xangle, const double Yangle, const double Zangle);
+
+public:
+  SelectionAllAtomsInsideCuboidAction();
+  virtual ~SelectionAllAtomsInsideCuboidAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* ALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,126 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsInsideSphereAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/AllAtomsInsideSphereAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionAllAtomsInsideSphereState : public ActionState {
+public:
+  SelectionAllAtomsInsideSphereState(std::vector<atom*> _selectedAtoms, const Vector &_position, const double _radius) :
+    selectedAtoms(_selectedAtoms),
+    position(_position),
+    radius(_radius)
+  {}
+  std::vector<atom*> selectedAtoms;
+  Vector position;
+  double radius;
+};
+
+const char SelectionAllAtomsInsideSphereAction::NAME[] = "select-atoms-inside-sphere";
+
+SelectionAllAtomsInsideSphereAction::SelectionAllAtomsInsideSphereAction() :
+  Action(NAME)
+{}
+
+SelectionAllAtomsInsideSphereAction::~SelectionAllAtomsInsideSphereAction()
+{}
+
+void SelectionAllAtomsInsideSphere(const Vector &position, const double radius) {
+  ValueStorage::getInstance().setCurrentValue(SelectionAllAtomsInsideSphereAction::NAME, radius);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ActionRegistry::getInstance().getActionByName(SelectionAllAtomsInsideSphereAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionAllAtomsInsideSphereAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryDouble(NAME, ValueStorage::getInstance().getDescription(NAME));
+  dialog->queryVector("position", false, ValueStorage::getInstance().getDescription("position"));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performCall() {
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  double radius = 0.;
+  Vector position;
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, radius);
+  ValueStorage::getInstance().queryCurrentValue("position", position);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a sphere at " << position << " with radius " << radius << "." << endl);
+  Shape s = translate(resize(Sphere(),radius),position);
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionAllAtomsInsideSphereState(selectedAtoms, position, radius));
+}
+
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(new SelectionAllAtomsInsideSphereState(state->selectedAtoms, state->position, state->radius));
+}
+
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
+
+  Shape s = translate(resize(Sphere(),state->radius),state->position);
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+
+  return Action::state_ptr(new SelectionAllAtomsInsideSphereState(state->selectedAtoms, state->position, state->radius));
+}
+
+bool SelectionAllAtomsInsideSphereAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsInsideSphereAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionAllAtomsInsideSphereAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/AllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AllAtomsInsideSphereAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * AllAtomsInsideSphereAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSINSIDESPHEREACTION_HPP_
+#define ALLATOMSINSIDESPHEREACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class Vector;
+
+void SelectionAllAtomsInsideSphere();
+
+class SelectionAllAtomsInsideSphereAction : public Action {
+  friend void SelectionAllAtomsInsideSphere(const Vector &position, const double radius);
+
+public:
+  SelectionAllAtomsInsideSphereAction();
+  virtual ~SelectionAllAtomsInsideSphereAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* ALLATOMSINSIDESPHEREACTION_HPP_ */
Index: src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AllAtomsOfMoleculeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/AllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/AllMoleculesAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AllMoleculesAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/AtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AtomByElementAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,114 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomByElementAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/AtomByElementAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomTypeDescriptor.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionAtomByElementState : public ActionState {
+public:
+  SelectionAtomByElementState(std::vector<atom*> _selectedAtoms, const element *_elemental) :
+    selectedAtoms(_selectedAtoms),
+    elemental(_elemental)
+  {}
+  std::vector<atom*> selectedAtoms;
+  const element *elemental;
+};
+
+const char SelectionAtomByElementAction::NAME[] = "select-atom-by-element";
+
+SelectionAtomByElementAction::SelectionAtomByElementAction() :
+  Action(NAME)
+{}
+
+SelectionAtomByElementAction::~SelectionAtomByElementAction()
+{}
+
+void SelectionAtomByElement(const element &_element) {
+  ValueStorage::getInstance().setCurrentValue(SelectionAtomByElementAction::NAME, _element);
+  ActionRegistry::getInstance().getActionByName(SelectionAtomByElementAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionAtomByElementAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryElement(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionAtomByElementAction::performCall() {
+  const element *elemental;
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, elemental);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting atoms of type " << *elemental << endl);
+  World::getInstance().selectAllAtoms(AtomByType(elemental));
+  return Action::state_ptr(new SelectionAtomByElementState(selectedAtoms,elemental));
+}
+
+Action::state_ptr SelectionAtomByElementAction::performUndo(Action::state_ptr _state) {
+  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAtomByElementAction::performRedo(Action::state_ptr _state){
+  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByType(state->elemental));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAtomByElementAction::canUndo() {
+  return true;
+}
+
+bool SelectionAtomByElementAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionAtomByElementAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/AtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/AtomByElementAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * AtomByElementAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMBYELEMENTACTION_HPP_
+#define ATOMBYELEMENTACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class element;
+
+void SelectionAtomByElement(const element &_element);
+
+class SelectionAtomByElementAction : public Action {
+  friend void SelectionAtomByElement(const element &_element);
+
+public:
+  SelectionAtomByElementAction();
+  virtual ~SelectionAtomByElementAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* ATOMBYELEMENTACTION_HPP_ */
Index: src/Actions/SelectionAction/AtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/AtomByIdAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AtomByIdAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/ClearAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/ClearAllAtomsAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ClearAllAtomsAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/ClearAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/ClearAllMoleculesAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ClearAllMoleculesAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/MoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/MoleculeByFormulaAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,117 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeByFormulaAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/MoleculeByFormulaAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/MoleculeFormulaDescriptor.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionMoleculeByFormulaState : public ActionState {
+public:
+  SelectionMoleculeByFormulaState(std::vector<molecule*> selectedMolecules, const std::string &_formula) :
+    selectedMolecules(selectedMolecules),
+    formula(_formula)
+  {}
+  std::vector<molecule*> selectedMolecules;
+  std::string formula;
+};
+
+const char SelectionMoleculeByFormulaAction::NAME[] = "select-molecule-by-formula";
+
+SelectionMoleculeByFormulaAction::SelectionMoleculeByFormulaAction() :
+  Action(NAME)
+{}
+
+SelectionMoleculeByFormulaAction::~SelectionMoleculeByFormulaAction()
+{}
+
+void SelectionMoleculeByFormula(const std::string &_formula) {
+  ValueStorage::getInstance().setCurrentValue(SelectionMoleculeByFormulaAction::NAME, _formula);
+  ActionRegistry::getInstance().getActionByName(SelectionMoleculeByFormulaAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionMoleculeByFormulaAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryString(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionMoleculeByFormulaAction::performCall() {
+  std::string formula;
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, formula);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting molecules with chemical formula " << formula << ":" << endl);
+  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(formula));
+  for (std::vector<molecule *>::const_iterator iter = matchingMolecules.begin(); iter != matchingMolecules.end(); ++iter) {
+    DoLog(1) && (Log() << Verbose(1) << "\t" << (*iter)->getId() << ", " << (*iter)->getName() << "." << endl);
+  }
+  World::getInstance().selectAllMolecules(MoleculeByFormula(formula));
+  return Action::state_ptr(new SelectionMoleculeByFormulaState(selectedMolecules,formula));
+}
+
+Action::state_ptr SelectionMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
+    World::getInstance().selectMolecule(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
+  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculeByFormula(state->formula));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeByFormulaAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeByFormulaAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionMoleculeByFormulaAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/MoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/MoleculeByFormulaAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * MoleculeByFormulaAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEBYFORMULAACTION_HPP_
+#define MOLECULEBYFORMULAACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class molecule;
+
+void SelectionMoleculeByFormula(molecule *_mol);
+
+class SelectionMoleculeByFormulaAction : public Action {
+  friend void SelectionMoleculeByFormula(const std::string &_formula);
+
+public:
+  SelectionMoleculeByFormulaAction();
+  virtual ~SelectionMoleculeByFormulaAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* MOLECULEBYFORMULAACTION_HPP_ */
Index: src/Actions/SelectionAction/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/MoleculeByIdAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeByIdAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/MoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/MoleculeOfAtomAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeOfAtomAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotAllAtomsAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotAllAtomsAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,157 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsInsideCuboidAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Matrix.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionNotAllAtomsInsideCuboidState : public ActionState {
+public:
+  SelectionNotAllAtomsInsideCuboidState(std::vector<atom*> _selectedAtoms, const Vector &_position, const Vector &_extension, const double _Xangle, const double _Yangle, const double _Zangle) :
+    selectedAtoms(_selectedAtoms),
+    position(_position),
+    extension(_extension),
+    Xangle(_Xangle),
+    Yangle(_Yangle),
+    Zangle(_Zangle)
+  {}
+  std::vector<atom*> selectedAtoms;
+  Vector position;
+  Vector extension;
+  double Xangle;
+  double Yangle;
+  double Zangle;
+};
+
+const char SelectionNotAllAtomsInsideCuboidAction::NAME[] = "unselect-atoms-inside-cuboid";
+
+SelectionNotAllAtomsInsideCuboidAction::SelectionNotAllAtomsInsideCuboidAction() :
+  Action(NAME)
+{}
+
+SelectionNotAllAtomsInsideCuboidAction::~SelectionNotAllAtomsInsideCuboidAction()
+{}
+
+void SelectionNotAllAtomsInsideCuboid(const Vector &position, const Vector &extension) {
+  ValueStorage::getInstance().setCurrentValue(SelectionNotAllAtomsInsideCuboidAction::NAME, extension);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ActionRegistry::getInstance().getActionByName(SelectionNotAllAtomsInsideCuboidAction::NAME)->call(Action::NonInteractive);
+};
+
+void SelectionNotAllAtomsInsideCuboid(const Vector &position, const Vector &extension, const double Xangle, const double Yangle, const double Zangle) {
+  ValueStorage::getInstance().setCurrentValue(SelectionNotAllAtomsInsideCuboidAction::NAME, extension);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ValueStorage::getInstance().setCurrentValue("angle-x", Xangle);
+  ValueStorage::getInstance().setCurrentValue("angle-y", Yangle);
+  ValueStorage::getInstance().setCurrentValue("angle-z", Zangle);
+  ActionRegistry::getInstance().getActionByName(SelectionNotAllAtomsInsideCuboidAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionNotAllAtomsInsideCuboidAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryVector(NAME, false, ValueStorage::getInstance().getDescription(NAME));
+  dialog->queryVector("position", false, ValueStorage::getInstance().getDescription("position"));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performCall() {
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  Vector position;
+  Vector extension;
+  double Xangle = 0.;
+  double Yangle = 0.;
+  double Zangle = 0.;
+  Matrix RotationMatrix;
+
+  ValueStorage::getInstance().queryCurrentValue("position", position);
+  ValueStorage::getInstance().queryCurrentValue(NAME, extension);
+  // check whether a rotation is given.
+  if (ValueStorage::getInstance().queryCurrentValue("angle-x", Xangle, true))
+    Xangle = 0.;
+  if (ValueStorage::getInstance().queryCurrentValue("angle-y", Yangle, true))
+    Yangle = 0.;
+  if (ValueStorage::getInstance().queryCurrentValue("angle-z", Zangle, true))
+    Zangle = 0.;
+  RotationMatrix.rotation(Xangle, Yangle, Zangle);
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << position << " and extension of " << extension << "." << endl);
+  Shape s = translate(transform(stretch(Cuboid(),extension),RotationMatrix),position);
+
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionNotAllAtomsInsideCuboidState(selectedAtoms, position, extension, Xangle, Yangle, Zangle));
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
+  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
+  Matrix RotationMatrix;
+
+  RotationMatrix.rotation(state->Xangle, state->Yangle, state->Zangle);
+  Shape s = translate(transform(stretch(Cuboid(),state->extension),RotationMatrix),state->position);
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllAtomsInsideCuboidAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsInsideCuboidAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionNotAllAtomsInsideCuboidAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,39 @@
+/*
+ * NotAllAtomsInsideCuboidAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSINSIDECUBOIDACTION_HPP_
+#define NOTALLATOMSINSIDECUBOIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class Vector;
+
+void SelectionNotAllAtomsInsideCuboid();
+
+class SelectionNotAllAtomsInsideCuboidAction : public Action {
+  friend void SelectionNotAllAtomsInsideCuboid(const Vector &position, const Vector &extension);
+  friend void SelectionNotAllAtomsInsideCuboid(const Vector &position, const Vector &extension, const double Xangle, const double Yangle, const double Zangle);
+
+public:
+  SelectionNotAllAtomsInsideCuboidAction();
+  virtual ~SelectionNotAllAtomsInsideCuboidAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* NOTALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,126 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsInsideSphereAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionNotAllAtomsInsideSphereState : public ActionState {
+public:
+  SelectionNotAllAtomsInsideSphereState(std::vector<atom*> _selectedAtoms, const Vector &_position, const double _radius) :
+    selectedAtoms(_selectedAtoms),
+    position(_position),
+    radius(_radius)
+  {}
+  std::vector<atom*> selectedAtoms;
+  Vector position;
+  double radius;
+};
+
+const char SelectionNotAllAtomsInsideSphereAction::NAME[] = "unselect-atoms-inside-sphere";
+
+SelectionNotAllAtomsInsideSphereAction::SelectionNotAllAtomsInsideSphereAction() :
+  Action(NAME)
+{}
+
+SelectionNotAllAtomsInsideSphereAction::~SelectionNotAllAtomsInsideSphereAction()
+{}
+
+void SelectionNotAllAtomsInsideSphere(const Vector &position, const double radius) {
+  ValueStorage::getInstance().setCurrentValue(SelectionNotAllAtomsInsideSphereAction::NAME, radius);
+  ValueStorage::getInstance().setCurrentValue("position", position);
+  ActionRegistry::getInstance().getActionByName(SelectionNotAllAtomsInsideSphereAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionNotAllAtomsInsideSphereAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryDouble(NAME, ValueStorage::getInstance().getDescription(NAME));
+  dialog->queryVector("position", false, ValueStorage::getInstance().getDescription("position"));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performCall() {
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  double radius = 0.;
+  Vector position;
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, radius);
+  ValueStorage::getInstance().queryCurrentValue("position", position);
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a sphere at " << position << " with radius " << radius << "." << endl);
+  Shape s = translate(resize(Sphere(),radius),position);
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionNotAllAtomsInsideSphereState(selectedAtoms, position, radius));
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(new SelectionNotAllAtomsInsideSphereState(state->selectedAtoms, state->position, state->radius));
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
+  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
+
+  Shape s = translate(resize(Sphere(),state->radius),state->position);
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+
+  return Action::state_ptr(new SelectionNotAllAtomsInsideSphereState(state->selectedAtoms, state->position, state->radius));
+}
+
+bool SelectionNotAllAtomsInsideSphereAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsInsideSphereAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionNotAllAtomsInsideSphereAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * NotAllAtomsInsideSphereAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSINSIDESPHEREACTION_HPP_
+#define NOTALLATOMSINSIDESPHEREACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class Vector;
+
+void SelectionNotAllAtomsInsideSphere();
+
+class SelectionNotAllAtomsInsideSphereAction : public Action {
+  friend void SelectionNotAllAtomsInsideSphere(const Vector &position, const double radius);
+
+public:
+  SelectionNotAllAtomsInsideSphereAction();
+  virtual ~SelectionNotAllAtomsInsideSphereAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* NOTALLATOMSINSIDESPHEREACTION_HPP_ */
Index: src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotAllAtomsOfMoleculeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotAllMoleculesAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotAllMoleculesAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotAtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAtomByElementAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,114 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAtomByElementAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/NotAtomByElementAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomTypeDescriptor.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionNotAtomByElementState : public ActionState {
+public:
+  SelectionNotAtomByElementState(std::vector<atom*> _selectedAtoms, const element *_elemental) :
+    selectedAtoms(_selectedAtoms),
+    elemental(_elemental)
+  {}
+  std::vector<atom*> selectedAtoms;
+  const element *elemental;
+};
+
+const char SelectionNotAtomByElementAction::NAME[] = "unselect-atom-by-element";
+
+SelectionNotAtomByElementAction::SelectionNotAtomByElementAction() :
+  Action(NAME)
+{}
+
+SelectionNotAtomByElementAction::~SelectionNotAtomByElementAction()
+{}
+
+void SelectionNotAtomByElement(const element &_element) {
+  ValueStorage::getInstance().setCurrentValue(SelectionNotAtomByElementAction::NAME, _element);
+  ActionRegistry::getInstance().getActionByName(SelectionNotAtomByElementAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionNotAtomByElementAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryElement(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionNotAtomByElementAction::performCall() {
+  const element *elemental;
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, elemental);
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting atoms of type " << *elemental << endl);
+  World::getInstance().unselectAllAtoms(AtomByType(elemental));
+  return Action::state_ptr(new SelectionNotAtomByElementState(selectedAtoms,elemental));
+}
+
+Action::state_ptr SelectionNotAtomByElementAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAtomByElementAction::performRedo(Action::state_ptr _state){
+  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByType(state->elemental));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAtomByElementAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAtomByElementAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionNotAtomByElementAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/NotAtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotAtomByElementAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * NotAtomByElementAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTATOMBYELEMENTACTION_HPP_
+#define NOTATOMBYELEMENTACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class element;
+
+void SelectionNotAtomByElement(const element &_element);
+
+class SelectionNotAtomByElementAction : public Action {
+  friend void SelectionNotAtomByElement(const element &_element);
+
+public:
+  SelectionNotAtomByElementAction();
+  virtual ~SelectionNotAtomByElementAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* NOTATOMBYELEMENTACTION_HPP_ */
Index: src/Actions/SelectionAction/NotAtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotAtomByIdAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotAtomByIdAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,117 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeByFormulaAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/NotMoleculeByFormulaAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/MoleculeFormulaDescriptor.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionNotMoleculeByFormulaState : public ActionState {
+public:
+  SelectionNotMoleculeByFormulaState(std::vector<molecule*> selectedMolecules, const std::string &_formula) :
+    selectedMolecules(selectedMolecules),
+    formula(_formula)
+  {}
+  std::vector<molecule*> selectedMolecules;
+  std::string formula;
+};
+
+const char SelectionNotMoleculeByFormulaAction::NAME[] = "unselect-molecule-by-formula";
+
+SelectionNotMoleculeByFormulaAction::SelectionNotMoleculeByFormulaAction() :
+  Action(NAME)
+{}
+
+SelectionNotMoleculeByFormulaAction::~SelectionNotMoleculeByFormulaAction()
+{}
+
+void SelectionNotMoleculeByFormula(const std::string &_formula) {
+  ValueStorage::getInstance().setCurrentValue(SelectionNotMoleculeByFormulaAction::NAME, _formula);
+  ActionRegistry::getInstance().getActionByName(SelectionNotMoleculeByFormulaAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionNotMoleculeByFormulaAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryString(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performCall() {
+  std::string formula;
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, formula);
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting molecules with chemical formula " << formula << ":" << endl);
+  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(formula));
+  for (std::vector<molecule *>::const_iterator iter = matchingMolecules.begin(); iter != matchingMolecules.end(); ++iter) {
+    DoLog(1) && (Log() << Verbose(1) << "\t" << (*iter)->getId() << ", " << (*iter)->getName() << "." << endl);
+  }
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(formula));
+  return Action::state_ptr(new SelectionNotMoleculeByFormulaState(selectedMolecules,formula));
+}
+
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
+    World::getInstance().selectMolecule(*iter);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
+  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->formula));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeByFormulaAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeByFormulaAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionNotMoleculeByFormulaAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/NotMoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Actions/SelectionAction/NotMoleculeByFormulaAction.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,38 @@
+/*
+ * NotMoleculeByFormulaAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEBYFORMULAACTION_HPP_
+#define NOTMOLECULEBYFORMULAACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class molecule;
+
+void SelectionNotMoleculeByFormula(molecule *_mol);
+
+class SelectionNotMoleculeByFormulaAction : public Action {
+  friend void SelectionNotMoleculeByFormula(const std::string &_formula);
+
+public:
+  SelectionNotMoleculeByFormulaAction();
+  virtual ~SelectionNotMoleculeByFormulaAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* NOTMOLECULEBYFORMULAACTION_HPP_ */
Index: src/Actions/SelectionAction/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotMoleculeByIdAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotMoleculeByIdAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotMoleculeOfAtomAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ConvexEnvelopeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NonConvexEnvelopeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/ValueStorage.cpp
===================================================================
--- src/Actions/ValueStorage.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ValueStorage.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ValueStorage.cpp
@@ -6,9 +13,17 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "ValueStorage.hpp"
 #include "Patterns/Singleton_impl.hpp"
 
-ValueStorage::ValueStorage() {};
+ValueStorage::ValueStorage() :
+  MapOfActions_instance(MapOfActions::getInstance())
+{};
 
 ValueStorage::~ValueStorage() {};
Index: src/Actions/ValueStorage.hpp
===================================================================
--- src/Actions/ValueStorage.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/ValueStorage.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -8,5 +8,4 @@
 #ifndef VALUESTORAGE_HPP_
 #define VALUESTORAGE_HPP_
-
 
 #include "Actions/MapOfActions.hpp"
@@ -22,11 +21,31 @@
 
 public:
-  template <typename T> void queryCurrentValue(const char *name, T &_T) {
-    MapOfActions::getInstance().queryCurrentValue(name, _T);
-  }
-  template <typename T> void setCurrentValue(const char *name, T &_T) {
-    MapOfActions::getInstance().setCurrentValue(name, _T);
+  /** Gets a value from the storage
+   * If the value is not present, an ASSERT is thrown unless optional is set to true.
+   * \param _T key of value
+   * \param optional whether this value is optional, i.e. may actually not be in the storage (i.e. may return false in this case).
+   * \return true - value present, false - value not present (only given when optional set to true)
+   */
+  template <typename T> bool queryCurrentValue(const char *name, T &_T, const bool optional = false) {
+    if (optional) {
+      if (!MapOfActions_instance.isCurrentValuePresent(name))
+        return false;
+    }
+    MapOfActions_instance.queryCurrentValue(name, _T);
+    return true;
   }
 
+  /** Sets a value in the storage.
+   * \param name key of value
+   * \param _T value
+   */
+  template <typename T> void setCurrentValue(const char *name, T &_T) {
+    MapOfActions_instance.setCurrentValue(name, _T);
+  }
+
+  /** Obtain a descriptive text for a given key.
+   * \param actionname key
+   * \return text describing the key's contents
+   */
   std::string getDescription(std::string actionname);
 
@@ -34,4 +53,6 @@
   ValueStorage();
   ~ValueStorage();
+
+  MapOfActions &MapOfActions_instance;
 };
 
Index: src/Actions/WorldAction/AddEmptyBoundaryAction.cpp
===================================================================
--- src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AddEmptyBoundaryAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/BoundInBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/BoundInBoxAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/BoundInBoxAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoundInBoxAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/CenterInBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/CenterInBoxAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/CenterInBoxAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CenterInBoxAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/CenterOnEdgeAction.cpp
===================================================================
--- src/Actions/WorldAction/CenterOnEdgeAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/CenterOnEdgeAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CenterOnEdgeAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/ChangeBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ChangeBoxAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/ChangeBoxAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ChangeBoxAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/InputAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * InputAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/OutputAction.cpp
===================================================================
--- src/Actions/WorldAction/OutputAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/OutputAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * OutputAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: c/Actions/WorldAction/RemoveSphereOfAtomsAction.cpp
===================================================================
--- src/Actions/WorldAction/RemoveSphereOfAtomsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,102 +1,0 @@
-/*
- * RemoveSphereOfAtomsAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Actions/WorldAction/RemoveSphereOfAtomsAction.hpp"
-#include "Actions/ActionRegistry.hpp"
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "molecule.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "UIElements/UIFactory.hpp"
-#include "UIElements/Dialog.hpp"
-#include "Actions/ValueStorage.hpp"
-
-const char WorldRemoveSphereOfAtomsAction::NAME[] = "remove-sphere";
-
-WorldRemoveSphereOfAtomsAction::WorldRemoveSphereOfAtomsAction() :
-  Action(NAME)
-{}
-
-WorldRemoveSphereOfAtomsAction::~WorldRemoveSphereOfAtomsAction()
-{}
-
-void WorldRemoveSphereOfAtoms(double radius, Vector &point) {
-  ValueStorage::getInstance().setCurrentValue(WorldRemoveSphereOfAtomsAction::NAME, radius);
-  ValueStorage::getInstance().setCurrentValue("position", point);
-  ActionRegistry::getInstance().getActionByName(WorldRemoveSphereOfAtomsAction::NAME)->call(Action::NonInteractive);
-};
-
-Dialog* WorldRemoveSphereOfAtomsAction::fillDialog(Dialog *dialog) {
-  ASSERT(dialog,"No Dialog given when filling action dialog");
-
-  dialog->queryDouble(NAME, ValueStorage::getInstance().getDescription(NAME));
-  dialog->queryVector("position", false, ValueStorage::getInstance().getDescription("position"));
-
-  return dialog;
-}
-
-Action::state_ptr WorldRemoveSphereOfAtomsAction::performCall() {
-  double radius = 0.;
-  Vector point;
-
-  ValueStorage::getInstance().queryCurrentValue(NAME, radius);
-  ValueStorage::getInstance().queryCurrentValue("position", point);
-
-  DoLog(1) && (Log() << Verbose(1) << "Removing atoms around " << point << " with radius " << radius << "." << endl);
-  vector<atom*> AllAtoms = World::getInstance().getAllAtoms();
-  vector<molecule *> molecules = World::getInstance().getAllMolecules();
-  for (vector<atom*>::iterator AtomRunner = AllAtoms.begin(); AtomRunner != AllAtoms.end(); ++AtomRunner) {
-    if ((*AtomRunner)->DistanceSquared(point) > radius*radius) { // distance to first above radius ...
-//      cout << "Removing " << (*AtomRunner)->getType()->symbol << (*AtomRunner)->getId() << " at " << (*AtomRunner)->getPosition() << " as distance is " << sqrt((*AtomRunner)->DistanceSquared(point)) << endl;
-      // TODO: This is not necessary anymore when atoms are completely handled by World (create/destroy and load/save)
-      for (vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end();++iter)
-        (*iter)->erase(*AtomRunner);
-      World::getInstance().destroyAtom(*AtomRunner);
-    }
-//    else {
-//      cout << "Keeping" << (*AtomRunner)->getType()->symbol << (*AtomRunner)->getId() << " at " << (*AtomRunner)->getPosition() << " as distance is " << sqrt((*AtomRunner)->DistanceSquared(point)) << endl;
-//    }
-  }
-  return Action::success;
-}
-
-Action::state_ptr WorldRemoveSphereOfAtomsAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
-
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
-}
-
-Action::state_ptr WorldRemoveSphereOfAtomsAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
-}
-
-bool WorldRemoveSphereOfAtomsAction::canUndo() {
-  return false;
-}
-
-bool WorldRemoveSphereOfAtomsAction::shouldUndo() {
-  return false;
-}
-
-const string WorldRemoveSphereOfAtomsAction::getName() {
-  return NAME;
-}
Index: c/Actions/WorldAction/RemoveSphereOfAtomsAction.hpp
===================================================================
--- src/Actions/WorldAction/RemoveSphereOfAtomsAction.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,38 +1,0 @@
-/*
- * RemoveSphereOfAtomsAction.hpp
- *
- *  Created on: May 9, 2010
- *      Author: heber
- */
-
-#ifndef REMOVESPHEREOFATOMS_HPP_
-#define REMOVESPHEREOFATOMS_HPP_
-
-#include "Actions/Action.hpp"
-#include "LinearAlgebra/Vector.hpp"
-
-
-void WorldRemoveSphereOfAtoms(double radius, Vector &point);
-
-class WorldRemoveSphereOfAtomsAction : public Action {
-  friend void WorldRemoveSphereOfAtoms(double radius, Vector &point);
-
-public:
-  WorldRemoveSphereOfAtomsAction();
-  virtual ~WorldRemoveSphereOfAtomsAction();
-
-  bool canUndo();
-  bool shouldUndo();
-
-  virtual const std::string getName();
-protected:
-  virtual Dialog * fillDialog(Dialog *dialog);
-private:
-  virtual Action::state_ptr performCall();
-  virtual Action::state_ptr performUndo(Action::state_ptr);
-  virtual Action::state_ptr performRedo(Action::state_ptr);
-
-  static const char NAME[];
-};
-
-#endif /* REMOVESPHEREOFATOMS_HPP_ */
Index: src/Actions/WorldAction/RepeatBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/RepeatBoxAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * RepeatBoxAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/ScaleBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ScaleBoxAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/ScaleBoxAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ScaleBoxAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/SetDefaultNameAction.cpp
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SetDefaultNameAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -62,9 +74,10 @@
 
   defaultname = World::getInstance().getDefaultName();
+  WorldSetDefaultNameState *UndoState = new WorldSetDefaultNameState(defaultname);
   ValueStorage::getInstance().queryCurrentValue(NAME, defaultname);
 
   World::getInstance().setDefaultName(defaultname);
   DoLog(0) && (Log() << Verbose(0) << "Default name of new molecules set to " << World::getInstance().getDefaultName() << "." << endl);
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
@@ -74,4 +87,5 @@
   string newName = World::getInstance().getDefaultName();
   World::getInstance().setDefaultName(state->lastName);
+  DoLog(0) && (Log() << Verbose(0) << "Default name of new molecules set to " << World::getInstance().getDefaultName() << "." << endl);
 
   return Action::state_ptr(new WorldSetDefaultNameState(newName));
Index: src/Actions/WorldAction/SetGaussianBasisAction.cpp
===================================================================
--- src/Actions/WorldAction/SetGaussianBasisAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/SetGaussianBasisAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SetGaussianBasisAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Actions/WorldAction/SetOutputFormatsAction.cpp
===================================================================
--- src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SetOutputFormatsAction.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/AtomicInfo.cpp
===================================================================
--- src/AtomicInfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/AtomicInfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,69 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomicInfo.cpp
+ *
+ *  Created on: Aug 10, 2010
+ *      Author: heber
+ */
+
+#include "atom.hpp"
+#include "AtomicInfo.hpp"
+#include "element.hpp"
+#include "LinearAlgebra/Vector.hpp"
+
+/********************************** Functions for class AtomicInfo **********************************/
+
+AtomicInfo::AtomicInfo() :
+    Type(NULL),
+    Father(NULL),
+    Id(-1)
+{}
+AtomicInfo::AtomicInfo(const atom &_atom) :
+    Position(_atom.getPosition()),
+    Type(_atom.getType()),
+    Velocity(_atom.AtomicVelocity),
+    Father(_atom.father),
+    Mol(_atom.getMolecule()),
+    Id(_atom.getId())
+{}
+
+AtomicInfo::~AtomicInfo()
+{}
+
+
+bool AtomicInfo::setAtom(atom &_atom) const
+{
+  _atom.setPosition(Position);
+  _atom.setType(Type);
+  _atom.father = const_cast<atom *>(Father); // TODO: Actually, atom::father should be const atom *!
+  _atom.setMolecule(const_cast<molecule *>(Mol)); // this is ok, mol is const within AtomicInfo, but not outside (atoms need to register)
+  _atom.AtomicVelocity = Velocity;
+  if (_atom.getId() == Id)
+    return true;
+  else
+    return (_atom.changeId(Id));
+}
+
+atomId_t AtomicInfo::getId() const {
+  return Id;
+}
+
+AtomicInfo& AtomicInfo::operator=(const AtomicInfo& AI)
+{
+  if (&AI == this)  // check self-assignment
+    return *this;
+  Position = AI.Position;
+  Type = AI.Type;
+  Father = AI.Father;
+  Mol = AI.Mol;
+  Velocity = AI.Velocity;
+  Id = AI.Id;
+  return *this;
+}
+
Index: src/AtomicInfo.hpp
===================================================================
--- src/AtomicInfo.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/AtomicInfo.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,40 @@
+/*
+ * AtomicInfo.hpp
+ *
+ *  Created on: Aug 10, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMICINFO_HPP_
+#define ATOMICINFO_HPP_
+
+class atom;
+class element;
+class molecule;
+class Vector;
+
+/** This is for storing and transfering the information contained within an atom.
+ * This is needed for Undo/Redo operations of AtomActions.
+ */
+class AtomicInfo {
+public:
+  AtomicInfo();
+  AtomicInfo(const atom &_atom);
+  ~AtomicInfo();
+
+  bool setAtom(atom &_atom) const;
+  atomId_t getId() const;
+
+  AtomicInfo& operator=(const AtomicInfo&);
+
+private:
+  Vector Position;
+  const element * Type;
+  Vector Velocity;
+  const atom * Father;
+  const molecule * Mol;
+  atomId_t Id;
+};
+
+
+#endif /* ATOMICINFO_HPP_ */
Index: src/BoundaryLineSet.cpp
===================================================================
--- src/BoundaryLineSet.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/BoundaryLineSet.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoundaryLineSet.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "BoundaryLineSet.hpp"
Index: src/BoundaryMaps.hpp
===================================================================
--- src/BoundaryMaps.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/BoundaryMaps.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -22,4 +22,15 @@
 typedef std::map <int, int> IndexToIndex;
 
+// ============= TesselPoint maps ======================== //
+typedef std::pair < double, class TesselPoint * > TesselPointDistancePair;
+typedef std::multimap < double, class TesselPoint * > TesselPointDistanceMap;
+typedef std::pair < TesselPointDistanceMap::iterator, bool > TesselPointDistanceTestPair;
+
+typedef std::list <TesselPoint *> TesselPointList;
+typedef std::set <TesselPoint *> TesselPointSet;
+
+typedef std::list<std::list <TesselPoint *> *> ListOfTesselPointList;
+
+// ============= BoundaryPointSet maps ======================== //
 typedef std::map < int, class BoundaryPointSet * > PointMap;
 typedef std::set < class BoundaryPointSet * > PointSet;
@@ -28,7 +39,8 @@
 typedef std::pair < PointMap::iterator, bool > PointTestPair;
 
-typedef std::list <class CandidateForTesselation *> CandidateList;
-typedef std::map <class BoundaryLineSet *, class CandidateForTesselation *> CandidateMap;
+typedef std::multimap <double, class BoundaryPointSet * > DistanceToPointMap;
+typedef std::pair <double, class BoundaryPointSet * > DistanceToPointPair;
 
+// ============= BoundaryLineSet maps ======================== //
 typedef std::multimap < int, class BoundaryLineSet * > LineMap;
 typedef std::set < class BoundaryLineSet * > LineSet;
@@ -37,4 +49,5 @@
 typedef std::pair < LineMap::iterator, bool > LineTestPair;
 
+// ============= BoundaryTriangleSet maps ======================== //
 typedef std::map < int, class BoundaryTriangleSet * > TriangleMap;
 typedef std::set < class BoundaryTriangleSet * > TriangleSet;
@@ -43,18 +56,20 @@
 typedef std::pair < TriangleMap::iterator, bool > TriangleTestPair;
 
+// ============= BoundaryPolygonSet maps ======================== //
 typedef std::map < int, class BoundaryPolygonSet * > PolygonMap;
 typedef std::set < class BoundaryPolygonSet * > PolygonSet;
 typedef std::list < class BoundaryPolygonSet * > PolygonList;
 
-typedef std::multimap <double, class BoundaryPointSet * > DistanceToPointMap;
-typedef std::pair <double, class BoundaryPointSet * > DistanceToPointPair;
+// ============= CandidateForTesselation maps ======================== //
+typedef std::list <class CandidateForTesselation *> CandidateList;
+typedef std::map <class BoundaryLineSet *, class CandidateForTesselation *> CandidateMap;
+
+// ============= Various maps ======================== //
+typedef std::map <double, TesselPointDistancePair > Boundaries;
+typedef std::pair<double, TesselPointDistancePair > BoundariesPair;
+typedef std::pair< Boundaries::iterator, bool> BoundariesTestPair;
 
 typedef std::multimap <double, std::pair < PointMap::iterator, PointMap::iterator> > DistanceMultiMap;
 typedef std::pair <double, std::pair < PointMap::iterator, PointMap::iterator> > DistanceMultiMapPair;
-
-typedef std::list <TesselPoint *> TesselPointList;
-typedef std::set <TesselPoint *> TesselPointSet;
-
-typedef std::list<std::list <TesselPoint *> *> ListOfTesselPointList;
 
 enum centers {Opt, OtherOpt};
Index: src/BoundaryPointSet.cpp
===================================================================
--- src/BoundaryPointSet.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/BoundaryPointSet.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoundaryPointSet.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "BoundaryPointSet.hpp"
Index: src/BoundaryPolygonSet.cpp
===================================================================
--- src/BoundaryPolygonSet.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/BoundaryPolygonSet.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoundaryPolygonSet.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "BoundaryPolygonSet.hpp"
Index: src/BoundaryTriangleSet.cpp
===================================================================
--- src/BoundaryTriangleSet.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/BoundaryTriangleSet.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoundaryTriangleSet.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "BoundaryTriangleSet.hpp"
Index: src/Box.cpp
===================================================================
--- src/Box.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Box.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Box.cpp
@@ -6,5 +13,10 @@
  */
 
-//#include "Helpers/MemDebug.hpp"
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "Box.hpp"
Index: src/CandidateForTesselation.cpp
===================================================================
--- src/CandidateForTesselation.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/CandidateForTesselation.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CandidateForTesselation.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "CandidateForTesselation.hpp"
Index: src/CommandLineParser.cpp
===================================================================
--- src/CommandLineParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/CommandLineParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CommandLineParser.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/ConfigFileBuffer.cpp
===================================================================
--- src/ConfigFileBuffer.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/ConfigFileBuffer.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ConfigFileBuffer.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "ConfigFileBuffer.hpp"
Index: src/Descriptors/AtomDescriptor.cpp
===================================================================
--- src/Descriptors/AtomDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/AtomDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AtomDescriptor.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/AtomIdDescriptor.cpp
===================================================================
--- src/Descriptors/AtomIdDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/AtomIdDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AtomIdDescriptor.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/AtomSelectionDescriptor.cpp
===================================================================
--- src/Descriptors/AtomSelectionDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/AtomSelectionDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AtomSelectionDescriptor.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "Descriptors/AtomSelectionDescriptor.hpp"
Index: src/Descriptors/AtomShapeDescriptor.cpp
===================================================================
--- src/Descriptors/AtomShapeDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Descriptors/AtomShapeDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,45 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomShapeDescriptor.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "AtomShapeDescriptor.hpp"
+#include "AtomShapeDescriptor_impl.hpp"
+
+#include "atom.hpp"
+#include "Patterns/ObservedContainer_impl.hpp"
+#include "Shapes/Shape.hpp"
+
+using namespace std;
+
+
+AtomShapeDescriptor_impl::AtomShapeDescriptor_impl(Shape _shape) :
+  shape(_shape)
+{}
+
+AtomShapeDescriptor_impl::~AtomShapeDescriptor_impl()
+{}
+
+bool AtomShapeDescriptor_impl::predicate(std::pair<atomId_t,atom*> atom) {
+  return shape.isInside(atom.second->getPosition());
+}
+
+AtomDescriptor AtomByShape(Shape &_shape){
+  return AtomDescriptor(AtomDescriptor::impl_ptr(new AtomShapeDescriptor_impl(_shape)));
+}
Index: src/Descriptors/AtomShapeDescriptor.hpp
===================================================================
--- src/Descriptors/AtomShapeDescriptor.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Descriptors/AtomShapeDescriptor.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,18 @@
+/*
+ * AtomShapeDescriptor.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMSHAPEDESCRIPTOR_HPP_
+#define ATOMSHAPEDESCRIPTOR_HPP_
+
+#include "defs.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+
+class Shape;
+
+AtomDescriptor AtomByShape(Shape &_shape);
+
+#endif /* ATOMSHAPEDESCRIPTOR_HPP_ */
Index: src/Descriptors/AtomShapeDescriptor_impl.hpp
===================================================================
--- src/Descriptors/AtomShapeDescriptor_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/Descriptors/AtomShapeDescriptor_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,26 @@
+/*
+ * AtomShapeDescriptor_impl.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMSHAPEDESCRIPTOR_IMPL_HPP
+#define ATOMSHAPEDESCRIPTOR_IMPL_HPP
+
+#include "Descriptors/AtomDescriptor_impl.hpp"
+#include "Shapes/Shape.hpp"
+
+class AtomShapeDescriptor_impl : public AtomDescriptor_impl
+{
+public:
+  AtomShapeDescriptor_impl(Shape _shape);
+  virtual ~AtomShapeDescriptor_impl();
+
+  bool predicate(std::pair<atomId_t,atom*> atom);
+
+private:
+  Shape shape;
+};
+
+#endif //ATOMSHAPEDESCRIPTOR_IMPL_HPP
Index: src/Descriptors/AtomTypeDescriptor.cpp
===================================================================
--- src/Descriptors/AtomTypeDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/AtomTypeDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AtomTypeDescriptor_impl.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/MoleculeDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculeDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeDescriptor.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/MoleculeFormulaDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeFormulaDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculeFormulaDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeFormulaDescriptor.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "MoleculeFormulaDescriptor.hpp"
Index: src/Descriptors/MoleculeIdDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeIdDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculeIdDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeIdDescriptor.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/MoleculeNameDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeNameDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculeNameDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeNameDescriptor.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "MoleculeNameDescriptor.hpp"
Index: src/Descriptors/MoleculePtrDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculePtrDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculePtrDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculePtrDescriptor.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Descriptors/MoleculeSelectionDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeSelectionDescriptor.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Descriptors/MoleculeSelectionDescriptor.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeSelectionDescriptor.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "Descriptors/MoleculeSelectionDescriptor.hpp"
Index: src/Exceptions/CustomException.cpp
===================================================================
--- src/Exceptions/CustomException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/CustomException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CustomException.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Exceptions/IllegalTypeException.cpp
===================================================================
--- src/Exceptions/IllegalTypeException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/IllegalTypeException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * IllegalTypeException.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "IllegalTypeException.hpp"
Index: src/Exceptions/LinearDependenceException.cpp
===================================================================
--- src/Exceptions/LinearDependenceException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/LinearDependenceException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * LinearDependenceException.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Exceptions/MathException.cpp
===================================================================
--- src/Exceptions/MathException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/MathException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MathException.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Exceptions/MissingValueException.cpp
===================================================================
--- src/Exceptions/MissingValueException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/MissingValueException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MissingValueException.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "MissingValueException.hpp"
Index: src/Exceptions/NotInvertibleException.cpp
===================================================================
--- src/Exceptions/NotInvertibleException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/NotInvertibleException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * NotInvertibleException.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "NotInvertibleException.hpp"
Index: src/Exceptions/ParseError.cpp
===================================================================
--- src/Exceptions/ParseError.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/ParseError.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ParseError.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "ParseError.hpp"
Index: src/Exceptions/SkewException.cpp
===================================================================
--- src/Exceptions/SkewException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/SkewException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SkewException.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Exceptions/ZeroVectorException.cpp
===================================================================
--- src/Exceptions/ZeroVectorException.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Exceptions/ZeroVectorException.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ZeroVectorException.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Formula.cpp
===================================================================
--- src/Formula.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Formula.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Formula.cpp
@@ -6,4 +13,11 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
 #include "Formula.hpp"
 
@@ -47,5 +61,5 @@
   for(const_iterator iter=end();iter!=begin();){
     --iter;
-    sstr << (*iter).first->symbol;
+    sstr << (*iter).first->getSymbol();
     if((*iter).second>1)
       sstr << (*iter).second;
@@ -146,5 +160,5 @@
 
 bool Formula::hasElement(const string &shorthand) const{
-  element * element = World::getInstance().getPeriode()->FindElement(shorthand);
+  const element * element = World::getInstance().getPeriode()->FindElement(shorthand);
   return hasElement(element);
 }
@@ -167,5 +181,5 @@
 
 void Formula::operator+=(const string &shorthand){
-  element * element = World::getInstance().getPeriode()->FindElement(shorthand);
+  const element * element = World::getInstance().getPeriode()->FindElement(shorthand);
   operator+=(element);
 }
@@ -198,5 +212,5 @@
 
 void Formula::operator-=(const string &shorthand){
-  element * element = World::getInstance().getPeriode()->FindElement(shorthand);
+  const element * element = World::getInstance().getPeriode()->FindElement(shorthand);
   operator-=(element);
 }
@@ -220,5 +234,5 @@
 
 void Formula::addElements(const string &shorthand,unsigned int count){
-  element * element = World::getInstance().getPeriode()->FindElement(shorthand);
+  const element * element = World::getInstance().getPeriode()->FindElement(shorthand);
   addElements(element,count);
 }
@@ -252,5 +266,5 @@
 
 const unsigned int Formula::operator[](string shorthand) const{
-  element * element = World::getInstance().getPeriode()->FindElement(shorthand);
+  const element * element = World::getInstance().getPeriode()->FindElement(shorthand);
   return operator[](element);
 }
@@ -380,5 +394,5 @@
 result_type
 Formula::_iterator<result_type>::operator*(){
-  element *element = World::getInstance().getPeriode()->FindElement(pos+1);
+  const element *element = World::getInstance().getPeriode()->FindElement(pos+1);
   ASSERT(element,"Element with position of iterator not found");
   return make_pair(element,(*set)[pos]);
@@ -390,5 +404,5 @@
   // no one can keep this value around, so a static is ok to avoid temporaries
   static value_type value=make_pair(reinterpret_cast<element*>(0),0); // no default constructor for std::pair
-  element *element = World::getInstance().getPeriode()->FindElement(pos+1);
+  const element *element = World::getInstance().getPeriode()->FindElement(pos+1);
   ASSERT(element,"Element with position of iterator not found");
   value = make_pair(element,(*set)[pos]);
Index: src/Helpers/Assert.cpp
===================================================================
--- src/Helpers/Assert.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Assert.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Assert.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "Helpers/Assert.hpp"
Index: src/Helpers/Info.cpp
===================================================================
--- src/Helpers/Info.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Info.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Info.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Helpers/Log.cpp
===================================================================
--- src/Helpers/Log.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Log.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * log.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -18,4 +30,13 @@
 void setVerbosity(int verbosityLevel) {
   logger::getInstance().setVerbosity(verbosityLevel);
+}
+
+/**
+ * Gets verbosity for the error logger and the standard logger.
+ *
+ * \param int verbosity level
+ */
+int getVerbosity() {
+  return logger::getInstance().getVerbosity();
 }
 
Index: src/Helpers/Log.hpp
===================================================================
--- src/Helpers/Log.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Log.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -15,4 +15,5 @@
 class errorLogger & eLog();
 void setVerbosity(int verbosityLevel);
+int getVerbosity();
 bool DoLog(int verbose);
 bool DoeLog(int verbose);
Index: src/Helpers/Makefile.am
===================================================================
--- src/Helpers/Makefile.am	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Makefile.am	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -72,5 +72,7 @@
 	echo "" >  unity.cpp; \
 	list='$(HELPERSSOURCE)'; for file in $$list; do \
-	  echo "#include \"$(srcdir)/$$file\"" >> unity.cpp; \
+	  if [ "$$file" != "MemDebug.cpp" ]; then \
+		  echo "#include \"$(srcdir)/$$file\"" >> unity.cpp; \
+	 	fi; \
 	done;
 	
Index: src/Helpers/MemDebug.cpp
===================================================================
--- src/Helpers/MemDebug.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/MemDebug.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MemDebug.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 // NDEBUG implies NO_MEMDEBUG
Index: src/Helpers/Verbose.cpp
===================================================================
--- src/Helpers/Verbose.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/Verbose.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,3 +1,19 @@
-using namespace std;
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/** \file Verbose.cpp
+ *
+ * Function implementations for the class Verbose.
+ *
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -6,4 +22,6 @@
 #include "Helpers/Verbose.hpp"
 #include <iostream>
+
+using namespace std;
 
 /** Prints the tabs according to verbosity stored in the temporary constructed class.
Index: src/Helpers/errorlogger.cpp
===================================================================
--- src/Helpers/errorlogger.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/errorlogger.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * errorLogger.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -41,4 +53,14 @@
 void errorLogger::setVerbosity(int verbosityLevel) {
   verbosity = verbosityLevel;
+}
+
+/**
+ * Gets the verbosity.
+ *
+ * \return verbosity level
+ */
+int errorLogger::getVerbosity()
+{
+  return verbosity;
 }
 
Index: src/Helpers/errorlogger.hpp
===================================================================
--- src/Helpers/errorlogger.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/errorlogger.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -25,4 +25,5 @@
   static bool DoOutput();
   static void setVerbosity(int verbosityLevel);
+  static int getVerbosity();
 
 protected:
Index: src/Helpers/helpers.cpp
===================================================================
--- src/Helpers/helpers.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/helpers.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,18 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file helpers.cpp
  *
  * Implementation of some auxiliary functions for memory dis-/allocation and so on
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Helpers/logger.cpp
===================================================================
--- src/Helpers/logger.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/logger.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * logger.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -44,4 +56,14 @@
 
 /**
+ * Gets the verbosity.
+ *
+ * \return verbosity level
+ */
+int logger::getVerbosity()
+{
+  return verbosity;
+}
+
+/**
  * Operator for the Binary(arg) call.
  * Constructs temporary a Verbose class object, wherein the Binary is stored.
Index: src/Helpers/logger.hpp
===================================================================
--- src/Helpers/logger.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Helpers/logger.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -25,4 +25,5 @@
   static bool DoOutput();
   static void setVerbosity(int verbosityLevel);
+  static int getVerbosity();
 
 protected:
Index: c/Legacy/oldmenu.cpp
===================================================================
--- src/Legacy/oldmenu.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,1119 +1,0 @@
-/** \file menu.cpp
- * The class in this file is responsible for displaying the menu and enabling choices.
- *
- * This class is currently being refactored. Functions were copied from builder.cpp and are
- * to be imported into the menu class.
- *
- */
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Legacy/oldmenu.hpp"
-#include "analysis_bonds.hpp"
-#include "analysis_correlation.hpp"
-#include "World.hpp"
-#include "atom.hpp"
-#include "bond.hpp"
-#include "bondgraph.hpp"
-#include "boundary.hpp"
-#include "config.hpp"
-#include "element.hpp"
-#include "ellipsoid.hpp"
-#include "Helpers/helpers.hpp"
-#include "leastsquaremin.hpp"
-#include "linkedcell.hpp"
-#include "Helpers/Log.hpp"
-#include "memoryusageobserverunittest.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "vector_ops.hpp"
-#include "LinearAlgebra/Plane.hpp"
-#include "LinearAlgebra/Line.hpp"
-
-#include "UIElements/UIFactory.hpp"
-#include "UIElements/Dialog.hpp"
-#include "Menu/Menu.hpp"
-#include "Menu/TextMenu.hpp"
-#include "Menu/ActionMenuItem.hpp"
-#include "Menu/SeperatorItem.hpp"
-#include "Menu/DisplayMenuItem.hpp"
-#include "Menu/SubMenuItem.hpp"
-#include "Actions/MapOfActions.hpp"
-#include "Actions/MethodAction.hpp"
-#include "Actions/ErrorAction.hpp"
-#include "Views/StreamStringView.hpp"
-#include "Views/MethodStringView.hpp"
-
-
-#include <boost/bind.hpp>
-
-/* copied methods for refactoring */
-/*TODO: Move these methods inside menu class
- * and restructure menu class*/
-
-/********************************************* Subsubmenu routine ************************************/
-
-/** Submenu for adding atoms to the molecule.
- * \param *periode periodentafel
- * \param *molecule molecules with atoms
- */
-void oldmenu::AddAtoms(periodentafel *periode, molecule *mol)
-{
-  atom *first, *second, *third, *fourth;
-  Vector **atoms;
-  Vector x,y,z,n;  // coordinates for absolute point in cell volume
-  double a,b,c;
-  char choice;  // menu choice char
-  bool valid;
-  bool aborted;
-
-  Log() << Verbose(0) << "===========ADD ATOM============================" << endl;
-  Log() << Verbose(0) << " a - state absolute coordinates of atom" << endl;
-  Log() << Verbose(0) << " b - state relative coordinates of atom wrt to reference point" << endl;
-  Log() << Verbose(0) << " c - state relative coordinates of atom wrt to already placed atom" << endl;
-  Log() << Verbose(0) << " d - state two atoms, two angles and a distance" << endl;
-  Log() << Verbose(0) << " e - least square distance position to a set of atoms" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "Note: Specifiy angles in degrees not multiples of Pi!" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-      eLog() << Verbose(2) << "Not a valid choice." << endl;
-      break;
-      case 'a': // absolute coordinates of atom
-      {
-        Dialog *dialog = UIFactory::getInstance().makeDialog();
-        first = World::getInstance().createAtom();
-        std::vector<element *> elements;
-        dialog->queryVector("Please enter coordinates: ",&first->AtomicPosition,World::getInstance().getDomain(), false);
-        dialog->queryElement("Please choose element: ",&elements);
-        if(dialog->display()){
-          if (elements.size() == 1) {
-            first->setType(elements.at(0));
-            mol->AddAtom(first);  // add to molecule
-          } else {
-            DoeLog(1) && (eLog() << Verbose(1) << "Unequal to one element given for element of new atom." << endl);
-          }
-        }
-        else{
-          World::getInstance().destroyAtom(first);
-        }
-      }
-      break;
-
-      case 'b': // relative coordinates of atom wrt to reference point
-        first = World::getInstance().createAtom();
-        valid = true;
-        aborted = false;
-        do {
-          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
-          auto_ptr<Dialog> dialog(UIFactory::getInstance().makeDialog());
-          dialog->queryVector("Enter reference coordinates.",&x,World::getInstance().getDomain(), true);
-          dialog->queryVector("Enter relative coordinates.",&first->AtomicPosition,World::getInstance().getDomain(), false);
-          if((aborted = !dialog->display())){
-            continue;
-          }
-          first->AtomicPosition += x;
-        } while (!aborted && !(valid = mol->CheckBounds((const Vector *)&first->AtomicPosition)));
-        if(!aborted){
-          first->AtomicElement = periode->AskElement();  // give type
-          mol->AddAtom(first);  // add to molecule
-        }
-        else{
-          World::getInstance().destroyAtom(first);
-        }
-        break;
-
-      case 'c': // relative coordinates of atom wrt to already placed atom
-      {
-        first = World::getInstance().createAtom();
-        valid = true;
-        do {
-          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
-          auto_ptr<Dialog> dialog(UIFactory::getInstance().makeDialog());
-          second = mol->AskAtom("Enter atom number: ");
-          dialog->queryVector("Enter relative coordinates.",&first->AtomicPosition,World::getInstance().getDomain(), false);
-          dialog->display();
-          for (int i=NDIM;i--;) {
-            first->AtomicPosition[i] += second->AtomicPosition[i];
-          }
-        } while (!(valid = mol->CheckBounds((const Vector *)&first->AtomicPosition)));
-        first->AtomicElement = periode->AskElement();  // give type
-        mol->AddAtom(first);  // add to molecule
-      }
-      break;
-
-    case 'd': // two atoms, two angles and a distance
-        first = World::getInstance().createAtom();
-        valid = true;
-        do {
-          if (!valid) {
-            eLog() << Verbose(2) << "Resulting coordinates out of cell - " << first->AtomicPosition << endl;
-          }
-          Log() << Verbose(0) << "First, we need two atoms, the first atom is the central, while the second is the outer one." << endl;
-          second = mol->AskAtom("Enter central atom: ");
-          third = mol->AskAtom("Enter second atom (specifying the axis for first angle): ");
-          fourth = mol->AskAtom("Enter third atom (specifying a plane for second angle): ");
-          a = ask_value("Enter distance between central (first) and new atom: ");
-          b = ask_value("Enter angle between new, first and second atom (degrees): ");
-          b *= M_PI/180.;
-          bound(&b, 0., 2.*M_PI);
-          c = ask_value("Enter second angle between new and normal vector of plane defined by first, second and third atom (degrees): ");
-          c *= M_PI/180.;
-          bound(&c, -M_PI, M_PI);
-          Log() << Verbose(0) << "radius: " << a << "\t phi: " << b*180./M_PI << "\t theta: " << c*180./M_PI << endl;
-/*
-          second->Output(1,1,(ofstream *)&cout);
-          third->Output(1,2,(ofstream *)&cout);
-          fourth->Output(1,3,(ofstream *)&cout);
-          n.MakeNormalvector((const vector *)&second->x, (const vector *)&third->x, (const vector *)&fourth->x);
-          x.Copyvector(&second->x);
-          x.SubtractVector(&third->x);
-          x.Copyvector(&fourth->x);
-          x.SubtractVector(&third->x);
-
-          if (!z.SolveSystem(&x,&y,&n, b, c, a)) {
-            Log() << Verbose(0) << "Failure solving self-dependent linear system!" << endl;
-            continue;
-          }
-          Log() << Verbose(0) << "resulting relative coordinates: ";
-          z.Output();
-          Log() << Verbose(0) << endl;
-          */
-          // calc axis vector
-          x= second->AtomicPosition - third->AtomicPosition;
-          x.Normalize();
-          Log() << Verbose(0) << "x: " << x << endl;
-          z = Plane(second->AtomicPosition,third->AtomicPosition,fourth->AtomicPosition).getNormal();
-          Log() << Verbose(0) << "z: " << z << endl;
-          y = Plane(x,z,0).getNormal();
-          Log() << Verbose(0) << "y: " << y << endl;
-
-          // rotate vector around first angle
-          first->AtomicPosition = x;
-          first->AtomicPosition = Line(zeroVec,z).rotateVector(first->AtomicPosition,b - M_PI);
-          Log() << Verbose(0) << "Rotated vector: " << first->AtomicPosition << endl,
-          // remove the projection onto the rotation plane of the second angle
-          n = y;
-          n.Scale(first->AtomicPosition.ScalarProduct(y));
-          Log() << Verbose(0) << "N1: " << n << endl;
-          first->AtomicPosition -= n;
-          Log() << Verbose(0) << "Subtracted vector: " << first->AtomicPosition << endl;
-          n = z;
-          n.Scale(first->AtomicPosition.ScalarProduct(z));
-          Log() << Verbose(0) << "N2: " << n << endl;
-          first->AtomicPosition -= n;
-          Log() << Verbose(0) << "2nd subtracted vector: " << first->AtomicPosition << endl;
-
-          // rotate another vector around second angle
-          n = y;
-          n = Line(zeroVec,x).rotateVector(n,c - M_PI);
-          Log() << Verbose(0) << "2nd Rotated vector: " << n << endl;
-
-          // add the two linear independent vectors
-          first->AtomicPosition += n;
-          first->AtomicPosition.Normalize();
-          first->AtomicPosition.Scale(a);
-          first->AtomicPosition += second->AtomicPosition;
-
-          Log() << Verbose(0) << "resulting coordinates: " << first->AtomicPosition << endl;
-        } while (!(valid = mol->CheckBounds((const Vector *)&first->AtomicPosition)));
-        first->AtomicElement = periode->AskElement();  // give type
-        mol->AddAtom(first);  // add to molecule
-        break;
-
-      case 'e': // least square distance position to a set of atoms
-        first = World::getInstance().createAtom();
-        atoms = new (Vector*[128]);
-        valid = true;
-        for(int i=128;i--;)
-          atoms[i] = NULL;
-        int i=0, j=0;
-        Log() << Verbose(0) << "Now we need at least three molecules.\n";
-        do {
-          Log() << Verbose(0) << "Enter " << i+1 << "th atom: ";
-          cin >> j;
-          if (j != -1) {
-            second = mol->FindAtom(j);
-            atoms[i++] = &(second->AtomicPosition);
-          }
-        } while ((j != -1) && (i<128));
-        if (i >= 2) {
-          LSQdistance(first->AtomicPosition,(const Vector **)atoms, i);
-
-          Log() << Verbose(0) << first->AtomicPosition;
-          first->AtomicElement = periode->AskElement();  // give type
-          mol->AddAtom(first);  // add to molecule
-        } else {
-          World::getInstance().destroyAtom(first);
-          Log() << Verbose(0) << "Please enter at least two vectors!\n";
-        }
-        break;
-  };
-};
-
-/** Submenu for centering the atoms in the molecule.
- * \param *mol molecule with all the atoms
- */
-void oldmenu::CenterAtoms(molecule *mol)
-{
-  Vector x, y, helper;
-  char choice;  // menu choice char
-
-  Log() << Verbose(0) << "===========CENTER ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - on origin" << endl;
-  Log() << Verbose(0) << " b - on center of gravity" << endl;
-  Log() << Verbose(0) << " c - within box with additional boundary" << endl;
-  Log() << Verbose(0) << " d - within given simulation box" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-      Log() << Verbose(0) << "Not a valid choice." << endl;
-      break;
-    case 'a':
-      Log() << Verbose(0) << "Centering atoms in config file on origin." << endl;
-      mol->CenterOrigin();
-      break;
-    case 'b':
-      Log() << Verbose(0) << "Centering atoms in config file on center of gravity." << endl;
-      mol->CenterPeriodic();
-      break;
-    case 'c':
-      Log() << Verbose(0) << "Centering atoms in config file within given additional boundary." << endl;
-      for (int i=0;i<NDIM;i++) {
-        Log() << Verbose(0) << "Enter axis " << i << " boundary: ";
-        cin >> y[i];
-      }
-      mol->CenterEdge(&x);  // make every coordinate positive
-      mol->Center += y; // translate by boundary
-      helper = (2*y)+x;
-      mol->SetBoxDimension(&helper);  // update Box of atoms by boundary
-      break;
-    case 'd':
-      Log() << Verbose(1) << "Centering atoms in config file within given simulation box." << endl;
-      for (int i=0;i<NDIM;i++) {
-        Log() << Verbose(0) << "Enter axis " << i << " boundary: ";
-        cin >> x[i];
-      }
-      // update Box of atoms by boundary
-      mol->SetBoxDimension(&x);
-      // center
-      mol->CenterInBox();
-      break;
-  }
-};
-
-/** Submenu for aligning the atoms in the molecule.
- * \param *periode periodentafel
- * \param *mol molecule with all the atoms
- */
-void oldmenu::AlignAtoms(periodentafel *periode, molecule *mol)
-{
-  atom *first, *second, *third;
-  Vector x,n;
-  char choice;  // menu choice char
-
-  Log() << Verbose(0) << "===========ALIGN ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - state three atoms defining align plane" << endl;
-  Log() << Verbose(0) << " b - state alignment vector" << endl;
-  Log() << Verbose(0) << " c - state two atoms in alignment direction" << endl;
-  Log() << Verbose(0) << " d - align automatically by least square fit" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-    case 'a': // three atoms defining mirror plane
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter second atom: ");
-      third = mol->AskAtom("Enter third atom: ");
-
-      n = Plane(first->AtomicPosition,second->AtomicPosition,third->AtomicPosition).getNormal();
-      break;
-    case 'b': // normal vector of mirror plane
-    {
-      Dialog *dialog = UIFactory::getInstance().makeDialog();
-      dialog->queryVector("Enter normal vector of mirror plane.",&n,World::getInstance().getDomain(),false);
-      dialog->display();
-      delete dialog;
-      n.Normalize();
-    }
-    break;
-
-    case 'c': // three atoms defining mirror plane
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter second atom: ");
-
-      n = first->AtomicPosition - second->AtomicPosition;
-      n.Normalize();
-      break;
-    case 'd':
-      char shorthand[4];
-      Vector a;
-      struct lsq_params param;
-      do {
-        fprintf(stdout, "Enter the element of atoms to be chosen: ");
-        fscanf(stdin, "%3s", shorthand);
-      } while ((param.type = periode->FindElement(shorthand)) == NULL);
-      Log() << Verbose(0) << "Element is " << param.type->name << endl;
-      mol->GetAlignvector(&param);
-      for (int i=NDIM;i--;) {
-        x[i] = gsl_vector_get(param.x,i);
-        n[i] = gsl_vector_get(param.x,i+NDIM);
-      }
-      gsl_vector_free(param.x);
-      Log() << Verbose(0) << "Offset vector: " << x << endl;
-      n.Normalize();
-      break;
-  };
-  Log() << Verbose(0) << "Alignment vector: " << n << endl;
-  mol->Align(&n);
-};
-
-/** Submenu for mirroring the atoms in the molecule.
- * \param *mol molecule with all the atoms
- */
-void oldmenu::MirrorAtoms(molecule *mol)
-{
-  atom *first, *second, *third;
-  Vector n;
-  char choice;  // menu choice char
-
-  Log() << Verbose(0) << "===========MIRROR ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - state three atoms defining mirror plane" << endl;
-  Log() << Verbose(0) << " b - state normal vector of mirror plane" << endl;
-  Log() << Verbose(0) << " c - state two atoms in normal direction" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-    case 'a': // three atoms defining mirror plane
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter second atom: ");
-      third = mol->AskAtom("Enter third atom: ");
-
-      n = Plane(first->AtomicPosition,second->AtomicPosition,third->AtomicPosition).getNormal();
-      break;
-    case 'b': // normal vector of mirror plane
-    {
-      Dialog *dialog = UIFactory::getInstance().makeDialog();
-      dialog->queryVector("Enter normal vector of mirror plane.",&n,World::getInstance().getDomain(),false);
-      dialog->display();
-      delete dialog;
-      n.Normalize();
-    }
-    break;
-
-    case 'c': // three atoms defining mirror plane
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter second atom: ");
-
-      n = first->AtomicPosition - second->AtomicPosition;
-      n.Normalize();
-      break;
-  };
-  Log() << Verbose(0) << "Normal vector: " << n << endl;
-  mol->Mirror((const Vector *)&n);
-};
-
-/** Submenu for removing the atoms from the molecule.
- * \param *mol molecule with all the atoms
- */
-void oldmenu::RemoveAtoms(molecule *mol)
-{
-  atom *second;
-  int axis;
-  double tmp1, tmp2;
-  char choice;  // menu choice char
-
-  Log() << Verbose(0) << "===========REMOVE ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - state atom for removal by number" << endl;
-  Log() << Verbose(0) << " b - keep only in radius around atom" << endl;
-  Log() << Verbose(0) << " c - remove this with one axis greater value" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-    case 'a':
-      if (mol->RemoveAtom(mol->AskAtom("Enter number of atom within molecule: ")))
-        Log() << Verbose(1) << "Atom removed." << endl;
-      else
-        Log() << Verbose(1) << "Atom not found." << endl;
-      break;
-    case 'b':
-      {
-        second = mol->AskAtom("Enter number of atom as reference point: ");
-        Log() << Verbose(0) << "Enter radius: ";
-        cin >> tmp1;
-        molecule::iterator runner;
-        for (molecule::iterator iter = mol->begin(); iter != mol->end(); ) {
-          runner = iter++;
-          if ((*runner)->AtomicPosition.DistanceSquared((*runner)->AtomicPosition) > tmp1*tmp1) // distance to first above radius ...
-            mol->RemoveAtom((*runner));
-        }
-      }
-      break;
-    case 'c':
-      Log() << Verbose(0) << "Which axis is it: ";
-      cin >> axis;
-      Log() << Verbose(0) << "Lower boundary: ";
-      cin >> tmp1;
-      Log() << Verbose(0) << "Upper boundary: ";
-      cin >> tmp2;
-      molecule::iterator runner;
-      for (molecule::iterator iter = mol->begin(); iter != mol->end(); ) {
-        runner = iter++;
-        if (((*runner)->AtomicPosition[axis] < tmp1) || ((*runner)->AtomicPosition[axis] > tmp2)) {// out of boundary ...
-          //Log() << Verbose(0) << "Atom " << *(*runner) << " with " << (*runner)->x.x[axis] << " on axis " << axis << " is out of bounds [" << tmp1 << "," << tmp2 << "]." << endl;
-          mol->RemoveAtom((*runner));
-        }
-      }
-      break;
-  };
-  //mol->Output();
-  choice = 'r';
-};
-
-/** Submenu for measuring out the atoms in the molecule.
- * \param *periode periodentafel
- * \param *mol molecule with all the atoms
- */
-void oldmenu::MeasureAtoms(periodentafel *periode, molecule *mol, config *configuration)
-{
-  atom *first, *second, *third;
-  Vector x,y;
-  double min[256], tmp1, tmp2, tmp3;
-  int Z;
-  char choice;  // menu choice char
-
-  Log() << Verbose(0) << "===========MEASURE ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - calculate bond length between one atom and all others" << endl;
-  Log() << Verbose(0) << " b - calculate bond length between two atoms" << endl;
-  Log() << Verbose(0) << " c - calculate bond angle" << endl;
-  Log() << Verbose(0) << " d - calculate principal axis of the system" << endl;
-  Log() << Verbose(0) << " e - calculate volume of the convex envelope" << endl;
-  Log() << Verbose(0) << " f - calculate temperature from current velocity" << endl;
-  Log() << Verbose(0) << " g - output all temperatures per step from velocities" << endl;
-  Log() << Verbose(0) << " h - count the number of hydrogen bonds" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch(choice) {
-    default:
-      Log() << Verbose(1) << "Not a valid choice." << endl;
-      break;
-    case 'a':
-      first = mol->AskAtom("Enter first atom: ");
-      for (int i=MAX_ELEMENTS;i--;)
-        min[i] = 0.;
-
-      for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-        Z = (*iter)->getType()->Z;
-        tmp1 = 0.;
-        if (first != (*iter)) {
-          x = first->AtomicPosition - (*iter)->AtomicPosition;
-          tmp1 = x.Norm();
-        }
-        if ((tmp1 != 0.) && ((min[Z] == 0.) || (tmp1 < min[Z]))) min[Z] = tmp1;
-        //Log() << Verbose(0) << "Bond length between Atom " << first->nr << " and " << ((*iter)->nr << ": " << tmp1 << " a.u." << endl;
-      }
-      for (int i=MAX_ELEMENTS;i--;)
-        if (min[i] != 0.) Log() << Verbose(0) << "Minimum Bond length between " << first->getType()->name << " Atom " << first->nr << " and next Ion of type " << (periode->FindElement(i))->name << ": " << min[i] << " a.u." << endl;
-      break;
-
-    case 'b':
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter second atom: ");
-      for (int i=NDIM;i--;)
-        min[i] = 0.;
-      x = first->AtomicPosition - second->AtomicPosition;
-      tmp1 = x.Norm();
-      Log() << Verbose(1) << "Distance vector is " << x << "." << "/n"
-            << "Norm of distance is " << tmp1 << "." << endl;
-      break;
-
-    case 'c':
-      Log() << Verbose(0) << "Evaluating bond angle between three - first, central, last - atoms." << endl;
-      first = mol->AskAtom("Enter first atom: ");
-      second = mol->AskAtom("Enter central atom: ");
-      third  = mol->AskAtom("Enter last atom: ");
-      tmp1 = tmp2 = tmp3 = 0.;
-      x = first->AtomicPosition - second->AtomicPosition;
-      y = third->AtomicPosition - second->AtomicPosition;
-      Log() << Verbose(0) << "Bond angle between first atom Nr." << first->nr << ", central atom Nr." << second->nr << " and last atom Nr." << third->nr << ": ";
-      Log() << Verbose(0) << (acos(x.ScalarProduct(y)/(y.Norm()*x.Norm()))/M_PI*180.) << " degrees" << endl;
-      break;
-    case 'd':
-      Log() << Verbose(0) << "Evaluating prinicipal axis." << endl;
-      Log() << Verbose(0) << "Shall we rotate? [0/1]: ";
-      cin >> Z;
-      if ((Z >=0) && (Z <=1))
-        mol->PrincipalAxisSystem((bool)Z);
-      else
-        mol->PrincipalAxisSystem(false);
-      break;
-    case 'e':
-      {
-        Log() << Verbose(0) << "Evaluating volume of the convex envelope.";
-        class Tesselation *TesselStruct = NULL;
-        const LinkedCell *LCList = NULL;
-        LCList = new LinkedCell(mol, 10.);
-        Boundaries *BoundaryPoints = NULL;
-        FindConvexBorder(mol, BoundaryPoints TesselStruct, LCList, NULL);
-        double clustervolume = VolumeOfConvexEnvelope(TesselStruct, configuration);
-        Log() << Verbose(0) << "The tesselated surface area is " << clustervolume << "." << endl;\
-        delete(LCList);
-        delete(TesselStruct);
-      }
-      break;
-    case 'f':
-      mol->OutputTemperatureFromTrajectories((ofstream *)&cout, mol->MDSteps-1, mol->MDSteps);
-      break;
-    case 'g':
-      {
-        char filename[255];
-        Log() << Verbose(0) << "Please enter filename: " << endl;
-        cin >> filename;
-        Log() << Verbose(1) << "Storing temperatures in " << filename << "." << endl;
-        ofstream *output = new ofstream(filename, ios::trunc);
-        if (!mol->OutputTemperatureFromTrajectories(output, 0, mol->MDSteps))
-          Log() << Verbose(2) << "File could not be written." << endl;
-        else
-          Log() << Verbose(2) << "File stored." << endl;
-        output->close();
-        delete(output);
-      }
-      break;
-    case 'h':
-      {
-        int Z1;
-        cout << "Please enter first interface element: ";
-        cin >> Z1;
-        const element * InterfaceElement = World::getInstance().getPeriode()->FindElement(Z1);
-        int Z2;
-        cout << "Please enter second interface element: ";
-        cin >> Z2;
-        const element * InterfaceElement2 = World::getInstance().getPeriode()->FindElement(Z2);
-        cout << endl << "There are " << CountHydrogenBridgeBonds(World::getInstance().getMolecules(), InterfaceElement, InterfaceElement2) << " hydrogen bridges with connections to " << (InterfaceElement != 0 ? InterfaceElement->name : "None") << " and " << (InterfaceElement2 != 0 ? InterfaceElement2->name : "None") << "." << endl;
-      }
-      break;
-  }
-};
-
-/** Submenu for measuring out the atoms in the molecule.
- * \param *mol molecule with all the atoms
- * \param *configuration configuration structure for the to be written config files of all fragments
- */
-void oldmenu::FragmentAtoms(molecule *mol, config *configuration)
-{
-  int Order1;
-  std::string path;
-  clock_t start, end;
-
-  Log() << Verbose(0) << "Fragmenting molecule with current connection matrix ..." << endl;
-  Log() << Verbose(0) << "What's the desired bond order: ";
-  cin >> Order1;
-  DoLog(0) && (Log() << Verbose(0) << "What's the output path and prefix [e.g. /home/foo/BondFragment]: ");
-  cin >> path;
-  if (mol->hasBondStructure()) {
-    start = clock();
-    mol->FragmentMolecule(Order1, path);
-    end = clock();
-    Log() << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl;
-  } else
-    Log() << Verbose(0) << "Connection matrix has not yet been generated!" << endl;
-};
-
-/********************************************** Submenu routine **************************************/
-
-/** Submenu for manipulating atoms.
- * \param *periode periodentafel
- * \param *molecules list of molecules whose atoms are to be manipulated
- */
-void oldmenu::ManipulateAtoms(periodentafel *periode, MoleculeListClass *molecules, config *configuration)
-{
-  atom *first, *second;
-  molecule *mol = NULL;
-  Vector x,y,z,n; // coordinates for absolute point in cell volume
-  double *factor; // unit factor if desired
-  double bond, minBond;
-  char choice;  // menu choice char
-  bool valid;
-
-  Log() << Verbose(0) << "=========MANIPULATE ATOMS======================" << endl;
-  Log() << Verbose(0) << "a - add an atom" << endl;
-  Log() << Verbose(0) << "r - remove an atom" << endl;
-  Log() << Verbose(0) << "b - scale a bond between atoms" << endl;
-  Log() << Verbose(0) << "u - change an atoms element" << endl;
-  Log() << Verbose(0) << "l - measure lengths, angles, ... for an atom" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  if (molecules->NumberOfActiveMolecules() > 1)
-    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-      Log() << Verbose(0) << "Not a valid choice." << endl;
-      break;
-
-    case 'a': // add atom
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        AddAtoms(periode, mol);
-      }
-      break;
-
-    case 'b': // scale a bond
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        Log() << Verbose(0) << "Scaling bond length between two atoms." << endl;
-        first = mol->AskAtom("Enter first (fixed) atom: ");
-        second = mol->AskAtom("Enter second (shifting) atom: ");
-        minBond = 0.;
-        for (int i=NDIM;i--;)
-          minBond += (first->AtomicPosition[i]-second->AtomicPosition[i])*(first->AtomicPosition[i] - second->AtomicPosition[i]);
-        minBond = sqrt(minBond);
-        Log() << Verbose(0) << "Current Bond length between " << first->getType()->name << " Atom " << first->nr << " and " << second->getType()->name << " Atom " << second->nr << ": " << minBond << " a.u." << endl;
-        Log() << Verbose(0) << "Enter new bond length [a.u.]: ";
-        cin >> bond;
-        for (int i=NDIM;i--;) {
-          second->AtomicPosition[i] -= (second->AtomicPosition[i]-first->AtomicPosition[i])/minBond*(minBond-bond);
-        }
-        //Log() << Verbose(0) << "New coordinates of Atom " << second->nr << " are: ";
-        //second->Output(second->type->No, 1);
-      }
-      break;
-
-    case 'c': // unit scaling of the metric
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-       Log() << Verbose(0) << "Angstroem -> Bohrradius: 1.8897261\t\tBohrradius -> Angstroem: 0.52917721" << endl;
-       Log() << Verbose(0) << "Enter three factors: ";
-       factor = new double[NDIM];
-       cin >> factor[0];
-       cin >> factor[1];
-       cin >> factor[2];
-       valid = true;
-       mol->Scale((const double ** const)&factor);
-       delete[](factor);
-      }
-     break;
-
-    case 'l': // measure distances or angles
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        MeasureAtoms(periode, mol, configuration);
-      }
-      break;
-
-    case 'r': // remove atom
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        RemoveAtoms(mol);
-      }
-      break;
-
-    case 'u': // change an atom's element
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        int Z;
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        first = NULL;
-        do {
-          Log() << Verbose(0) << "Change the element of which atom: ";
-          cin >> Z;
-        } while ((first = mol->FindAtom(Z)) == NULL);
-        Log() << Verbose(0) << "New element by atomic number Z: ";
-        cin >> Z;
-        first->setType(Z);
-        Log() << Verbose(0) << "Atom " << first->nr << "'s element is " << first->getType()->name << "." << endl;
-      }
-      break;
-  }
-};
-
-void oldmenu::duplicateCell(MoleculeListClass *molecules, config *configuration) {
-  molecule *mol = NULL;
-  int axis,faktor,count,j;
-  atom *first = NULL;
-  const element **Elements;
-  Vector x,y;
-  Vector **vectors;
-
-  for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-    if ((*ListRunner)->ActiveFlag) {
-    mol = *ListRunner;
-    Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-    Log() << Verbose(0) << "State the axis [(+-)123]: ";
-    cin >> axis;
-    Log() << Verbose(0) << "State the factor: ";
-    cin >> faktor;
-    if (mol->getAtomCount() != 0) {  // if there is more than none
-      count = mol->getAtomCount();  // is changed becausing of adding, thus has to be stored away beforehand
-      Elements = new const element *[count];
-      vectors = new Vector *[count];
-      j = 0;
-      for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-        Elements[j] = (*iter)->AtomicElement;
-        vectors[j] = &(*iter)->AtomicPosition;
-        j++;
-      }
-      if (count != j)
-        eLog() << Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
-      x.Zero();
-      y.Zero();
-      y[abs(axis)-1] = World::getInstance().getDomain()[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] * abs(axis)/axis; // last term is for sign, first is for magnitude
-      for (int i=1;i<faktor;i++) {  // then add this list with respective translation factor times
-        x += y; // per factor one cell width further
-        for (int k=count;k--;) { // go through every atom of the original cell
-          first = World::getInstance().createAtom(); // create a new body
-          first->AtomicPosition = (*vectors[k]) + x;  // use coordinate of original atom
-          first->AtomicElement = Elements[k];  // insert original element
-          mol->AddAtom(first);        // and add to the molecule (which increments ElementsInMolecule, AtomCount, ...)
-        }
-      }
-      if (mol->hasBondStructure())
-        mol->CreateAdjacencyList(mol->BondDistance, configuration->GetIsAngstroem(), &BondGraph::CovalentMinMaxDistance, NULL);
-      // free memory
-      delete[](Elements);
-      delete[](vectors);
-      // correct cell size
-      if (axis < 0) { // if sign was negative, we have to translate everything
-        x = y;
-        x.Scale(-(faktor-1));
-        mol->Translate(&x);
-      }
-      World::getInstance().getDomain()[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] *= faktor;
-    }
-  }
-}
-
-/** Submenu for manipulating molecules.
- * \param *periode periodentafel
- * \param *molecules list of molecule to manipulate
- */
-void oldmenu::ManipulateMolecules(periodentafel *periode, MoleculeListClass *molecules, config *configuration)
-{
-  Vector x,y,z,n; // coordinates for absolute point in cell volume
-  char choice;  // menu choice char
-  molecule *mol = NULL;
-  MoleculeLeafClass *Subgraphs = NULL;
-
-  Log() << Verbose(0) << "=========MANIPULATE GLOBALLY===================" << endl;
-  Log() << Verbose(0) << "c - scale by unit transformation" << endl;
-  Log() << Verbose(0) << "d - duplicate molecule/periodic cell" << endl;
-  Log() << Verbose(0) << "f - fragment molecule many-body bond order style" << endl;
-  Log() << Verbose(0) << "g - center atoms in box" << endl;
-  Log() << Verbose(0) << "i - realign molecule" << endl;
-  Log() << Verbose(0) << "m - mirror all molecules" << endl;
-  Log() << Verbose(0) << "o - create connection matrix" << endl;
-  Log() << Verbose(0) << "t - translate molecule by vector" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  if (molecules->NumberOfActiveMolecules() > 1)
-    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
-  Log() << Verbose(0) << "INPUT: ";
-  cin >> choice;
-
-  switch (choice) {
-    default:
-      Log() << Verbose(0) << "Not a valid choice." << endl;
-      break;
-
-    case 'd': // duplicate the periodic cell along a given axis, given times
-      duplicateCell(molecules, configuration);
-      break;
-
-    case 'f':
-      FragmentAtoms(mol, configuration);
-      break;
-
-    case 'g': // center the atoms
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        CenterAtoms(mol);
-      }
-      break;
-
-    case 'i': // align all atoms
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        AlignAtoms(periode, mol);
-      }
-      break;
-
-    case 'm': // mirror atoms along a given axis
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        MirrorAtoms(mol);
-      }
-      break;
-
-    case 'o': // create the connection matrix
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-          mol = *ListRunner;
-          double bonddistance;
-          clock_t start,end;
-          Log() << Verbose(0) << "What's the maximum bond distance: ";
-          cin >> bonddistance;
-          start = clock();
-          mol->CreateAdjacencyList(bonddistance, configuration->GetIsAngstroem(), &BondGraph::CovalentMinMaxDistance, NULL);
-          end = clock();
-          Log() << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl;
-        }
-      break;
-
-    case 't': // translate all atoms
-      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-        if ((*ListRunner)->ActiveFlag) {
-        mol = *ListRunner;
-        Log() << Verbose(0) << "Current molecule is: " << mol->IndexNr << "\t" << mol->name << endl;
-        Dialog *dialog = UIFactory::getInstance().makeDialog();
-        dialog->queryVector("Enter translation vector.",&x,World::getInstance().getDomain(),false);
-        if(dialog->display()){
-          mol->Center += x;
-        }
-        delete dialog;
-     }
-     break;
-  }
-  // Free all
-  if (Subgraphs != NULL) {  // free disconnected subgraph list of DFS analysis was performed
-    while (Subgraphs->next != NULL) {
-      Subgraphs = Subgraphs->next;
-      delete(Subgraphs->previous);
-    }
-    delete(Subgraphs);
-  }
-};
-
-
-void oldmenu::SimpleAddMolecules(MoleculeListClass *molecules) {
-  molecule *srcmol = NULL, *destmol = NULL;
-  Dialog *dialog = UIFactory::getInstance().makeDialog();
-  dialog->queryMolecule("molecule-by-id",&destmol, MapOfActions::getInstance().getDescription("molecule-by-id"));
-  dialog->queryMolecule("molecule-by-id",&srcmol, MapOfActions::getInstance().getDescription("molecule-by-id"));
-  if(dialog->display()) {
-    molecules->SimpleAdd(srcmol, destmol);
-  }
-  else {
-    Log() << Verbose(0) << "Adding of molecules canceled" << endl;
-  }
-  delete dialog;
-}
-
-void oldmenu::embeddMolecules(MoleculeListClass *molecules) {
-  molecule *srcmol = NULL, *destmol = NULL;
-  Dialog *dialog = UIFactory::getInstance().makeDialog();
-  dialog->queryMolecule("molecule-by-id",&destmol, MapOfActions::getInstance().getDescription("molecule-by-id"));
-  dialog->queryMolecule("molecule-by-id",&srcmol, MapOfActions::getInstance().getDescription("molecule-by-id"));
-  if(dialog->display()) {
-    molecules->EmbedMerge(destmol, srcmol);
-  }
-  else {
-    Log() << Verbose(0) << "embedding of molecules canceled" << endl;
-  }
-
-
-}
-
-void oldmenu::multiMergeMolecules(MoleculeListClass *molecules) {
-  int nr;
-  molecule *mol = NULL;
-  do {
-    Log() << Verbose(0) << "Enter index of molecule to merge into: ";
-    cin >> nr;
-    mol = molecules->ReturnIndex(nr);
-  } while ((mol == NULL) && (nr != -1));
-  if (nr != -1) {
-    int N = molecules->ListOfMolecules.size()-1;
-    int *src = new int(N);
-    for(MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-      if ((*ListRunner)->IndexNr != nr)
-        src[N++] = (*ListRunner)->IndexNr;
-    molecules->SimpleMultiMerge(mol, src, N);
-    delete[](src);
-  }
-}
-
-void oldmenu::simpleMergeMolecules(MoleculeListClass *molecules) {
-  int src, dest;
-  molecule *srcmol = NULL, *destmol = NULL;
-  {
-    do {
-      Log() << Verbose(0) << "Enter index of destination molecule: ";
-      cin >> dest;
-      destmol = molecules->ReturnIndex(dest);
-    } while ((destmol == NULL) && (dest != -1));
-    do {
-      Log() << Verbose(0) << "Enter index of source molecule to merge into: ";
-      cin >> src;
-      srcmol = molecules->ReturnIndex(src);
-    } while ((srcmol == NULL) && (src != -1));
-    if ((src != -1) && (dest != -1))
-      molecules->SimpleMerge(srcmol, destmol);
-  }
-}
-
-/** Submenu for merging molecules.
- * \param *periode periodentafel
- * \param *molecules list of molecules to add to
- */
-void oldmenu::MergeMolecules(periodentafel *periode, MoleculeListClass *molecules)
-{
-  TextMenu *MergeMoleculesMenu = new TextMenu(Log() << Verbose(0), "Merge Molecules");
-
-  Action *simpleAddAction = new MethodAction("simpleAddAction",boost::bind(&oldmenu::SimpleAddMolecules,this,molecules),false);
-  new ActionMenuItem('a',"simple add of one molecule to another",MergeMoleculesMenu,simpleAddAction);
-
-  Action *embeddAction = new MethodAction("embeddAction",boost::bind(&oldmenu::embeddMolecules,this,molecules),false);
-  new ActionMenuItem('e',"embedding merge of two molecules",MergeMoleculesMenu,embeddAction);
-
-  Action *multiMergeAction = new MethodAction("multiMergeAction",boost::bind(&oldmenu::multiMergeMolecules,this,molecules),false);
-  new ActionMenuItem('m',"multi-merge of all molecules",MergeMoleculesMenu,multiMergeAction);
-
-  Action *scatterMergeAction = new ErrorAction("scatterMergeAction","Not Implemented yet",false);
-  new ActionMenuItem('s',"scatter merge of two molecules",MergeMoleculesMenu,scatterMergeAction);
-
-  Action *simpleMergeAction = new MethodAction("simpleMergeAction",boost::bind(&oldmenu::simpleMergeMolecules,this,molecules),false);
-  new ActionMenuItem('t',"simple merge of two molecules",MergeMoleculesMenu,simpleMergeAction);
-
-  Action *returnAction = new MethodAction("returnAction",boost::bind(&TextMenu::doQuit,MergeMoleculesMenu),false);
-  MenuItem *returnItem = new ActionMenuItem('q',"return to Main menu",MergeMoleculesMenu,returnAction);
-
-  MergeMoleculesMenu->addDefault(returnItem);
-
-  MergeMoleculesMenu->display();
-};
-
-
-/********************************************** Test routine **************************************/
-
-/** Is called always as option 'T' in the menu.
- * \param *molecules list of molecules
- */
-void oldmenu::testroutine(MoleculeListClass *molecules)
-{
-  // the current test routine checks the functionality of the KeySet&Graph concept:
-  // We want to have a multiindex (the KeySet) describing a unique subgraph
-  int i, comp, counter=0;
-
-  // create a clone
-  molecule *mol = NULL;
-  if (molecules->ListOfMolecules.size() != 0) // clone
-    mol = (molecules->ListOfMolecules.front())->CopyMolecule();
-  else {
-    eLog() << Verbose(0) << "I don't have anything to test on ... ";
-    performCriticalExit();
-    return;
-  }
-
-  // generate some KeySets
-  Log() << Verbose(0) << "Generating KeySets." << endl;
-  KeySet TestSets[mol->getAtomCount()+1];
-  i=1;
-  for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-    for (int j=0;j<i;j++) {
-      TestSets[j].insert((*iter)->nr);
-    }
-    i++;
-  }
-  Log() << Verbose(0) << "Testing insertion of already present item in KeySets." << endl;
-  KeySetTestPair test;
-  molecule::const_iterator iter = mol->begin();
-  if (iter != mol->end()) {
-    test = TestSets[mol->getAtomCount()-1].insert((*iter)->nr);
-    if (test.second) {
-      Log() << Verbose(1) << "Insertion worked?!" << endl;
-    } else {
-      Log() << Verbose(1) << "Insertion rejected: Present object is " << (*test.first) << "." << endl;
-    }
-  } else {
-    eLog() << Verbose(1) << "No atoms to test double insertion." << endl;
-  }
-
-  // constructing Graph structure
-  Log() << Verbose(0) << "Generating Subgraph class." << endl;
-  Graph Subgraphs;
-
-  // insert KeySets into Subgraphs
-  Log() << Verbose(0) << "Inserting KeySets into Subgraph class." << endl;
-  for (int j=0;j<mol->getAtomCount();j++) {
-    Subgraphs.insert(GraphPair (TestSets[j],pair<int, double>(counter++, 1.)));
-  }
-  Log() << Verbose(0) << "Testing insertion of already present item in Subgraph." << endl;
-  GraphTestPair test2;
-  test2 = Subgraphs.insert(GraphPair (TestSets[mol->getAtomCount()],pair<int, double>(counter++, 1.)));
-  if (test2.second) {
-    Log() << Verbose(1) << "Insertion worked?!" << endl;
-  } else {
-    Log() << Verbose(1) << "Insertion rejected: Present object is " << (*(test2.first)).second.first << "." << endl;
-  }
-
-  // show graphs
-  Log() << Verbose(0) << "Showing Subgraph's contents, checking that it's sorted." << endl;
-  Graph::iterator A = Subgraphs.begin();
-  while (A !=  Subgraphs.end()) {
-    Log() << Verbose(0) << (*A).second.first << ": ";
-    KeySet::iterator key = (*A).first.begin();
-    comp = -1;
-    while (key != (*A).first.end()) {
-      if ((*key) > comp)
-        Log() << Verbose(0) << (*key) << " ";
-      else
-        Log() << Verbose(0) << (*key) << "! ";
-      comp = (*key);
-      key++;
-    }
-    Log() << Verbose(0) << endl;
-    A++;
-  }
-  World::getInstance().destroyMolecule(mol);
-};
-
-oldmenu::oldmenu()
-{
-  // TODO Auto-generated constructor stub
-}
-
-oldmenu::~oldmenu()
-{
-  // TODO Auto-generated destructor stub
-}
Index: c/Legacy/oldmenu.hpp
===================================================================
--- src/Legacy/oldmenu.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/** \file menu.hpp
- * The class in this file is responsible for displaying the menu and enabling choices.
- *
- * This class is currently being refactored. Functions were copied from builder.cpp and are
- * to be imported into the menu class.
- *
- */
-
-#ifndef MENU_H_
-#define MENU_H_
-
-
-class MoleculeListClass;
-class periodentafel;
-class config;
-class molecule;
-
-class oldmenu
-{
-public:
-  oldmenu();
-  virtual ~oldmenu();
-
-  // methods taken from ManipulateMoleculse submenu
-  void duplicateCell(MoleculeListClass *molecules, config *configuration);
-
-  // methods taken from MergeMolecules submenu
-  void SimpleAddMolecules(MoleculeListClass *molecules);
-  void embeddMolecules(MoleculeListClass *molecules);
-  void multiMergeMolecules(MoleculeListClass *molecules);
-  void simpleMergeMolecules(MoleculeListClass *molecules);
-
-  void AddAtoms(periodentafel *, molecule *);
-  void AlignAtoms(periodentafel *, molecule *);
-  void CenterAtoms(molecule *);
-  void FragmentAtoms(molecule *, config *);
-  void ManipulateAtoms(periodentafel *, MoleculeListClass *, config *);
-  void MeasureAtoms(periodentafel *, molecule *, config *);
-  void MergeMolecules(periodentafel *, MoleculeListClass *);
-  void ManipulateMolecules(periodentafel *, MoleculeListClass *, config *);
-  void MirrorAtoms(molecule *);
-  void RemoveAtoms(molecule *);
-  void testroutine(MoleculeListClass *);
-};
-
-#endif /* MENU_H_ */
Index: src/LinearAlgebra/Line.cpp
===================================================================
--- src/LinearAlgebra/Line.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Line.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Line.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/Matrix.cpp
===================================================================
--- src/LinearAlgebra/Matrix.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Matrix.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Matrix.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "LinearAlgebra/Matrix.hpp"
@@ -108,4 +122,17 @@
 }
 
+void Matrix::rotation(const double x, const double y, const double z)
+{
+  set(0,0, cos(y)*cos(z));
+  set(0,1, cos(z)*sin(x)*sin(y) - cos(x)*sin(z));
+  set(0,2, cos(x)*cos(z)*sin(y) + sin(x) * sin(z));
+  set(1,0, cos(y)*sin(z));
+  set(1,1, cos(x)*cos(z) + sin(x)*sin(y)*sin(z));
+  set(1,2, -cos(z)*sin(x) + cos(x)*sin(y)*sin(z));
+  set(2,0, -sin(y));
+  set(2,1, cos(y)*sin(x));
+  set(2,2, cos(x)*cos(y));
+}
+
 Matrix &Matrix::operator=(const Matrix &src){
   if(&src!=this){
@@ -213,5 +240,5 @@
 
 
-void Matrix::transpose()
+Matrix &Matrix::transpose()
 {
   double tmp;
@@ -219,7 +246,8 @@
     for (int j=i+1;j<NDIM;j++) {
       tmp = at(j,i);
+      at(j,i) = at(i,j);
       at(i,j) = tmp;
-      at(j,i) = tmp;
-    }
+    }
+  return *this;
 }
 
@@ -253,5 +281,7 @@
   gsl_eigen_symmv_free(T);
   gsl_matrix_memcpy(content->content, evec);
+  gsl_matrix_free(evec);
   Vector evalues(gsl_vector_get(eval,0), gsl_vector_get(eval,1), gsl_vector_get(eval,2));
+  gsl_vector_free(eval);
   return evalues;
 }
@@ -315,9 +345,7 @@
 
 Vector operator*(const Matrix &mat,const Vector &vec){
-  gsl_vector *res = gsl_vector_calloc(NDIM);
-  gsl_blas_dgemv( CblasNoTrans, 1.0, mat.content->content, vec.content->content, 0.0, res);
-  VectorContent *content = new VectorContent();
-  content->content = res;
-  return Vector(content);
+  Vector res;
+  gsl_blas_dgemv( CblasNoTrans, 1.0, mat.content->content, vec.content->content, 0.0, res.content->content);
+  return res;
 }
 
Index: src/LinearAlgebra/Matrix.hpp
===================================================================
--- src/LinearAlgebra/Matrix.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Matrix.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -54,4 +54,11 @@
    */
   void zero();
+
+  /**
+   * Sets all matrix corresponding to a rotation matrix,
+   * first around the x-, then the y-, finally the z-axis
+   * with given angles.
+   */
+  void rotation(const double x, const double y, const double z);
 
   /**
@@ -113,5 +120,5 @@
    */
   Matrix transpose() const;
-  void transpose();
+  Matrix &transpose();
 
   // operators
Index: src/LinearAlgebra/Plane.cpp
===================================================================
--- src/LinearAlgebra/Plane.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Plane.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Plane.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/Space.cpp
===================================================================
--- src/LinearAlgebra/Space.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Space.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Space.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/Vector.cpp
===================================================================
--- src/LinearAlgebra/Vector.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/Vector.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file vector.cpp
  *
@@ -4,4 +11,9 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/VectorInterface.cpp
===================================================================
--- src/LinearAlgebra/VectorInterface.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/VectorInterface.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * VectorInterface.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "VectorInterface.hpp"
Index: src/LinearAlgebra/gslmatrix.cpp
===================================================================
--- src/LinearAlgebra/gslmatrix.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/gslmatrix.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * gslmatrix.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/gslvector.cpp
===================================================================
--- src/LinearAlgebra/gslvector.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/gslvector.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * gslvector.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/linearsystemofequations.cpp
===================================================================
--- src/LinearAlgebra/linearsystemofequations.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/linearsystemofequations.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * linearsystemofequations.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/LinearAlgebra/vector_ops.cpp
===================================================================
--- src/LinearAlgebra/vector_ops.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/LinearAlgebra/vector_ops.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * vector_ops.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Makefile.am	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -6,4 +6,5 @@
 ATOMSOURCE = \
   atom.cpp \
+  AtomicInfo.cpp \
   atom_atominfo.cpp \
   atom_bondedparticle.cpp \
@@ -16,4 +17,5 @@
 ATOMHEADER = \
   atom.hpp \
+  AtomicInfo.hpp \
   atom_atominfo.hpp \
   atom_bondedparticle.hpp \
@@ -77,4 +79,5 @@
   Descriptors/AtomIdDescriptor.cpp \
   Descriptors/AtomSelectionDescriptor.cpp \
+  Descriptors/AtomShapeDescriptor.cpp \
   Descriptors/AtomTypeDescriptor.cpp \
   Descriptors/MoleculeDescriptor.cpp \
@@ -89,4 +92,5 @@
   Descriptors/AtomIdDescriptor.hpp \
   Descriptors/AtomSelectionDescriptor.hpp \
+  Descriptors/AtomShapeDescriptor.hpp \
   Descriptors/AtomTypeDescriptor.hpp \
   Descriptors/MoleculeDescriptor.hpp \
@@ -371,11 +375,11 @@
 
 $(srcdir)/version.c: $(srcdir)/.git-version
-	echo "const char *ESPACKVersion = \"$(PACKAGE_NAME) -- git version: "`cat $(srcdir)/.git-version`"\";" > $@
+	echo "const char *MOLECUILDERVERSION = \"$(PACKAGE_NAME) version "`cat $(srcdir)/.git-version`"\";" > $@
 
 
 unity.cpp: ${MOLECUILDERSOURCE} ${MOLECUILDERHEADER}
-	echo "" >  unity.cpp; \
+	echo "#include \"$(srcdir)/Helpers/MemDebug.cpp\"" >  unity.cpp; \
 	list='$(MOLECUILDERSOURCE)'; for file in $$list; do \
-	  echo "#include \"$(srcdir)/$$file\"" >> unity.cpp; \
+  	echo "#include \"$(srcdir)/$$file\"" >> unity.cpp; \
 	done; \
 	subdirs='$(SUBDIRS)';for directory in $$subdirs; do\
Index: src/Parser/ChangeTracker.cpp
===================================================================
--- src/Parser/ChangeTracker.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/ChangeTracker.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ChangeTracker.cpp
@@ -6,5 +13,11 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
+
 #include "Parser/ChangeTracker.hpp"
 #include "Patterns/Singleton_impl.hpp"
Index: src/Parser/FormatParser.cpp
===================================================================
--- src/Parser/FormatParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/FormatParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * FormatParser.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Parser/FormatParserStorage.cpp
===================================================================
--- src/Parser/FormatParserStorage.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/FormatParserStorage.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file FormatParserStorage.cpp
  *
@@ -5,4 +12,11 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include <iostream>
Index: src/Parser/MpqcParser.cpp
===================================================================
--- src/Parser/MpqcParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/MpqcParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MpqcParser.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "MpqcParser.hpp"
Index: src/Parser/PcpParser.cpp
===================================================================
--- src/Parser/PcpParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/PcpParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PcpParser.cpp
@@ -6,7 +13,15 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
 #include <iostream>
 #include <iomanip>
 
+//#include "Actions/FragmentationAction/SubgraphDissectionAction.hpp"
 #include "atom.hpp"
 #include "config.hpp"
@@ -349,5 +364,5 @@
   // 4. dissect the molecule into connected subgraphs
   // don't do this here ...
-  //MolList->DissectMoleculeIntoConnectedSubgraphs(mol,this);
+  //FragmentationSubgraphDissection();
   //delete(mol);
 
@@ -490,5 +505,5 @@
   PlaneWaveSpecifics.MaxPsiDouble = PlaneWaveSpecifics.PsiMaxNoDown = PlaneWaveSpecifics.PsiMaxNoUp = PlaneWaveSpecifics.PsiType = 0;
   for (vector<atom *>::iterator runner = allatoms.begin(); runner != allatoms.end(); ++runner) {
-    PlaneWaveSpecifics.MaxPsiDouble += (*runner)->getType()->NoValenceOrbitals;
+    PlaneWaveSpecifics.MaxPsiDouble += (*runner)->getType()->getNoValenceOrbitals();
   }
   cout << PlaneWaveSpecifics.MaxPsiDouble << endl;
@@ -525,5 +540,5 @@
   // insert all found elements into the map
   for (vector<atom *>::iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
-    Inserter = PresentElements.insert(pair<int, int>((*AtomRunner)->getType()->Z, 1));
+    Inserter = PresentElements.insert(pair<int, int>((*AtomRunner)->getType()->getAtomicNumber(), 1));
     if (!Inserter.second) // increase if present
       Inserter.first->second += 1;
@@ -540,5 +555,5 @@
     const element * const elemental = World::getInstance().getPeriode()->FindElement(iter->first);
     ZtoIndexMap.insert( pair<int,int> (iter->first, counter) );
-    *file << "Ion_Type" << counter++ << "\t" << iter->second << "\t" << elemental->Z << "\t1.0\t3\t3\t" << fixed << setprecision(11) << showpoint << elemental->mass << "\t" << elemental->name << "\t" << elemental->symbol <<endl;
+    *file << "Ion_Type" << counter++ << "\t" << iter->second << "\t" << elemental->getAtomicNumber() << "\t1.0\t3\t3\t" << fixed << setprecision(11) << showpoint << elemental->getMass() << "\t" << elemental->getName() << "\t" << elemental->getSymbol() <<endl;
   }
 }
@@ -556,8 +571,8 @@
   int nr = 0;
   for (vector<atom *>::iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
-    Inserter = ZtoCountMap.insert( pair<int, int>((*AtomRunner)->getType()->Z, 1) );
+    Inserter = ZtoCountMap.insert( pair<int, int>((*AtomRunner)->getType()->getAtomicNumber(), 1) );
     if (!Inserter.second)
       Inserter.first->second += 1;
-    const int Z = (*AtomRunner)->getType()->Z;
+    const int Z = (*AtomRunner)->getType()->getAtomicNumber();
     *file << "Ion_Type" << ZtoIndexMap[Z] << "_" << ZtoCountMap[Z] << "\t"  << fixed << setprecision(9) << showpoint;
     *file << (*AtomRunner)->at(0) << "\t" << (*AtomRunner)->at(1) << "\t" << (*AtomRunner)->at(2);
Index: src/Parser/TremoloParser.cpp
===================================================================
--- src/Parser/TremoloParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/TremoloParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TremoloParser.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/Parser/XyzParser.cpp
===================================================================
--- src/Parser/XyzParser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Parser/XyzParser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * XyzParser.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -51,4 +63,5 @@
   newmol = World::getInstance().createMolecule();
   newmol->ActiveFlag = true;
+  // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
   World::getInstance().getMolecules()->insert(newmol);
   for (int i = 0; i < numberOfAtoms; i++) {
@@ -86,5 +99,5 @@
   vector<atom*> atoms = World::getInstance().getAllAtoms();
   for(vector<atom*>::iterator it = atoms.begin(); it != atoms.end(); it++) {
-    *file << noshowpoint << (*it)->getType()->symbol << "\t" << (*it)->at(0) << "\t" << (*it)->at(1) << "\t" << (*it)->at(2) << endl;
+    *file << noshowpoint << (*it)->getType()->getSymbol() << "\t" << (*it)->at(0) << "\t" << (*it)->at(1) << "\t" << (*it)->at(2) << endl;
   }
 }
Index: src/Patterns/ObservedContainer_impl.hpp
===================================================================
--- src/Patterns/ObservedContainer_impl.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Patterns/ObservedContainer_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -186,3 +186,30 @@
 }
 
+/************ Explicit instantiation ***************/
+
+#define CONSTRUCT_OBSERVEDCONTAINER(name) \
+    template ObservedContainer< name >& ObservedContainer< name >::operator=(const ObservedContainer< name >&); \
+    template ObservedContainer< name >::iterator ObservedContainer< name >::begin(); \
+    template ObservedContainer< name >::const_iterator ObservedContainer< name >::begin() const; \
+    template ObservedContainer< name >::iterator ObservedContainer< name >::end(); \
+    template ObservedContainer< name >::const_iterator ObservedContainer< name >::end() const; \
+    template ObservedContainer< name >::reverse_iterator ObservedContainer< name >::rbegin(); \
+    template ObservedContainer< name >::const_reverse_iterator ObservedContainer< name >::rbegin() const; \
+    template ObservedContainer< name >::reverse_iterator ObservedContainer< name >::rend(); \
+    template ObservedContainer< name >::const_reverse_iterator ObservedContainer< name >::rend() const; \
+    template bool ObservedContainer< name >::empty() const; \
+    template size_t ObservedContainer< name >::size() const; \
+    template size_t ObservedContainer< name >::max_size() const; \
+    template ObservedContainer< name >::mapped_type &ObservedContainer< name >::operator[](const key_type&); \
+    template std::pair<ObservedContainer< name >::iterator,bool> ObservedContainer< name >::insert (const value_type&); \
+    template size_t ObservedContainer< name >::erase ( const key_type& x ); \
+    template void ObservedContainer< name >::clear(); \
+    template ObservedContainer< name >::iterator ObservedContainer< name >::find ( const key_type& x ); \
+    template ObservedContainer< name >::const_iterator ObservedContainer< name >::find ( const key_type& x ) const; \
+    template size_t ObservedContainer< name >::count ( const key_type& x ) const; \
+    template ObservedContainer< name >::internal_iterator ObservedContainer< name >::begin_internal(); \
+    template ObservedContainer< name >::reverse_internal_iterator ObservedContainer< name >::rbegin_internal(); \
+    template ObservedContainer< name >::internal_iterator ObservedContainer< name >::end_internal(); \
+    template ObservedContainer< name >::reverse_internal_iterator ObservedContainer< name >::rend_internal(); \
+
 #endif /* OBSERVEDCONTAINER_IMPL_HPP_ */
Index: src/Patterns/Observer.cpp
===================================================================
--- src/Patterns/Observer.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Patterns/Observer.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Observer.cpp
@@ -6,8 +13,12 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
 #include "Observer.hpp"
-
 
 #include <iostream>
Index: src/PointCloud.cpp
===================================================================
--- src/PointCloud.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/PointCloud.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PointCloud.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "PointCloud.hpp"
Index: src/Shapes/BaseShapes.cpp
===================================================================
--- src/Shapes/BaseShapes.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/BaseShapes.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BaseShapes_impl.cpp
@@ -6,7 +13,17 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
 #include "Shapes/BaseShapes.hpp"
 #include "Shapes/BaseShapes_impl.hpp"
 
+#include <cmath>
+
+#include "Helpers/Assert.hpp"
 #include "LinearAlgebra/Vector.hpp"
 
@@ -14,4 +31,33 @@
   return point.NormSquared()<=1;
 }
+
+
+/**
+ * algorithm taken from http://www.cgafaq.info/wiki/Evenly_distributed_points_on_sphere
+ * \param N number of points on surface
+ */
+std::vector<Vector> Sphere_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface;
+
+  const double dlength = M_PI*(3.-sqrt(5.));
+  double length = 0;
+  const double dz = 2.0/N;
+  double z = 1. - dz/2.;
+  Vector point;
+  for (int ka = 0; ka<N; ka++){
+    const double r = sqrt(1.-z*z);
+    point.Zero();
+    point[0] = cos(length)*r;
+    point[1] = sin(length)*r;
+    point[2] = z;
+    PointsOnSurface.push_back(point);
+    z = z - dz;
+    length = length + dlength;
+  }
+
+  ASSERT(PointsOnSurface.size() == N, "Sphere_impl::getHomogeneousPointsOnSurface() did not create enough points.");
+  return PointsOnSurface;
+}
+
 
 Shape Sphere(){
@@ -21,9 +67,18 @@
 
 bool Cuboid_impl::isInside(const Vector &point){
-  return point[0]<=1 && point[1]<=1 && point[2]<=1;
+  return (point[0]>=0 && point[0]<=1) && (point[1]>=0 && point[1]<=1) && (point[2]>=0 && point[2]<=1);
+}
+
+/**
+ * \param N number of points on surface
+ */
+std::vector<Vector> Cuboid_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface;
+  ASSERT(false, "Cuboid_impl::getHomogeneousPointsOnSurface() not implemented yet");
+  return PointsOnSurface;
 }
 
 Shape Cuboid(){
-  Shape::impl_ptr impl = Shape::impl_ptr(new Sphere_impl());
+  Shape::impl_ptr impl = Shape::impl_ptr(new Cuboid_impl());
   return Shape(impl);
 }
Index: src/Shapes/BaseShapes_impl.hpp
===================================================================
--- src/Shapes/BaseShapes_impl.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/BaseShapes_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -13,8 +13,10 @@
 class Sphere_impl : public Shape_impl {
   virtual bool isInside(const Vector &point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 };
 
 class Cuboid_impl : public Shape_impl {
   virtual bool isInside(const Vector &point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 };
 
Index: src/Shapes/Shape.cpp
===================================================================
--- src/Shapes/Shape.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/Shape.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Shape.cpp
@@ -6,6 +13,17 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
 #include "Shape.hpp"
 #include "Shape_impl.hpp"
+
+
+#include "Helpers/Assert.hpp"
+#include "LinearAlgebra/Vector.hpp"
 
 Shape::Shape(const Shape& src) :
@@ -17,4 +35,8 @@
 bool Shape::isInside(const Vector &point) const{
   return impl->isInside(point);
+}
+
+std::vector<Vector> Shape::getHomogeneousPointsOnSurface(const int N) const {
+  return impl->getHomogeneousPointsOnSurface(N);
 }
 
@@ -65,4 +87,22 @@
 }
 
+std::vector<Vector> AndShape_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface_lhs = lhs->getHomogeneousPointsOnSurface(N);
+  std::vector<Vector> PointsOnSurface_rhs = rhs->getHomogeneousPointsOnSurface(N);
+  std::vector<Vector> PointsOnSurface;
+
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface_lhs.begin(); iter != PointsOnSurface_lhs.end(); ++iter) {
+    if (rhs->isInside(*iter))
+      PointsOnSurface.push_back(*iter);
+  }
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface_rhs.begin(); iter != PointsOnSurface_rhs.end(); ++iter) {
+    if (lhs->isInside(*iter))
+      PointsOnSurface.push_back(*iter);
+  }
+
+  return PointsOnSurface;
+}
+
+
 Shape operator&&(const Shape &lhs,const Shape &rhs){
   Shape::impl_ptr newImpl = Shape::impl_ptr(new AndShape_impl(getShapeImpl(lhs),getShapeImpl(rhs)));
@@ -80,4 +120,21 @@
 bool OrShape_impl::isInside(const Vector &point){
   return rhs->isInside(point) || lhs->isInside(point);
+}
+
+std::vector<Vector> OrShape_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface_lhs = lhs->getHomogeneousPointsOnSurface(N);
+  std::vector<Vector> PointsOnSurface_rhs = rhs->getHomogeneousPointsOnSurface(N);
+  std::vector<Vector> PointsOnSurface;
+
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface_lhs.begin(); iter != PointsOnSurface_lhs.end(); ++iter) {
+    if (!rhs->isInside(*iter))
+      PointsOnSurface.push_back(*iter);
+  }
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface_rhs.begin(); iter != PointsOnSurface_rhs.end(); ++iter) {
+    if (!lhs->isInside(*iter))
+      PointsOnSurface.push_back(*iter);
+  }
+
+  return PointsOnSurface;
 }
 
@@ -99,4 +156,9 @@
 }
 
+std::vector<Vector> NotShape_impl::getHomogeneousPointsOnSurface(const int N) const {
+  // surfaces are the same, only normal direction is different
+  return arg->getHomogeneousPointsOnSurface(N);
+}
+
 Shape operator!(const Shape &arg){
   Shape::impl_ptr newImpl = Shape::impl_ptr(new NotShape_impl(getShapeImpl(arg)));
Index: src/Shapes/Shape.hpp
===================================================================
--- src/Shapes/Shape.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/Shape.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -10,4 +10,6 @@
 
 #include <boost/shared_ptr.hpp>
+
+#include <vector>
 
 class Vector;
@@ -25,4 +27,5 @@
 
   bool isInside(const Vector &point) const;
+  std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 
   Shape &operator=(const Shape& rhs);
Index: src/Shapes/ShapeOps.cpp
===================================================================
--- src/Shapes/ShapeOps.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/ShapeOps.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ShapeOps.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "Shapes/ShapeOps.hpp"
@@ -25,4 +39,13 @@
 }
 
+std::vector<Vector> Resize_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface = arg->getHomogeneousPointsOnSurface(N);
+  for(std::vector<Vector>::iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    *iter *= size;
+  }
+  return PointsOnSurface;
+}
+
+
 Shape resize(const Shape &arg,double size){
   Shape::impl_ptr impl = Shape::impl_ptr(new Resize_impl(getShapeImpl(arg),size));
@@ -40,4 +63,12 @@
 bool Translate_impl::isInside(const Vector& point){
   return arg->isInside(point-offset);
+}
+
+std::vector<Vector> Translate_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface = arg->getHomogeneousPointsOnSurface(N);
+  for(std::vector<Vector>::iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    *iter += offset;
+  }
+  return PointsOnSurface;
 }
 
@@ -68,4 +99,12 @@
 }
 
+std::vector<Vector> Stretch_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface = arg->getHomogeneousPointsOnSurface(N);
+  for(std::vector<Vector>::iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    (*iter).ScaleAll(reciFactors);
+  }
+  return PointsOnSurface;
+}
+
 Shape stretch(const Shape &arg, const Vector &factors){
   Shape::impl_ptr impl = Shape::impl_ptr(new Stretch_impl(getShapeImpl(arg),factors));
@@ -87,4 +126,12 @@
 }
 
+std::vector<Vector> Transform_impl::getHomogeneousPointsOnSurface(const int N) const {
+  std::vector<Vector> PointsOnSurface = arg->getHomogeneousPointsOnSurface(N);
+  for(std::vector<Vector>::iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    *iter = transformation * (*iter);
+  }
+  return PointsOnSurface;
+}
+
 Shape transform(const Shape &arg, const Matrix &transformation){
   Shape::impl_ptr impl = Shape::impl_ptr(new Transform_impl(getShapeImpl(arg),transformation));
Index: src/Shapes/ShapeOps_impl.hpp
===================================================================
--- src/Shapes/ShapeOps_impl.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/ShapeOps_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -19,4 +19,5 @@
   virtual ~Resize_impl();
   virtual bool isInside(const Vector& point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr arg;
@@ -30,4 +31,5 @@
   virtual ~Translate_impl();
   virtual bool isInside(const Vector& point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr arg;
@@ -41,4 +43,5 @@
   virtual ~Stretch_impl();
   virtual bool isInside(const Vector& point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr arg;
@@ -53,4 +56,5 @@
   virtual ~Transform_impl();
   virtual bool isInside(const Vector& point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr arg;
Index: src/Shapes/Shape_impl.hpp
===================================================================
--- src/Shapes/Shape_impl.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/Shapes/Shape_impl.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -9,5 +9,9 @@
 #define SHAPE_IMPL_HPP_
 
+#include <vector>
+
 #include "Shapes/Shape.hpp"
+
+class Vector;
 
 class Shape_impl {
@@ -16,4 +20,5 @@
   virtual ~Shape_impl(){};
   virtual bool isInside(const Vector &point)=0;
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const=0;
 };
 
@@ -23,4 +28,8 @@
     return true;
   }
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const {
+    std::vector<Vector> PointsOnSurface;
+    return PointsOnSurface;
+  }
 };
 
@@ -28,4 +37,8 @@
   virtual bool isInside(const Vector &point){
     return false;
+  }
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const {
+    std::vector<Vector> PointsOnSurface;
+    return PointsOnSurface;
   }
 };
@@ -36,4 +49,5 @@
   virtual ~AndShape_impl();
   virtual bool isInside(const Vector &point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr lhs;
@@ -46,4 +60,5 @@
   virtual ~OrShape_impl();
   virtual bool isInside(const Vector &point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr lhs;
@@ -56,4 +71,5 @@
   virtual ~NotShape_impl();
   virtual bool isInside(const Vector &point);
+  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const int N) const;
 private:
   Shape::impl_ptr arg;
Index: src/TesselPoint.cpp
===================================================================
--- src/TesselPoint.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/TesselPoint.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TesselPoint.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "TesselPoint.hpp"
Index: src/ThermoStatContainer.cpp
===================================================================
--- src/ThermoStatContainer.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/ThermoStatContainer.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ThermoStatContainer.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include <cstring>
Index: src/UIElements/CommandLineUI/CommandLineDialog.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CommandLineDialog.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CommandLineStatusIndicator.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/CommandLineUI/CommandLineUIFactory.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineUIFactory.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/CommandLineUI/CommandLineUIFactory.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CommandLineUIFactory.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/CommandLineUI/CommandLineWindow.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineWindow.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/CommandLineUI/CommandLineWindow.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CommandLineWindow.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Dialog.cpp
===================================================================
--- src/UIElements/Dialog.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Dialog.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Dialog.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Dialog.hpp
===================================================================
--- src/UIElements/Dialog.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Dialog.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -255,5 +255,5 @@
     virtual void setResult();
   protected:
-    element * tmp;
+    const element * tmp;
   };
 
@@ -265,6 +265,6 @@
     virtual void setResult();
   protected:
-    element *temp;
-    std::vector<element *> tmp;
+    const element *temp;
+    std::vector<const element *> tmp;
   };
 
Index: src/UIElements/MainWindow.cpp
===================================================================
--- src/UIElements/MainWindow.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/MainWindow.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Window.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/ActionMenuItem.cpp
===================================================================
--- src/UIElements/Menu/ActionMenuItem.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/ActionMenuItem.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ActionMenuItem.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/DisplayMenuItem.cpp
===================================================================
--- src/UIElements/Menu/DisplayMenuItem.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/DisplayMenuItem.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * DisplayMenuItem.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/Menu.cpp
===================================================================
--- src/UIElements/Menu/Menu.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/Menu.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * Menu.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/MenuItem.cpp
===================================================================
--- src/UIElements/Menu/MenuItem.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/MenuItem.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MenuItem.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/QT4/QTMenu.cpp
===================================================================
--- src/UIElements/Menu/QT4/QTMenu.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/QT4/QTMenu.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTMenu.cpp
@@ -6,7 +13,15 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Menu/QT4/QTMenu.hpp"
 
 #include <Qt/qaction.h>
+
+#include "Helpers/MemDebug.hpp"
+
 #include "Menu/MenuItem.hpp"
 
Index: src/UIElements/Menu/SeperatorItem.cpp
===================================================================
--- src/UIElements/Menu/SeperatorItem.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/SeperatorItem.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SeperatorItem.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/SubMenuItem.cpp
===================================================================
--- src/UIElements/Menu/SubMenuItem.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/SubMenuItem.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SubMenuItem.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Menu/TextMenu.cpp
===================================================================
--- src/UIElements/Menu/TextMenu.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Menu/TextMenu.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TextMenu.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/QT4/QTDialog.cpp
===================================================================
--- src/UIElements/QT4/QTDialog.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/QT4/QTDialog.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTDialog.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "UIElements/QT4/QTDialog.hpp"
@@ -554,5 +566,5 @@
   {
     stringstream sstr;
-    sstr << (*iter).first << "\t" << (*iter).second->name;
+    sstr << (*iter).first << "\t" << (*iter).second->getName();
     inputBox->addItem(QString(sstr.str().c_str()),QVariant((*iter).first));
   }
@@ -589,5 +601,5 @@
   {
     stringstream sstr;
-    sstr << (*iter).first << "\t" << (*iter).second->name;
+    sstr << (*iter).first << "\t" << (*iter).second->getName();
     inputBox->addItem(QString(sstr.str().c_str()),QVariant((*iter).first));
   }
@@ -816,5 +828,5 @@
 }
 
-ElementQTQueryPipe::ElementQTQueryPipe(element **_content, QTDialog *_dialog, QComboBox *_theBox) :
+ElementQTQueryPipe::ElementQTQueryPipe(const element **_content, QTDialog *_dialog, QComboBox *_theBox) :
   content(_content),
   dialog(_dialog),
@@ -832,5 +844,5 @@
 }
 
-ElementsQTQueryPipe::ElementsQTQueryPipe(std::vector<element *>*_content, QTDialog *_dialog, QComboBox *_theBox) :
+ElementsQTQueryPipe::ElementsQTQueryPipe(std::vector<const element *>*_content, QTDialog *_dialog, QComboBox *_theBox) :
   content(_content),
   dialog(_dialog),
@@ -844,5 +856,5 @@
   QVariant data = theBox->itemData(newIndex);
   int idx = data.toInt();
-  element *elemental = World::getInstance().getPeriode()->FindElement(idx);
+  const element *elemental = World::getInstance().getPeriode()->FindElement(idx);
   if(elemental)
     (*content).push_back(elemental);
Index: src/UIElements/QT4/QTDialog.hpp
===================================================================
--- src/UIElements/QT4/QTDialog.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/QT4/QTDialog.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -451,5 +451,5 @@
   Q_OBJECT
 public:
-  ElementQTQueryPipe(element **_content, QTDialog *_dialog, QComboBox *_theBox);
+  ElementQTQueryPipe(const element **_content, QTDialog *_dialog, QComboBox *_theBox);
   virtual ~ElementQTQueryPipe();
 
@@ -458,5 +458,5 @@
 
 private:
-  element **content;
+  const element **content;
   QTDialog *dialog;
   QComboBox *theBox;
@@ -466,5 +466,5 @@
   Q_OBJECT
 public:
-  ElementsQTQueryPipe(std::vector<element *>*_content, QTDialog *_dialog, QComboBox *_theBox);
+  ElementsQTQueryPipe(std::vector<const element *>*_content, QTDialog *_dialog, QComboBox *_theBox);
   virtual ~ElementsQTQueryPipe();
 
@@ -473,5 +473,5 @@
 
 private:
-  std::vector<element *>*content;
+  std::vector<const element *>*content;
   QTDialog *dialog;
   QComboBox *theBox;
Index: src/UIElements/QT4/QTMainWindow.cpp
===================================================================
--- src/UIElements/QT4/QTMainWindow.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/QT4/QTMainWindow.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTMainWindow.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "QTMainWindow.hpp"
@@ -19,4 +31,6 @@
 #include<boost/bind.hpp>
 
+#include "Helpers/MemDebug.hpp"
+
 #include "atom.hpp"
 #include "molecule.hpp"
@@ -32,6 +46,4 @@
 #include "Views/QT4/QTMoleculeView.hpp"
 #include "Views/QT4/QTStatusBar.hpp"
-#include "Helpers/MemDebug.hpp"
-
 
 using namespace std;
Index: src/UIElements/QT4/QTUIFactory.cpp
===================================================================
--- src/UIElements/QT4/QTUIFactory.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/QT4/QTUIFactory.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTUIFactory.cpp
@@ -6,17 +13,25 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <iostream>
 #include <cassert>
 
-using namespace std;
+#include <qapplication.h>
 
-#include <qapplication.h>
 
 #include "UIElements/QT4/QTUIFactory.hpp"
 #include "UIElements/QT4/QTMainWindow.hpp"
 #include "UIElements/QT4/QTDialog.hpp"
+
+#include "Helpers/MemDebug.hpp"
+
 #include "version.h"
 #include "defs.hpp"
-#include "Helpers/MemDebug.hpp"
+
+using namespace std;
 
 QTUIFactory::QTUIFactory() :
@@ -26,5 +41,5 @@
   argv = new char*[1];
   argv[0] = new char[256];
-  strcpy(argv[0],ESPACKVersion);
+  strcpy(argv[0],MOLECUILDERVERSION);
   app = new QApplication(argc,argv);
 }
Index: src/UIElements/TextUI/TextDialog.cpp
===================================================================
--- src/UIElements/TextUI/TextDialog.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/TextUI/TextDialog.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TextDialog.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -569,5 +581,5 @@
   bool badInput=false;
   bool aborted = false;
-  element * temp = NULL;
+  const element * temp = NULL;
   do{
     badInput = false;
Index: src/UIElements/TextUI/TextStatusIndicator.cpp
===================================================================
--- src/UIElements/TextUI/TextStatusIndicator.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/TextUI/TextStatusIndicator.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TextStatusIndicator.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/TextUI/TextUIFactory.cpp
===================================================================
--- src/UIElements/TextUI/TextUIFactory.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/TextUI/TextUIFactory.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TextUIFactory.cpp
@@ -5,4 +12,11 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "UIElements/TextUI/TextUIFactory.hpp"
Index: src/UIElements/TextUI/TextWindow.cpp
===================================================================
--- src/UIElements/TextUI/TextWindow.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/TextUI/TextWindow.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TextWindow.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -56,8 +68,8 @@
   new SeperatorItem(main_menu);
 
-  Action* undoAction = ActionRegistry::getInstance().getActionByName("Undo");
+  Action* undoAction = ActionRegistry::getInstance().getActionByName("undo");
   new ActionMenuItem('u',"Undo last operation",main_menu,undoAction);
 
-  Action* redoAction = ActionRegistry::getInstance().getActionByName("Redo");
+  Action* redoAction = ActionRegistry::getInstance().getActionByName("redo");
   new ActionMenuItem('r',"Redo last operation",main_menu,redoAction);
 
Index: src/UIElements/UIFactory.cpp
===================================================================
--- src/UIElements/UIFactory.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/UIFactory.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * UIFactory.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Views/MethodStringView.cpp
===================================================================
--- src/UIElements/Views/MethodStringView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/MethodStringView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MethodStringView.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Views/QT4/GLMoleculeView.cpp
===================================================================
--- src/UIElements/Views/QT4/GLMoleculeView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/QT4/GLMoleculeView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * GLMoleculeView.cpp
@@ -6,5 +13,12 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "GLMoleculeView.hpp"
+
+#include "Helpers/MemDebug.hpp"
 
 GLMoleculeView::GLMoleculeView(QWidget *parent) :
Index: src/UIElements/Views/QT4/QTMoleculeView.cpp
===================================================================
--- src/UIElements/Views/QT4/QTMoleculeView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/QT4/QTMoleculeView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTMoleculeView.cpp
@@ -6,9 +13,16 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Views/QT4/QTMoleculeView.hpp"
 
 #include <iostream>
+
+#include "Helpers/MemDebug.hpp"
+
 #include "molecule.hpp"
-
 
 using namespace std;
Index: src/UIElements/Views/QT4/QTStatusBar.cpp
===================================================================
--- src/UIElements/Views/QT4/QTStatusBar.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/QT4/QTStatusBar.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTStatusBar.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <sstream>
@@ -13,4 +25,7 @@
 
 #include "QTStatusBar.hpp"
+
+#include "Helpers/MemDebug.hpp"
+
 #include "World.hpp"
 #include "Helpers/helpers.hpp"
@@ -21,7 +36,7 @@
   QStatusBar(_parent),
   Observer("QTStatusBar"),
-  parent(_parent),
   atomCount(World::getInstance().numAtoms()),
-  moleculeCount(World::getInstance().numMolecules())
+  moleculeCount(World::getInstance().numMolecules()),
+  parent(_parent)
 {
   World::getInstance().signOn(this);
Index: src/UIElements/Views/QT4/QTWorldView.cpp
===================================================================
--- src/UIElements/Views/QT4/QTWorldView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/QT4/QTWorldView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * QTWorldView.cpp
@@ -6,9 +13,17 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Views/QT4/QTWorldView.hpp"
 
 #include <iostream>
 
+#include "Helpers/MemDebug.hpp"
+
 #include "atom.hpp"
+#include "Formula.hpp"
 #include "molecule.hpp"
 
@@ -20,5 +35,5 @@
 // these attributes are skiped so far
 const int QTWorldView::COLUMNCOUNT = COLUMNTYPES_MAX;
-const char *QTWorldView::COLUMNNAMES[QTWorldView::COLUMNCOUNT]={"Name","Atoms"/*,"Formula"*/,"Center"/*,"Size"*/};
+const char *QTWorldView::COLUMNNAMES[QTWorldView::COLUMNCOUNT]={"Name","Atoms","Formula"/*,"Size"*/};
 
 QTWorldView::QTWorldView(QWidget * _parent) :
@@ -61,8 +76,5 @@
     const int index = (*iter)->IndexNr;
     QTableWidgetItem *indexWidget = new QTableWidgetItem();
-    // there probably is an easier method to convert ints to QStrings... but i didn't find it
-    stringstream idxsstr;
-    idxsstr << index;
-    indexWidget->setText(QString(idxsstr.str().c_str()));
+    indexWidget->setText(QString::number(index));
     indexWidget->setData(Qt::UserRole,QVariant(index));
     setVerticalHeaderItem(i,indexWidget);
@@ -75,17 +87,13 @@
     const int atomCount = (*iter)->getAtomCount();
     QTableWidgetItem *countWidget= new QTableWidgetItem();
-    stringstream countsstr;
-    countsstr << atomCount;
-    countWidget->setText(QString(countsstr.str().c_str()));
+    countWidget->setText(QString::number(atomCount));
     countWidget->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
     setItem(i,ATOMS,countWidget);
 
-    const Vector center = (*iter)->Center;
-    QTableWidgetItem *centerWidget = new QTableWidgetItem();
-    stringstream centersstr;
-    centersstr << center;
-    centerWidget->setText(QString(centersstr.str().c_str()));
-    setItem(i,CENTER,centerWidget);
-    centerWidget->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
+    const Formula formula = (*iter)->getFormula();
+    QTableWidgetItem *formulaWidget= new QTableWidgetItem();
+    formulaWidget->setText(QString(formula.toString().c_str()));
+    formulaWidget->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
+    setItem(i,ATOMS,formulaWidget);
 
     molSelection[i]=nameWidget->isSelected();
Index: src/UIElements/Views/QT4/QTWorldView.hpp
===================================================================
--- src/UIElements/Views/QT4/QTWorldView.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/QT4/QTWorldView.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -28,5 +28,5 @@
 
   static const int COLUMNCOUNT;
-  enum {NAME,ATOMS,CENTER,COLUMNTYPES_MAX} COLUMNTYPES;
+  enum {NAME,ATOMS,FORMULA,COLUMNTYPES_MAX} COLUMNTYPES;
   static const char *COLUMNNAMES[];
 
Index: src/UIElements/Views/StreamStringView.cpp
===================================================================
--- src/UIElements/Views/StreamStringView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/StreamStringView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * StreamStringView.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Views/StringView.cpp
===================================================================
--- src/UIElements/Views/StringView.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/StringView.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * StringView.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/UIElements/Views/View.cpp
===================================================================
--- src/UIElements/Views/View.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/UIElements/Views/View.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * View.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/World.cpp
===================================================================
--- src/World.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/World.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * World.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -141,4 +153,5 @@
 void World::destroyMolecule(molecule* mol){
   OBSERVE;
+  ASSERT(mol,"Molecule that was meant to be destroyed did not exist");
   destroyMolecule(mol->getId());
 }
@@ -202,4 +215,25 @@
       atoms.erase(oldId);
       atoms.insert(pair<atomId_t,atom*>(newId,target));
+      return true;
+    }
+    else{
+      return false;
+    }
+  }
+}
+
+bool World::changeMoleculeId(moleculeId_t oldId, moleculeId_t newId, molecule* target){
+  OBSERVE;
+  // in case this call did not originate from inside the atom, we redirect it,
+  // to also let it know that it has changed
+  if(!target){
+    target = molecules[oldId];
+    ASSERT(target,"Molecule with that ID not found");
+    return target->changeId(newId);
+  }
+  else{
+    if(reserveMoleculeId(newId)){
+      molecules.erase(oldId);
+      molecules.insert(pair<moleculeId_t,molecule*>(newId,target));
       return true;
     }
@@ -704,4 +738,6 @@
     selectedMolecules(this),
     currMoleculeId(0),
+    lastMoleculePoolSize(0),
+    numMoleculeDefragSkips(0),
     molecules_deprecated(new MoleculeListClass(this))
 {
@@ -740,4 +776,8 @@
 CONSTRUCT_SINGLETON(World)
 
+CONSTRUCT_OBSERVEDCONTAINER(World::AtomSTLSet)
+
+CONSTRUCT_OBSERVEDCONTAINER(World::MoleculeSTLSet)
+
 /******************************* deprecated Legacy Stuff ***********************/
 
Index: src/World.hpp
===================================================================
--- src/World.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/World.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -72,8 +72,11 @@
 template<typename> friend class AtomsCalculation;
 public:
+  // some typedefs for the CONSTRUCT_... macros (no "," allows in a single parameter name)
+  typedef std::map<atomId_t,atom*> AtomSTLSet;
+  typedef std::map<moleculeId_t,molecule*> MoleculeSTLSet;
 
   // Types for Atom and Molecule structures
-  typedef ObservedContainer<std::map<atomId_t,atom*> > AtomSet;
-  typedef ObservedContainer<std::map<moleculeId_t,molecule*> > MoleculeSet;
+  typedef ObservedContainer< AtomSTLSet > AtomSet;
+  typedef ObservedContainer< MoleculeSTLSet > MoleculeSet;
 
   typedef ATOMSET(std::vector) AtomComposite;
@@ -217,4 +220,12 @@
    */
   bool changeAtomId(atomId_t oldId, atomId_t newId, atom* target=0);
+
+  /**
+   * used when changing an molecule Id.
+   * Unless you are calling this method from inside an moleucle don't fiddle with the third parameter.
+   *
+   * Return value indicates wether the change could be done or not.
+   */
+  bool changeMoleculeId(moleculeId_t oldId, moleculeId_t newId, molecule* target=0);
 
   /**
Index: src/analysis_bonds.cpp
===================================================================
--- src/analysis_bonds.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/analysis_bonds.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * analysis_bonds.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -138,5 +150,5 @@
         molecule::iterator Runner = (*MolRunner)->begin();
         for(;Runner!=(*MolRunner)->end();++Runner){
-          if (((*Walker)->getType()->Z  == 8) && ((*Runner)->getType()->Z  == 8)) {
+          if (((*Walker)->getType()->getAtomicNumber()  == 8) && ((*Runner)->getType()->getAtomicNumber()  == 8)) {
             // check distance
             const double distance = (*Runner)->DistanceSquared(*(*Walker));
@@ -152,5 +164,5 @@
                 atom * const OtherAtom = (*BondRunner)->GetOtherAtom(*Runner);
                 // if hydrogen, check angle to be greater(!) than 30 degrees
-                if (OtherAtom->getType()->Z == 1) {
+                if (OtherAtom->getType()->getAtomicNumber() == 1) {
                   const double angle = CalculateAngle(OtherAtom->getPosition(), (*Runner)->getPosition(), (*Walker)->getPosition());
                   OtherHydrogenFlag = OtherHydrogenFlag && (angle > M_PI*(30./180.) + MYEPSILON);
@@ -177,5 +189,5 @@
                 for (BondList::const_iterator BondRunner = (*Walker)->ListOfBonds.begin(); BondRunner != (*Walker)->ListOfBonds.end(); BondRunner++) {
                   atom * const OtherAtom = (*BondRunner)->GetOtherAtom(*Walker);
-                  if (OtherAtom->getType()->Z == 1) {
+                  if (OtherAtom->getType()->getAtomicNumber() == 1) {
                     // check angle
                     if (CheckHydrogenBridgeBondAngle(*Walker, OtherAtom, *Runner)) {
@@ -215,5 +227,5 @@
           if (((OtherAtom->getType() == first) || (OtherAtom->getType() == second)) && (theAtom->nr < OtherAtom->nr)) {
             count++;
-            DoLog(1) && (Log() << Verbose(1) << first->name << "-" << second->name << " bond found between " << *Walker << " and " << *OtherAtom << "." << endl);
+            DoLog(1) && (Log() << Verbose(1) << *first << "-" << *second << " bond found between " << *Walker << " and " << *OtherAtom << "." << endl);
           }
         }
@@ -262,5 +274,5 @@
         if (result) { // check results
           count++;
-          DoLog(1) && (Log() << Verbose(1) << first->name << "-" << second->name << "-" << third->name << " bond found at " << *Walker << "." << endl);
+          DoLog(1) && (Log() << Verbose(1) << *first << "-" << *second << "-" << *third << " bond found at " << *Walker << "." << endl);
         }
       }
Index: src/analysis_correlation.cpp
===================================================================
--- src/analysis_correlation.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/analysis_correlation.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * analysis.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -33,5 +45,5 @@
  * \return Map of doubles with values the pair of the two atoms.
  */
-PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<element *> &elements)
+PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements)
 {
   Info FunctionInfo(__func__);
@@ -48,16 +60,16 @@
 
   // create all possible pairs of elements
-  set <pair<element *, element *> > PairsOfElements;
+  set <pair<const element *,const element *> > PairsOfElements;
   if (elements.size() >= 2) {
-    for (vector<element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
-      for (vector<element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
+    for (vector<const element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
+      for (vector<const element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
         if (type1 != type2) {
-          PairsOfElements.insert( pair<element *, element*>(*type1,*type2) );
-          DoLog(1) && (Log() << Verbose(1) << "Creating element pair " << (*type1)->symbol << " and " << (*type2)->symbol << "." << endl);
+          PairsOfElements.insert( make_pair(*type1,*type2) );
+          DoLog(1) && (Log() << Verbose(1) << "Creating element pair " << *(*type1) << " and " << *(*type2) << "." << endl);
         }
   } else if (elements.size() == 1) { // one to all are valid
-    element *elemental = *elements.begin();
-    PairsOfElements.insert( pair<element *, element*>(elemental,(element *)NULL) );
-    PairsOfElements.insert( pair<element *, element*>((element *)NULL,elemental) );
+    const element *elemental = *elements.begin();
+    PairsOfElements.insert( pair<const element *,const element*>(elemental,0) );
+    PairsOfElements.insert( pair<const element *,const element*>(0,elemental) );
   } else { // all elements valid
     PairsOfElements.insert( pair<element *, element*>((element *)NULL, (element *)NULL) );
@@ -74,5 +86,5 @@
           DoLog(3) && (Log() << Verbose(3) << "Current otheratom is " << **runner << "." << endl);
           if ((*iter)->getId() < (*runner)->getId()){
-            for (set <pair<element *, element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
+            for (set <pair<const element *, const element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
               if ((PairRunner->first == (**iter).getType()) && (PairRunner->second == (**runner).getType())) {
                 distance = domain.periodicDistance((*iter)->getPosition(),(*runner)->getPosition());
@@ -95,5 +107,5 @@
  * \return Map of doubles with values the pair of the two atoms.
  */
-PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const int ranges[NDIM] )
+PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const int ranges[NDIM] )
 {
   Info FunctionInfo(__func__);
@@ -115,16 +127,16 @@
 
   // create all possible pairs of elements
-  set <pair<element *, element *> > PairsOfElements;
+  set <pair<const element *,const element *> > PairsOfElements;
   if (elements.size() >= 2) {
-    for (vector<element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
-      for (vector<element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
+    for (vector<const element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
+      for (vector<const element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
         if (type1 != type2) {
-          PairsOfElements.insert( pair<element *, element*>(*type1,*type2) );
-          DoLog(1) && (Log() << Verbose(1) << "Creating element pair " << (*type1)->symbol << " and " << (*type2)->symbol << "." << endl);
+          PairsOfElements.insert( make_pair(*type1,*type2) );
+          DoLog(1) && (Log() << Verbose(1) << "Creating element pair " << *(*type1) << " and " << *(*type2) << "." << endl);
         }
   } else if (elements.size() == 1) { // one to all are valid
-    element *elemental = *elements.begin();
-    PairsOfElements.insert( pair<element *, element*>(elemental,(element *)NULL) );
-    PairsOfElements.insert( pair<element *, element*>((element *)NULL,elemental) );
+    const element *elemental = *elements.begin();
+    PairsOfElements.insert( pair<const element *,const element*>(elemental,0) );
+    PairsOfElements.insert( pair<const element *,const element*>(0,elemental) );
   } else { // all elements valid
     PairsOfElements.insert( pair<element *, element*>((element *)NULL, (element *)NULL) );
@@ -149,5 +161,5 @@
                   DoLog(3) && (Log() << Verbose(3) << "Current otheratom is " << **runner << "." << endl);
                   if ((*iter)->getId() < (*runner)->getId()){
-                    for (set <pair<element *, element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
+                    for (set <pair<const element *,const element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
                       if ((PairRunner->first == (**iter).getType()) && (PairRunner->second == (**runner).getType())) {
                         periodicOtherX = FullInverseMatrix * ((*runner)->getPosition()); // x now in [0,1)^3
@@ -178,5 +190,5 @@
  * \return Map of dobules with values as pairs of atom and the vector
  */
-CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Vector *point )
+CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point )
 {
   Info FunctionInfo(__func__);
@@ -196,5 +208,5 @@
     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
       DoLog(3) && (Log() << Verbose(3) << "Current atom is " << **iter << "." << endl);
-      for (vector<element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
+      for (vector<const element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
         if ((*type == NULL) || ((*iter)->getType() == *type)) {
           distance = domain.periodicDistance((*iter)->getPosition(),*point);
@@ -215,5 +227,5 @@
  * \return Map of dobules with values as pairs of atom and the vector
  */
-CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Vector *point, const int ranges[NDIM] )
+CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point, const int ranges[NDIM] )
 {
   Info FunctionInfo(__func__);
@@ -237,5 +249,5 @@
     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
       DoLog(3) && (Log() << Verbose(3) << "Current atom is " << **iter << "." << endl);
-      for (vector<element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
+      for (vector<const element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
         if ((*type == NULL) || ((*iter)->getType() == *type)) {
           periodicX = FullInverseMatrix * ((*iter)->getPosition()); // x now in [0,1)^3
@@ -263,5 +275,5 @@
  * \return Map of doubles with values as pairs of atom and the BoundaryTriangleSet that's closest
  */
-CorrelationToSurfaceMap *CorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Tesselation * const Surface, const LinkedCell *LC )
+CorrelationToSurfaceMap *CorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell *LC )
 {
   Info FunctionInfo(__func__);
@@ -284,5 +296,5 @@
     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
       DoLog(3) && (Log() << Verbose(3) << "\tCurrent atom is " << *(*iter) << "." << endl);
-      for (vector<element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
+      for (vector<const element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
         if ((*type == NULL) || ((*iter)->getType() == *type)) {
           TriangleIntersectionList Intersections((*iter)->getPosition(),Surface,LC);
@@ -309,5 +321,5 @@
  * \return Map of doubles with values as pairs of atom and the BoundaryTriangleSet that's closest
  */
-CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Tesselation * const Surface, const LinkedCell *LC, const int ranges[NDIM] )
+CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell *LC, const int ranges[NDIM] )
 {
   Info FunctionInfo(__func__);
@@ -335,5 +347,5 @@
     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
       DoLog(3) && (Log() << Verbose(3) << "Current atom is " << **iter << "." << endl);
-      for (vector<element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
+      for (vector<const element *>::const_iterator type = elements.begin(); type != elements.end(); ++type)
         if ((*type == NULL) || ((*iter)->getType() == *type)) {
           periodicX = FullInverseMatrix * ((*iter)->getPosition()); // x now in [0,1)^3
Index: src/analysis_correlation.hpp
===================================================================
--- src/analysis_correlation.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/analysis_correlation.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -18,4 +18,5 @@
 #endif
 
+#include <cmath>
 #include <fstream>
 
@@ -46,10 +47,10 @@
 /********************************************** declarations *******************************/
 
-PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<element *> &elements);
-CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Vector *point );
-CorrelationToSurfaceMap *CorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Tesselation * const Surface, const LinkedCell *LC );
-PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const int ranges[NDIM] );
-CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Vector *point, const int ranges[NDIM] );
-CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<element *> &elements, const Tesselation * const Surface, const LinkedCell *LC, const int ranges[NDIM] );
+PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements);
+CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point );
+CorrelationToSurfaceMap *CorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell *LC );
+PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const int ranges[NDIM] );
+CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point, const int ranges[NDIM] );
+CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell *LC, const int ranges[NDIM] );
 int GetBin ( const double value, const double BinWidth, const double BinStart );
 void OutputCorrelation( ofstream * const file, const BinPairMap * const map );
Index: src/analyzer.cpp
===================================================================
--- src/analyzer.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/analyzer.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file analyzer.cpp
  *
@@ -8,4 +15,9 @@
 //============================ INCLUDES ===========================
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
@@ -17,10 +29,4 @@
 #include "periodentafel.hpp"
 #include "Helpers/Verbose.hpp"
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 
 //============================== MAIN =============================
Index: src/atom.cpp
===================================================================
--- src/atom.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file atom.cpp
  *
@@ -4,4 +11,9 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -168,10 +180,10 @@
 bool atom::OutputArrayIndexed(ostream * const out,const enumeration<const element*> &elementLookup, int *AtomNo, const char *comment) const
 {
-  AtomNo[getType()->Z]++;  // increment number
+  AtomNo[getType()->getAtomicNumber()]++;  // increment number
   if (out != NULL) {
     const element *elemental = getType();
     cout << "Looking for atom with element " << *elemental << endl;
     ASSERT(elementLookup.there.find(elemental)!=elementLookup.there.end(),"Type of this atom was not in the formula upon enumeration");
-    *out << "Ion_Type" << elementLookup.there.find(elemental)->second << "_" << AtomNo[elemental->Z] << "\t"  << fixed << setprecision(9) << showpoint;
+    *out << "Ion_Type" << elementLookup.there.find(elemental)->second << "_" << AtomNo[elemental->getAtomicNumber()] << "\t"  << fixed << setprecision(9) << showpoint;
     *out << at(0) << "\t" << at(1) << "\t" << at(2);
     *out << "\t" << FixedIon;
@@ -194,5 +206,5 @@
 {
   if (out != NULL) {
-    *out << getType()->symbol << "\t" << at(0) << "\t" << at(1) << "\t" << at(2) << "\t" << endl;
+    *out << getType()->getSymbol() << "\t" << at(0) << "\t" << at(1) << "\t" << at(2) << "\t" << endl;
     return true;
   } else
@@ -209,7 +221,7 @@
 bool atom::OutputTrajectory(ofstream * const out, const int *ElementNo, int *AtomNo, const int step) const
 {
-  AtomNo[getType()->Z]++;
-  if (out != NULL) {
-    *out << "Ion_Type" << ElementNo[getType()->Z] << "_" << AtomNo[getType()->Z] << "\t"  << fixed << setprecision(9) << showpoint;
+  AtomNo[getType()->getAtomicNumber()]++;
+  if (out != NULL) {
+    *out << "Ion_Type" << ElementNo[getType()->getAtomicNumber()] << "_" << AtomNo[getType()->getAtomicNumber()] << "\t"  << fixed << setprecision(9) << showpoint;
     *out << Trajectory.R.at(step)[0] << "\t" << Trajectory.R.at(step)[1] << "\t" << Trajectory.R.at(step)[2];
     *out << "\t" << FixedIon;
@@ -232,5 +244,5 @@
 {
   if (out != NULL) {
-    *out << getType()->symbol << "\t";
+    *out << getType()->getSymbol() << "\t";
     *out << Trajectory.R.at(step)[0] << "\t";
     *out << Trajectory.R.at(step)[1] << "\t";
@@ -250,5 +262,5 @@
   Vector recentered(getPosition());
   recentered -= *center;
-  *out << "\t\t" << getType()->symbol << " [ " << recentered[0] << "\t" << recentered[1] << "\t" << recentered[2] << " ]" << endl;
+  *out << "\t\t" << getType()->getSymbol() << " [ " << recentered[0] << "\t" << recentered[1] << "\t" << recentered[2] << " ]" << endl;
   if (AtomNo != NULL)
     *AtomNo++;
@@ -344,4 +356,8 @@
 }
 
+/** Makes the atom be contained in the new molecule \a *_mol.
+ * Uses atom::removeFromMolecule() to delist from old molecule.
+ * \param *_mol pointer to new molecule
+ */
 void atom::setMolecule(molecule *_mol){
   // take this atom from the old molecule
@@ -353,8 +369,13 @@
 }
 
-molecule* atom::getMolecule(){
+/** Returns pointer to the molecule which atom belongs to.
+ * \return containing molecule
+ */
+molecule* atom::getMolecule() const {
   return mol;
 }
 
+/** Erases the atom in atom::mol's list of atoms and sets it to zero.
+ */
 void atom::removeFromMolecule(){
   if(mol){
Index: src/atom.hpp
===================================================================
--- src/atom.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -92,5 +92,5 @@
 
    void setMolecule(molecule*);
-   molecule* getMolecule();
+   molecule* getMolecule() const;
    void removeFromMolecule();
 
Index: src/atom_atominfo.cpp
===================================================================
--- src/atom_atominfo.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_atominfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_atominfo.cpp
@@ -6,4 +13,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
Index: src/atom_bondedparticle.cpp
===================================================================
--- src/atom_bondedparticle.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_bondedparticle.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_bondedparticle.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -152,10 +164,10 @@
   NoBonds = CountBonds();
   //Log() << Verbose(3) << "Walker " << *this << ": " << (int)this->type->NoValenceOrbitals << " > " << NoBonds << "?" << endl;
-  if ((int)(getType()->NoValenceOrbitals) > NoBonds) { // we have a mismatch, check all bonding partners for mismatch
+  if ((int)(getType()->getNoValenceOrbitals()) > NoBonds) { // we have a mismatch, check all bonding partners for mismatch
     for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); (++Runner)) {
       OtherWalker = (*Runner)->GetOtherAtom(this);
       OtherNoBonds = OtherWalker->CountBonds();
       //Log() << Verbose(3) << "OtherWalker " << *OtherWalker << ": " << (int)OtherWalker->type->NoValenceOrbitals << " > " << OtherNoBonds << "?" << endl;
-      if ((int)(OtherWalker->getType()->NoValenceOrbitals) > OtherNoBonds) { // check if possible candidate
+      if ((int)(OtherWalker->getType()->getNoValenceOrbitals()) > OtherNoBonds) { // check if possible candidate
         if ((CandidateBond == NULL) || (ListOfBonds.size() > OtherWalker->ListOfBonds.size())) { // pick the one with fewer number of bonds first
           CandidateBond = (*Runner);
Index: src/atom_bondedparticleinfo.cpp
===================================================================
--- src/atom_bondedparticleinfo.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_bondedparticleinfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_bondedparticleinfo.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/atom_graphnode.cpp
===================================================================
--- src/atom_graphnode.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_graphnode.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_graphnode.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/atom_graphnodeinfo.cpp
===================================================================
--- src/atom_graphnodeinfo.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_graphnodeinfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_graphnodeinfo.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/atom_particleinfo.cpp
===================================================================
--- src/atom_particleinfo.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_particleinfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_particleinfo.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/atom_trajectoryparticle.cpp
===================================================================
--- src/atom_trajectoryparticle.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_trajectoryparticle.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_trajectoryparticle.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -38,5 +50,5 @@
 {
   for (int i=NDIM;i--;)
-    *temperature += getType()->mass * Trajectory.U.at(step)[i]* Trajectory.U.at(step)[i];
+    *temperature += getType()->getMass() * Trajectory.U.at(step)[i]* Trajectory.U.at(step)[i];
 };
 
@@ -65,5 +77,5 @@
   for(int d=0;d<NDIM;d++) {
     Trajectory.U.at(Step)[d] -= CoGVelocity->at(d);
-    *ActualTemp += 0.5 * getType()->mass * Trajectory.U.at(Step)[d] * Trajectory.U.at(Step)[d];
+    *ActualTemp += 0.5 * getType()->getMass() * Trajectory.U.at(Step)[d] * Trajectory.U.at(Step)[d];
   }
 };
@@ -113,10 +125,10 @@
     Trajectory.R.at(NextStep)[d] = Trajectory.R.at(NextStep-1)[d];
     Trajectory.R.at(NextStep)[d] += configuration->Deltat*(Trajectory.U.at(NextStep-1)[d]);     // s(t) = s(0) + v * deltat + 1/2 a * deltat^2
-    Trajectory.R.at(NextStep)[d] += 0.5*configuration->Deltat*configuration->Deltat*(Trajectory.F.at(NextStep)[d]/getType()->mass);     // F = m * a and s =
+    Trajectory.R.at(NextStep)[d] += 0.5*configuration->Deltat*configuration->Deltat*(Trajectory.F.at(NextStep)[d]/getType()->getMass());     // F = m * a and s =
   }
   // Update U
   for (int d=0; d<NDIM; d++) {
     Trajectory.U.at(NextStep)[d] = Trajectory.U.at(NextStep-1)[d];
-    Trajectory.U.at(NextStep)[d] += configuration->Deltat * (Trajectory.F.at(NextStep)[d]+Trajectory.F.at(NextStep-1)[d]/getType()->mass); // v = F/m * t
+    Trajectory.U.at(NextStep)[d] += configuration->Deltat * (Trajectory.F.at(NextStep)[d]+Trajectory.F.at(NextStep-1)[d]/getType()->getMass()); // v = F/m * t
   }
   // Update R (and F)
@@ -137,7 +149,7 @@
 void TrajectoryParticle::SumUpKineticEnergy( int Step, double *TotalMass, Vector *TotalVelocity ) const
 {
-  *TotalMass += getType()->mass;  // sum up total mass
+  *TotalMass += getType()->getMass();  // sum up total mass
   for(int d=0;d<NDIM;d++) {
-    TotalVelocity->at(d) += Trajectory.U.at(Step)[d]*getType()->mass;
+    TotalVelocity->at(d) += Trajectory.U.at(Step)[d]*getType()->getMass();
   }
 };
@@ -154,5 +166,5 @@
     for (int d=0; d<NDIM; d++) {
       U[d] *= ScaleTempFactor;
-      *ekin += 0.5*getType()->mass * U[d]*U[d];
+      *ekin += 0.5*getType()->getMass() * U[d]*U[d];
     }
 };
@@ -170,5 +182,5 @@
     for (int d=0; d<NDIM; d++) {
       *G += U[d] * F[d];
-      *E += U[d]*U[d]*getType()->mass;
+      *E += U[d]*U[d]*getType()->getMass();
     }
 };
@@ -185,6 +197,6 @@
   if (FixedIon == 0) // even FixedIon moves, only not by other's forces
     for (int d=0; d<NDIM; d++) {
-      U[d] += configuration->Deltat/getType()->mass * ( (G_over_E) * (U[d]*getType()->mass) );
-      *ekin += getType()->mass * U[d]*U[d];
+      U[d] += configuration->Deltat/getType()->getMass() * ( (G_over_E) * (U[d]*getType()->getMass()) );
+      *ekin += getType()->getMass() * U[d]*U[d];
     }
 };
@@ -198,5 +210,5 @@
 void TrajectoryParticle::Thermostat_Langevin(int Step, gsl_rng * r, double *ekin, config *configuration)
 {
-  double sigma  = sqrt(configuration->Thermostats->TargetTemp/getType()->mass); // sigma = (k_b T)/m (Hartree/atomicmass = atomiclength/atomictime)
+  double sigma  = sqrt(configuration->Thermostats->TargetTemp/getType()->getMass()); // sigma = (k_b T)/m (Hartree/atomicmass = atomiclength/atomictime)
   Vector &U = Trajectory.U.at(Step);
   if (FixedIon == 0) { // even FixedIon moves, only not by other's forces
@@ -211,5 +223,5 @@
     }
     for (int d=0; d<NDIM; d++)
-      *ekin += 0.5*getType()->mass * U[d]*U[d];
+      *ekin += 0.5*getType()->getMass() * U[d]*U[d];
   }
 };
@@ -227,5 +239,5 @@
     for (int d=0; d<NDIM; d++) {
       U[d] *= sqrt(1+(configuration->Deltat/configuration->Thermostats->TempFrequency)*(ScaleTempFactor-1));
-      *ekin += 0.5*getType()->mass * U[d]*U[d];
+      *ekin += 0.5*getType()->getMass() * U[d]*U[d];
     }
   }
@@ -241,5 +253,5 @@
   if (FixedIon == 0) { // even FixedIon moves, only not by other's forces
     for (int d=0; d<NDIM; d++) {
-      *delta_alpha += U[d]*U[d]*getType()->mass;
+      *delta_alpha += U[d]*U[d]*getType()->getMass();
     }
   }
@@ -256,6 +268,6 @@
   if (FixedIon == 0) { // even FixedIon moves, only not by other's forces
     for (int d=0; d<NDIM; d++) {
-        U[d] += configuration->Deltat/getType()->mass * (configuration->Thermostats->alpha * (U[d] * getType()->mass));
-        *ekin += (0.5*getType()->mass) * U[d]*U[d];
+        U[d] += configuration->Deltat/getType()->getMass() * (configuration->Thermostats->alpha * (U[d] * getType()->getMass()));
+        *ekin += (0.5*getType()->getMass()) * U[d]*U[d];
       }
   }
Index: src/atom_trajectoryparticle.hpp
===================================================================
--- src/atom_trajectoryparticle.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_trajectoryparticle.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -20,5 +20,4 @@
 #include <fstream>
 
-#include <gsl/gsl_inline.h>
 #include <gsl/gsl_randist.h>
 
Index: src/atom_trajectoryparticleinfo.cpp
===================================================================
--- src/atom_trajectoryparticleinfo.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/atom_trajectoryparticleinfo.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atom_trajectoryparticleinfo.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/bond.cpp
===================================================================
--- src/bond.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/bond.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file bond.cpp
  * 
@@ -4,4 +11,9 @@
  * 
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -51,7 +63,7 @@
 {
   if ((left != NULL) && (right != NULL)) {
-    if ((left->getType() != NULL) && (left->getType()->Z == 1))
+    if ((left->getType() != NULL) && (left->getType()->getAtomicNumber() == 1))
       HydrogenBond++;
-    if ((right->getType() != NULL) && (right->getType()->Z == 1))
+    if ((right->getType() != NULL) && (right->getType()->getAtomicNumber() == 1))
       HydrogenBond++;
   }
Index: src/bondgraph.cpp
===================================================================
--- src/bondgraph.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/bondgraph.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * bondgraph.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -132,6 +144,6 @@
 
   for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-    if ((*iter)->getType()->CovalentRadius > max_distance)
-      max_distance = (*iter)->getType()->CovalentRadius;
+    if ((*iter)->getType()->getCovalentRadius() > max_distance)
+      max_distance = (*iter)->getType()->getCovalentRadius();
   }
   max_distance *= 2.;
@@ -149,5 +161,5 @@
 void BondGraph::CovalentMinMaxDistance(BondedParticle * const Walker, BondedParticle * const OtherWalker, double &MinDistance, double &MaxDistance, bool IsAngstroem)
 {
-  MinDistance = OtherWalker->getType()->CovalentRadius + Walker->getType()->CovalentRadius;
+  MinDistance = OtherWalker->getType()->getCovalentRadius() + Walker->getType()->getCovalentRadius();
   MinDistance *= (IsAngstroem) ? 1. : 1. / AtomicLengthToAngstroem;
   MaxDistance = MinDistance + BondThreshold;
@@ -170,5 +182,5 @@
     CovalentMinMaxDistance(Walker, OtherWalker, MinDistance, MaxDistance, IsAngstroem);
   } else {
-    MinDistance = GetBondLength(Walker->getType()->Z-1, OtherWalker->getType()->Z-1);
+    MinDistance = GetBondLength(Walker->getType()->getAtomicNumber()-1, OtherWalker->getType()->getAtomicNumber()-1);
     MinDistance *= (IsAngstroem) ? 1. : 1. / AtomicLengthToAngstroem;
     MaxDistance = MinDistance + BondThreshold;
Index: src/boundary.cpp
===================================================================
--- src/boundary.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/boundary.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,18 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file boundary.cpp
  *
  * Implementations and super-function for envelopes
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -193,5 +205,5 @@
       }
     DoLog(1) && (Log() << Verbose(1) << "Inserting " << **iter << ": (r, alpha) = (" << radius << "," << angle << "): " << ProjectedVector << endl);
-      BoundaryTestPair = BoundaryPoints[axis].insert(BoundariesPair(angle, DistancePair (radius, (*iter))));
+      BoundaryTestPair = BoundaryPoints[axis].insert(BoundariesPair(angle, TesselPointDistancePair (radius, (*iter))));
       if (!BoundaryTestPair.second) { // same point exists, check first r, then distance of original vectors to center of gravity
         DoLog(2) && (Log() << Verbose(2) << "Encountered two vectors whose projection onto axis " << axis << " is equal: " << endl);
@@ -705,5 +717,5 @@
   // sum up the atomic masses
   for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-      totalmass += (*iter)->getType()->mass;
+      totalmass += (*iter)->getType()->getMass();
   }
   DoLog(0) && (Log() << Verbose(0) << "RESULT: The summed mass is " << setprecision(10) << totalmass << " atomicmassunit." << endl);
@@ -804,5 +816,4 @@
   // Center filler at origin
   filler->CenterEdge(&Inserter);
-  filler->Center.Zero();
   const int FillerCount = filler->getAtomCount();
   DoLog(2) && (Log() << Verbose(2) << "INFO: Filler molecule has the following bonds:" << endl);
Index: src/boundary.hpp
===================================================================
--- src/boundary.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/boundary.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,4 @@
 #ifndef BOUNDARY_HPP_
 #define BOUNDARY_HPP_
-
-using namespace std;
 
 /*********************************************** includes ***********************************/
@@ -18,8 +16,8 @@
 
 #include "defs.hpp"
+#include "BoundaryMaps.hpp"
 
 /****************************************** forward declarations *****************************/
 
-class atom;
 class BoundaryPointSet;
 class BoundaryLineSet;
@@ -30,4 +28,5 @@
 class MoleculeListClass;
 class Tesselation;
+class TesselPoint;
 class Vector;
 
@@ -38,12 +37,4 @@
 enum { SingleStepWidth=10 };
 
-typedef std::pair < double, class atom* > DistancePair;
-typedef std::multimap < double, class atom* > DistanceMap;
-typedef std::pair < DistanceMap::iterator, bool> DistanceTestPair;
-
-typedef std::map <double, DistancePair > Boundaries;
-typedef std::pair<double, DistancePair > BoundariesPair;
-typedef std::pair< Boundaries::iterator, bool> BoundariesTestPair;
-
 /********************************************** declarations *******************************/
 
@@ -52,5 +43,4 @@
 void FindConvexBorder(const molecule* const mol, Boundaries *BoundaryPts, Tesselation *&TesselStruct, const LinkedCell *LCList, const char *filename);
 Vector* FindEmbeddingHole(MoleculeListClass *mols, molecule *srcmol);
-void FindNextSuitablePoint(class BoundaryTriangleSet *BaseTriangle, class BoundaryLineSet *BaseLine, atom*& OptCandidate, Vector *OptCandidateCenter, double *ShortestAngle, const double RADIUS, LinkedCell *LC);
 bool FindNonConvexBorder(const molecule* const mol, Tesselation *&TesselStruct, const LinkedCell *&LC, const double RADIUS, const char *tempbasename);
 Boundaries *GetBoundaryPoints(const molecule *mol, Tesselation *&TesselStruct);
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/builder.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,20 @@
-/** \file builder.cpp
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+ /** \file builder.cpp
  *
  *  date: Jan 1, 2007
  *  author: heber
+ *
+ */
+
+/*! \page Copyright notice
+ *
+ *  MoleCuilder - to create and alter molecular systems
+ *  Copyright (C) 2010  University Bonn. All rights reserved.
  *
  */
@@ -53,4 +67,9 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -127,6 +146,10 @@
   std::string BondGraphFileName("\n");
 
-  // print version check whether arguments are present at all
-  cout << ESPACKVersion << endl;
+  // print version check and copyright notice
+  cout << MOLECUILDERVERSION << endl;
+  cout << "MoleCuilder comes with ABSOLUTELY NO WARRANTY; for details type" << endl;
+  cout << "`molecuilder --help-warranty'." << endl;
+  cout << "`MoleCuilder - to create and alter molecular systems." << endl;
+  cout << "Copyright (C) 2010  University Bonn. All rights reserved." << endl;
 
   setVerbosity(0);
@@ -166,5 +189,5 @@
       #else
         DoLog(0) && (Log() << Verbose(0) << "Setting UI to Text." << endl);
-        cout << ESPACKVersion << endl;
+        cout << MOLECUILDERVERSION << endl;
         UIFactory::registerFactory(new TextUIFactory::description());
         UIFactory::makeUserInterface("Text");
Index: src/config.cpp
===================================================================
--- src/config.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/config.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file config.cpp
  *
@@ -5,4 +12,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
@@ -10,4 +22,5 @@
 #include <cstring>
 
+//#include "Actions/FragmentationAction/SubgraphDissectionAction.hpp"
 #include "atom.hpp"
 #include "bond.hpp"
@@ -471,5 +484,5 @@
       ParseForParameter(verbose,FileBuffer, name, 0, 2, 1, int_type, &Z, 1, critical);
       elementhash[i] = periode->FindElement(Z);
-      DoLog(1) && (Log() << Verbose(1) << i << ". Z = " << elementhash[i]->Z << " with " << No[i] << " ions." << endl);
+      DoLog(1) && (Log() << Verbose(1) << i << ". Z = " << elementhash[i]->getAtomicNumber() << " with " << No[i] << " ions." << endl);
       NoAtoms += No[i];
     }
@@ -851,5 +864,5 @@
   // 4. dissect the molecule into connected subgraphs
   // don't do this here ...
-  //MolList->DissectMoleculeIntoConnectedSubgraphs(mol,this);
+  //FragmentationSubgraphDissection();
   //delete(mol);
 
@@ -1339,6 +1352,6 @@
     AtomNo = 0;
     for (molecule::const_iterator iter = (*MolRunner)->begin(); iter != (*MolRunner)->end(); ++iter) {
-      sprintf(name, "%2s%2d",(*iter)->getType()->symbol, elementNo[(*iter)->getType()->Z]);
-      elementNo[(*iter)->getType()->Z] = (elementNo[(*iter)->getType()->Z]+1) % 100;   // confine to two digits
+      sprintf(name, "%2s%2d",(*iter)->getType()->getSymbol().c_str(), elementNo[(*iter)->getType()->getAtomicNumber()]);
+      elementNo[(*iter)->getType()->getAtomicNumber()] = (elementNo[(*iter)->getType()->getAtomicNumber()]+1) % 100;   // confine to two digits
       fprintf(f,
              "ATOM %6u %-4s %4s%c%4u    %8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n",
@@ -1351,8 +1364,8 @@
              (*iter)->at(1),                 /* position Y in Angstroem */
              (*iter)->at(2),                 /* position Z in Angstroem */
-             (double)(*iter)->getType()->Valence,         /* occupancy */
-             (double)(*iter)->getType()->NoValenceOrbitals,          /* temperature factor */
+             (double)(*iter)->getType()->getValence(),         /* occupancy */
+             (double)(*iter)->getType()->getNoValenceOrbitals(),          /* temperature factor */
              "0",            /* segment identifier */
-             (*iter)->getType()->symbol,    /* element symbol */
+             (*iter)->getType()->getSymbol().c_str(),    /* element symbol */
              "0");           /* charge */
       AtomNo++;
@@ -1392,6 +1405,6 @@
   AtomNo = 0;
   for (molecule::const_iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-    sprintf(name, "%2s%2d",(*iter)->getType()->symbol, elementNo[(*iter)->getType()->Z]);
-    elementNo[(*iter)->getType()->Z] = (elementNo[(*iter)->getType()->Z]+1) % 100;   // confine to two digits
+    sprintf(name, "%2s%2d",(*iter)->getType()->getSymbol().c_str(), elementNo[(*iter)->getType()->getAtomicNumber()]);
+    elementNo[(*iter)->getType()->getAtomicNumber()] = (elementNo[(*iter)->getType()->getAtomicNumber()]+1) % 100;   // confine to two digits
     fprintf(f,
            "ATOM %6u %-4s %4s%c%4u    %8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n",
@@ -1404,8 +1417,8 @@
            (*iter)->at(1),                 /* position Y in Angstroem */
            (*iter)->at(2),                 /* position Z in Angstroem */
-           (double)(*iter)->getType()->Valence,         /* occupancy */
-           (double)(*iter)->getType()->NoValenceOrbitals,          /* temperature factor */
+           (double)(*iter)->getType()->getValence(),         /* occupancy */
+           (double)(*iter)->getType()->getNoValenceOrbitals(),          /* temperature factor */
            "0",            /* segment identifier */
-           (*iter)->getType()->symbol,    /* element symbol */
+           (*iter)->getType()->getSymbol().c_str(),    /* element symbol */
            "0");           /* charge */
     AtomNo++;
@@ -1451,6 +1464,6 @@
     *output << 0 << "\t";
     *output << (*iter)->at(0) << "\t" << (*iter)->at(1) << "\t" << (*iter)->at(2) << "\t";
-    *output << static_cast<double>((*iter)->getType()->Valence) << "\t";
-    *output << (*iter)->getType()->symbol << "\t";
+    *output << static_cast<double>((*iter)->getType()->getValence()) << "\t";
+    *output << (*iter)->getType()->getSymbol() << "\t";
     for (BondList::iterator runner = (*iter)->ListOfBonds.begin(); runner != (*iter)->ListOfBonds.end(); runner++)
       *output << (*runner)->GetOtherAtom(*iter)->nr << "\t";
@@ -1523,6 +1536,6 @@
         *output << MolCounter+1 << "\t";
         *output << (*iter)->at(0) << "\t" << (*iter)->at(1) << "\t" << (*iter)->at(2) << "\t";
-        *output << (double)(*iter)->getType()->Valence << "\t";
-        *output << (*iter)->getType()->symbol << "\t";
+        *output << (double)(*iter)->getType()->getValence() << "\t";
+        *output << (*iter)->getType()->getSymbol() << "\t";
         for (BondList::iterator runner = (*iter)->ListOfBonds.begin(); runner != (*iter)->ListOfBonds.end(); runner++)
           *output << LocalNotoGlobalNoMap[ (*runner)->GetOtherAtom((*iter))->getId() ] << "\t";
@@ -1586,9 +1599,7 @@
     for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) {
       src[N++] = (*ListRunner)->IndexNr;
-      (*ListRunner)->Translate(&(*ListRunner)->Center);
     }
     mol = World::getInstance().createMolecule();
     mol->SetNameFromFilename(ConfigFileName);
-    molecules->SimpleMultiMerge(mol, src, N);
     //mol->CalculateOrbitals(*this);
     delete[](src);
Index: src/datacreator.cpp
===================================================================
--- src/datacreator.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/datacreator.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file datacreator.cpp
  *
@@ -6,4 +13,9 @@
 
 //============================ INCLUDES ===========================
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/defs.cpp
===================================================================
--- src/defs.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/defs.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * defs.cpp
@@ -5,4 +12,11 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
 
 #include "defs.hpp"
Index: src/element.cpp
===================================================================
--- src/element.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/element.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file element.cpp
  * 
@@ -5,4 +12,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
 
@@ -10,4 +22,5 @@
 #include <fstream>
 
+#include "Helpers/Assert.hpp"
 #include "element.hpp"
 
@@ -23,7 +36,4 @@
   VanDerWaalsRadius(0),
 	Z(-1),
-	previous(NULL),
-	next(NULL),
-	sort(NULL),
 	Valence(0),
 	NoValenceOrbitals(0)
@@ -31,7 +41,39 @@
 };
 
+element::element(const element &src) :
+  mass(src.mass),
+  CovalentRadius(src.CovalentRadius),
+  VanDerWaalsRadius(src.VanDerWaalsRadius),
+  Z(src.Z),
+  Valence(src.Valence),
+  NoValenceOrbitals(src.NoValenceOrbitals),
+  name(src.name),
+  symbol(src.symbol)
+{
+  period = src.period;
+  group = src.group;
+  block = src.block;
+}
+
 /** Destructor of class element.
  */
 element::~element() {};
+
+element &element::operator=(const element &src){
+  if(this!=&src){
+    mass=src.mass;
+    CovalentRadius=src.CovalentRadius;
+    VanDerWaalsRadius=src.VanDerWaalsRadius;
+    Z=src.Z;
+    Valence=src.Valence;
+    NoValenceOrbitals=src.NoValenceOrbitals;
+    name=src.name;
+    symbol=src.symbol;
+    period = src.period;
+    group = src.group;
+    block = src.block;
+  }
+  return *this;
+}
 
 /** Prints element data to \a *out.
@@ -66,10 +108,70 @@
 }
 
-string element::getSymbol() const{
-  return string(symbol);
+double element::getMass() const
+{
+  return mass;
 }
 
-std::string element::getName() const{
-  return string(name);
+double element::getCovalentRadius() const
+{
+  return CovalentRadius;
+}
+
+double element::getVanDerWaalsRadius() const
+{
+  return VanDerWaalsRadius;
+}
+
+int element::getAtomicNumber() const
+{
+  return Z;
+}
+
+double element::getValence() const
+{
+  return Valence;
+}
+
+int element::getNoValenceOrbitals() const
+{
+  return NoValenceOrbitals;
+}
+
+double element::getHBondDistance(const int i) const
+{
+  ASSERT((i>=0) && (i<3), "Access to element::HBondDistance out of bounds.");
+  return HBondDistance[i];
+}
+
+double element::getHBondAngle(const int i) const
+{
+  ASSERT((i>=0) && (i<3), "Access to element::HBondAngle out of bounds.");
+  return HBondAngle[i];
+}
+
+string &element::getSymbol(){
+  return symbol;
+}
+
+const string &element::getSymbol() const{
+  return symbol;
+}
+
+void element::setSymbol(const std::string &temp)
+{
+  symbol = temp;
+}
+
+std::string &element::getName(){
+  return name;
+}
+
+const std::string &element::getName() const{
+  return name;
+}
+
+void element::setName(const std::string &temp)
+{
+  name = temp;
 }
 
Index: src/element.hpp
===================================================================
--- src/element.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/element.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -22,4 +22,6 @@
 #include "types.hpp"
 
+class periodentafel;
+
 /********************************************** declarations *******************************/
 
@@ -28,17 +30,43 @@
  */
 class element {
+  friend class periodentafel;
   public:
+    element();
+    element(const element&);
+    ~element();
+
+    element &operator=(const element&);
+
+    // accessor functions
+    atomicNumber_t getNumber() const;
+    double getMass() const;
+    double getCovalentRadius() const;
+    double getVanDerWaalsRadius() const;
+    int getAtomicNumber() const;
+    double getValence() const;
+    int getNoValenceOrbitals() const;
+    double getHBondDistance(const int i) const;
+    double getHBondAngle(const int i) const;
+
+    std::string &getSymbol();
+    const std::string &getSymbol() const;
+    void setSymbol(const std::string &temp);
+
+    std::string &getName();
+    const std::string &getName() const;
+    void setName(const std::string &temp);
+
+    //> print element entries to screen
+    bool Output(std::ostream * const out) const;
+    bool Checkout(std::ostream * const out, const int No, const int NoOfAtoms) const;
+
+  private:
     double mass;    //!< mass in g/mol
     double CovalentRadius;  //!< covalent radius
     double VanDerWaalsRadius;  //!< can-der-Waals radius
     int Z;          //!< atomic number
-    char name[64];  //!< atom name, i.e. "Hydrogren"
-    char symbol[3]; //!< short form of the atom, i.e. "H"
-    char period[8];    //!< period: n quantum number
-    char group[8];    //!< group: l quantum number
-    char block[8];    //!< block: l quantum number
-    element *previous;  //!< previous item in list
-    element *next;  //!< next element in list
-    int *sort;      //!< sorc criteria
+    std::string period;    //!< period: n quantum number
+    std::string group;    //!< group: l quantum number
+    std::string block;    //!< block: l quantum number
     double Valence;   //!< number of valence electrons for this element
     int NoValenceOrbitals;  //!< number of valence orbitals, used for determining bond degree in molecule::CreateConnectmatrix()
@@ -46,17 +74,6 @@
     double HBondAngle[NDIM];     //!< typical angle for one, two, three bonded hydrogen (in degrees)
 
-  element();
-  ~element();
-
-  // accessor functions
-  atomicNumber_t getNumber() const;
-  std::string getSymbol() const;
-  std::string getName() const;
-
-  //> print element entries to screen
-  bool Output(std::ostream * const out) const;
-  bool Checkout(std::ostream * const out, const int No, const int NoOfAtoms) const;
-
-  private:
+    std::string name;  //!< atom name, i.e. "Hydrogen"
+    std::string symbol; //!< short form of the atom, i.e. "H"
 };
 
Index: src/elements_db.cpp
===================================================================
--- src/elements_db.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/elements_db.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * elements_db.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/ellipsoid.cpp
===================================================================
--- src/ellipsoid.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/ellipsoid.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ellipsoid.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/graph.cpp
===================================================================
--- src/graph.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/graph.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file graph.cpp
  *
@@ -4,4 +11,9 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/joiner.cpp
===================================================================
--- src/joiner.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/joiner.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file joiner.cpp
  *
@@ -7,4 +14,9 @@
 
 //============================ INCLUDES ===========================
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/leastsquaremin.cpp
===================================================================
--- src/leastsquaremin.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/leastsquaremin.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * leastsquaremin.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/linkedcell.cpp
===================================================================
--- src/linkedcell.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/linkedcell.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file linkedcell.cpp
  *
@@ -4,4 +11,9 @@
  *
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -23,6 +35,6 @@
 LinkedCell::LinkedCell() :
   LC(NULL),
-  index(-1),
-  RADIUS(0.)
+  RADIUS(0.),
+  index(-1)
 {
   for(int i=0;i<NDIM;i++)
@@ -37,6 +49,6 @@
  */
 LinkedCell::LinkedCell(const PointCloud * const set, const double radius) :
+  LC(NULL),
   RADIUS(radius),
-  LC(NULL),
   index(-1)
 {
@@ -113,6 +125,6 @@
  */
 LinkedCell::LinkedCell(LinkedNodes *set, const double radius) :
+  LC(NULL),
   RADIUS(radius),
-  LC(NULL),
   index(-1)
 {
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file molecules.cpp
  *
@@ -5,4 +12,5 @@
  */
 
+// include config.h
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -89,4 +97,17 @@
 }
 
+bool molecule::changeId(moleculeId_t newId){
+  // first we move ourselves in the world
+  // the world lets us know if that succeeded
+  if(World::getInstance().changeMoleculeId(id,newId,this)){
+    id = newId;
+    return true;
+  }
+  else{
+    return false;
+  }
+}
+
+
 moleculeId_t molecule::getId(){
   return id;
@@ -213,10 +234,9 @@
     pointer->sort = &pointer->nr;
     if (pointer->getType() != NULL) {
-      formula += pointer->getType();
-      if (pointer->getType()->Z != 1)
+      if (pointer->getType()->getAtomicNumber() != 1)
         NoNonHydrogen++;
       if(pointer->getName() == "Unknown"){
         stringstream sstr;
-        sstr << pointer->getType()->symbol << pointer->nr+1;
+        sstr << pointer->getType()->getSymbol() << pointer->nr+1;
         pointer->setName(sstr.str());
       }
@@ -239,9 +259,8 @@
   if (pointer != NULL) {
     atom *walker = pointer->clone();
-    formula += walker->getType();
     walker->setName(pointer->getName());
     walker->nr = last_atom++;  // increase number within molecule
     insert(walker);
-    if ((pointer->getType() != NULL) && (pointer->getType()->Z != 1))
+    if ((pointer->getType() != NULL) && (pointer->getType()->getAtomicNumber() != 1))
       NoNonHydrogen++;
     retval=walker;
@@ -329,5 +348,5 @@
   // get typical bond length and store as scale factor for later
   ASSERT(TopOrigin->getType() != NULL, "AddHydrogenReplacementAtom: element of TopOrigin is not given.");
-  BondRescale = TopOrigin->getType()->HBondDistance[TopBond->BondDegree-1];
+  BondRescale = TopOrigin->getType()->getHBondDistance(TopBond->BondDegree-1);
   if (BondRescale == -1) {
     DoeLog(1) && (eLog()<< Verbose(1) << "There is no typical hydrogen bond distance in replacing bond (" << TopOrigin->getName() << "<->" << TopReplacement->getName() << ") of degree " << TopBond->BondDegree << "!" << endl);
@@ -346,5 +365,5 @@
       FirstOtherAtom->AtomicVelocity = TopReplacement->AtomicVelocity; // copy velocity
       FirstOtherAtom->FixedIon = TopReplacement->FixedIon;
-      if (TopReplacement->getType()->Z == 1) { // neither rescale nor replace if it's already hydrogen
+      if (TopReplacement->getType()->getAtomicNumber() == 1) { // neither rescale nor replace if it's already hydrogen
         FirstOtherAtom->father = TopReplacement;
         BondRescale = bondlength;
@@ -415,5 +434,5 @@
       FirstOtherAtom->father = NULL;  // we are just an added hydrogen with no father
       SecondOtherAtom->father = NULL;  //  we are just an added hydrogen with no father
-      bondangle = TopOrigin->getType()->HBondAngle[1];
+      bondangle = TopOrigin->getType()->getHBondAngle(1);
       if (bondangle == -1) {
         DoeLog(1) && (eLog()<< Verbose(1) << "There is no typical hydrogen bond angle in replacing bond (" << TopOrigin->getName() << "<->" << TopReplacement->getName() << ") of degree " << TopBond->BondDegree << "!" << endl);
@@ -491,5 +510,5 @@
 
       // create correct coordination for the three atoms
-      alpha = (TopOrigin->getType()->HBondAngle[2])/180.*M_PI/2.;  // retrieve triple bond angle from database
+      alpha = (TopOrigin->getType()->getHBondAngle(2))/180.*M_PI/2.;  // retrieve triple bond angle from database
       l = BondRescale;        // desired bond length
       b = 2.*l*sin(alpha);    // base length of isosceles triangle
@@ -699,5 +718,5 @@
   atom1->RegisterBond(Binder);
   atom2->RegisterBond(Binder);
-  if ((atom1->getType() != NULL) && (atom1->getType()->Z != 1) && (atom2->getType() != NULL) && (atom2->getType()->Z != 1))
+  if ((atom1->getType() != NULL) && (atom1->getType()->getAtomicNumber() != 1) && (atom2->getType() != NULL) && (atom2->getType()->getAtomicNumber() != 1))
     NoNonBonds++;
 
@@ -765,5 +784,5 @@
 };
 
-/** Removes atom from molecule list and deletes it.
+/** Removes atom from molecule list and removes all of its bonds.
  * \param *pointer atom to be removed
  * \return true - succeeded, false - atom not found in list
@@ -773,5 +792,4 @@
   ASSERT(pointer, "Null pointer passed to molecule::RemoveAtom().");
   OBSERVE;
-  formula-=pointer->getType();
   RemoveBonds(pointer);
   erase(pointer);
@@ -787,5 +805,4 @@
   if (pointer == NULL)
     return false;
-  formula-=pointer->getType();
   erase(pointer);
   return true;
@@ -798,5 +815,5 @@
 {
   for (molecule::iterator iter = begin(); !empty(); iter = begin())
-      erase(iter);
+    erase(*iter);
   return empty();
 };
@@ -895,5 +912,7 @@
         ElementNo[i] = 0;
       }
-      SetIndexedArrayForEachAtomTo ( ElementNo, &element::Z, &AbsoluteValue, 1);
+      for(molecule::iterator iter = begin(); iter != end(); ++iter) {
+        ElementNo[(*iter)->getType()->getAtomicNumber()] = 1;
+      }
       int current=1;
       for (int i=0;i<MAX_ELEMENTS;++i) {
@@ -969,8 +988,8 @@
   for (molecule::const_iterator iter = atoms.begin(); iter != atoms.end(); ++iter) {
     (*iter)->nr = i;   // update number in molecule (for easier referencing in FragmentMolecule lateron)
-    if ((*iter)->getType()->Z != 1) // count non-hydrogen atoms whilst at it
+    if ((*iter)->getType()->getAtomicNumber() != 1) // count non-hydrogen atoms whilst at it
       NoNonHydrogen++;
     stringstream sstr;
-    sstr << (*iter)->getType()->symbol << (*iter)->nr+1;
+    sstr << (*iter)->getType()->getSymbol() << (*iter)->nr+1;
     (*iter)->setName(sstr.str());
     DoLog(3) && (Log() << Verbose(3) << "Naming atom nr. " << (*iter)->nr << " " << (*iter)->getName() << "." << endl);
@@ -978,110 +997,4 @@
   }
   return res;
-};
-
-/** Determines whether two molecules actually contain the same atoms and coordination.
- * \param *out output stream for debugging
- * \param *OtherMolecule the molecule to compare this one to
- * \param threshold upper limit of difference when comparing the coordination.
- * \return NULL - not equal, otherwise an allocated (molecule::AtomCount) permutation map of the atom numbers (which corresponds to which)
- */
-int * molecule::IsEqualToWithinThreshold(molecule *OtherMolecule, double threshold)
-{
-  int flag;
-  double *Distances = NULL, *OtherDistances = NULL;
-  Vector CenterOfGravity, OtherCenterOfGravity;
-  size_t *PermMap = NULL, *OtherPermMap = NULL;
-  int *PermutationMap = NULL;
-  bool result = true; // status of comparison
-
-  DoLog(3) && (Log() << Verbose(3) << "Begin of IsEqualToWithinThreshold." << endl);
-  /// first count both their atoms and elements and update lists thereby ...
-  //Log() << Verbose(0) << "Counting atoms, updating list" << endl;
-
-  /// ... and compare:
-  /// -# AtomCount
-  if (result) {
-    if (getAtomCount() != OtherMolecule->getAtomCount()) {
-      DoLog(4) && (Log() << Verbose(4) << "AtomCounts don't match: " << getAtomCount() << " == " << OtherMolecule->getAtomCount() << endl);
-      result = false;
-    } else Log() << Verbose(4) << "AtomCounts match: " << getAtomCount() << " == " << OtherMolecule->getAtomCount() << endl;
-  }
-  /// -# Formula
-  if (result) {
-    if (formula != OtherMolecule->formula) {
-      DoLog(4) && (Log() << Verbose(4) << "Formulas don't match: " << formula << " == " << OtherMolecule->formula << endl);
-      result = false;
-    } else Log() << Verbose(4) << "Formulas match: " << formula << " == " << OtherMolecule->formula << endl;
-  }
-  /// then determine and compare center of gravity for each molecule ...
-  if (result) {
-    DoLog(5) && (Log() << Verbose(5) << "Calculating Centers of Gravity" << endl);
-    DeterminePeriodicCenter(CenterOfGravity);
-    OtherMolecule->DeterminePeriodicCenter(OtherCenterOfGravity);
-    DoLog(5) && (Log() << Verbose(5) << "Center of Gravity: " << CenterOfGravity << endl);
-    DoLog(5) && (Log() << Verbose(5) << "Other Center of Gravity: " << OtherCenterOfGravity << endl);
-    if (CenterOfGravity.DistanceSquared(OtherCenterOfGravity) > threshold*threshold) {
-      DoLog(4) && (Log() << Verbose(4) << "Centers of gravity don't match." << endl);
-      result = false;
-    }
-  }
-
-  /// ... then make a list with the euclidian distance to this center for each atom of both molecules
-  if (result) {
-    DoLog(5) && (Log() << Verbose(5) << "Calculating distances" << endl);
-    Distances = new double[getAtomCount()];
-    OtherDistances = new double[getAtomCount()];
-    SetIndexedArrayForEachAtomTo ( Distances, &atom::nr, &atom::DistanceSquaredToVector, (const Vector &)CenterOfGravity);
-    SetIndexedArrayForEachAtomTo ( OtherDistances, &atom::nr, &atom::DistanceSquaredToVector, (const Vector &)CenterOfGravity);
-    for(int i=0;i<getAtomCount();i++) {
-      Distances[i] = 0.;
-      OtherDistances[i] = 0.;
-    }
-
-    /// ... sort each list (using heapsort (o(N log N)) from GSL)
-    DoLog(5) && (Log() << Verbose(5) << "Sorting distances" << endl);
-    PermMap = new size_t[getAtomCount()];
-    OtherPermMap = new size_t[getAtomCount()];
-    for(int i=0;i<getAtomCount();i++) {
-      PermMap[i] = 0;
-      OtherPermMap[i] = 0;
-    }
-    gsl_heapsort_index (PermMap, Distances, getAtomCount(), sizeof(double), CompareDoubles);
-    gsl_heapsort_index (OtherPermMap, OtherDistances, getAtomCount(), sizeof(double), CompareDoubles);
-    PermutationMap = new int[getAtomCount()];
-    for(int i=0;i<getAtomCount();i++)
-      PermutationMap[i] = 0;
-    DoLog(5) && (Log() << Verbose(5) << "Combining Permutation Maps" << endl);
-    for(int i=getAtomCount();i--;)
-      PermutationMap[PermMap[i]] = (int) OtherPermMap[i];
-
-    /// ... and compare them step by step, whether the difference is individually(!) below \a threshold for all
-    DoLog(4) && (Log() << Verbose(4) << "Comparing distances" << endl);
-    flag = 0;
-    for (int i=0;i<getAtomCount();i++) {
-      DoLog(5) && (Log() << Verbose(5) << "Distances squared: |" << Distances[PermMap[i]] << " - " << OtherDistances[OtherPermMap[i]] << "| = " << fabs(Distances[PermMap[i]] - OtherDistances[OtherPermMap[i]]) << " ?<? " <<  threshold << endl);
-      if (fabs(Distances[PermMap[i]] - OtherDistances[OtherPermMap[i]]) > threshold*threshold)
-        flag = 1;
-    }
-
-    // free memory
-    delete[](PermMap);
-    delete[](OtherPermMap);
-    delete[](Distances);
-    delete[](OtherDistances);
-    if (flag) { // if not equal
-      delete[](PermutationMap);
-      result = false;
-    }
-  }
-  /// return pointer to map if all distances were below \a threshold
-  DoLog(3) && (Log() << Verbose(3) << "End of IsEqualToWithinThreshold." << endl);
-  if (result) {
-    DoLog(3) && (Log() << Verbose(3) << "Result: Equal." << endl);
-    return PermutationMap;
-  } else {
-    DoLog(3) && (Log() << Verbose(3) << "Result: Not equal." << endl);
-    return NULL;
-  }
 };
 
Index: src/molecule.hpp
===================================================================
--- src/molecule.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -104,5 +104,5 @@
     double BondDistance;  //!< typical bond distance used in CreateAdjacencyList() and furtheron
     bool ActiveFlag;    //!< in a MoleculeListClass used to discern active from inactive molecules
-    Vector Center;      //!< Center of molecule in a global box
+    //Vector Center;      //!< Center of molecule in a global box
     int IndexNr;        //!< index of molecule in a MoleculeListClass
     char name[MAXSTRINGSIZE];         //!< arbitrary name
@@ -141,4 +141,5 @@
   bool hasElement(const std::string&) const;
 
+  virtual bool changeId(atomId_t newId);
 
   iterator begin();
@@ -324,5 +325,4 @@
 
   // Recognize doubly appearing molecules in a list of them
-  int * IsEqualToWithinThreshold(molecule *OtherMolecule, double threshold);
   int * GetFatherSonAtomicMap(molecule *OtherMolecule);
 
@@ -368,5 +368,4 @@
   void Enumerate(ostream *out);
   void Output(ofstream *out);
-  void DissectMoleculeIntoConnectedSubgraphs(const periodentafel * const periode, config * const configuration);
   int CountAllAtoms() const;
 
@@ -379,13 +378,4 @@
   void parseXYZIntoMolecule();
   void eraseMolecule();
-
-
-  // merging of molecules
-  bool SimpleMerge(molecule *mol, molecule *srcmol);
-  bool SimpleAdd(molecule *mol, molecule *srcmol);
-  bool SimpleMultiMerge(molecule *mol, int *src, int N);
-  bool SimpleMultiAdd(molecule *mol, int *src, int N);
-  bool ScatterMerge(molecule *mol, int *src, int N);
-  bool EmbedMerge(molecule *mol, molecule *srcmol);
 
   private:
Index: src/molecule_dynamics.cpp
===================================================================
--- src/molecule_dynamics.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule_dynamics.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * molecule_dynamics.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/molecule_fragmentation.cpp
===================================================================
--- src/molecule_fragmentation.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule_fragmentation.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * molecule_fragmentation.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -451,5 +463,5 @@
       for (molecule::const_iterator iter = begin(); iter != end(); ++iter) {
     #ifdef ADDHYDROGEN
-        if ((*iter)->getType()->Z != 1) // skip hydrogen
+        if ((*iter)->getType()->getAtomicNumber() != 1) // skip hydrogen
     #endif
         {
@@ -471,5 +483,5 @@
     for(molecule::const_iterator iter = begin(); iter != end(); ++iter) {
   #ifdef ADDHYDROGEN
-      if ((*iter)->getType()->Z != 1) // skip hydrogen
+      if ((*iter)->getType()->getAtomicNumber() != 1) // skip hydrogen
   #endif
       {
@@ -880,5 +892,5 @@
   for (KeySet::iterator runner = Leaf->begin(); runner != Leaf->end(); runner++) {
     Runner = FindAtom((*runner));
-    if (Runner->getType()->Z != 1) { // skip all those added hydrogens when re-filling snake stack
+    if (Runner->getType()->getAtomicNumber() != 1) { // skip all those added hydrogens when re-filling snake stack
       if (ShortestPathList[(*runner)] > SP) {  // remove the oldest one with longest shortest path
         SP = ShortestPathList[(*runner)];
@@ -969,5 +981,5 @@
     ++iter;
 #ifdef ADDHYDROGEN
-    while ((iter != Leaf->end()) && ((*iter)->getType()->Z == 1)){ // skip added hydrogen
+    while ((iter != Leaf->end()) && ((*iter)->getType()->getAtomicNumber() == 1)){ // skip added hydrogen
       iter++;
     }
@@ -1347,5 +1359,5 @@
         if ((RestrictedKeySet.find(OtherWalker->nr) != RestrictedKeySet.end())
   #ifdef ADDHYDROGEN
-         && (OtherWalker->getType()->Z != 1)
+         && (OtherWalker->getType()->getAtomicNumber() != 1)
   #endif
                                                               ) {  // skip hydrogens and restrict to fragment
Index: src/molecule_geometry.cpp
===================================================================
--- src/molecule_geometry.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule_geometry.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * molecule_geometry.cpp
@@ -6,11 +13,13 @@
  */
 
+// include config.h
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 
+#include "Helpers/MemDebug.hpp"
+
 #include "Helpers/helpers.hpp"
 #include "Helpers/Log.hpp"
-#include "Helpers/MemDebug.hpp"
 #include "Helpers/Verbose.hpp"
 #include "LinearAlgebra/Line.hpp"
@@ -104,5 +113,4 @@
     (*max) += (*min);
     Translate(min);
-    Center.Zero();
   }
   delete(min);
@@ -118,7 +126,7 @@
   int Num = 0;
   molecule::const_iterator iter = begin();  // start at first in list
+  Vector Center;
 
   Center.Zero();
-
   if (iter != end()) {   //list not empty?
     for (; iter != end(); ++iter) {  // continue with second if present
@@ -128,5 +136,4 @@
     Center.Scale(-1./(double)Num); // divide through total number (and sign for direction)
     Translate(&Center);
-    Center.Zero();
   }
 };
@@ -179,6 +186,6 @@
   if (iter != end()) {   //list not empty?
     for (; iter != end(); ++iter) {  // continue with second if present
-      Num += (*iter)->getType()->mass;
-      tmp = (*iter)->getType()->mass * (*iter)->getPosition();
+      Num += (*iter)->getType()->getMass();
+      tmp = (*iter)->getType()->getMass() * (*iter)->getPosition();
       (*a) += tmp;
     }
@@ -197,5 +204,10 @@
 void molecule::CenterPeriodic()
 {
-  DeterminePeriodicCenter(Center);
+  Vector NewCenter;
+  DeterminePeriodicCenter(NewCenter);
+  // go through all atoms
+  BOOST_FOREACH(atom* iter, atoms){
+    *iter -= NewCenter;
+  }
 };
 
@@ -207,5 +219,8 @@
 void molecule::CenterAtVector(Vector *newcenter)
 {
-  Center = *newcenter;
+  // go through all atoms
+  BOOST_FOREACH(atom* iter, atoms){
+    *iter -= *newcenter;
+  }
 };
 
@@ -277,4 +292,5 @@
   bool flag;
   Vector Testvector, Translationvector;
+  Vector Center;
 
   do {
@@ -283,5 +299,5 @@
     for (molecule::const_iterator iter = begin(); iter != end(); ++iter) {
 #ifdef ADDHYDROGEN
-      if ((*iter)->getType()->Z != 1) {
+      if ((*iter)->getType()->getAtomicNumber() != 1) {
 #endif
         Testvector = inversematrix * (*iter)->getPosition();
@@ -308,5 +324,5 @@
         // now also change all hydrogens
         for (BondList::const_iterator Runner = (*iter)->ListOfBonds.begin(); Runner != (*iter)->ListOfBonds.end(); (++Runner)) {
-          if ((*Runner)->GetOtherAtom((*iter))->getType()->Z == 1) {
+          if ((*Runner)->GetOtherAtom((*iter))->getType()->getAtomicNumber() == 1) {
             Testvector = inversematrix * (*Runner)->GetOtherAtom((*iter))->getPosition();
             Testvector += Translationvector;
@@ -322,4 +338,5 @@
 
   Center.Scale(1./static_cast<double>(getAtomCount()));
+  CenterAtVector(&Center);
 };
 
Index: src/molecule_graph.cpp
===================================================================
--- src/molecule_graph.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule_graph.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * molecule_graph.cpp
@@ -6,4 +13,5 @@
  */
 
+// include config.h
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -737,5 +745,5 @@
         OtherAtom = (*Runner)->GetOtherAtom(Walker);
 #ifdef ADDHYDROGEN
-        if (OtherAtom->getType()->Z != 1) {
+        if (OtherAtom->getType()->getAtomicNumber() != 1) {
 #endif
         DoLog(2) && (Log() << Verbose(2) << "Current OtherAtom is: " << OtherAtom->getName() << " for bond " << *(*Runner) << "." << endl);
Index: src/molecule_pointcloud.cpp
===================================================================
--- src/molecule_pointcloud.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/molecule_pointcloud.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * molecule_pointcloud.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/moleculelist.cpp
===================================================================
--- src/moleculelist.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/moleculelist.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file MoleculeListClass.cpp
  *
@@ -5,4 +12,5 @@
  */
 
+// include config.h
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -44,6 +52,6 @@
 MoleculeListClass::MoleculeListClass(World *_world) :
   Observable("MoleculeListClass"),
-  world(_world),
-  MaxIndex(1)
+  MaxIndex(1),
+  world(_world)
 {};
 
@@ -193,5 +201,7 @@
       }
       // Center and size
-      (*out) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl;
+      Vector *Center = (*ListRunner)->DetermineCenterOfAll();
+      (*out) << "\t" << *Center << "\t" << sqrt(size) << endl;
+      delete(Center);
     }
   }
@@ -210,166 +220,4 @@
 };
 
-/** Simple merge of two molecules into one.
- * \param *mol destination molecule
- * \param *srcmol source molecule
- * \return true - merge successful, false - merge failed (probably due to non-existant indices
- */
-bool MoleculeListClass::SimpleMerge(molecule *mol, molecule *srcmol)
-{
-  if (srcmol == NULL)
-    return false;
-
-  // put all molecules of src into mol
-  for (molecule::iterator iter = srcmol->begin(); !srcmol->empty(); iter=srcmol->begin()) {
-    atom * const Walker = *iter;
-    srcmol->UnlinkAtom(Walker);
-    mol->AddAtom(Walker);
-  }
-
-  // remove src
-  ListOfMolecules.remove(srcmol);
-  World::getInstance().destroyMolecule(srcmol);
-  return true;
-};
-
-/** Simple add of one molecules into another.
- * \param *mol destination molecule
- * \param *srcmol source molecule
- * \return true - merge successful, false - merge failed (probably due to non-existant indices
- */
-bool MoleculeListClass::SimpleAdd(molecule *mol, molecule *srcmol)
-{
-  if (srcmol == NULL)
-    return false;
-
-  // put all molecules of src into mol
-  atom *Walker = NULL;
-  for (molecule::iterator iter = srcmol->begin(); iter != srcmol->end(); ++iter) {
-    Walker = mol->AddCopyAtom((*iter));
-    Walker->father = Walker;
-  }
-
-  return true;
-};
-
-/** Simple merge of a given set of molecules into one.
- * \param *mol destination molecule
- * \param *src index of set of source molecule
- * \param N number of source molecules
- * \return true - merge successful, false - some merges failed (probably due to non-existant indices)
- */
-bool MoleculeListClass::SimpleMultiMerge(molecule *mol, int *src, int N)
-{
-  bool status = true;
-  // check presence of all source molecules
-  for (int i=0;i<N;i++) {
-    molecule *srcmol = ReturnIndex(src[i]);
-    status = status && SimpleMerge(mol, srcmol);
-  }
-  insert(mol);
-  return status;
-};
-
-/** Simple add of a given set of molecules into one.
- * \param *mol destination molecule
- * \param *src index of set of source molecule
- * \param N number of source molecules
- * \return true - merge successful, false - some merges failed (probably due to non-existant indices)
- */
-bool MoleculeListClass::SimpleMultiAdd(molecule *mol, int *src, int N)
-{
-  bool status = true;
-  // check presence of all source molecules
-  for (int i=0;i<N;i++) {
-    molecule *srcmol = ReturnIndex(src[i]);
-    status = status && SimpleAdd(mol, srcmol);
-  }
-  return status;
-};
-
-/** Scatter merge of a given set of molecules into one.
- * Scatter merge distributes the molecules in such a manner that they don't overlap.
- * \param *mol destination molecule
- * \param *src index of set of source molecule
- * \param N number of source molecules
- * \return true - merge successful, false - merge failed (probably due to non-existant indices
- * \TODO find scatter center for each src molecule
- */
-bool MoleculeListClass::ScatterMerge(molecule *mol, int *src, int N)
-{
-  // check presence of all source molecules
-  for (int i=0;i<N;i++) {
-    // get pointer to src molecule
-    molecule *srcmol = ReturnIndex(src[i]);
-    if (srcmol == NULL)
-      return false;
-  }
-  // adapt each Center
-  for (int i=0;i<N;i++) {
-    // get pointer to src molecule
-    molecule *srcmol = ReturnIndex(src[i]);
-    //srcmol->Center.Zero();
-    srcmol->Translate(&srcmol->Center);
-  }
-  // perform a simple multi merge
-  SimpleMultiMerge(mol, src, N);
-  return true;
-};
-
-/** Embedding merge of a given set of molecules into one.
- * Embedding merge inserts one molecule into the other.
- * \param *mol destination molecule (fixed one)
- * \param *srcmol source molecule (variable one, where atoms are taken from)
- * \return true - merge successful, false - merge failed (probably due to non-existant indices)
- * \TODO linked cell dimensions for boundary points has to be as big as inner diameter!
- */
-bool MoleculeListClass::EmbedMerge(molecule *mol, molecule *srcmol)
-{
-  LinkedCell *LCList = NULL;
-  Tesselation *TesselStruct = NULL;
-  if ((srcmol == NULL) || (mol == NULL)) {
-    DoeLog(1) && (eLog()<< Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl);
-    return false;
-  }
-
-  // calculate envelope for *mol
-  LCList = new LinkedCell(mol, 8.);
-  FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL);
-  if (TesselStruct == NULL) {
-    DoeLog(1) && (eLog()<< Verbose(1) << "Could not tesselate the fixed molecule." << endl);
-    return false;
-  }
-  delete(LCList);
-  LCList = new LinkedCell(TesselStruct, 8.);  // re-create with boundary points only!
-
-  // prepare index list for bonds
-  atom ** CopyAtoms = new atom*[srcmol->getAtomCount()];
-  for(int i=0;i<srcmol->getAtomCount();i++)
-    CopyAtoms[i] = NULL;
-
-  // for each of the source atoms check whether we are in- or outside and add copy atom
-  int nr=0;
-  for (molecule::const_iterator iter = srcmol->begin(); iter != srcmol->end(); ++iter) {
-    DoLog(2) && (Log() << Verbose(2) << "INFO: Current Walker is " << **iter << "." << endl);
-    if (!TesselStruct->IsInnerPoint((*iter)->getPosition(), LCList)) {
-      CopyAtoms[(*iter)->nr] = (*iter)->clone();
-      mol->AddAtom(CopyAtoms[(*iter)->nr]);
-      nr++;
-    } else {
-      // do nothing
-    }
-  }
-  DoLog(1) && (Log() << Verbose(1) << nr << " of " << srcmol->getAtomCount() << " atoms have been merged.");
-
-  // go through all bonds and add as well
-  for(molecule::iterator AtomRunner = srcmol->begin(); AtomRunner != srcmol->end(); ++AtomRunner)
-    for(BondList::iterator BondRunner = (*AtomRunner)->ListOfBonds.begin(); BondRunner != (*AtomRunner)->ListOfBonds.end(); ++BondRunner)
-      if ((*BondRunner)->leftatom == *AtomRunner) {
-        DoLog(3) && (Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[(*BondRunner)->leftatom->nr] << " and " << *CopyAtoms[(*BondRunner)->rightatom->nr]<< "." << endl);
-        mol->AddBond(CopyAtoms[(*BondRunner)->leftatom->nr], CopyAtoms[(*BondRunner)->rightatom->nr], (*BondRunner)->BondDegree);
-      }
-  delete(LCList);
-  return true;
-};
 
 /** Simple output of the pointers in ListOfMolecules.
@@ -499,11 +347,11 @@
     for (molecule::const_iterator iter = (*ListRunner)->begin(); iter != (*ListRunner)->end(); ++iter) {
       //Log() << Verbose(1) << "(*iter): " << *(*iter) << " with first bond " << *((*iter)->ListOfBonds.begin()) << "." << endl;
-      if (((*iter)->getType()->Z == 1) && (((*iter)->father == NULL)
-          || ((*iter)->father->getType()->Z != 1))) { // if it's a hydrogen
+      if (((*iter)->getType()->getAtomicNumber() == 1) && (((*iter)->father == NULL)
+          || ((*iter)->father->getType()->getAtomicNumber() != 1))) { // if it's a hydrogen
         for (molecule::const_iterator runner = (*ListRunner)->begin(); runner != (*ListRunner)->end(); ++runner) {
           //Log() << Verbose(2) << "Runner: " << *(*runner) << " with first bond " << *((*iter)->ListOfBonds.begin()) << "." << endl;
           // 3. take every other hydrogen that is the not the first and not bound to same bonding partner
           Binder = *((*runner)->ListOfBonds.begin());
-          if (((*runner)->getType()->Z == 1) && ((*runner)->nr > (*iter)->nr) && (Binder->GetOtherAtom((*runner)) != Binder->GetOtherAtom((*iter)))) { // (hydrogens have only one bonding partner!)
+          if (((*runner)->getType()->getAtomicNumber() == 1) && ((*runner)->nr > (*iter)->nr) && (Binder->GetOtherAtom((*runner)) != Binder->GetOtherAtom((*iter)))) { // (hydrogens have only one bonding partner!)
             // 4. evaluate the morse potential for each matrix component and add up
             distance = (*runner)->distance(*(*iter));
@@ -744,103 +592,4 @@
 };
 
-/** Dissects given \a *mol into connected subgraphs and inserts them as new molecules but with old atoms into \a this.
- * \param *out output stream for debugging
- * \param *periode periodentafel
- * \param *configuration config with BondGraph
- */
-void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(const periodentafel * const periode, config * const configuration)
-{
-  // 0a. remove all present molecules
-  vector<molecule *> allmolecules = World::getInstance().getAllMolecules();
-  for (vector<molecule *>::iterator MolRunner = allmolecules.begin(); MolRunner != allmolecules.end(); ++MolRunner) {
-    erase(*MolRunner);
-    World::getInstance().destroyMolecule(*MolRunner);
-  }
-  // 0b. remove all bonds and construct a molecule with all atoms
-  molecule *mol = World::getInstance().createMolecule();
-  vector <atom *> allatoms = World::getInstance().getAllAtoms();
-  for(vector<atom *>::iterator AtomRunner = allatoms.begin(); AtomRunner != allatoms.end(); ++AtomRunner) {
-    for(BondList::iterator BondRunner = (*AtomRunner)->ListOfBonds.begin(); !(*AtomRunner)->ListOfBonds.empty(); BondRunner = (*AtomRunner)->ListOfBonds.begin())
-      delete(*BondRunner);
-    mol->AddAtom(*AtomRunner);
-  }
-
-  // 1. dissect the molecule into connected subgraphs
-  if (configuration->BG != NULL) {
-    if (!configuration->BG->ConstructBondGraph(mol)) {
-      World::getInstance().destroyMolecule(mol);
-      DoeLog(1) && (eLog()<< Verbose(1) << "There are no bonds." << endl);
-      return;
-    }
-  } else {
-    DoeLog(1) && (eLog()<< Verbose(1) << "There is no BondGraph class present to create bonds." << endl);
-    return;
-  }
-
-  // 2. scan for connected subgraphs
-  MoleculeLeafClass *Subgraphs = NULL;      // list of subgraphs from DFS analysis
-  class StackClass<bond *> *BackEdgeStack = NULL;
-  Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack);
-  delete(BackEdgeStack);
-  if ((Subgraphs == NULL) || (Subgraphs->next == NULL)) {
-    World::getInstance().destroyMolecule(mol);
-    DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms." << endl);
-    return;
-  }
-
-  // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in
-  // the original one as parsed in)
-  // TODO: Optimize this, when molecules just contain pointer list of global atoms!
-
-  // 4a. create array of molecules to fill
-  const int MolCount = Subgraphs->next->Count();
-  char number[MAXSTRINGSIZE];
-  molecule **molecules = new molecule *[MolCount];
-  MoleculeLeafClass *MolecularWalker = Subgraphs;
-  for (int i=0;i<MolCount;i++) {
-    MolecularWalker = MolecularWalker->next;
-    molecules[i] = World::getInstance().createMolecule();
-    molecules[i]->ActiveFlag = true;
-    strncpy(molecules[i]->name, mol->name, MAXSTRINGSIZE);
-    if (MolCount > 1) {
-      sprintf(number, "-%d", i+1);
-      strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
-    }
-    DoLog(1) && (Log() << Verbose(1) << "MolName is " << molecules[i]->name << ", id is " << molecules[i]->getId() << endl);
-    for (molecule::iterator iter = MolecularWalker->Leaf->begin(); iter != MolecularWalker->Leaf->end(); ++iter) {
-      DoLog(1) && (Log() << Verbose(1) << **iter << endl);
-    }
-    insert(molecules[i]);
-  }
-
-  // 4b. create and fill map of which atom is associated to which connected molecule (note, counting starts at 1)
-  int FragmentCounter = 0;
-  map<int, atom *> AtomToFragmentMap;
-  MolecularWalker = Subgraphs;
-  while (MolecularWalker->next != NULL) {
-    MolecularWalker = MolecularWalker->next;
-    for (molecule::iterator iter = MolecularWalker->Leaf->begin(); !MolecularWalker->Leaf->empty(); iter = MolecularWalker->Leaf->begin()) {
-      atom * Walker = *iter;
-      DoLog(1) && (Log() << Verbose(1) << "Re-linking " << Walker << "..." << endl);
-      MolecularWalker->Leaf->erase(iter);
-      molecules[FragmentCounter]->AddAtom(Walker);    // counting starts at 1
-    }
-    FragmentCounter++;
-  }
-  World::getInstance().destroyMolecule(mol);
-
-  // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintain their ListOfBonds, but we have to remove them from first..last list
-  // TODO: check whether this is really not needed anymore
-  // 4e. free Leafs
-  MolecularWalker = Subgraphs;
-  while (MolecularWalker->next != NULL) {
-    MolecularWalker = MolecularWalker->next;
-    delete(MolecularWalker->previous);
-  }
-  delete(MolecularWalker);
-  delete[](molecules);
-  DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl);
-};
-
 /** Count all atoms in each molecule.
  * \return number of atoms in the MoleculeListClass.
@@ -1087,5 +836,5 @@
         if (AtomMask[Father->nr]) // apply mask
 #ifdef ADDHYDROGEN
-          if ((*iter)->getType()->Z != 1) // skip hydrogen
+          if ((*iter)->getType()->getAtomicNumber() != 1) // skip hydrogen
 #endif
           RootStack[FragmentCounter].push_front((*iter)->nr);
Index: src/parser.cpp
===================================================================
--- src/parser.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/parser.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file parsing.cpp
  *
@@ -7,16 +14,16 @@
 // ======================================= INCLUDES ==========================================
 
-#include "Helpers/MemDebug.hpp"
-
-#include <cstring>
-
-#include "Helpers/helpers.hpp"
-#include "parser.hpp"
-#include "Helpers/Verbose.hpp"
-
 // include config.h
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include <cstring>
+
+#include "Helpers/helpers.hpp"
+#include "parser.hpp"
+#include "Helpers/Verbose.hpp"
 
 // ======================================= FUNCTIONS ==========================================
Index: src/periodentafel.cpp
===================================================================
--- src/periodentafel.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/periodentafel.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /** \file periodentafel.cpp
  *
@@ -5,7 +12,10 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "Helpers/MemDebug.hpp"
-
-using namespace std;
 
 #include <iomanip>
@@ -34,5 +44,5 @@
   {
     stringstream input(elementsDB,ios_base::in);
-    bool status = LoadElementsDatabase(&input);
+    bool status = LoadElementsDatabase(input);
     ASSERT(status,  "General element initialization failed");
   }
@@ -72,9 +82,8 @@
  * \return iterator to added element
  */
-periodentafel::iterator periodentafel::AddElement(element * const pointer)
+periodentafel::iterator periodentafel::AddElement(element * pointer)
 {
   atomicNumber_t Z = pointer->getNumber();
   ASSERT(!elements.count(Z), "Element is already present.");
-  pointer->sort = &pointer->Z;
   if (pointer->getNumber() < 1 && pointer->getNumber() >= MAX_ELEMENTS)
     DoeLog(0) && (eLog() << Verbose(0) << "Invalid Z number!\n");
@@ -86,5 +95,5 @@
  * \param *pointer element to be removed
  */
-size_t periodentafel::RemoveElement(element * const pointer)
+size_t periodentafel::RemoveElement(const element * pointer)
 {
   return RemoveElement(pointer->getNumber());
@@ -114,5 +123,5 @@
  * \return pointer to element or NULL if not found
  */
-element * const periodentafel::FindElement(atomicNumber_t Z) const
+const element * periodentafel::FindElement(atomicNumber_t Z) const
 {
   const_iterator res = elements.find(Z);
@@ -125,5 +134,5 @@
  * \return pointer to element
  */
-element * const periodentafel::FindElement(const string &shorthand) const
+const element * periodentafel::FindElement(const string &shorthand) const
 {
   element *res = 0;
@@ -140,7 +149,7 @@
  * \return desired element or NULL
  */
-element * const periodentafel::AskElement() const
-{
-  element * walker = NULL;
+const element * periodentafel::AskElement() const
+{
+  const element * walker = NULL;
   int Z;
   do {
@@ -155,10 +164,10 @@
  * \return pointer to either present or newly created element
  */
-element * const periodentafel::EnterElement()
+const element * periodentafel::EnterElement()
 {
   atomicNumber_t Z = 0;
   DoLog(0) && (Log() << Verbose(0) << "Atomic number: " << Z << endl);
   cin >> Z;
-  element * const res = FindElement(Z);
+  const element *res = FindElement(Z);
   if (!res) {
     // TODO: make this using the constructor
@@ -169,7 +178,7 @@
     cin >> tmp->mass;
     DoLog(0) && (Log() << Verbose(0) << "Name [max 64 chars]: " << endl);
-    cin >> tmp->name;
+    cin >> tmp->getName();
     DoLog(0) && (Log() << Verbose(0) << "Short form [max 3 chars]: " << endl);
-    cin >> tmp->symbol;
+    cin >> tmp->getSymbol();
     AddElement(tmp);
     return tmp;
@@ -180,17 +189,17 @@
 
 /******************** Access to iterators ****************************/
-periodentafel::const_iterator periodentafel::begin(){
+periodentafel::const_iterator periodentafel::begin() const{
   return elements.begin();
 }
 
-periodentafel::const_iterator periodentafel::end(){
+periodentafel::const_iterator periodentafel::end() const{
   return elements.end();
 }
 
-periodentafel::reverse_iterator periodentafel::rbegin(){
+periodentafel::reverse_iterator periodentafel::rbegin() const{
   return reverse_iterator(elements.end());
 }
 
-periodentafel::reverse_iterator periodentafel::rend(){
+periodentafel::reverse_iterator periodentafel::rend() const{
   return reverse_iterator(elements.begin());
 }
@@ -228,5 +237,5 @@
   if (!input.fail())
     DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as elements database." << endl);
-  status = status && LoadElementsDatabase(&input);
+  status = status && LoadElementsDatabase(input);
   input.close();
   input.clear();
@@ -287,49 +296,41 @@
  * \return true - parsing successful, false - something went wrong
  */
-bool periodentafel::LoadElementsDatabase(istream *input)
+bool periodentafel::LoadElementsDatabase(istream &input)
 {
   bool status = true;
-  int counter = 0;
-  pair< std::map<atomicNumber_t,element*>::iterator, bool > InserterTest;
-  if (!(*input).fail()) {
-    (*input).getline(header1, MAXSTRINGSIZE);
-    (*input).getline(header2, MAXSTRINGSIZE); // skip first two header lines
+  string header1tmp,header2tmp;
+  // first parse into a map, so we can revert to old status in case something goes wront
+  map<atomicNumber_t,element*> parsedElements;
+  if (!input.fail()) {
+    getline(input,header1tmp);
+    getline(input,header2tmp); // skip first two header lines
+    //cout << "First header: " << header1tmp << endl;
+    //cout << "Second header: " << header2tmp << endl;
     DoLog(0) && (Log() << Verbose(0) <<  "Parsed elements:");
-    while (!(*input).eof()) {
+    while (!input.eof()) {
       element *neues = new element;
-      (*input) >> neues->name;
-      //(*input) >> ws;
-      (*input) >> neues->symbol;
-      //(*input) >> ws;
-      (*input) >> neues->period;
-      //(*input) >> ws;
-      (*input) >> neues->group;
-      //(*input) >> ws;
-      (*input) >> neues->block;
-      //(*input) >> ws;
-      (*input) >> neues->Z;
-      //(*input) >> ws;
-      (*input) >> neues->mass;
-      //(*input) >> ws;
-      (*input) >> neues->CovalentRadius;
-      //(*input) >> ws;
-      (*input) >> neues->VanDerWaalsRadius;
-      //(*input) >> ws;
-      (*input) >> ws;
+      input >> neues->name;
+      //(*input) >> ws;
+      input >> neues->symbol;
+      //(*input) >> ws;
+      input >> neues->period;
+      //(*input) >> ws;
+      input >> neues->group;
+      //(*input) >> ws;
+      input >> neues->block;
+      //(*input) >> ws;
+      input >> neues->Z;
+      //(*input) >> ws;
+      input >> neues->mass;
+      //(*input) >> ws;
+      input >> neues->CovalentRadius;
+      //(*input) >> ws;
+      input >> neues->VanDerWaalsRadius;
+      //(*input) >> ws;
+      input >> ws;
       //neues->Output((ofstream *)&cout);
       if ((neues->getNumber() > 0) && (neues->getNumber() < MAX_ELEMENTS)) {
-        if (elements.count(neues->getNumber())) {// if element already present, remove and delete old one (i.e. replace it)
-          //cout << neues->symbol << " is present already." << endl;
-          element * const Elemental = FindElement(neues->getNumber());
-          ASSERT(Elemental != NULL, "element should be present but is not??");
-          *Elemental = *neues;
-          delete(neues);
-          neues = Elemental;
-        } else {
-          InserterTest = elements.insert(pair <atomicNumber_t,element*> (neues->getNumber(), neues));
-          ASSERT(InserterTest.second, "Could not insert new element into periodentafel on LoadElementsDatabase().");
-        }
-        DoLog(0) && (Log() << Verbose(0) << " " << elements[neues->getNumber()]->symbol);
-        counter++;
+        parsedElements[neues->Z] = neues;
+        DoLog(0) && (Log() << Verbose(0) << " " << *neues);
       } else {
         DoeLog(2) && (eLog() << Verbose(2) << "Detected empty line or invalid element in elements db, discarding." << endl);
@@ -337,4 +338,10 @@
         delete(neues);
       }
+      // when the input is in failed state, we most likely just read garbage
+      if(input.fail()) {
+        DoeLog(2) && (eLog() << Verbose(2) << "Error parsing elements db." << endl);
+        status = false;
+        break;
+      }
     }
     DoLog(0) && (Log() << Verbose(0) << endl);
@@ -344,6 +351,28 @@
   }
 
-  if (counter == 0)
+  if (!parsedElements.size())
     status = false;
+
+  if(status){
+    for(map<atomicNumber_t,element*>::iterator iter=parsedElements.begin();
+                                               iter!=parsedElements.end();
+                                               ++iter){
+      if (elements.count(iter->first)) {
+        // if element already present, replace the old one
+        // pointer to old element might still be in use, so we have to replace into the old element
+        *(elements[iter->first])=*iter->second;
+        delete(iter->second);
+      }
+      else {
+        // no such element in periodentafel... we can just insert
+        elements[iter->first] = iter->second;
+      }
+    }
+    // all went well.. we now copy the header
+    strncpy(header1,header1tmp.c_str(),MAXSTRINGSIZE);
+    header1[MAXSTRINGSIZE-1]=0;
+    strncpy(header2,header2tmp.c_str(),MAXSTRINGSIZE);
+    header2[MAXSTRINGSIZE-1]=0;
+  }
 
   return status;
Index: src/periodentafel.hpp
===================================================================
--- src/periodentafel.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/periodentafel.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -43,17 +43,17 @@
   ~periodentafel();
 
-  iterator AddElement(element * const pointer);
-  size_t RemoveElement(element * const pointer);
+  iterator AddElement(element * pointer);
+  size_t RemoveElement(const element * pointer);
   size_t RemoveElement(atomicNumber_t);
   void CleanupPeriodtable();
-  element * const FindElement(atomicNumber_t) const;
-  element * const FindElement(const std::string &shorthand) const;
-  element * const AskElement() const;
-  element * const EnterElement();
+  const element * FindElement(atomicNumber_t) const;
+  const element * FindElement(const std::string &shorthand) const;
+  const element * AskElement() const;
+  const element * EnterElement();
 
-  const_iterator begin();
-  const_iterator end();
-  reverse_iterator rbegin();
-  reverse_iterator rend();
+  const_iterator begin() const;
+  const_iterator end() const;
+  reverse_iterator rbegin() const;
+  reverse_iterator rend() const;
   bool Output(std::ostream * const output) const;
   bool LoadPeriodentafel(const char * const path);
@@ -62,5 +62,5 @@
   private:
 
-  bool LoadElementsDatabase(std::istream *input);
+  bool LoadElementsDatabase(std::istream &input);
   bool LoadValenceDatabase(std::istream *input);
   bool LoadOrbitalsDatabase(std::istream *input);
Index: src/tesselation.cpp
===================================================================
--- src/tesselation.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/tesselation.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * tesselation.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/tesselationhelpers.cpp
===================================================================
--- src/tesselationhelpers.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/tesselationhelpers.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TesselationHelpers.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
@@ -165,5 +177,6 @@
   Center += helper[1] * b;
   Center += helper[2] * c;
-  Center.Scale(1./(helper[0]+helper[1]+helper[2]));
+  if (fabs(helper[0]+helper[1]+helper[2]) > MYEPSILON)
+    Center.Scale(1./(helper[0]+helper[1]+helper[2]));
   Log() << Verbose(1) << "INFO: Center (2nd algo) is at " << Center << "." << endl;
 };
Index: src/triangleintersectionlist.cpp
===================================================================
--- src/triangleintersectionlist.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/triangleintersectionlist.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * triangleintersectionlist.cpp
@@ -8,4 +15,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "Helpers/MemDebug.hpp"
Index: src/unittests/ActOnAllUnitTest.cpp
===================================================================
--- src/unittests/ActOnAllUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/ActOnAllUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ActOnAllUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: FrederikHeber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/ActionSequenceTest.cpp
===================================================================
--- src/unittests/ActionSequenceTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/ActionSequenceTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ActionSequenzTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <cppunit/CompilerOutputter.h>
Index: src/unittests/AnalysisCorrelationToPointUnitTest.cpp
===================================================================
--- src/unittests/AnalysisCorrelationToPointUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisCorrelationToPointUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AnalysisCorrelationToPointUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
@@ -46,5 +58,5 @@
 
   // construct element list
-  std::vector<element *> elements;
+  std::vector<const element *> elements;
   hydrogen = World::getInstance().getPeriode()->FindElement(1);
   CPPUNIT_ASSERT(hydrogen != NULL && "hydrogen element not found");
Index: src/unittests/AnalysisCorrelationToPointUnitTest.hpp
===================================================================
--- src/unittests/AnalysisCorrelationToPointUnitTest.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisCorrelationToPointUnitTest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -37,5 +37,5 @@
       std::vector<molecule *> allMolecules;
       molecule *TestMolecule;
-      element *hydrogen;
+      const element *hydrogen;
 
       CorrelationToPointMap *pointmap;
Index: src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp
===================================================================
--- src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AnalysisCorrelationToSurfaceUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/AnalysisCorrelationToSurfaceUnitTest.hpp
===================================================================
--- src/unittests/AnalysisCorrelationToSurfaceUnitTest.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisCorrelationToSurfaceUnitTest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -45,7 +45,7 @@
       std::vector<molecule *> allMolecules;
       molecule *TestSurfaceMolecule;
-      element *hydrogen;
-      element *carbon;
-      std::vector<element *> elements;
+      const element *hydrogen;
+      const element *carbon;
+      std::vector<const element *> elements;
 
       CorrelationToSurfaceMap *surfacemap;
Index: src/unittests/AnalysisPairCorrelationUnitTest.cpp
===================================================================
--- src/unittests/AnalysisPairCorrelationUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisPairCorrelationUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * AnalysisPairCorrelationUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
@@ -49,5 +61,5 @@
 
   // construct element list
-  std::vector<element *> elements;
+  std::vector<const element *> elements;
   hydrogen = World::getInstance().getPeriode()->FindElement(1);
   CPPUNIT_ASSERT(hydrogen != NULL && "hydrogen element not found");
Index: src/unittests/AnalysisPairCorrelationUnitTest.hpp
===================================================================
--- src/unittests/AnalysisPairCorrelationUnitTest.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AnalysisPairCorrelationUnitTest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -37,5 +37,5 @@
       std::vector<molecule *> allMolecules;
       molecule *TestMolecule;
-      element *hydrogen;
+      const element *hydrogen;
 
       PairCorrelationMap *correlationmap;
Index: src/unittests/AtomDescriptorTest.cpp
===================================================================
--- src/unittests/AtomDescriptorTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/AtomDescriptorTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * DescriptorUnittest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "AtomDescriptorTest.hpp"
Index: src/unittests/BaseShapesUnittest.cpp
===================================================================
--- src/unittests/BaseShapesUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/unittests/BaseShapesUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,142 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * BaseShapesUnittest.cpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+#include "BaseShapesUnittest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/Shape.hpp"
+
+#include "Shapes/BaseShapes.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( BaseShapesUnittest );
+
+void BaseShapesUnittest::setUp()
+{
+  v000 =  0*e1+0*e2+0*e3;
+  v100 =  1*e1+0*e2+0*e3;
+  v200 = -1*e1+0*e2+0*e3;
+  v010 =  0*e1+1*e2+0*e3;
+  v110 =  1*e1+1*e2+0*e3;
+  v210 = -1*e1+1*e2+0*e3;
+  v020 =  0*e1-1*e2+0*e3;
+  v120 =  1*e1-1*e2+0*e3;
+  v220 = -1*e1-1*e2+0*e3;
+  v001 =  0*e1+0*e2+1*e3;
+  v101 =  1*e1+0*e2+1*e3;
+  v201 = -1*e1+0*e2+1*e3;
+  v011 =  0*e1+1*e2+1*e3;
+  v111 =  1*e1+1*e2+1*e3;
+  v211 = -1*e1+1*e2+1*e3;
+  v021 =  0*e1-1*e2+1*e3;
+  v121 =  1*e1-1*e2+1*e3;
+  v221 = -1*e1-1*e2+1*e3;
+  v002 =  0*e1+0*e2-1*e3;
+  v102 =  1*e1+0*e2-1*e3;
+  v202 = -1*e1+0*e2-1*e3;
+  v012 =  0*e1+1*e2-1*e3;
+  v112 =  1*e1+1*e2-1*e3;
+  v212 = -1*e1+1*e2-1*e3;
+  v022 =  0*e1-1*e2-1*e3;
+  v122 =  1*e1-1*e2-1*e3;
+  v222 = -1*e1-1*e2-1*e3;
+}
+
+void BaseShapesUnittest::tearDown()
+{}
+
+
+void BaseShapesUnittest::isInsideTest(){
+  Shape s1 = Sphere();
+
+  CPPUNIT_ASSERT(s1.isInside(v000));
+  CPPUNIT_ASSERT(s1.isInside(v100));
+  CPPUNIT_ASSERT(s1.isInside(v200));
+  CPPUNIT_ASSERT(s1.isInside(v010));
+  CPPUNIT_ASSERT(!s1.isInside(v110));
+  CPPUNIT_ASSERT(!s1.isInside(v210));
+  CPPUNIT_ASSERT(s1.isInside(v020));
+  CPPUNIT_ASSERT(!s1.isInside(v120));
+  CPPUNIT_ASSERT(!s1.isInside(v220));
+  CPPUNIT_ASSERT(s1.isInside(v001));
+  CPPUNIT_ASSERT(!s1.isInside(v101));
+  CPPUNIT_ASSERT(!s1.isInside(v201));
+  CPPUNIT_ASSERT(!s1.isInside(v011));
+  CPPUNIT_ASSERT(!s1.isInside(v111));
+  CPPUNIT_ASSERT(!s1.isInside(v211));
+  CPPUNIT_ASSERT(!s1.isInside(v021));
+  CPPUNIT_ASSERT(!s1.isInside(v121));
+  CPPUNIT_ASSERT(!s1.isInside(v221));
+  CPPUNIT_ASSERT(s1.isInside(v002));
+  CPPUNIT_ASSERT(!s1.isInside(v102));
+  CPPUNIT_ASSERT(!s1.isInside(v202));
+  CPPUNIT_ASSERT(!s1.isInside(v012));
+  CPPUNIT_ASSERT(!s1.isInside(v112));
+  CPPUNIT_ASSERT(!s1.isInside(v212));
+  CPPUNIT_ASSERT(!s1.isInside(v022));
+  CPPUNIT_ASSERT(!s1.isInside(v122));
+  CPPUNIT_ASSERT(!s1.isInside(v222));
+
+  Shape s2 = Cuboid();
+
+  CPPUNIT_ASSERT(s2.isInside(v000));
+  CPPUNIT_ASSERT(s2.isInside(v100));
+  CPPUNIT_ASSERT(!s2.isInside(v200));
+  CPPUNIT_ASSERT(s2.isInside(v010));
+  CPPUNIT_ASSERT(s2.isInside(v110));
+  CPPUNIT_ASSERT(!s2.isInside(v210));
+  CPPUNIT_ASSERT(!s2.isInside(v020));
+  CPPUNIT_ASSERT(!s2.isInside(v120));
+  CPPUNIT_ASSERT(!s2.isInside(v220));
+  CPPUNIT_ASSERT(s2.isInside(v001));
+  CPPUNIT_ASSERT(s2.isInside(v101));
+  CPPUNIT_ASSERT(!s2.isInside(v201));
+  CPPUNIT_ASSERT(s2.isInside(v011));
+  CPPUNIT_ASSERT(s2.isInside(v111));
+  CPPUNIT_ASSERT(!s2.isInside(v211));
+  CPPUNIT_ASSERT(!s2.isInside(v021));
+  CPPUNIT_ASSERT(!s2.isInside(v121));
+  CPPUNIT_ASSERT(!s2.isInside(v221));
+  CPPUNIT_ASSERT(!s2.isInside(v002));
+  CPPUNIT_ASSERT(!s2.isInside(v102));
+  CPPUNIT_ASSERT(!s2.isInside(v202));
+  CPPUNIT_ASSERT(!s2.isInside(v012));
+  CPPUNIT_ASSERT(!s2.isInside(v112));
+  CPPUNIT_ASSERT(!s2.isInside(v212));
+  CPPUNIT_ASSERT(!s2.isInside(v022));
+  CPPUNIT_ASSERT(!s2.isInside(v122));
+  CPPUNIT_ASSERT(!s2.isInside(v222));
+
+}
+
+void BaseShapesUnittest::PointsOnSurfaceTest(){
+  Shape s = Sphere();
+  const size_t N = 200;
+  std::vector<Vector> PointsOnSurface = s.getHomogeneousPointsOnSurface(N);
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    CPPUNIT_ASSERT(fabs(1. - (*iter).NormSquared()) < MYEPSILON);
+  }
+  CPPUNIT_ASSERT_EQUAL(N, PointsOnSurface.size());
+}
+
Index: src/unittests/BaseShapesUnittest.hpp
===================================================================
--- src/unittests/BaseShapesUnittest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ src/unittests/BaseShapesUnittest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,63 @@
+/*
+ * BaseShapesUnittest.hpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+#ifndef BASESHAPESUNITTEST_HPP_
+#define BASESHAPESUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class Vector;
+
+#include "LinearAlgebra/Vector.hpp"
+
+class BaseShapesUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( BaseShapesUnittest) ;
+  CPPUNIT_TEST ( isInsideTest );
+  CPPUNIT_TEST ( PointsOnSurfaceTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void isInsideTest();
+  void PointsOnSurfaceTest();
+
+  // a lot of vectors.
+  // these define all the edges of a box around -1 +1 on each axis
+  // 0 is 0, 1 is 1 and 2 is -1
+  Vector v000;
+  Vector v100;
+  Vector v200;
+  Vector v010;
+  Vector v110;
+  Vector v210;
+  Vector v020;
+  Vector v120;
+  Vector v220;
+  Vector v001;
+  Vector v101;
+  Vector v201;
+  Vector v011;
+  Vector v111;
+  Vector v211;
+  Vector v021;
+  Vector v121;
+  Vector v221;
+  Vector v002;
+  Vector v102;
+  Vector v202;
+  Vector v012;
+  Vector v112;
+  Vector v212;
+  Vector v022;
+  Vector v122;
+  Vector v222;
+};
+
+#endif /* BASESHAPESUNITTEST_HPP_ */
Index: src/unittests/BoxUnittest.cpp
===================================================================
--- src/unittests/BoxUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/BoxUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * BoxUnittest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "BoxUnittest.hpp"
Index: src/unittests/CacheableTest.cpp
===================================================================
--- src/unittests/CacheableTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/CacheableTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CacheableTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "CacheableTest.hpp"
Index: src/unittests/CountBondsUnitTest.cpp
===================================================================
--- src/unittests/CountBondsUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/CountBondsUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * CountBondsUnitTest.cpp
@@ -6,4 +13,8 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/FormulaUnittest.cpp
===================================================================
--- src/unittests/FormulaUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/FormulaUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * FormulaUnittest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "FormulaUnittest.hpp"
Index: src/unittests/LineUnittest.cpp
===================================================================
--- src/unittests/LineUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/LineUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * LineUnittest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "LineUnittest.hpp"
Index: src/unittests/LinkedCellUnitTest.cpp
===================================================================
--- src/unittests/LinkedCellUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/LinkedCellUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * LinkedCellUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/Makefile.am
===================================================================
--- src/unittests/Makefile.am	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/Makefile.am	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -16,4 +16,5 @@
   atomsCalculationTest \
   AtomDescriptorTest \
+  BaseShapesUnitTest \
   BondGraphUnitTest \
   BoxUnittest \
@@ -73,4 +74,5 @@
   AtomDescriptorTest.cpp \
   atomsCalculationTest.cpp \
+  BaseShapesUnittest.cpp \
   bondgraphunittest.cpp \
   BoxUnittest.cpp \
@@ -111,4 +113,5 @@
   AtomDescriptorTest.hpp \
   atomsCalculationTest.hpp \
+  BaseShapesUnittest.hpp \
   bondgraphunittest.hpp \
   BoxUnittest.hpp \
@@ -164,4 +167,7 @@
 AtomDescriptorTest_LDADD = ${ALLLIBS}
 
+BaseShapesUnitTest_SOURCES = UnitTestMain.cpp BaseShapesUnittest.cpp BaseShapesUnittest.hpp
+BaseShapesUnitTest_LDADD = ${ALLLIBS}
+
 BondGraphUnitTest_SOURCES = UnitTestMain.cpp bondgraphunittest.cpp bondgraphunittest.hpp
 BondGraphUnitTest_LDADD = ${ALLLIBS}
Index: src/unittests/MapofActionsTest.cpp
===================================================================
--- src/unittests/MapofActionsTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/MapofActionsTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * analysisbondsunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/MatrixUnittest.cpp
===================================================================
--- src/unittests/MatrixUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/MatrixUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MatrixUnittest.cpp
@@ -6,7 +13,14 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <cppunit/CompilerOutputter.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
 
 #include "MatrixUnittest.hpp"
@@ -151,4 +165,18 @@
     }
   }
+}
+
+void MatrixUnittest::TransposeTest(){
+  Matrix res;
+
+  // transpose of unit is unit
+  res.one();
+  (const Matrix)res.transpose();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+
+  // transpose of transpose is same matrix
+  res.zero();
+  res.set(2,2, 1.);
+  CPPUNIT_ASSERT_EQUAL(res.transpose().transpose(),res);
 }
 
@@ -225,4 +253,25 @@
 }
 
+void MatrixUnittest::RotationTest(){
+  Matrix res;
+  Matrix inverse;
+
+  // zero rotation angles yields unity matrix
+  res.rotation(0,0,0);
+  CPPUNIT_ASSERT_EQUAL(*one, res);
+
+  // arbitrary rotation matrix has det = 1
+  res.rotation(M_PI/3.,1.,M_PI/7.);
+  CPPUNIT_ASSERT(fabs(fabs(res.determinant()) -1.) < MYEPSILON);
+
+  // inverse is rotation matrix with negative angles
+  res.rotation(M_PI/3.,0.,0.);
+  inverse.rotation(-M_PI/3.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL(*one, res * inverse);
+
+  // ... or transposed
+  res.rotation(M_PI/3.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL(inverse, ((const Matrix) res).transpose());
+}
 
 void MatrixUnittest::InvertTest(){
Index: src/unittests/MatrixUnittest.hpp
===================================================================
--- src/unittests/MatrixUnittest.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/MatrixUnittest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -19,4 +19,6 @@
   CPPUNIT_TEST ( VectorTest );
   CPPUNIT_TEST ( OperationTest );
+  CPPUNIT_TEST ( TransposeTest );
+  CPPUNIT_TEST ( RotationTest );
   CPPUNIT_TEST ( InvertTest );
   CPPUNIT_TEST ( DeterminantTest );
@@ -31,4 +33,6 @@
   void VectorTest();
   void OperationTest();
+  void TransposeTest();
+  void RotationTest();
   void InvertTest();
   void DeterminantTest();
Index: src/unittests/MoleculeDescriptorTest.cpp
===================================================================
--- src/unittests/MoleculeDescriptorTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/MoleculeDescriptorTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * MoleculeDescriptorTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "MoleculeDescriptorTest.hpp"
Index: src/unittests/ObserverTest.cpp
===================================================================
--- src/unittests/ObserverTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/ObserverTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ObserverTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "ObserverTest.hpp"
Index: src/unittests/ParserUnitTest.cpp
===================================================================
--- src/unittests/ParserUnitTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/ParserUnitTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ParserUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: metzler
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "ParserUnitTest.hpp"
Index: src/unittests/PlaneUnittest.cpp
===================================================================
--- src/unittests/PlaneUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/PlaneUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * PlaneUnittest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "PlaneUnittest.hpp"
Index: src/unittests/ShapeUnittest.cpp
===================================================================
--- src/unittests/ShapeUnittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/ShapeUnittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * ShapeUnittest.cpp
@@ -6,4 +13,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "ShapeUnittest.hpp"
 
@@ -12,4 +24,6 @@
 #include <cppunit/ui/text/TestRunner.h>
 
+#include <cmath>
+
 #ifdef HAVE_TESTRUNNER
 #include "UnitTestMain.hpp"
@@ -18,4 +32,6 @@
 #include "LinearAlgebra/Vector.hpp"
 #include "Shapes/Shape.hpp"
+
+#include "Shapes/BaseShapes.hpp"
 
 // Registers the fixture into the 'registry'
@@ -179,4 +195,5 @@
 
 }
+
 void ShapeUnittest::operatorTest(){
   {
Index: src/unittests/SingletonTest.cpp
===================================================================
--- src/unittests/SingletonTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/SingletonTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * SingletonTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "SingletonTest.hpp"
Index: src/unittests/TestRunnerMain.cpp
===================================================================
--- src/unittests/TestRunnerMain.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/TestRunnerMain.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * TestRunnerMain.cpp
Index: src/unittests/UnitTestMain.cpp
===================================================================
--- src/unittests/UnitTestMain.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/UnitTestMain.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * UnitTestMain.cpp
Index: src/unittests/analysisbondsunittest.cpp
===================================================================
--- src/unittests/analysisbondsunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/analysisbondsunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * analysisbondsunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/atomsCalculationTest.cpp
===================================================================
--- src/unittests/atomsCalculationTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/atomsCalculationTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * atomsCalculationTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "atomsCalculationTest.hpp"
Index: src/unittests/bondgraphunittest.cpp
===================================================================
--- src/unittests/bondgraphunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/bondgraphunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * bondgraphunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/gslmatrixsymmetricunittest.cpp
===================================================================
--- src/unittests/gslmatrixsymmetricunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/gslmatrixsymmetricunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * gslmatrixunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/gslmatrixunittest.cpp
===================================================================
--- src/unittests/gslmatrixunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/gslmatrixunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * gslmatrixunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/gslvectorunittest.cpp
===================================================================
--- src/unittests/gslvectorunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/gslvectorunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * gslvectorunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/infounittest.cpp
===================================================================
--- src/unittests/infounittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/infounittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * InfoUnitTest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/linearsystemofequationsunittest.cpp
===================================================================
--- src/unittests/linearsystemofequationsunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/linearsystemofequationsunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * linearsystemofequationsunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/listofbondsunittest.cpp
===================================================================
--- src/unittests/listofbondsunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/listofbondsunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * listofbondsunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: user
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/logunittest.cpp
===================================================================
--- src/unittests/logunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/logunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,18 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * logunittest.cpp
  */
 
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/manipulateAtomsTest.cpp
===================================================================
--- src/unittests/manipulateAtomsTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/manipulateAtomsTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * manipulateAtomsTest.cpp
@@ -5,4 +12,9 @@
  *      Author: crueger
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include "manipulateAtomsTest.hpp"
Index: src/unittests/memoryallocatorunittest.cpp
===================================================================
--- src/unittests/memoryallocatorunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/memoryallocatorunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,19 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * memoryallocatorunittest.cpp
+ *
  */
 
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/memoryusageobserverunittest.cpp
===================================================================
--- src/unittests/memoryusageobserverunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/memoryusageobserverunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,6 +1,18 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * memoryusageobserverunittest.cpp
  */
 
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/periodentafelTest.cpp
===================================================================
--- src/unittests/periodentafelTest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/periodentafelTest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * periodentafelTest.cpp
@@ -6,4 +13,9 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 using namespace std;
 
@@ -11,4 +23,7 @@
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TestRunner.h>
+
+#include <sstream>
+#include <iostream>
 
 #include "Helpers/Assert.hpp"
@@ -67,5 +82,6 @@
 {
   // reload all databases
-  CPPUNIT_ASSERT(tafel->LoadElementsDatabase(new stringstream(elementsDB,ios_base::in)) && "General element initialization failed");
+  stringstream elementsDBstream(elementsDB,ios_base::in);
+  CPPUNIT_ASSERT(tafel->LoadElementsDatabase(elementsDBstream) && "General element initialization failed");
   CPPUNIT_ASSERT(tafel->LoadValenceDatabase(new stringstream(valenceDB,ios_base::in)) && "Valence entry of element initialization failed");
   CPPUNIT_ASSERT(tafel->LoadOrbitalsDatabase(new stringstream(orbitalsDB,ios_base::in)) && "Orbitals entry of element initialization failed");
Index: src/unittests/periodentafelTest.hpp
===================================================================
--- src/unittests/periodentafelTest.hpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/periodentafelTest.hpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -31,6 +31,6 @@
 private:
 
-      element *hydrogen;
-      element *carbon;
+      const element *hydrogen;
+      const element *carbon;
       periodentafel *tafel;
 
Index: src/unittests/stackclassunittest.cpp
===================================================================
--- src/unittests/stackclassunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/stackclassunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * stackclassunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/tesselation_boundarytriangleunittest.cpp
===================================================================
--- src/unittests/tesselation_boundarytriangleunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/tesselation_boundarytriangleunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * tesselation_boundarytriangleunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/tesselation_insideoutsideunittest.cpp
===================================================================
--- src/unittests/tesselation_insideoutsideunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/tesselation_insideoutsideunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * tesselation_insideoutsideunittest.cpp
@@ -5,4 +12,9 @@
  *      Author: heber
  */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/tesselationunittest.cpp
===================================================================
--- src/unittests/tesselationunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/tesselationunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * tesselationunittest.cpp
@@ -6,4 +13,8 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/unittests/vectorunittest.cpp
===================================================================
--- src/unittests/vectorunittest.cpp	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/unittests/vectorunittest.cpp	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,2 +1,9 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
 /*
  * unittest.cpp
@@ -6,4 +13,8 @@
  */
 
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 using namespace std;
Index: src/version.h
===================================================================
--- src/version.h	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ src/version.h	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -2,5 +2,5 @@
 #define VERSION_H_
 
-extern const char *ESPACKVersion;
+extern const char *MOLECUILDERVERSION;
 
 #endif /* VERSION_H_ */
Index: test_all.sh
===================================================================
--- test_all.sh	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ test_all.sh	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,5 +1,6 @@
 #!/bin/bash
 
-optimizations=("-O0"\
+optimizations=("-g3"\
+               "-O0"\
 	       "-O1"\
                "-O2"\
@@ -49,4 +50,10 @@
 }
 
+function logdate()
+{
+  echo -e "Launched on `date`.\n\n" >> $logfile 2>&1;
+}
+
+
 while getopts âho:f:j:scO:t:p:â OPTION
 do
@@ -105,5 +112,5 @@
 function configure(){
   echo "Configuring";
-  CXXFLAGS="$2" $1/configure --prefix=$PWD >> $logfile 2>&1;
+  $1/configure $3 --prefix=$PWD CXXFLAGS="-Wall $2" >> $logfile 2>&1;
 }
 
@@ -134,5 +141,5 @@
     then
       echo -n "    $test: " >> $outfile;
-      valgrind -v --error-exitcode=255 $test >> $logfile 2>&1;
+      valgrind -v --leak-check=full --leak-resolution=high --show-reachable=yes --error-exitcode=255 $test >> $logfile 2>&1;
       if [ $? ]
       then
@@ -149,12 +156,18 @@
 function test(){
 
-  echo "Testing with \"$2\"";
+  echo "Testing with \"$2 $3\"";
   echo "" >> $logfile;
   echo "" >> $logfile;
   echo "" >> $logfile;
-  echo "Testing with \"$2\"" >> $logfile;
-
-  echo -n "  Configuring: " >> $outfile;
-  if configure "$1" "$2"
+  echo "Testing with \"$2 $3\"" >> $logfile;
+
+  if [ x"$2" == x"-g3" ]
+  then
+    valgrind="--with-valgrind"
+  else
+    valgrind="--without-valgrind"
+  fi
+  echo -n "  Configuring $valgrind: " >> $outfile;
+  if configure "$1" "$2 $3" "$valgrind"
   then
     echo "OK" >> $outfile;
@@ -201,9 +214,9 @@
 
 function run(){
-  echo "Testing with \"$1\":" >> $outfile;
+  echo "Testing with \"$1 $2\":" >> $outfile;
   testdir=`mktemp -d --tmpdir=$tmpdir $tmppattern.XXXXXXXXXX`;
   basedir=$PWD;
   cd $testdir;
-  test "$basedir" "$1";
+  test "$basedir" "$1" "$2";
   cd $basedir;
   rm -rf $testdir;
@@ -220,5 +233,5 @@
   for option in "${options[@]}"
   do
-    run "$optimization $option";
+    run "$optimization" "$option";
   done
 done
Index: tests/regression/Makefile.am
===================================================================
--- tests/regression/Makefile.am	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/Makefile.am	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,4 +1,16 @@
 AUTOM4TE = autom4te
-EXTRA_DIST = testsuite.at $(TESTSUITE) atlocal.in regression
+EXTRA_DIST = \
+	testsuite*.at \
+	$(TESTSUITE) \
+	atlocal.in \
+	molecuider.in \
+	Analysis \
+	Domain \
+	Filling \
+	Fragmentation \
+	Graph \
+	Molecules \
+	Simple_configuration \
+	Tesselation
 TESTSUITE = $(srcdir)/testsuite
 
Index: tests/regression/Simple_configuration/3/post/empty.conf
===================================================================
--- tests/regression/Simple_configuration/3/post/empty.conf	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/3/post/empty.conf	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,70 @@
+# ParallelCarParinello - main configuration file - created with molecuilder
+
+mainname	pcp	# programm name (for runtime files)
+defaultpath	not specified	# where to put files during runtime
+pseudopotpath	not specified	# where to find pseudopotentials
+
+ProcPEGamma	8	# for parallel computing: share constants
+ProcPEPsi	1	# for parallel computing: share wave functions
+DoOutVis	0	# Output data for OpenDX
+DoOutMes	1	# Output data for measurements
+DoOutOrbitals	0	# Output all Orbitals
+DoOutCurr	0	# Ouput current density for OpenDx
+DoOutNICS	0	# Output Nucleus independent current shieldings
+DoPerturbation	0	# Do perturbation calculate and determine susceptibility and shielding
+DoFullCurrent	0	# Do full perturbation
+DoConstrainedMD	0	# Do perform a constrained (>0, relating to current MD step) instead of unconstrained (0) MD
+Thermostat	Berendsen	2.5	# Which Thermostat and its parameters to use in MD case.
+CommonWannier	0	# Put virtual centers at indivual orbits, all common, merged by variance, to grid point, to cell center
+SawtoothStart	0.01	# Absolute value for smooth transition at cell border 
+VectorPlane	0	# Cut plane axis (x, y or z: 0,1,2) for two-dim current vector plot
+VectorCut	0	# Cut plane axis value
+AddGramSch	1	# Additional GramSchmidtOrtogonalization to be safe
+Seed		1	# initial value for random seed for Psi coefficients
+
+MaxOuterStep	0	# number of MolecularDynamics/Structure optimization steps
+Deltat	0.01	# time per MD step
+OutVisStep	10	# Output visual data every ...th step
+OutSrcStep	5	# Output "restart" data every ..th step
+TargetTemp	0.000950045	# Target temperature
+MaxPsiStep	0	# number of Minimisation steps per state (0 - default)
+EpsWannier	1e-07	# tolerance value for spread minimisation of orbitals
+
+# Values specifying when to stop
+MaxMinStep	100	# Maximum number of steps
+RelEpsTotalE	1e-07	# relative change in total energy
+RelEpsKineticE	1e-05	# relative change in kinetic energy
+MaxMinStopStep	0	# check every ..th steps
+MaxMinGapStopStep	0	# check every ..th steps
+
+# Values specifying when to stop for INIT, otherwise same as above
+MaxInitMinStep	100	# Maximum number of steps
+InitRelEpsTotalE	1e-05	# relative change in total energy
+InitRelEpsKineticE	0.0001	# relative change in kinetic energy
+InitMaxMinStopStep	0	# check every ..th steps
+InitMaxMinGapStopStep	0	# check every ..th steps
+
+BoxLength			# (Length of a unit cell)
+20	
+0	20	
+0	0	20	
+
+ECut		128	# energy cutoff for discretization in Hartrees
+MaxLevel	5	# number of different levels in the code, >=2
+Level0Factor	2	# factor by which node number increases from S to 0 level
+RiemannTensor	0	# (Use metric)
+PsiType		0	# 0 - doubly occupied, 1 - SpinUp,SpinDown
+MaxPsiDouble	0	# here: specifying both maximum number of SpinUp- and -Down-states
+PsiMaxNoUp	0	# here: specifying maximum number of SpinUp-states
+PsiMaxNoDown	0	# here: specifying maximum number of SpinDown-states
+AddPsis		0	# Additional unoccupied Psis for bandgap determination
+
+RCut		20	# R-cut for the ewald summation
+StructOpt	0	# Do structure optimization beforehand
+IsAngstroem	1	# 0 - Bohr, 1 - Angstroem
+RelativeCoord	0	# whether ion coordinates are relative (1) or absolute (0)
+MaxTypes	0	# maximum number of different ion types
+
+# Ion type data (PP = PseudoPotential, Z = atomic number)
+#Ion_TypeNr.	Amount	Z	RGauss	L_Max(PP)L_Loc(PP)IonMass	# chemical name, symbol
+#Ion_TypeNr._Nr.R[0]    R[1]    R[2]    MoveType (0 MoveIon, 1 FixedIon)
Index: tests/regression/Simple_configuration/5/pre/test.conf
===================================================================
--- tests/regression/Simple_configuration/5/pre/test.conf	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/Simple_configuration/5/pre/test.conf	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -28,5 +28,5 @@
 OutSrcStep	5	# Output "restart" data every ..th step
 TargetTemp	0.000950045	# Target temperature
-MaxPsiStep	0	# number of Minimisation steps per state (0 - default)
+MaxPsiStep	3	# number of Minimisation steps per state (0 - default)
 EpsWannier	1e-07	# tolerance value for spread minimisation of orbitals
 
@@ -35,6 +35,6 @@
 RelEpsTotalE	1e-07	# relative change in total energy
 RelEpsKineticE	1e-05	# relative change in kinetic energy
-MaxMinStopStep	0	# check every ..th steps
-MaxMinGapStopStep	0	# check every ..th steps
+MaxMinStopStep	1	# check every ..th steps
+MaxMinGapStopStep	1	# check every ..th steps
 
 # Values specifying when to stop for INIT, otherwise same as above
@@ -42,6 +42,6 @@
 InitRelEpsTotalE	1e-05	# relative change in total energy
 InitRelEpsKineticE	0.0001	# relative change in kinetic energy
-InitMaxMinStopStep	0	# check every ..th steps
-InitMaxMinGapStopStep	0	# check every ..th steps
+InitMaxMinStopStep	1	# check every ..th steps
+InitMaxMinGapStopStep	1	# check every ..th steps
 
 BoxLength			# (Length of a unit cell)
@@ -54,8 +54,8 @@
 Level0Factor	2	# factor by which node number increases from S to 0 level
 RiemannTensor	0	# (Use metric)
-PsiType		0	# 0 - doubly occupied, 1 - SpinUp,SpinDown
+PsiType		1	# 0 - doubly occupied, 1 - SpinUp,SpinDown
 MaxPsiDouble	0	# here: specifying both maximum number of SpinUp- and -Down-states
 PsiMaxNoUp	0	# here: specifying maximum number of SpinUp-states
-PsiMaxNoDown	0	# here: specifying maximum number of SpinDown-states
+PsiMaxNoDown	1	# here: specifying maximum number of SpinDown-states
 AddPsis		0	# Additional unoccupied Psis for bandgap determination
 
Index: tests/regression/Simple_configuration/8/post/test-cuboid.xyz-sorted
===================================================================
--- tests/regression/Simple_configuration/8/post/test-cuboid.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/8/post/test-cuboid.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,4 @@
+C	9.78209	3.27519	3.53589
+H	10.672	3.90454	3.53589
+H	9.78209	2.64589	2.64589
+H	9.78209	2.64589	4.42589
Index: tests/regression/Simple_configuration/8/post/test-sphere.xyz-sorted
===================================================================
--- tests/regression/Simple_configuration/8/post/test-sphere.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/8/post/test-sphere.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,144 @@
+C	7.28359	3.27519	3.53589
+C	8.53279	4.15859	3.53589
+C	9.78209	3.27519	3.53589
+H	0.758602	2.85714	2.85714
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	5.71429
+H	0.758602	5.71429	2.85714
+H	0.758602	5.71429	3.86571
+H	10.672	3.90454	3.53589
+H	12.1872	0	0
+H	12.1872	0	1.00857
+H	12.1872	0	2.85714
+H	12.1872	0	3.86571
+H	12.1872	0	5.71429
+H	12.1872	0	6.72285
+H	12.1872	2.85714	0
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	5.71429
+H	12.1872	2.85714	6.72285
+H	12.1872	5.71429	0
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	2.85714
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	5.71429
+H	12.1872	5.71429	6.72285
+H	3.61574	0	0
+H	3.61574	0	1.00857
+H	3.61574	0	2.85714
+H	3.61574	0	3.86571
+H	3.61574	0	5.71429
+H	3.61574	0	6.72285
+H	3.61574	2.85714	0
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	2.85714
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	5.71429
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	8.57143
+H	3.61574	5.71429	0
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	2.85714
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	5.71429
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	8.57143
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	2.85714
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	5.71429
+H	6.39363	3.90454	3.53589
+H	6.47289	0	0
+H	6.47289	0	1.00857
+H	6.47289	0	2.85714
+H	6.47289	0	3.86571
+H	6.47289	0	5.71429
+H	6.47289	0	6.72285
+H	6.47289	0	8.57143
+H	6.47289	0	9.58
+H	6.47289	2.85714	0
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	8.57143
+H	6.47289	2.85714	9.58
+H	6.47289	5.71429	0
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	5.71429
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	8.57143
+H	6.47289	5.71429	9.58
+H	6.47289	8.57143	0
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	2.85714
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	5.71429
+H	6.47289	8.57143	6.72285
+H	7.28359	2.64589	2.64589
+H	7.28359	2.64589	4.42589
+H	8.53279	4.78789	2.64589
+H	8.53279	4.78789	4.42589
+H	9.33003	0	0
+H	9.33003	0	1.00857
+H	9.33003	0	2.85714
+H	9.33003	0	3.86571
+H	9.33003	0	5.71429
+H	9.33003	0	6.72285
+H	9.33003	0	8.57143
+H	9.33003	2.85714	0
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	8.57143
+H	9.33003	2.85714	9.58
+H	9.33003	5.71429	0
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	8.57143
+H	9.33003	5.71429	9.58
+H	9.33003	8.57143	0
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	2.85714
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	5.71429
+H	9.33003	8.57143	6.72285
+H	9.78209	2.64589	2.64589
+H	9.78209	2.64589	4.42589
+O	11.4286	0	0.504284
+O	11.4286	0	3.36143
+O	11.4286	0	6.21857
+O	11.4286	2.85714	0.504284
+O	11.4286	2.85714	6.21857
+O	11.4286	2.85714	9.07571
+O	11.4286	5.71429	0.504284
+O	11.4286	5.71429	6.21857
+O	11.4286	8.57143	3.36143
+O	2.85714	0	0.504284
+O	2.85714	0	3.36143
+O	2.85714	0	6.21857
+O	2.85714	2.85714	0.504284
+O	2.85714	2.85714	3.36143
+O	2.85714	2.85714	6.21857
+O	2.85714	5.71429	0.504284
+O	2.85714	5.71429	3.36143
+O	2.85714	5.71429	6.21857
+O	2.85714	8.57143	3.36143
+O	5.71429	0	0.504284
+O	5.71429	0	3.36143
+O	5.71429	0	6.21857
+O	5.71429	0	9.07571
+O	5.71429	2.85714	0.504284
+O	5.71429	2.85714	6.21857
+O	5.71429	2.85714	9.07571
+O	5.71429	5.71429	0.504284
+O	5.71429	5.71429	6.21857
+O	5.71429	5.71429	9.07571
+O	5.71429	8.57143	0.504284
+O	5.71429	8.57143	3.36143
+O	5.71429	8.57143	6.21857
+O	8.57143	0	0.504284
+O	8.57143	0	3.36143
+O	8.57143	0	6.21857
+O	8.57143	0	9.07571
+O	8.57143	2.85714	0.504284
+O	8.57143	2.85714	9.07571
+O	8.57143	5.71429	0.504284
+O	8.57143	5.71429	9.07571
+O	8.57143	8.57143	0.504284
+O	8.57143	8.57143	3.36143
+O	8.57143	8.57143	6.21857
Index: tests/regression/Simple_configuration/8/post/test-withoutcuboid.xyz-sorted
===================================================================
--- tests/regression/Simple_configuration/8/post/test-withoutcuboid.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/8/post/test-withoutcuboid.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,1012 @@
+C	7.28359	3.27519	3.53589
+C	8.53279	4.15859	3.53589
+H	0.758602	0	0
+H	0.758602	0	1.00857
+H	0.758602	0	11.4286
+H	0.758602	0	12.4371
+H	0.758602	0	14.2857
+H	0.758602	0	15.2943
+H	0.758602	0	17.1429
+H	0.758602	0	18.1514
+H	0.758602	0	2.85714
+H	0.758602	0	3.86571
+H	0.758602	0	5.71429
+H	0.758602	0	6.72285
+H	0.758602	0	8.57143
+H	0.758602	0	9.58
+H	0.758602	11.4286	0
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	11.4286
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	14.2857
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	17.1429
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	2.85714
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	5.71429
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	8.57143
+H	0.758602	11.4286	9.58
+H	0.758602	14.2857	0
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	11.4286
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	14.2857
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	17.1429
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	2.85714
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	5.71429
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	8.57143
+H	0.758602	14.2857	9.58
+H	0.758602	17.1429	0
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	11.4286
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	14.2857
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	17.1429
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	2.85714
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	5.71429
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	8.57143
+H	0.758602	17.1429	9.58
+H	0.758602	2.85714	0
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	11.4286
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	14.2857
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	17.1429
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	2.85714
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	5.71429
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	8.57143
+H	0.758602	2.85714	9.58
+H	0.758602	5.71429	0
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	11.4286
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	14.2857
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	17.1429
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	2.85714
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	5.71429
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	8.57143
+H	0.758602	5.71429	9.58
+H	0.758602	8.57143	0
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	11.4286
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	14.2857
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	17.1429
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	2.85714
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	5.71429
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	8.57143
+H	0.758602	8.57143	9.58
+H	12.1872	0	0
+H	12.1872	0	1.00857
+H	12.1872	0	11.4286
+H	12.1872	0	12.4371
+H	12.1872	0	14.2857
+H	12.1872	0	15.2943
+H	12.1872	0	17.1429
+H	12.1872	0	18.1514
+H	12.1872	0	2.85714
+H	12.1872	0	3.86571
+H	12.1872	0	5.71429
+H	12.1872	0	6.72285
+H	12.1872	0	8.57143
+H	12.1872	0	9.58
+H	12.1872	11.4286	0
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	11.4286
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	14.2857
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	17.1429
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	2.85714
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	5.71429
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	8.57143
+H	12.1872	11.4286	9.58
+H	12.1872	14.2857	0
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	11.4286
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	14.2857
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	17.1429
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	2.85714
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	5.71429
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	8.57143
+H	12.1872	14.2857	9.58
+H	12.1872	17.1429	0
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	11.4286
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	14.2857
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	17.1429
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	2.85714
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	5.71429
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	8.57143
+H	12.1872	17.1429	9.58
+H	12.1872	2.85714	0
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	11.4286
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	14.2857
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	17.1429
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	5.71429
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	8.57143
+H	12.1872	2.85714	9.58
+H	12.1872	5.71429	0
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	11.4286
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	14.2857
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	17.1429
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	2.85714
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	5.71429
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	8.57143
+H	12.1872	5.71429	9.58
+H	12.1872	8.57143	0
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	11.4286
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	14.2857
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	17.1429
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	2.85714
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	5.71429
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	8.57143
+H	12.1872	8.57143	9.58
+H	15.0443	0	0
+H	15.0443	0	1.00857
+H	15.0443	0	11.4286
+H	15.0443	0	12.4371
+H	15.0443	0	14.2857
+H	15.0443	0	15.2943
+H	15.0443	0	17.1429
+H	15.0443	0	18.1514
+H	15.0443	0	2.85714
+H	15.0443	0	3.86571
+H	15.0443	0	5.71429
+H	15.0443	0	6.72285
+H	15.0443	0	8.57143
+H	15.0443	0	9.58
+H	15.0443	11.4286	0
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	11.4286
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	14.2857
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	17.1429
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	2.85714
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	5.71429
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	8.57143
+H	15.0443	11.4286	9.58
+H	15.0443	14.2857	0
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	11.4286
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	14.2857
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	17.1429
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	2.85714
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	5.71429
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	8.57143
+H	15.0443	14.2857	9.58
+H	15.0443	17.1429	0
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	11.4286
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	14.2857
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	17.1429
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	5.71429
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	8.57143
+H	15.0443	17.1429	9.58
+H	15.0443	2.85714	0
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	11.4286
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	14.2857
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	17.1429
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	5.71429
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	8.57143
+H	15.0443	2.85714	9.58
+H	15.0443	5.71429	0
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	11.4286
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	14.2857
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	17.1429
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	2.85714
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	5.71429
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	8.57143
+H	15.0443	5.71429	9.58
+H	15.0443	8.57143	0
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	11.4286
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	14.2857
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	17.1429
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	2.85714
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	5.71429
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	8.57143
+H	15.0443	8.57143	9.58
+H	17.9015	0	0
+H	17.9015	0	1.00857
+H	17.9015	0	11.4286
+H	17.9015	0	12.4371
+H	17.9015	0	14.2857
+H	17.9015	0	15.2943
+H	17.9015	0	17.1429
+H	17.9015	0	18.1514
+H	17.9015	0	2.85714
+H	17.9015	0	3.86571
+H	17.9015	0	5.71429
+H	17.9015	0	6.72285
+H	17.9015	0	8.57143
+H	17.9015	0	9.58
+H	17.9015	11.4286	0
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	11.4286
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	14.2857
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	17.1429
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	2.85714
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	5.71429
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	8.57143
+H	17.9015	11.4286	9.58
+H	17.9015	14.2857	0
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	11.4286
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	14.2857
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	17.1429
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	5.71429
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	8.57143
+H	17.9015	14.2857	9.58
+H	17.9015	17.1429	0
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	11.4286
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	14.2857
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	17.1429
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	2.85714
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	5.71429
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	8.57143
+H	17.9015	17.1429	9.58
+H	17.9015	2.85714	0
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	11.4286
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	14.2857
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	17.1429
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	2.85714
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	5.71429
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	8.57143
+H	17.9015	2.85714	9.58
+H	17.9015	5.71429	0
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	11.4286
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	14.2857
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	17.1429
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	5.71429
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	8.57143
+H	17.9015	5.71429	9.58
+H	17.9015	8.57143	0
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	11.4286
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	14.2857
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	17.1429
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	2.85714
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	5.71429
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	8.57143
+H	17.9015	8.57143	9.58
+H	3.61574	0	0
+H	3.61574	0	1.00857
+H	3.61574	0	11.4286
+H	3.61574	0	12.4371
+H	3.61574	0	14.2857
+H	3.61574	0	15.2943
+H	3.61574	0	17.1429
+H	3.61574	0	18.1514
+H	3.61574	0	2.85714
+H	3.61574	0	3.86571
+H	3.61574	0	5.71429
+H	3.61574	0	6.72285
+H	3.61574	0	8.57143
+H	3.61574	0	9.58
+H	3.61574	11.4286	0
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	11.4286
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	14.2857
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	17.1429
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	2.85714
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	5.71429
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	8.57143
+H	3.61574	11.4286	9.58
+H	3.61574	14.2857	0
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	11.4286
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	14.2857
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	17.1429
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	2.85714
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	5.71429
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	8.57143
+H	3.61574	14.2857	9.58
+H	3.61574	17.1429	0
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	11.4286
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	14.2857
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	17.1429
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	2.85714
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	5.71429
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	8.57143
+H	3.61574	17.1429	9.58
+H	3.61574	2.85714	0
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	11.4286
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	14.2857
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	17.1429
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	2.85714
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	5.71429
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	8.57143
+H	3.61574	2.85714	9.58
+H	3.61574	5.71429	0
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	11.4286
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	14.2857
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	17.1429
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	2.85714
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	5.71429
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	8.57143
+H	3.61574	5.71429	9.58
+H	3.61574	8.57143	0
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	11.4286
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	14.2857
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	17.1429
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	2.85714
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	5.71429
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	8.57143
+H	3.61574	8.57143	9.58
+H	6.39363	3.90454	3.53589
+H	6.47289	0	0
+H	6.47289	0	1.00857
+H	6.47289	0	11.4286
+H	6.47289	0	12.4371
+H	6.47289	0	14.2857
+H	6.47289	0	15.2943
+H	6.47289	0	17.1429
+H	6.47289	0	18.1514
+H	6.47289	0	2.85714
+H	6.47289	0	3.86571
+H	6.47289	0	5.71429
+H	6.47289	0	6.72285
+H	6.47289	0	8.57143
+H	6.47289	0	9.58
+H	6.47289	11.4286	0
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	11.4286
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	14.2857
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	17.1429
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	2.85714
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	5.71429
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	8.57143
+H	6.47289	11.4286	9.58
+H	6.47289	14.2857	0
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	11.4286
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	14.2857
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	17.1429
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	2.85714
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	5.71429
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	8.57143
+H	6.47289	14.2857	9.58
+H	6.47289	17.1429	0
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	11.4286
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	14.2857
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	17.1429
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	2.85714
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	5.71429
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	8.57143
+H	6.47289	17.1429	9.58
+H	6.47289	2.85714	0
+H	6.47289	2.85714	11.4286
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	14.2857
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	17.1429
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	8.57143
+H	6.47289	2.85714	9.58
+H	6.47289	5.71429	0
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	11.4286
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	14.2857
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	17.1429
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	5.71429
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	8.57143
+H	6.47289	5.71429	9.58
+H	6.47289	8.57143	0
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	11.4286
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	14.2857
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	17.1429
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	2.85714
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	5.71429
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	8.57143
+H	6.47289	8.57143	9.58
+H	7.28359	2.64589	2.64589
+H	7.28359	2.64589	4.42589
+H	8.53279	4.78789	2.64589
+H	8.53279	4.78789	4.42589
+H	9.33003	0	0
+H	9.33003	0	1.00857
+H	9.33003	0	11.4286
+H	9.33003	0	12.4371
+H	9.33003	0	14.2857
+H	9.33003	0	15.2943
+H	9.33003	0	17.1429
+H	9.33003	0	18.1514
+H	9.33003	0	2.85714
+H	9.33003	0	3.86571
+H	9.33003	0	5.71429
+H	9.33003	0	6.72285
+H	9.33003	0	8.57143
+H	9.33003	0	9.58
+H	9.33003	11.4286	0
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	11.4286
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	14.2857
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	17.1429
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	2.85714
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	5.71429
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	8.57143
+H	9.33003	11.4286	9.58
+H	9.33003	14.2857	0
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	11.4286
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	14.2857
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	17.1429
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	2.85714
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	5.71429
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	8.57143
+H	9.33003	14.2857	9.58
+H	9.33003	17.1429	0
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	11.4286
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	14.2857
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	17.1429
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	2.85714
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	5.71429
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	8.57143
+H	9.33003	17.1429	9.58
+H	9.33003	2.85714	0
+H	9.33003	2.85714	11.4286
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	14.2857
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	17.1429
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	8.57143
+H	9.33003	2.85714	9.58
+H	9.33003	5.71429	0
+H	9.33003	5.71429	11.4286
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	14.2857
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	17.1429
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	8.57143
+H	9.33003	5.71429	9.58
+H	9.33003	8.57143	0
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	11.4286
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	14.2857
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	17.1429
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	2.85714
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	5.71429
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	8.57143
+H	9.33003	8.57143	9.58
+O	0	0	0.504284
+O	0	0	11.9329
+O	0	0	14.79
+O	0	0	17.6471
+O	0	0	3.36143
+O	0	0	6.21857
+O	0	0	9.07571
+O	0	11.4286	0.504284
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+O	0	11.4286	17.6471
+O	0	11.4286	3.36143
+O	0	11.4286	6.21857
+O	0	11.4286	9.07571
+O	0	14.2857	0.504284
+O	0	14.2857	11.9329
+O	0	14.2857	14.79
+O	0	14.2857	17.6471
+O	0	14.2857	3.36143
+O	0	14.2857	6.21857
+O	0	14.2857	9.07571
+O	0	17.1429	0.504284
+O	0	17.1429	11.9329
+O	0	17.1429	14.79
+O	0	17.1429	17.6471
+O	0	17.1429	3.36143
+O	0	17.1429	6.21857
+O	0	17.1429	9.07571
+O	0	2.85714	0.504284
+O	0	2.85714	11.9329
+O	0	2.85714	14.79
+O	0	2.85714	17.6471
+O	0	2.85714	3.36143
+O	0	2.85714	6.21857
+O	0	2.85714	9.07571
+O	0	5.71429	0.504284
+O	0	5.71429	11.9329
+O	0	5.71429	14.79
+O	0	5.71429	17.6471
+O	0	5.71429	3.36143
+O	0	5.71429	6.21857
+O	0	5.71429	9.07571
+O	0	8.57143	0.504284
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+O	0	8.57143	17.6471
+O	0	8.57143	3.36143
+O	0	8.57143	6.21857
+O	0	8.57143	9.07571
+O	11.4286	0	0.504284
+O	11.4286	0	11.9329
+O	11.4286	0	14.79
+O	11.4286	0	17.6471
+O	11.4286	0	3.36143
+O	11.4286	0	6.21857
+O	11.4286	0	9.07571
+O	11.4286	11.4286	0.504284
+O	11.4286	11.4286	11.9329
+O	11.4286	11.4286	14.79
+O	11.4286	11.4286	17.6471
+O	11.4286	11.4286	3.36143
+O	11.4286	11.4286	6.21857
+O	11.4286	11.4286	9.07571
+O	11.4286	14.2857	0.504284
+O	11.4286	14.2857	11.9329
+O	11.4286	14.2857	14.79
+O	11.4286	14.2857	17.6471
+O	11.4286	14.2857	3.36143
+O	11.4286	14.2857	6.21857
+O	11.4286	14.2857	9.07571
+O	11.4286	17.1429	0.504284
+O	11.4286	17.1429	11.9329
+O	11.4286	17.1429	14.79
+O	11.4286	17.1429	17.6471
+O	11.4286	17.1429	3.36143
+O	11.4286	17.1429	6.21857
+O	11.4286	17.1429	9.07571
+O	11.4286	2.85714	0.504284
+O	11.4286	2.85714	11.9329
+O	11.4286	2.85714	14.79
+O	11.4286	2.85714	17.6471
+O	11.4286	2.85714	6.21857
+O	11.4286	2.85714	9.07571
+O	11.4286	5.71429	0.504284
+O	11.4286	5.71429	11.9329
+O	11.4286	5.71429	14.79
+O	11.4286	5.71429	17.6471
+O	11.4286	5.71429	6.21857
+O	11.4286	5.71429	9.07571
+O	11.4286	8.57143	0.504284
+O	11.4286	8.57143	11.9329
+O	11.4286	8.57143	14.79
+O	11.4286	8.57143	17.6471
+O	11.4286	8.57143	3.36143
+O	11.4286	8.57143	6.21857
+O	11.4286	8.57143	9.07571
+O	14.2857	0	0.504284
+O	14.2857	0	11.9329
+O	14.2857	0	14.79
+O	14.2857	0	17.6471
+O	14.2857	0	3.36143
+O	14.2857	0	6.21857
+O	14.2857	0	9.07571
+O	14.2857	11.4286	0.504284
+O	14.2857	11.4286	11.9329
+O	14.2857	11.4286	14.79
+O	14.2857	11.4286	17.6471
+O	14.2857	11.4286	3.36143
+O	14.2857	11.4286	6.21857
+O	14.2857	11.4286	9.07571
+O	14.2857	14.2857	0.504284
+O	14.2857	14.2857	11.9329
+O	14.2857	14.2857	14.79
+O	14.2857	14.2857	17.6471
+O	14.2857	14.2857	3.36143
+O	14.2857	14.2857	6.21857
+O	14.2857	14.2857	9.07571
+O	14.2857	17.1429	0.504284
+O	14.2857	17.1429	11.9329
+O	14.2857	17.1429	14.79
+O	14.2857	17.1429	17.6471
+O	14.2857	17.1429	3.36143
+O	14.2857	17.1429	6.21857
+O	14.2857	17.1429	9.07571
+O	14.2857	2.85714	0.504284
+O	14.2857	2.85714	11.9329
+O	14.2857	2.85714	14.79
+O	14.2857	2.85714	17.6471
+O	14.2857	2.85714	3.36143
+O	14.2857	2.85714	6.21857
+O	14.2857	2.85714	9.07571
+O	14.2857	5.71429	0.504284
+O	14.2857	5.71429	11.9329
+O	14.2857	5.71429	14.79
+O	14.2857	5.71429	17.6471
+O	14.2857	5.71429	3.36143
+O	14.2857	5.71429	6.21857
+O	14.2857	5.71429	9.07571
+O	14.2857	8.57143	0.504284
+O	14.2857	8.57143	11.9329
+O	14.2857	8.57143	14.79
+O	14.2857	8.57143	17.6471
+O	14.2857	8.57143	3.36143
+O	14.2857	8.57143	6.21857
+O	14.2857	8.57143	9.07571
+O	17.1429	0	0.504284
+O	17.1429	0	11.9329
+O	17.1429	0	14.79
+O	17.1429	0	17.6471
+O	17.1429	0	3.36143
+O	17.1429	0	6.21857
+O	17.1429	0	9.07571
+O	17.1429	11.4286	0.504284
+O	17.1429	11.4286	11.9329
+O	17.1429	11.4286	14.79
+O	17.1429	11.4286	17.6471
+O	17.1429	11.4286	3.36143
+O	17.1429	11.4286	6.21857
+O	17.1429	11.4286	9.07571
+O	17.1429	14.2857	0.504284
+O	17.1429	14.2857	11.9329
+O	17.1429	14.2857	14.79
+O	17.1429	14.2857	17.6471
+O	17.1429	14.2857	3.36143
+O	17.1429	14.2857	6.21857
+O	17.1429	14.2857	9.07571
+O	17.1429	17.1429	0.504284
+O	17.1429	17.1429	11.9329
+O	17.1429	17.1429	14.79
+O	17.1429	17.1429	17.6471
+O	17.1429	17.1429	3.36143
+O	17.1429	17.1429	6.21857
+O	17.1429	17.1429	9.07571
+O	17.1429	2.85714	0.504284
+O	17.1429	2.85714	11.9329
+O	17.1429	2.85714	14.79
+O	17.1429	2.85714	17.6471
+O	17.1429	2.85714	3.36143
+O	17.1429	2.85714	6.21857
+O	17.1429	2.85714	9.07571
+O	17.1429	5.71429	0.504284
+O	17.1429	5.71429	11.9329
+O	17.1429	5.71429	14.79
+O	17.1429	5.71429	17.6471
+O	17.1429	5.71429	3.36143
+O	17.1429	5.71429	6.21857
+O	17.1429	5.71429	9.07571
+O	17.1429	8.57143	0.504284
+O	17.1429	8.57143	11.9329
+O	17.1429	8.57143	14.79
+O	17.1429	8.57143	17.6471
+O	17.1429	8.57143	3.36143
+O	17.1429	8.57143	6.21857
+O	17.1429	8.57143	9.07571
+O	2.85714	0	0.504284
+O	2.85714	0	11.9329
+O	2.85714	0	14.79
+O	2.85714	0	17.6471
+O	2.85714	0	3.36143
+O	2.85714	0	6.21857
+O	2.85714	0	9.07571
+O	2.85714	11.4286	0.504284
+O	2.85714	11.4286	11.9329
+O	2.85714	11.4286	14.79
+O	2.85714	11.4286	17.6471
+O	2.85714	11.4286	3.36143
+O	2.85714	11.4286	6.21857
+O	2.85714	11.4286	9.07571
+O	2.85714	14.2857	0.504284
+O	2.85714	14.2857	11.9329
+O	2.85714	14.2857	14.79
+O	2.85714	14.2857	17.6471
+O	2.85714	14.2857	3.36143
+O	2.85714	14.2857	6.21857
+O	2.85714	14.2857	9.07571
+O	2.85714	17.1429	0.504284
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+O	2.85714	17.1429	17.6471
+O	2.85714	17.1429	3.36143
+O	2.85714	17.1429	6.21857
+O	2.85714	17.1429	9.07571
+O	2.85714	2.85714	0.504284
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+O	2.85714	2.85714	17.6471
+O	2.85714	2.85714	3.36143
+O	2.85714	2.85714	6.21857
+O	2.85714	2.85714	9.07571
+O	2.85714	5.71429	0.504284
+O	2.85714	5.71429	11.9329
+O	2.85714	5.71429	14.79
+O	2.85714	5.71429	17.6471
+O	2.85714	5.71429	3.36143
+O	2.85714	5.71429	6.21857
+O	2.85714	5.71429	9.07571
+O	2.85714	8.57143	0.504284
+O	2.85714	8.57143	11.9329
+O	2.85714	8.57143	14.79
+O	2.85714	8.57143	17.6471
+O	2.85714	8.57143	3.36143
+O	2.85714	8.57143	6.21857
+O	2.85714	8.57143	9.07571
+O	5.71429	0	0.504284
+O	5.71429	0	11.9329
+O	5.71429	0	14.79
+O	5.71429	0	17.6471
+O	5.71429	0	3.36143
+O	5.71429	0	6.21857
+O	5.71429	0	9.07571
+O	5.71429	11.4286	0.504284
+O	5.71429	11.4286	11.9329
+O	5.71429	11.4286	14.79
+O	5.71429	11.4286	17.6471
+O	5.71429	11.4286	3.36143
+O	5.71429	11.4286	6.21857
+O	5.71429	11.4286	9.07571
+O	5.71429	14.2857	0.504284
+O	5.71429	14.2857	11.9329
+O	5.71429	14.2857	14.79
+O	5.71429	14.2857	17.6471
+O	5.71429	14.2857	3.36143
+O	5.71429	14.2857	6.21857
+O	5.71429	14.2857	9.07571
+O	5.71429	17.1429	0.504284
+O	5.71429	17.1429	11.9329
+O	5.71429	17.1429	14.79
+O	5.71429	17.1429	17.6471
+O	5.71429	17.1429	3.36143
+O	5.71429	17.1429	6.21857
+O	5.71429	17.1429	9.07571
+O	5.71429	2.85714	0.504284
+O	5.71429	2.85714	11.9329
+O	5.71429	2.85714	14.79
+O	5.71429	2.85714	17.6471
+O	5.71429	2.85714	6.21857
+O	5.71429	2.85714	9.07571
+O	5.71429	5.71429	0.504284
+O	5.71429	5.71429	11.9329
+O	5.71429	5.71429	14.79
+O	5.71429	5.71429	17.6471
+O	5.71429	5.71429	6.21857
+O	5.71429	5.71429	9.07571
+O	5.71429	8.57143	0.504284
+O	5.71429	8.57143	11.9329
+O	5.71429	8.57143	14.79
+O	5.71429	8.57143	17.6471
+O	5.71429	8.57143	3.36143
+O	5.71429	8.57143	6.21857
+O	5.71429	8.57143	9.07571
+O	8.57143	0	0.504284
+O	8.57143	0	11.9329
+O	8.57143	0	14.79
+O	8.57143	0	17.6471
+O	8.57143	0	3.36143
+O	8.57143	0	6.21857
+O	8.57143	0	9.07571
+O	8.57143	11.4286	0.504284
+O	8.57143	11.4286	11.9329
+O	8.57143	11.4286	14.79
+O	8.57143	11.4286	17.6471
+O	8.57143	11.4286	3.36143
+O	8.57143	11.4286	6.21857
+O	8.57143	11.4286	9.07571
+O	8.57143	14.2857	0.504284
+O	8.57143	14.2857	11.9329
+O	8.57143	14.2857	14.79
+O	8.57143	14.2857	17.6471
+O	8.57143	14.2857	3.36143
+O	8.57143	14.2857	6.21857
+O	8.57143	14.2857	9.07571
+O	8.57143	17.1429	0.504284
+O	8.57143	17.1429	11.9329
+O	8.57143	17.1429	14.79
+O	8.57143	17.1429	17.6471
+O	8.57143	17.1429	3.36143
+O	8.57143	17.1429	6.21857
+O	8.57143	17.1429	9.07571
+O	8.57143	2.85714	0.504284
+O	8.57143	2.85714	11.9329
+O	8.57143	2.85714	14.79
+O	8.57143	2.85714	17.6471
+O	8.57143	2.85714	9.07571
+O	8.57143	5.71429	0.504284
+O	8.57143	5.71429	11.9329
+O	8.57143	5.71429	14.79
+O	8.57143	5.71429	17.6471
+O	8.57143	5.71429	9.07571
+O	8.57143	8.57143	0.504284
+O	8.57143	8.57143	11.9329
+O	8.57143	8.57143	14.79
+O	8.57143	8.57143	17.6471
+O	8.57143	8.57143	3.36143
+O	8.57143	8.57143	6.21857
+O	8.57143	8.57143	9.07571
Index: tests/regression/Simple_configuration/8/post/test-withoutsphere.xyz-sorted
===================================================================
--- tests/regression/Simple_configuration/8/post/test-withoutsphere.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/8/post/test-withoutsphere.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,872 @@
+H	0.758602	0	0
+H	0.758602	0	1.00857
+H	0.758602	0	11.4286
+H	0.758602	0	12.4371
+H	0.758602	0	14.2857
+H	0.758602	0	15.2943
+H	0.758602	0	17.1429
+H	0.758602	0	18.1514
+H	0.758602	0	2.85714
+H	0.758602	0	3.86571
+H	0.758602	0	5.71429
+H	0.758602	0	6.72285
+H	0.758602	0	8.57143
+H	0.758602	0	9.58
+H	0.758602	11.4286	0
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	11.4286
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	14.2857
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	17.1429
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	2.85714
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	5.71429
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	8.57143
+H	0.758602	11.4286	9.58
+H	0.758602	14.2857	0
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	11.4286
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	14.2857
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	17.1429
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	2.85714
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	5.71429
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	8.57143
+H	0.758602	14.2857	9.58
+H	0.758602	17.1429	0
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	11.4286
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	14.2857
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	17.1429
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	2.85714
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	5.71429
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	8.57143
+H	0.758602	17.1429	9.58
+H	0.758602	2.85714	0
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	11.4286
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	14.2857
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	17.1429
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	8.57143
+H	0.758602	2.85714	9.58
+H	0.758602	5.71429	0
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	11.4286
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	14.2857
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	17.1429
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	5.71429
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	8.57143
+H	0.758602	5.71429	9.58
+H	0.758602	8.57143	0
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	11.4286
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	14.2857
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	17.1429
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	2.85714
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	5.71429
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	8.57143
+H	0.758602	8.57143	9.58
+H	12.1872	0	11.4286
+H	12.1872	0	12.4371
+H	12.1872	0	14.2857
+H	12.1872	0	15.2943
+H	12.1872	0	17.1429
+H	12.1872	0	18.1514
+H	12.1872	0	8.57143
+H	12.1872	0	9.58
+H	12.1872	11.4286	0
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	11.4286
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	14.2857
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	17.1429
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	2.85714
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	5.71429
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	8.57143
+H	12.1872	11.4286	9.58
+H	12.1872	14.2857	0
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	11.4286
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	14.2857
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	17.1429
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	2.85714
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	5.71429
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	8.57143
+H	12.1872	14.2857	9.58
+H	12.1872	17.1429	0
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	11.4286
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	14.2857
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	17.1429
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	2.85714
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	5.71429
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	8.57143
+H	12.1872	17.1429	9.58
+H	12.1872	2.85714	11.4286
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	14.2857
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	17.1429
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	8.57143
+H	12.1872	2.85714	9.58
+H	12.1872	5.71429	11.4286
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	14.2857
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	17.1429
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	8.57143
+H	12.1872	5.71429	9.58
+H	12.1872	8.57143	0
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	11.4286
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	14.2857
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	17.1429
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	2.85714
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	5.71429
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	8.57143
+H	12.1872	8.57143	9.58
+H	15.0443	0	0
+H	15.0443	0	1.00857
+H	15.0443	0	11.4286
+H	15.0443	0	12.4371
+H	15.0443	0	14.2857
+H	15.0443	0	15.2943
+H	15.0443	0	17.1429
+H	15.0443	0	18.1514
+H	15.0443	0	2.85714
+H	15.0443	0	3.86571
+H	15.0443	0	5.71429
+H	15.0443	0	6.72285
+H	15.0443	0	8.57143
+H	15.0443	0	9.58
+H	15.0443	11.4286	0
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	11.4286
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	14.2857
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	17.1429
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	2.85714
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	5.71429
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	8.57143
+H	15.0443	11.4286	9.58
+H	15.0443	14.2857	0
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	11.4286
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	14.2857
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	17.1429
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	2.85714
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	5.71429
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	8.57143
+H	15.0443	14.2857	9.58
+H	15.0443	17.1429	0
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	11.4286
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	14.2857
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	17.1429
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	5.71429
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	8.57143
+H	15.0443	17.1429	9.58
+H	15.0443	2.85714	0
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	11.4286
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	14.2857
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	17.1429
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	5.71429
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	8.57143
+H	15.0443	2.85714	9.58
+H	15.0443	5.71429	0
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	11.4286
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	14.2857
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	17.1429
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	2.85714
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	5.71429
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	8.57143
+H	15.0443	5.71429	9.58
+H	15.0443	8.57143	0
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	11.4286
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	14.2857
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	17.1429
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	2.85714
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	5.71429
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	8.57143
+H	15.0443	8.57143	9.58
+H	17.9015	0	0
+H	17.9015	0	1.00857
+H	17.9015	0	11.4286
+H	17.9015	0	12.4371
+H	17.9015	0	14.2857
+H	17.9015	0	15.2943
+H	17.9015	0	17.1429
+H	17.9015	0	18.1514
+H	17.9015	0	2.85714
+H	17.9015	0	3.86571
+H	17.9015	0	5.71429
+H	17.9015	0	6.72285
+H	17.9015	0	8.57143
+H	17.9015	0	9.58
+H	17.9015	11.4286	0
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	11.4286
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	14.2857
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	17.1429
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	2.85714
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	5.71429
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	8.57143
+H	17.9015	11.4286	9.58
+H	17.9015	14.2857	0
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	11.4286
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	14.2857
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	17.1429
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	5.71429
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	8.57143
+H	17.9015	14.2857	9.58
+H	17.9015	17.1429	0
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	11.4286
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	14.2857
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	17.1429
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	2.85714
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	5.71429
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	8.57143
+H	17.9015	17.1429	9.58
+H	17.9015	2.85714	0
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	11.4286
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	14.2857
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	17.1429
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	2.85714
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	5.71429
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	8.57143
+H	17.9015	2.85714	9.58
+H	17.9015	5.71429	0
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	11.4286
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	14.2857
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	17.1429
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	5.71429
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	8.57143
+H	17.9015	5.71429	9.58
+H	17.9015	8.57143	0
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	11.4286
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	14.2857
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	17.1429
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	2.85714
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	5.71429
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	8.57143
+H	17.9015	8.57143	9.58
+H	3.61574	0	11.4286
+H	3.61574	0	12.4371
+H	3.61574	0	14.2857
+H	3.61574	0	15.2943
+H	3.61574	0	17.1429
+H	3.61574	0	18.1514
+H	3.61574	0	8.57143
+H	3.61574	0	9.58
+H	3.61574	11.4286	0
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	11.4286
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	14.2857
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	17.1429
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	2.85714
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	5.71429
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	8.57143
+H	3.61574	11.4286	9.58
+H	3.61574	14.2857	0
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	11.4286
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	14.2857
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	17.1429
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	2.85714
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	5.71429
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	8.57143
+H	3.61574	14.2857	9.58
+H	3.61574	17.1429	0
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	11.4286
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	14.2857
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	17.1429
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	2.85714
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	5.71429
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	8.57143
+H	3.61574	17.1429	9.58
+H	3.61574	2.85714	11.4286
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	14.2857
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	17.1429
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	9.58
+H	3.61574	5.71429	11.4286
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	14.2857
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	17.1429
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	9.58
+H	3.61574	8.57143	0
+H	3.61574	8.57143	11.4286
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	14.2857
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	17.1429
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	8.57143
+H	3.61574	8.57143	9.58
+H	6.47289	0	11.4286
+H	6.47289	0	12.4371
+H	6.47289	0	14.2857
+H	6.47289	0	15.2943
+H	6.47289	0	17.1429
+H	6.47289	0	18.1514
+H	6.47289	11.4286	0
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	11.4286
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	14.2857
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	17.1429
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	2.85714
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	5.71429
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	8.57143
+H	6.47289	11.4286	9.58
+H	6.47289	14.2857	0
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	11.4286
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	14.2857
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	17.1429
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	2.85714
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	5.71429
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	8.57143
+H	6.47289	14.2857	9.58
+H	6.47289	17.1429	0
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	11.4286
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	14.2857
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	17.1429
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	2.85714
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	5.71429
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	8.57143
+H	6.47289	17.1429	9.58
+H	6.47289	2.85714	11.4286
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	14.2857
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	17.1429
+H	6.47289	2.85714	18.1514
+H	6.47289	5.71429	11.4286
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	14.2857
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	17.1429
+H	6.47289	5.71429	18.1514
+H	6.47289	8.57143	11.4286
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	14.2857
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	17.1429
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	8.57143
+H	6.47289	8.57143	9.58
+H	9.33003	0	11.4286
+H	9.33003	0	12.4371
+H	9.33003	0	14.2857
+H	9.33003	0	15.2943
+H	9.33003	0	17.1429
+H	9.33003	0	18.1514
+H	9.33003	0	9.58
+H	9.33003	11.4286	0
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	11.4286
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	14.2857
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	17.1429
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	2.85714
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	5.71429
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	8.57143
+H	9.33003	11.4286	9.58
+H	9.33003	14.2857	0
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	11.4286
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	14.2857
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	17.1429
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	2.85714
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	5.71429
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	8.57143
+H	9.33003	14.2857	9.58
+H	9.33003	17.1429	0
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	11.4286
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	14.2857
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	17.1429
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	2.85714
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	5.71429
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	8.57143
+H	9.33003	17.1429	9.58
+H	9.33003	2.85714	11.4286
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	14.2857
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	17.1429
+H	9.33003	2.85714	18.1514
+H	9.33003	5.71429	11.4286
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	14.2857
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	17.1429
+H	9.33003	5.71429	18.1514
+H	9.33003	8.57143	11.4286
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	14.2857
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	17.1429
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	8.57143
+H	9.33003	8.57143	9.58
+O	0	0	0.504284
+O	0	0	11.9329
+O	0	0	14.79
+O	0	0	17.6471
+O	0	0	3.36143
+O	0	0	6.21857
+O	0	0	9.07571
+O	0	11.4286	0.504284
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+O	0	11.4286	17.6471
+O	0	11.4286	3.36143
+O	0	11.4286	6.21857
+O	0	11.4286	9.07571
+O	0	14.2857	0.504284
+O	0	14.2857	11.9329
+O	0	14.2857	14.79
+O	0	14.2857	17.6471
+O	0	14.2857	3.36143
+O	0	14.2857	6.21857
+O	0	14.2857	9.07571
+O	0	17.1429	0.504284
+O	0	17.1429	11.9329
+O	0	17.1429	14.79
+O	0	17.1429	17.6471
+O	0	17.1429	3.36143
+O	0	17.1429	6.21857
+O	0	17.1429	9.07571
+O	0	2.85714	0.504284
+O	0	2.85714	11.9329
+O	0	2.85714	14.79
+O	0	2.85714	17.6471
+O	0	2.85714	3.36143
+O	0	2.85714	6.21857
+O	0	2.85714	9.07571
+O	0	5.71429	0.504284
+O	0	5.71429	11.9329
+O	0	5.71429	14.79
+O	0	5.71429	17.6471
+O	0	5.71429	3.36143
+O	0	5.71429	6.21857
+O	0	5.71429	9.07571
+O	0	8.57143	0.504284
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+O	0	8.57143	17.6471
+O	0	8.57143	3.36143
+O	0	8.57143	6.21857
+O	0	8.57143	9.07571
+O	11.4286	0	11.9329
+O	11.4286	0	14.79
+O	11.4286	0	17.6471
+O	11.4286	0	9.07571
+O	11.4286	11.4286	0.504284
+O	11.4286	11.4286	11.9329
+O	11.4286	11.4286	14.79
+O	11.4286	11.4286	17.6471
+O	11.4286	11.4286	3.36143
+O	11.4286	11.4286	6.21857
+O	11.4286	11.4286	9.07571
+O	11.4286	14.2857	0.504284
+O	11.4286	14.2857	11.9329
+O	11.4286	14.2857	14.79
+O	11.4286	14.2857	17.6471
+O	11.4286	14.2857	3.36143
+O	11.4286	14.2857	6.21857
+O	11.4286	14.2857	9.07571
+O	11.4286	17.1429	0.504284
+O	11.4286	17.1429	11.9329
+O	11.4286	17.1429	14.79
+O	11.4286	17.1429	17.6471
+O	11.4286	17.1429	3.36143
+O	11.4286	17.1429	6.21857
+O	11.4286	17.1429	9.07571
+O	11.4286	2.85714	11.9329
+O	11.4286	2.85714	14.79
+O	11.4286	2.85714	17.6471
+O	11.4286	5.71429	11.9329
+O	11.4286	5.71429	14.79
+O	11.4286	5.71429	17.6471
+O	11.4286	5.71429	9.07571
+O	11.4286	8.57143	0.504284
+O	11.4286	8.57143	11.9329
+O	11.4286	8.57143	14.79
+O	11.4286	8.57143	17.6471
+O	11.4286	8.57143	6.21857
+O	11.4286	8.57143	9.07571
+O	14.2857	0	0.504284
+O	14.2857	0	11.9329
+O	14.2857	0	14.79
+O	14.2857	0	17.6471
+O	14.2857	0	3.36143
+O	14.2857	0	6.21857
+O	14.2857	0	9.07571
+O	14.2857	11.4286	0.504284
+O	14.2857	11.4286	11.9329
+O	14.2857	11.4286	14.79
+O	14.2857	11.4286	17.6471
+O	14.2857	11.4286	3.36143
+O	14.2857	11.4286	6.21857
+O	14.2857	11.4286	9.07571
+O	14.2857	14.2857	0.504284
+O	14.2857	14.2857	11.9329
+O	14.2857	14.2857	14.79
+O	14.2857	14.2857	17.6471
+O	14.2857	14.2857	3.36143
+O	14.2857	14.2857	6.21857
+O	14.2857	14.2857	9.07571
+O	14.2857	17.1429	0.504284
+O	14.2857	17.1429	11.9329
+O	14.2857	17.1429	14.79
+O	14.2857	17.1429	17.6471
+O	14.2857	17.1429	3.36143
+O	14.2857	17.1429	6.21857
+O	14.2857	17.1429	9.07571
+O	14.2857	2.85714	0.504284
+O	14.2857	2.85714	11.9329
+O	14.2857	2.85714	14.79
+O	14.2857	2.85714	17.6471
+O	14.2857	2.85714	3.36143
+O	14.2857	2.85714	6.21857
+O	14.2857	2.85714	9.07571
+O	14.2857	5.71429	0.504284
+O	14.2857	5.71429	11.9329
+O	14.2857	5.71429	14.79
+O	14.2857	5.71429	17.6471
+O	14.2857	5.71429	3.36143
+O	14.2857	5.71429	6.21857
+O	14.2857	5.71429	9.07571
+O	14.2857	8.57143	0.504284
+O	14.2857	8.57143	11.9329
+O	14.2857	8.57143	14.79
+O	14.2857	8.57143	17.6471
+O	14.2857	8.57143	3.36143
+O	14.2857	8.57143	6.21857
+O	14.2857	8.57143	9.07571
+O	17.1429	0	0.504284
+O	17.1429	0	11.9329
+O	17.1429	0	14.79
+O	17.1429	0	17.6471
+O	17.1429	0	3.36143
+O	17.1429	0	6.21857
+O	17.1429	0	9.07571
+O	17.1429	11.4286	0.504284
+O	17.1429	11.4286	11.9329
+O	17.1429	11.4286	14.79
+O	17.1429	11.4286	17.6471
+O	17.1429	11.4286	3.36143
+O	17.1429	11.4286	6.21857
+O	17.1429	11.4286	9.07571
+O	17.1429	14.2857	0.504284
+O	17.1429	14.2857	11.9329
+O	17.1429	14.2857	14.79
+O	17.1429	14.2857	17.6471
+O	17.1429	14.2857	3.36143
+O	17.1429	14.2857	6.21857
+O	17.1429	14.2857	9.07571
+O	17.1429	17.1429	0.504284
+O	17.1429	17.1429	11.9329
+O	17.1429	17.1429	14.79
+O	17.1429	17.1429	17.6471
+O	17.1429	17.1429	3.36143
+O	17.1429	17.1429	6.21857
+O	17.1429	17.1429	9.07571
+O	17.1429	2.85714	0.504284
+O	17.1429	2.85714	11.9329
+O	17.1429	2.85714	14.79
+O	17.1429	2.85714	17.6471
+O	17.1429	2.85714	3.36143
+O	17.1429	2.85714	6.21857
+O	17.1429	2.85714	9.07571
+O	17.1429	5.71429	0.504284
+O	17.1429	5.71429	11.9329
+O	17.1429	5.71429	14.79
+O	17.1429	5.71429	17.6471
+O	17.1429	5.71429	3.36143
+O	17.1429	5.71429	6.21857
+O	17.1429	5.71429	9.07571
+O	17.1429	8.57143	0.504284
+O	17.1429	8.57143	11.9329
+O	17.1429	8.57143	14.79
+O	17.1429	8.57143	17.6471
+O	17.1429	8.57143	3.36143
+O	17.1429	8.57143	6.21857
+O	17.1429	8.57143	9.07571
+O	2.85714	0	11.9329
+O	2.85714	0	14.79
+O	2.85714	0	17.6471
+O	2.85714	0	9.07571
+O	2.85714	11.4286	0.504284
+O	2.85714	11.4286	11.9329
+O	2.85714	11.4286	14.79
+O	2.85714	11.4286	17.6471
+O	2.85714	11.4286	3.36143
+O	2.85714	11.4286	6.21857
+O	2.85714	11.4286	9.07571
+O	2.85714	14.2857	0.504284
+O	2.85714	14.2857	11.9329
+O	2.85714	14.2857	14.79
+O	2.85714	14.2857	17.6471
+O	2.85714	14.2857	3.36143
+O	2.85714	14.2857	6.21857
+O	2.85714	14.2857	9.07571
+O	2.85714	17.1429	0.504284
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+O	2.85714	17.1429	17.6471
+O	2.85714	17.1429	3.36143
+O	2.85714	17.1429	6.21857
+O	2.85714	17.1429	9.07571
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+O	2.85714	2.85714	17.6471
+O	2.85714	2.85714	9.07571
+O	2.85714	5.71429	11.9329
+O	2.85714	5.71429	14.79
+O	2.85714	5.71429	17.6471
+O	2.85714	5.71429	9.07571
+O	2.85714	8.57143	0.504284
+O	2.85714	8.57143	11.9329
+O	2.85714	8.57143	14.79
+O	2.85714	8.57143	17.6471
+O	2.85714	8.57143	6.21857
+O	2.85714	8.57143	9.07571
+O	5.71429	0	11.9329
+O	5.71429	0	14.79
+O	5.71429	0	17.6471
+O	5.71429	11.4286	0.504284
+O	5.71429	11.4286	11.9329
+O	5.71429	11.4286	14.79
+O	5.71429	11.4286	17.6471
+O	5.71429	11.4286	3.36143
+O	5.71429	11.4286	6.21857
+O	5.71429	11.4286	9.07571
+O	5.71429	14.2857	0.504284
+O	5.71429	14.2857	11.9329
+O	5.71429	14.2857	14.79
+O	5.71429	14.2857	17.6471
+O	5.71429	14.2857	3.36143
+O	5.71429	14.2857	6.21857
+O	5.71429	14.2857	9.07571
+O	5.71429	17.1429	0.504284
+O	5.71429	17.1429	11.9329
+O	5.71429	17.1429	14.79
+O	5.71429	17.1429	17.6471
+O	5.71429	17.1429	3.36143
+O	5.71429	17.1429	6.21857
+O	5.71429	17.1429	9.07571
+O	5.71429	2.85714	11.9329
+O	5.71429	2.85714	14.79
+O	5.71429	2.85714	17.6471
+O	5.71429	5.71429	11.9329
+O	5.71429	5.71429	14.79
+O	5.71429	5.71429	17.6471
+O	5.71429	8.57143	11.9329
+O	5.71429	8.57143	14.79
+O	5.71429	8.57143	17.6471
+O	5.71429	8.57143	9.07571
+O	8.57143	0	11.9329
+O	8.57143	0	14.79
+O	8.57143	0	17.6471
+O	8.57143	11.4286	0.504284
+O	8.57143	11.4286	11.9329
+O	8.57143	11.4286	14.79
+O	8.57143	11.4286	17.6471
+O	8.57143	11.4286	3.36143
+O	8.57143	11.4286	6.21857
+O	8.57143	11.4286	9.07571
+O	8.57143	14.2857	0.504284
+O	8.57143	14.2857	11.9329
+O	8.57143	14.2857	14.79
+O	8.57143	14.2857	17.6471
+O	8.57143	14.2857	3.36143
+O	8.57143	14.2857	6.21857
+O	8.57143	14.2857	9.07571
+O	8.57143	17.1429	0.504284
+O	8.57143	17.1429	11.9329
+O	8.57143	17.1429	14.79
+O	8.57143	17.1429	17.6471
+O	8.57143	17.1429	3.36143
+O	8.57143	17.1429	6.21857
+O	8.57143	17.1429	9.07571
+O	8.57143	2.85714	11.9329
+O	8.57143	2.85714	14.79
+O	8.57143	2.85714	17.6471
+O	8.57143	5.71429	11.9329
+O	8.57143	5.71429	14.79
+O	8.57143	5.71429	17.6471
+O	8.57143	8.57143	11.9329
+O	8.57143	8.57143	14.79
+O	8.57143	8.57143	17.6471
+O	8.57143	8.57143	9.07571
Index: sts/regression/Simple_configuration/8/post/test.xyz
===================================================================
--- tests/regression/Simple_configuration/8/post/test.xyz	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,146 +1,0 @@
-144
-	Created by molecuilder on Mon May 31 18:50:20 2010
-H	9.78209	2.64589	2.64589
-H	9.78209	2.64589	4.42589
-H	10.672	3.90454	3.53589
-H	8.53279	4.78789	2.64589
-H	8.53279	4.78789	4.42589
-H	6.39363	3.90454	3.53589
-H	7.28359	2.64589	2.64589
-H	7.28359	2.64589	4.42589
-H	0.758602	2.85714	3.86571
-H	0.758602	2.85714	2.85714
-H	0.758602	2.85714	5.71429
-H	0.758602	5.71429	3.86571
-H	0.758602	5.71429	2.85714
-H	3.61574	0	1.00857
-H	3.61574	0	0
-H	3.61574	0	3.86571
-H	3.61574	0	2.85714
-H	3.61574	0	6.72285
-H	3.61574	0	5.71429
-H	3.61574	2.85714	1.00857
-H	3.61574	2.85714	0
-H	3.61574	2.85714	3.86571
-H	3.61574	2.85714	2.85714
-H	3.61574	2.85714	6.72285
-H	3.61574	2.85714	5.71429
-H	3.61574	2.85714	8.57143
-H	3.61574	5.71429	1.00857
-H	3.61574	5.71429	0
-H	3.61574	5.71429	3.86571
-H	3.61574	5.71429	2.85714
-H	3.61574	5.71429	6.72285
-H	3.61574	5.71429	5.71429
-H	3.61574	5.71429	8.57143
-H	3.61574	8.57143	1.00857
-H	3.61574	8.57143	3.86571
-H	3.61574	8.57143	2.85714
-H	3.61574	8.57143	5.71429
-H	6.47289	0	1.00857
-H	6.47289	0	0
-H	6.47289	0	3.86571
-H	6.47289	0	2.85714
-H	6.47289	0	6.72285
-H	6.47289	0	5.71429
-H	6.47289	0	9.58
-H	6.47289	0	8.57143
-H	6.47289	2.85714	0
-H	6.47289	2.85714	6.72285
-H	6.47289	2.85714	9.58
-H	6.47289	2.85714	8.57143
-H	6.47289	5.71429	1.00857
-H	6.47289	5.71429	0
-H	6.47289	5.71429	6.72285
-H	6.47289	5.71429	5.71429
-H	6.47289	5.71429	9.58
-H	6.47289	5.71429	8.57143
-H	6.47289	8.57143	1.00857
-H	6.47289	8.57143	0
-H	6.47289	8.57143	3.86571
-H	6.47289	8.57143	2.85714
-H	6.47289	8.57143	6.72285
-H	6.47289	8.57143	5.71429
-H	9.33003	0	1.00857
-H	9.33003	0	0
-H	9.33003	0	3.86571
-H	9.33003	0	2.85714
-H	9.33003	0	6.72285
-H	9.33003	0	5.71429
-H	9.33003	0	8.57143
-H	9.33003	2.85714	0
-H	9.33003	2.85714	6.72285
-H	9.33003	2.85714	9.58
-H	9.33003	2.85714	8.57143
-H	9.33003	5.71429	0
-H	9.33003	5.71429	6.72285
-H	9.33003	5.71429	9.58
-H	9.33003	5.71429	8.57143
-H	9.33003	8.57143	1.00857
-H	9.33003	8.57143	0
-H	9.33003	8.57143	3.86571
-H	9.33003	8.57143	2.85714
-H	9.33003	8.57143	6.72285
-H	9.33003	8.57143	5.71429
-H	12.1872	0	1.00857
-H	12.1872	0	0
-H	12.1872	0	3.86571
-H	12.1872	0	2.85714
-H	12.1872	0	6.72285
-H	12.1872	0	5.71429
-H	12.1872	2.85714	1.00857
-H	12.1872	2.85714	0
-H	12.1872	2.85714	6.72285
-H	12.1872	2.85714	5.71429
-H	12.1872	5.71429	1.00857
-H	12.1872	5.71429	0
-H	12.1872	5.71429	3.86571
-H	12.1872	5.71429	2.85714
-H	12.1872	5.71429	6.72285
-H	12.1872	5.71429	5.71429
-C	9.78209	3.27519	3.53589
-C	8.53279	4.15859	3.53589
-C	7.28359	3.27519	3.53589
-O	2.85714	0	0.504284
-O	2.85714	0	3.36143
-O	2.85714	0	6.21857
-O	2.85714	2.85714	0.504284
-O	2.85714	2.85714	3.36143
-O	2.85714	2.85714	6.21857
-O	2.85714	5.71429	0.504284
-O	2.85714	5.71429	3.36143
-O	2.85714	5.71429	6.21857
-O	2.85714	8.57143	3.36143
-O	5.71429	0	0.504284
-O	5.71429	0	3.36143
-O	5.71429	0	6.21857
-O	5.71429	0	9.07571
-O	5.71429	2.85714	0.504284
-O	5.71429	2.85714	6.21857
-O	5.71429	2.85714	9.07571
-O	5.71429	5.71429	0.504284
-O	5.71429	5.71429	6.21857
-O	5.71429	5.71429	9.07571
-O	5.71429	8.57143	0.504284
-O	5.71429	8.57143	3.36143
-O	5.71429	8.57143	6.21857
-O	8.57143	0	0.504284
-O	8.57143	0	3.36143
-O	8.57143	0	6.21857
-O	8.57143	0	9.07571
-O	8.57143	2.85714	0.504284
-O	8.57143	2.85714	9.07571
-O	8.57143	5.71429	0.504284
-O	8.57143	5.71429	9.07571
-O	8.57143	8.57143	0.504284
-O	8.57143	8.57143	3.36143
-O	8.57143	8.57143	6.21857
-O	11.4286	0	0.504284
-O	11.4286	0	3.36143
-O	11.4286	0	6.21857
-O	11.4286	2.85714	0.504284
-O	11.4286	2.85714	6.21857
-O	11.4286	2.85714	9.07571
-O	11.4286	5.71429	0.504284
-O	11.4286	5.71429	6.21857
-O	11.4286	8.57143	3.36143
Index: tests/regression/Simple_configuration/8/post/test.xyz-sorted
===================================================================
--- tests/regression/Simple_configuration/8/post/test.xyz-sorted	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/Simple_configuration/8/post/test.xyz-sorted	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -2,34 +2,459 @@
 C	8.53279	4.15859	3.53589
 C	9.78209	3.27519	3.53589
+H	0.758602	0	0
+H	0.758602	0	1.00857
+H	0.758602	0	11.4286
+H	0.758602	0	12.4371
+H	0.758602	0	14.2857
+H	0.758602	0	15.2943
+H	0.758602	0	17.1429
+H	0.758602	0	18.1514
+H	0.758602	0	2.85714
+H	0.758602	0	3.86571
+H	0.758602	0	5.71429
+H	0.758602	0	6.72285
+H	0.758602	0	8.57143
+H	0.758602	0	9.58
+H	0.758602	11.4286	0
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	11.4286
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	14.2857
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	17.1429
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	2.85714
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	5.71429
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	8.57143
+H	0.758602	11.4286	9.58
+H	0.758602	14.2857	0
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	11.4286
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	14.2857
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	17.1429
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	2.85714
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	5.71429
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	8.57143
+H	0.758602	14.2857	9.58
+H	0.758602	17.1429	0
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	11.4286
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	14.2857
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	17.1429
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	2.85714
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	5.71429
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	8.57143
+H	0.758602	17.1429	9.58
+H	0.758602	2.85714	0
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	11.4286
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	14.2857
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	17.1429
+H	0.758602	2.85714	18.1514
 H	0.758602	2.85714	2.85714
 H	0.758602	2.85714	3.86571
 H	0.758602	2.85714	5.71429
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	8.57143
+H	0.758602	2.85714	9.58
+H	0.758602	5.71429	0
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	11.4286
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	14.2857
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	17.1429
+H	0.758602	5.71429	18.1514
 H	0.758602	5.71429	2.85714
 H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	5.71429
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	8.57143
+H	0.758602	5.71429	9.58
+H	0.758602	8.57143	0
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	11.4286
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	14.2857
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	17.1429
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	2.85714
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	5.71429
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	8.57143
+H	0.758602	8.57143	9.58
 H	10.672	3.90454	3.53589
 H	12.1872	0	0
 H	12.1872	0	1.00857
+H	12.1872	0	11.4286
+H	12.1872	0	12.4371
+H	12.1872	0	14.2857
+H	12.1872	0	15.2943
+H	12.1872	0	17.1429
+H	12.1872	0	18.1514
 H	12.1872	0	2.85714
 H	12.1872	0	3.86571
 H	12.1872	0	5.71429
 H	12.1872	0	6.72285
+H	12.1872	0	8.57143
+H	12.1872	0	9.58
+H	12.1872	11.4286	0
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	11.4286
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	14.2857
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	17.1429
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	2.85714
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	5.71429
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	8.57143
+H	12.1872	11.4286	9.58
+H	12.1872	14.2857	0
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	11.4286
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	14.2857
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	17.1429
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	2.85714
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	5.71429
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	8.57143
+H	12.1872	14.2857	9.58
+H	12.1872	17.1429	0
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	11.4286
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	14.2857
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	17.1429
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	2.85714
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	5.71429
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	8.57143
+H	12.1872	17.1429	9.58
 H	12.1872	2.85714	0
 H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	11.4286
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	14.2857
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	17.1429
+H	12.1872	2.85714	18.1514
 H	12.1872	2.85714	5.71429
 H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	8.57143
+H	12.1872	2.85714	9.58
 H	12.1872	5.71429	0
 H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	11.4286
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	14.2857
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	17.1429
+H	12.1872	5.71429	18.1514
 H	12.1872	5.71429	2.85714
 H	12.1872	5.71429	3.86571
 H	12.1872	5.71429	5.71429
 H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	8.57143
+H	12.1872	5.71429	9.58
+H	12.1872	8.57143	0
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	11.4286
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	14.2857
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	17.1429
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	2.85714
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	5.71429
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	8.57143
+H	12.1872	8.57143	9.58
+H	15.0443	0	0
+H	15.0443	0	1.00857
+H	15.0443	0	11.4286
+H	15.0443	0	12.4371
+H	15.0443	0	14.2857
+H	15.0443	0	15.2943
+H	15.0443	0	17.1429
+H	15.0443	0	18.1514
+H	15.0443	0	2.85714
+H	15.0443	0	3.86571
+H	15.0443	0	5.71429
+H	15.0443	0	6.72285
+H	15.0443	0	8.57143
+H	15.0443	0	9.58
+H	15.0443	11.4286	0
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	11.4286
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	14.2857
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	17.1429
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	2.85714
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	5.71429
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	8.57143
+H	15.0443	11.4286	9.58
+H	15.0443	14.2857	0
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	11.4286
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	14.2857
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	17.1429
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	2.85714
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	5.71429
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	8.57143
+H	15.0443	14.2857	9.58
+H	15.0443	17.1429	0
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	11.4286
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	14.2857
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	17.1429
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	5.71429
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	8.57143
+H	15.0443	17.1429	9.58
+H	15.0443	2.85714	0
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	11.4286
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	14.2857
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	17.1429
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	5.71429
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	8.57143
+H	15.0443	2.85714	9.58
+H	15.0443	5.71429	0
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	11.4286
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	14.2857
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	17.1429
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	2.85714
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	5.71429
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	8.57143
+H	15.0443	5.71429	9.58
+H	15.0443	8.57143	0
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	11.4286
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	14.2857
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	17.1429
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	2.85714
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	5.71429
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	8.57143
+H	15.0443	8.57143	9.58
+H	17.9015	0	0
+H	17.9015	0	1.00857
+H	17.9015	0	11.4286
+H	17.9015	0	12.4371
+H	17.9015	0	14.2857
+H	17.9015	0	15.2943
+H	17.9015	0	17.1429
+H	17.9015	0	18.1514
+H	17.9015	0	2.85714
+H	17.9015	0	3.86571
+H	17.9015	0	5.71429
+H	17.9015	0	6.72285
+H	17.9015	0	8.57143
+H	17.9015	0	9.58
+H	17.9015	11.4286	0
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	11.4286
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	14.2857
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	17.1429
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	2.85714
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	5.71429
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	8.57143
+H	17.9015	11.4286	9.58
+H	17.9015	14.2857	0
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	11.4286
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	14.2857
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	17.1429
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	5.71429
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	8.57143
+H	17.9015	14.2857	9.58
+H	17.9015	17.1429	0
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	11.4286
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	14.2857
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	17.1429
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	2.85714
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	5.71429
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	8.57143
+H	17.9015	17.1429	9.58
+H	17.9015	2.85714	0
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	11.4286
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	14.2857
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	17.1429
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	2.85714
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	5.71429
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	8.57143
+H	17.9015	2.85714	9.58
+H	17.9015	5.71429	0
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	11.4286
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	14.2857
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	17.1429
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	5.71429
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	8.57143
+H	17.9015	5.71429	9.58
+H	17.9015	8.57143	0
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	11.4286
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	14.2857
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	17.1429
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	2.85714
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	5.71429
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	8.57143
+H	17.9015	8.57143	9.58
 H	3.61574	0	0
 H	3.61574	0	1.00857
+H	3.61574	0	11.4286
+H	3.61574	0	12.4371
+H	3.61574	0	14.2857
+H	3.61574	0	15.2943
+H	3.61574	0	17.1429
+H	3.61574	0	18.1514
 H	3.61574	0	2.85714
 H	3.61574	0	3.86571
 H	3.61574	0	5.71429
 H	3.61574	0	6.72285
+H	3.61574	0	8.57143
+H	3.61574	0	9.58
+H	3.61574	11.4286	0
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	11.4286
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	14.2857
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	17.1429
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	2.85714
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	5.71429
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	8.57143
+H	3.61574	11.4286	9.58
+H	3.61574	14.2857	0
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	11.4286
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	14.2857
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	17.1429
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	2.85714
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	5.71429
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	8.57143
+H	3.61574	14.2857	9.58
+H	3.61574	17.1429	0
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	11.4286
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	14.2857
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	17.1429
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	2.85714
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	5.71429
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	8.57143
+H	3.61574	17.1429	9.58
 H	3.61574	2.85714	0
 H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	11.4286
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	14.2857
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	17.1429
+H	3.61574	2.85714	18.1514
 H	3.61574	2.85714	2.85714
 H	3.61574	2.85714	3.86571
@@ -37,6 +462,13 @@
 H	3.61574	2.85714	6.72285
 H	3.61574	2.85714	8.57143
+H	3.61574	2.85714	9.58
 H	3.61574	5.71429	0
 H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	11.4286
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	14.2857
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	17.1429
+H	3.61574	5.71429	18.1514
 H	3.61574	5.71429	2.85714
 H	3.61574	5.71429	3.86571
@@ -44,11 +476,28 @@
 H	3.61574	5.71429	6.72285
 H	3.61574	5.71429	8.57143
+H	3.61574	5.71429	9.58
+H	3.61574	8.57143	0
 H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	11.4286
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	14.2857
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	17.1429
+H	3.61574	8.57143	18.1514
 H	3.61574	8.57143	2.85714
 H	3.61574	8.57143	3.86571
 H	3.61574	8.57143	5.71429
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	8.57143
+H	3.61574	8.57143	9.58
 H	6.39363	3.90454	3.53589
 H	6.47289	0	0
 H	6.47289	0	1.00857
+H	6.47289	0	11.4286
+H	6.47289	0	12.4371
+H	6.47289	0	14.2857
+H	6.47289	0	15.2943
+H	6.47289	0	17.1429
+H	6.47289	0	18.1514
 H	6.47289	0	2.85714
 H	6.47289	0	3.86571
@@ -57,5 +506,53 @@
 H	6.47289	0	8.57143
 H	6.47289	0	9.58
+H	6.47289	11.4286	0
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	11.4286
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	14.2857
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	17.1429
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	2.85714
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	5.71429
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	8.57143
+H	6.47289	11.4286	9.58
+H	6.47289	14.2857	0
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	11.4286
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	14.2857
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	17.1429
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	2.85714
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	5.71429
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	8.57143
+H	6.47289	14.2857	9.58
+H	6.47289	17.1429	0
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	11.4286
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	14.2857
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	17.1429
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	2.85714
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	5.71429
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	8.57143
+H	6.47289	17.1429	9.58
 H	6.47289	2.85714	0
+H	6.47289	2.85714	11.4286
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	14.2857
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	17.1429
+H	6.47289	2.85714	18.1514
 H	6.47289	2.85714	6.72285
 H	6.47289	2.85714	8.57143
@@ -63,4 +560,10 @@
 H	6.47289	5.71429	0
 H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	11.4286
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	14.2857
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	17.1429
+H	6.47289	5.71429	18.1514
 H	6.47289	5.71429	5.71429
 H	6.47289	5.71429	6.72285
@@ -69,8 +572,16 @@
 H	6.47289	8.57143	0
 H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	11.4286
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	14.2857
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	17.1429
+H	6.47289	8.57143	18.1514
 H	6.47289	8.57143	2.85714
 H	6.47289	8.57143	3.86571
 H	6.47289	8.57143	5.71429
 H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	8.57143
+H	6.47289	8.57143	9.58
 H	7.28359	2.64589	2.64589
 H	7.28359	2.64589	4.42589
@@ -79,4 +590,10 @@
 H	9.33003	0	0
 H	9.33003	0	1.00857
+H	9.33003	0	11.4286
+H	9.33003	0	12.4371
+H	9.33003	0	14.2857
+H	9.33003	0	15.2943
+H	9.33003	0	17.1429
+H	9.33003	0	18.1514
 H	9.33003	0	2.85714
 H	9.33003	0	3.86571
@@ -84,9 +601,64 @@
 H	9.33003	0	6.72285
 H	9.33003	0	8.57143
+H	9.33003	0	9.58
+H	9.33003	11.4286	0
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	11.4286
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	14.2857
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	17.1429
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	2.85714
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	5.71429
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	8.57143
+H	9.33003	11.4286	9.58
+H	9.33003	14.2857	0
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	11.4286
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	14.2857
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	17.1429
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	2.85714
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	5.71429
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	8.57143
+H	9.33003	14.2857	9.58
+H	9.33003	17.1429	0
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	11.4286
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	14.2857
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	17.1429
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	2.85714
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	5.71429
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	8.57143
+H	9.33003	17.1429	9.58
 H	9.33003	2.85714	0
+H	9.33003	2.85714	11.4286
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	14.2857
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	17.1429
+H	9.33003	2.85714	18.1514
 H	9.33003	2.85714	6.72285
 H	9.33003	2.85714	8.57143
 H	9.33003	2.85714	9.58
 H	9.33003	5.71429	0
+H	9.33003	5.71429	11.4286
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	14.2857
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	17.1429
+H	9.33003	5.71429	18.1514
 H	9.33003	5.71429	6.72285
 H	9.33003	5.71429	8.57143
@@ -94,52 +666,351 @@
 H	9.33003	8.57143	0
 H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	11.4286
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	14.2857
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	17.1429
+H	9.33003	8.57143	18.1514
 H	9.33003	8.57143	2.85714
 H	9.33003	8.57143	3.86571
 H	9.33003	8.57143	5.71429
 H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	8.57143
+H	9.33003	8.57143	9.58
 H	9.78209	2.64589	2.64589
 H	9.78209	2.64589	4.42589
+O	0	0	0.504284
+O	0	0	11.9329
+O	0	0	14.79
+O	0	0	17.6471
+O	0	0	3.36143
+O	0	0	6.21857
+O	0	0	9.07571
+O	0	11.4286	0.504284
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+O	0	11.4286	17.6471
+O	0	11.4286	3.36143
+O	0	11.4286	6.21857
+O	0	11.4286	9.07571
+O	0	14.2857	0.504284
+O	0	14.2857	11.9329
+O	0	14.2857	14.79
+O	0	14.2857	17.6471
+O	0	14.2857	3.36143
+O	0	14.2857	6.21857
+O	0	14.2857	9.07571
+O	0	17.1429	0.504284
+O	0	17.1429	11.9329
+O	0	17.1429	14.79
+O	0	17.1429	17.6471
+O	0	17.1429	3.36143
+O	0	17.1429	6.21857
+O	0	17.1429	9.07571
+O	0	2.85714	0.504284
+O	0	2.85714	11.9329
+O	0	2.85714	14.79
+O	0	2.85714	17.6471
+O	0	2.85714	3.36143
+O	0	2.85714	6.21857
+O	0	2.85714	9.07571
+O	0	5.71429	0.504284
+O	0	5.71429	11.9329
+O	0	5.71429	14.79
+O	0	5.71429	17.6471
+O	0	5.71429	3.36143
+O	0	5.71429	6.21857
+O	0	5.71429	9.07571
+O	0	8.57143	0.504284
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+O	0	8.57143	17.6471
+O	0	8.57143	3.36143
+O	0	8.57143	6.21857
+O	0	8.57143	9.07571
 O	11.4286	0	0.504284
+O	11.4286	0	11.9329
+O	11.4286	0	14.79
+O	11.4286	0	17.6471
 O	11.4286	0	3.36143
 O	11.4286	0	6.21857
+O	11.4286	0	9.07571
+O	11.4286	11.4286	0.504284
+O	11.4286	11.4286	11.9329
+O	11.4286	11.4286	14.79
+O	11.4286	11.4286	17.6471
+O	11.4286	11.4286	3.36143
+O	11.4286	11.4286	6.21857
+O	11.4286	11.4286	9.07571
+O	11.4286	14.2857	0.504284
+O	11.4286	14.2857	11.9329
+O	11.4286	14.2857	14.79
+O	11.4286	14.2857	17.6471
+O	11.4286	14.2857	3.36143
+O	11.4286	14.2857	6.21857
+O	11.4286	14.2857	9.07571
+O	11.4286	17.1429	0.504284
+O	11.4286	17.1429	11.9329
+O	11.4286	17.1429	14.79
+O	11.4286	17.1429	17.6471
+O	11.4286	17.1429	3.36143
+O	11.4286	17.1429	6.21857
+O	11.4286	17.1429	9.07571
 O	11.4286	2.85714	0.504284
+O	11.4286	2.85714	11.9329
+O	11.4286	2.85714	14.79
+O	11.4286	2.85714	17.6471
 O	11.4286	2.85714	6.21857
 O	11.4286	2.85714	9.07571
 O	11.4286	5.71429	0.504284
+O	11.4286	5.71429	11.9329
+O	11.4286	5.71429	14.79
+O	11.4286	5.71429	17.6471
 O	11.4286	5.71429	6.21857
+O	11.4286	5.71429	9.07571
+O	11.4286	8.57143	0.504284
+O	11.4286	8.57143	11.9329
+O	11.4286	8.57143	14.79
+O	11.4286	8.57143	17.6471
 O	11.4286	8.57143	3.36143
+O	11.4286	8.57143	6.21857
+O	11.4286	8.57143	9.07571
+O	14.2857	0	0.504284
+O	14.2857	0	11.9329
+O	14.2857	0	14.79
+O	14.2857	0	17.6471
+O	14.2857	0	3.36143
+O	14.2857	0	6.21857
+O	14.2857	0	9.07571
+O	14.2857	11.4286	0.504284
+O	14.2857	11.4286	11.9329
+O	14.2857	11.4286	14.79
+O	14.2857	11.4286	17.6471
+O	14.2857	11.4286	3.36143
+O	14.2857	11.4286	6.21857
+O	14.2857	11.4286	9.07571
+O	14.2857	14.2857	0.504284
+O	14.2857	14.2857	11.9329
+O	14.2857	14.2857	14.79
+O	14.2857	14.2857	17.6471
+O	14.2857	14.2857	3.36143
+O	14.2857	14.2857	6.21857
+O	14.2857	14.2857	9.07571
+O	14.2857	17.1429	0.504284
+O	14.2857	17.1429	11.9329
+O	14.2857	17.1429	14.79
+O	14.2857	17.1429	17.6471
+O	14.2857	17.1429	3.36143
+O	14.2857	17.1429	6.21857
+O	14.2857	17.1429	9.07571
+O	14.2857	2.85714	0.504284
+O	14.2857	2.85714	11.9329
+O	14.2857	2.85714	14.79
+O	14.2857	2.85714	17.6471
+O	14.2857	2.85714	3.36143
+O	14.2857	2.85714	6.21857
+O	14.2857	2.85714	9.07571
+O	14.2857	5.71429	0.504284
+O	14.2857	5.71429	11.9329
+O	14.2857	5.71429	14.79
+O	14.2857	5.71429	17.6471
+O	14.2857	5.71429	3.36143
+O	14.2857	5.71429	6.21857
+O	14.2857	5.71429	9.07571
+O	14.2857	8.57143	0.504284
+O	14.2857	8.57143	11.9329
+O	14.2857	8.57143	14.79
+O	14.2857	8.57143	17.6471
+O	14.2857	8.57143	3.36143
+O	14.2857	8.57143	6.21857
+O	14.2857	8.57143	9.07571
+O	17.1429	0	0.504284
+O	17.1429	0	11.9329
+O	17.1429	0	14.79
+O	17.1429	0	17.6471
+O	17.1429	0	3.36143
+O	17.1429	0	6.21857
+O	17.1429	0	9.07571
+O	17.1429	11.4286	0.504284
+O	17.1429	11.4286	11.9329
+O	17.1429	11.4286	14.79
+O	17.1429	11.4286	17.6471
+O	17.1429	11.4286	3.36143
+O	17.1429	11.4286	6.21857
+O	17.1429	11.4286	9.07571
+O	17.1429	14.2857	0.504284
+O	17.1429	14.2857	11.9329
+O	17.1429	14.2857	14.79
+O	17.1429	14.2857	17.6471
+O	17.1429	14.2857	3.36143
+O	17.1429	14.2857	6.21857
+O	17.1429	14.2857	9.07571
+O	17.1429	17.1429	0.504284
+O	17.1429	17.1429	11.9329
+O	17.1429	17.1429	14.79
+O	17.1429	17.1429	17.6471
+O	17.1429	17.1429	3.36143
+O	17.1429	17.1429	6.21857
+O	17.1429	17.1429	9.07571
+O	17.1429	2.85714	0.504284
+O	17.1429	2.85714	11.9329
+O	17.1429	2.85714	14.79
+O	17.1429	2.85714	17.6471
+O	17.1429	2.85714	3.36143
+O	17.1429	2.85714	6.21857
+O	17.1429	2.85714	9.07571
+O	17.1429	5.71429	0.504284
+O	17.1429	5.71429	11.9329
+O	17.1429	5.71429	14.79
+O	17.1429	5.71429	17.6471
+O	17.1429	5.71429	3.36143
+O	17.1429	5.71429	6.21857
+O	17.1429	5.71429	9.07571
+O	17.1429	8.57143	0.504284
+O	17.1429	8.57143	11.9329
+O	17.1429	8.57143	14.79
+O	17.1429	8.57143	17.6471
+O	17.1429	8.57143	3.36143
+O	17.1429	8.57143	6.21857
+O	17.1429	8.57143	9.07571
 O	2.85714	0	0.504284
+O	2.85714	0	11.9329
+O	2.85714	0	14.79
+O	2.85714	0	17.6471
 O	2.85714	0	3.36143
 O	2.85714	0	6.21857
+O	2.85714	0	9.07571
+O	2.85714	11.4286	0.504284
+O	2.85714	11.4286	11.9329
+O	2.85714	11.4286	14.79
+O	2.85714	11.4286	17.6471
+O	2.85714	11.4286	3.36143
+O	2.85714	11.4286	6.21857
+O	2.85714	11.4286	9.07571
+O	2.85714	14.2857	0.504284
+O	2.85714	14.2857	11.9329
+O	2.85714	14.2857	14.79
+O	2.85714	14.2857	17.6471
+O	2.85714	14.2857	3.36143
+O	2.85714	14.2857	6.21857
+O	2.85714	14.2857	9.07571
+O	2.85714	17.1429	0.504284
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+O	2.85714	17.1429	17.6471
+O	2.85714	17.1429	3.36143
+O	2.85714	17.1429	6.21857
+O	2.85714	17.1429	9.07571
 O	2.85714	2.85714	0.504284
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+O	2.85714	2.85714	17.6471
 O	2.85714	2.85714	3.36143
 O	2.85714	2.85714	6.21857
+O	2.85714	2.85714	9.07571
 O	2.85714	5.71429	0.504284
+O	2.85714	5.71429	11.9329
+O	2.85714	5.71429	14.79
+O	2.85714	5.71429	17.6471
 O	2.85714	5.71429	3.36143
 O	2.85714	5.71429	6.21857
+O	2.85714	5.71429	9.07571
+O	2.85714	8.57143	0.504284
+O	2.85714	8.57143	11.9329
+O	2.85714	8.57143	14.79
+O	2.85714	8.57143	17.6471
 O	2.85714	8.57143	3.36143
+O	2.85714	8.57143	6.21857
+O	2.85714	8.57143	9.07571
 O	5.71429	0	0.504284
+O	5.71429	0	11.9329
+O	5.71429	0	14.79
+O	5.71429	0	17.6471
 O	5.71429	0	3.36143
 O	5.71429	0	6.21857
 O	5.71429	0	9.07571
+O	5.71429	11.4286	0.504284
+O	5.71429	11.4286	11.9329
+O	5.71429	11.4286	14.79
+O	5.71429	11.4286	17.6471
+O	5.71429	11.4286	3.36143
+O	5.71429	11.4286	6.21857
+O	5.71429	11.4286	9.07571
+O	5.71429	14.2857	0.504284
+O	5.71429	14.2857	11.9329
+O	5.71429	14.2857	14.79
+O	5.71429	14.2857	17.6471
+O	5.71429	14.2857	3.36143
+O	5.71429	14.2857	6.21857
+O	5.71429	14.2857	9.07571
+O	5.71429	17.1429	0.504284
+O	5.71429	17.1429	11.9329
+O	5.71429	17.1429	14.79
+O	5.71429	17.1429	17.6471
+O	5.71429	17.1429	3.36143
+O	5.71429	17.1429	6.21857
+O	5.71429	17.1429	9.07571
 O	5.71429	2.85714	0.504284
+O	5.71429	2.85714	11.9329
+O	5.71429	2.85714	14.79
+O	5.71429	2.85714	17.6471
 O	5.71429	2.85714	6.21857
 O	5.71429	2.85714	9.07571
 O	5.71429	5.71429	0.504284
+O	5.71429	5.71429	11.9329
+O	5.71429	5.71429	14.79
+O	5.71429	5.71429	17.6471
 O	5.71429	5.71429	6.21857
 O	5.71429	5.71429	9.07571
 O	5.71429	8.57143	0.504284
+O	5.71429	8.57143	11.9329
+O	5.71429	8.57143	14.79
+O	5.71429	8.57143	17.6471
 O	5.71429	8.57143	3.36143
 O	5.71429	8.57143	6.21857
+O	5.71429	8.57143	9.07571
 O	8.57143	0	0.504284
+O	8.57143	0	11.9329
+O	8.57143	0	14.79
+O	8.57143	0	17.6471
 O	8.57143	0	3.36143
 O	8.57143	0	6.21857
 O	8.57143	0	9.07571
+O	8.57143	11.4286	0.504284
+O	8.57143	11.4286	11.9329
+O	8.57143	11.4286	14.79
+O	8.57143	11.4286	17.6471
+O	8.57143	11.4286	3.36143
+O	8.57143	11.4286	6.21857
+O	8.57143	11.4286	9.07571
+O	8.57143	14.2857	0.504284
+O	8.57143	14.2857	11.9329
+O	8.57143	14.2857	14.79
+O	8.57143	14.2857	17.6471
+O	8.57143	14.2857	3.36143
+O	8.57143	14.2857	6.21857
+O	8.57143	14.2857	9.07571
+O	8.57143	17.1429	0.504284
+O	8.57143	17.1429	11.9329
+O	8.57143	17.1429	14.79
+O	8.57143	17.1429	17.6471
+O	8.57143	17.1429	3.36143
+O	8.57143	17.1429	6.21857
+O	8.57143	17.1429	9.07571
 O	8.57143	2.85714	0.504284
+O	8.57143	2.85714	11.9329
+O	8.57143	2.85714	14.79
+O	8.57143	2.85714	17.6471
 O	8.57143	2.85714	9.07571
 O	8.57143	5.71429	0.504284
+O	8.57143	5.71429	11.9329
+O	8.57143	5.71429	14.79
+O	8.57143	5.71429	17.6471
 O	8.57143	5.71429	9.07571
 O	8.57143	8.57143	0.504284
+O	8.57143	8.57143	11.9329
+O	8.57143	8.57143	14.79
+O	8.57143	8.57143	17.6471
 O	8.57143	8.57143	3.36143
 O	8.57143	8.57143	6.21857
-144
+O	8.57143	8.57143	9.07571
Index: sts/regression/Simple_configuration/8/pre/test.conf
===================================================================
--- tests/regression/Simple_configuration/8/pre/test.conf	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ 	(revision )
@@ -1,1089 +1,0 @@
-# ParallelCarParinello - main configuration file - created with molecuilder
-
-mainname	pcp	# programm name (for runtime files)
-defaultpath	not specified	# where to put files during runtime
-pseudopotpath	not specified	# where to find pseudopotentials
-
-ProcPEGamma	8	# for parallel computing: share constants
-ProcPEPsi	1	# for parallel computing: share wave functions
-DoOutVis	0	# Output data for OpenDX
-DoOutMes	1	# Output data for measurements
-DoOutOrbitals	0	# Output all Orbitals
-DoOutCurr	0	# Ouput current density for OpenDx
-DoOutNICS	0	# Output Nucleus independent current shieldings
-DoPerturbation	0	# Do perturbation calculate and determine susceptibility and shielding
-DoFullCurrent	0	# Do full perturbation
-DoConstrainedMD	0	# Do perform a constrained (>0, relating to current MD step) instead of unconstrained (0) MD
-Thermostat	Berendsen	2.5	# Which Thermostat and its parameters to use in MD case.
-CommonWannier	0	# Put virtual centers at indivual orbits, all common, merged by variance, to grid point, to cell center
-SawtoothStart	0.01	# Absolute value for smooth transition at cell border 
-VectorPlane	0	# Cut plane axis (x, y or z: 0,1,2) for two-dim current vector plot
-VectorCut	0	# Cut plane axis value
-AddGramSch	1	# Additional GramSchmidtOrtogonalization to be safe
-Seed		1	# initial value for random seed for Psi coefficients
-
-MaxOuterStep	0	# number of MolecularDynamics/Structure optimization steps
-Deltat	0.01	# time per MD step
-OutVisStep	10	# Output visual data every ...th step
-OutSrcStep	5	# Output "restart" data every ..th step
-TargetTemp	0.000950045	# Target temperature
-MaxPsiStep	3	# number of Minimisation steps per state (0 - default)
-EpsWannier	1e-07	# tolerance value for spread minimisation of orbitals
-
-# Values specifying when to stop
-MaxMinStep	100	# Maximum number of steps
-RelEpsTotalE	1e-07	# relative change in total energy
-RelEpsKineticE	1e-05	# relative change in kinetic energy
-MaxMinStopStep	0	# check every ..th steps
-MaxMinGapStopStep	1	# check every ..th steps
-
-# Values specifying when to stop for INIT, otherwise same as above
-MaxInitMinStep	100	# Maximum number of steps
-InitRelEpsTotalE	1e-05	# relative change in total energy
-InitRelEpsKineticE	0.0001	# relative change in kinetic energy
-InitMaxMinStopStep	0	# check every ..th steps
-InitMaxMinGapStopStep	1	# check every ..th steps
-
-BoxLength			# (Length of a unit cell)
-20	
-0	20	
-0	0	20	
-
-ECut		128	# energy cutoff for discretization in Hartrees
-MaxLevel	5	# number of different levels in the code, >=2
-Level0Factor	2	# factor by which node number increases from S to 0 level
-RiemannTensor	0	# (Use metric)
-PsiType		0	# 0 - doubly occupied, 1 - SpinUp,SpinDown
-MaxPsiDouble	0	# here: specifying both maximum number of SpinUp- and -Down-states
-PsiMaxNoUp	0	# here: specifying maximum number of SpinUp-states
-PsiMaxNoDown	0	# here: specifying maximum number of SpinDown-states
-AddPsis		0	# Additional unoccupied Psis for bandgap determination
-
-RCut		20	# R-cut for the ewald summation
-StructOpt	0	# Do structure optimization beforehand
-IsAngstroem	1	# 0 - Bohr, 1 - Angstroem
-RelativeCoord	0	# whether ion coordinates are relative (1) or absolute (0)
-MaxTypes	3	# maximum number of different ion types
-
-# Ion type data (PP = PseudoPotential, Z = atomic number)
-#Ion_TypeNr.	Amount	Z	RGauss	L_Max(PP)L_Loc(PP)IonMass	# chemical name, symbol
-Ion_Type1	678	1	1.0	3	3	1.00800000000	Hydrogen	H
-Ion_Type2	3	6	1.0	3	3	12.01100000000	Carbon	C
-Ion_Type3	335	8	1.0	3	3	15.99900000000	Oxygen	O
-#Ion_TypeNr._Nr.R[0]    R[1]    R[2]    MoveType (0 MoveIon, 1 FixedIon)
-Ion_Type2_1	9.782085945	3.275186040	3.535886037	0 # molecule nr 0
-Ion_Type2_2	8.532785963	4.158586027	3.535886037	0 # molecule nr 1
-Ion_Type2_3	7.283585982	3.275186040	3.535886037	0 # molecule nr 2
-Ion_Type1_1	9.782085945	2.645886050	2.645886050	0 # molecule nr 3
-Ion_Type1_2	9.782085945	2.645886050	4.425886024	0 # molecule nr 4
-Ion_Type1_3	10.672039608	3.904536878	3.535886037	0 # molecule nr 5
-Ion_Type1_4	8.532785963	4.787886018	2.645886050	0 # molecule nr 6
-Ion_Type1_5	8.532785963	4.787886018	4.425886024	0 # molecule nr 7
-Ion_Type1_6	6.393632318	3.904536877	3.535886037	0 # molecule nr 8
-Ion_Type1_7	7.283585982	2.645886050	2.645886050	0 # molecule nr 9
-Ion_Type1_8	7.283585982	2.645886050	4.425886024	0 # molecule nr 10
-Ion_Type3_1	0.000000000	0.000000000	0.504284000	0 # molecule nr 11
-Ion_Type1_9	0.758602000	0.000000000	1.008568000	0 # molecule nr 12
-Ion_Type1_10	0.758602000	0.000000000	0.000000000	0 # molecule nr 13
-Ion_Type3_2	0.000000000	0.000000000	3.361426857	0 # molecule nr 14
-Ion_Type1_11	0.758602000	0.000000000	3.865710857	0 # molecule nr 15
-Ion_Type1_12	0.758602000	0.000000000	2.857142857	0 # molecule nr 16
-Ion_Type3_3	0.000000000	0.000000000	6.218569714	0 # molecule nr 17
-Ion_Type1_13	0.758602000	0.000000000	6.722853714	0 # molecule nr 18
-Ion_Type1_14	0.758602000	0.000000000	5.714285714	0 # molecule nr 19
-Ion_Type3_4	0.000000000	0.000000000	9.075712571	0 # molecule nr 20
-Ion_Type1_15	0.758602000	0.000000000	9.579996571	0 # molecule nr 21
-Ion_Type1_16	0.758602000	0.000000000	8.571428571	0 # molecule nr 22
-Ion_Type3_5	0.000000000	0.000000000	11.932855429	0 # molecule nr 23
-Ion_Type1_17	0.758602000	0.000000000	12.437139429	0 # molecule nr 24
-Ion_Type1_18	0.758602000	0.000000000	11.428571429	0 # molecule nr 25
-Ion_Type3_6	0.000000000	0.000000000	14.789998286	0 # molecule nr 26
-Ion_Type1_19	0.758602000	0.000000000	15.294282286	0 # molecule nr 27
-Ion_Type1_20	0.758602000	0.000000000	14.285714286	0 # molecule nr 28
-Ion_Type3_7	0.000000000	0.000000000	17.647141143	0 # molecule nr 29
-Ion_Type1_21	0.758602000	0.000000000	18.151425143	0 # molecule nr 30
-Ion_Type1_22	0.758602000	0.000000000	17.142857143	0 # molecule nr 31
-Ion_Type3_8	0.000000000	2.857142857	0.504284000	0 # molecule nr 32
-Ion_Type1_23	0.758602000	2.857142857	1.008568000	0 # molecule nr 33
-Ion_Type1_24	0.758602000	2.857142857	0.000000000	0 # molecule nr 34
-Ion_Type3_9	0.000000000	2.857142857	3.361426857	0 # molecule nr 35
-Ion_Type1_25	0.758602000	2.857142857	3.865710857	0 # molecule nr 36
-Ion_Type1_26	0.758602000	2.857142857	2.857142857	0 # molecule nr 37
-Ion_Type3_10	0.000000000	2.857142857	6.218569714	0 # molecule nr 38
-Ion_Type1_27	0.758602000	2.857142857	6.722853714	0 # molecule nr 39
-Ion_Type1_28	0.758602000	2.857142857	5.714285714	0 # molecule nr 40
-Ion_Type3_11	0.000000000	2.857142857	9.075712571	0 # molecule nr 41
-Ion_Type1_29	0.758602000	2.857142857	9.579996571	0 # molecule nr 42
-Ion_Type1_30	0.758602000	2.857142857	8.571428571	0 # molecule nr 43
-Ion_Type3_12	0.000000000	2.857142857	11.932855429	0 # molecule nr 44
-Ion_Type1_31	0.758602000	2.857142857	12.437139429	0 # molecule nr 45
-Ion_Type1_32	0.758602000	2.857142857	11.428571429	0 # molecule nr 46
-Ion_Type3_13	0.000000000	2.857142857	14.789998286	0 # molecule nr 47
-Ion_Type1_33	0.758602000	2.857142857	15.294282286	0 # molecule nr 48
-Ion_Type1_34	0.758602000	2.857142857	14.285714286	0 # molecule nr 49
-Ion_Type3_14	0.000000000	2.857142857	17.647141143	0 # molecule nr 50
-Ion_Type1_35	0.758602000	2.857142857	18.151425143	0 # molecule nr 51
-Ion_Type1_36	0.758602000	2.857142857	17.142857143	0 # molecule nr 52
-Ion_Type3_15	0.000000000	5.714285714	0.504284000	0 # molecule nr 53
-Ion_Type1_37	0.758602000	5.714285714	1.008568000	0 # molecule nr 54
-Ion_Type1_38	0.758602000	5.714285714	0.000000000	0 # molecule nr 55
-Ion_Type3_16	0.000000000	5.714285714	3.361426857	0 # molecule nr 56
-Ion_Type1_39	0.758602000	5.714285714	3.865710857	0 # molecule nr 57
-Ion_Type1_40	0.758602000	5.714285714	2.857142857	0 # molecule nr 58
-Ion_Type3_17	0.000000000	5.714285714	6.218569714	0 # molecule nr 59
-Ion_Type1_41	0.758602000	5.714285714	6.722853714	0 # molecule nr 60
-Ion_Type1_42	0.758602000	5.714285714	5.714285714	0 # molecule nr 61
-Ion_Type3_18	0.000000000	5.714285714	9.075712571	0 # molecule nr 62
-Ion_Type1_43	0.758602000	5.714285714	9.579996571	0 # molecule nr 63
-Ion_Type1_44	0.758602000	5.714285714	8.571428571	0 # molecule nr 64
-Ion_Type3_19	0.000000000	5.714285714	11.932855429	0 # molecule nr 65
-Ion_Type1_45	0.758602000	5.714285714	12.437139429	0 # molecule nr 66
-Ion_Type1_46	0.758602000	5.714285714	11.428571429	0 # molecule nr 67
-Ion_Type3_20	0.000000000	5.714285714	14.789998286	0 # molecule nr 68
-Ion_Type1_47	0.758602000	5.714285714	15.294282286	0 # molecule nr 69
-Ion_Type1_48	0.758602000	5.714285714	14.285714286	0 # molecule nr 70
-Ion_Type3_21	0.000000000	5.714285714	17.647141143	0 # molecule nr 71
-Ion_Type1_49	0.758602000	5.714285714	18.151425143	0 # molecule nr 72
-Ion_Type1_50	0.758602000	5.714285714	17.142857143	0 # molecule nr 73
-Ion_Type3_22	0.000000000	8.571428571	0.504284000	0 # molecule nr 74
-Ion_Type1_51	0.758602000	8.571428571	1.008568000	0 # molecule nr 75
-Ion_Type1_52	0.758602000	8.571428571	0.000000000	0 # molecule nr 76
-Ion_Type3_23	0.000000000	8.571428571	3.361426857	0 # molecule nr 77
-Ion_Type1_53	0.758602000	8.571428571	3.865710857	0 # molecule nr 78
-Ion_Type1_54	0.758602000	8.571428571	2.857142857	0 # molecule nr 79
-Ion_Type3_24	0.000000000	8.571428571	6.218569714	0 # molecule nr 80
-Ion_Type1_55	0.758602000	8.571428571	6.722853714	0 # molecule nr 81
-Ion_Type1_56	0.758602000	8.571428571	5.714285714	0 # molecule nr 82
-Ion_Type3_25	0.000000000	8.571428571	9.075712571	0 # molecule nr 83
-Ion_Type1_57	0.758602000	8.571428571	9.579996571	0 # molecule nr 84
-Ion_Type1_58	0.758602000	8.571428571	8.571428571	0 # molecule nr 85
-Ion_Type3_26	0.000000000	8.571428571	11.932855429	0 # molecule nr 86
-Ion_Type1_59	0.758602000	8.571428571	12.437139429	0 # molecule nr 87
-Ion_Type1_60	0.758602000	8.571428571	11.428571429	0 # molecule nr 88
-Ion_Type3_27	0.000000000	8.571428571	14.789998286	0 # molecule nr 89
-Ion_Type1_61	0.758602000	8.571428571	15.294282286	0 # molecule nr 90
-Ion_Type1_62	0.758602000	8.571428571	14.285714286	0 # molecule nr 91
-Ion_Type3_28	0.000000000	8.571428571	17.647141143	0 # molecule nr 92
-Ion_Type1_63	0.758602000	8.571428571	18.151425143	0 # molecule nr 93
-Ion_Type1_64	0.758602000	8.571428571	17.142857143	0 # molecule nr 94
-Ion_Type3_29	0.000000000	11.428571429	0.504284000	0 # molecule nr 95
-Ion_Type1_65	0.758602000	11.428571429	1.008568000	0 # molecule nr 96
-Ion_Type1_66	0.758602000	11.428571429	0.000000000	0 # molecule nr 97
-Ion_Type3_30	0.000000000	11.428571429	3.361426857	0 # molecule nr 98
-Ion_Type1_67	0.758602000	11.428571429	3.865710857	0 # molecule nr 99
-Ion_Type1_68	0.758602000	11.428571429	2.857142857	0 # molecule nr 100
-Ion_Type3_31	0.000000000	11.428571429	6.218569714	0 # molecule nr 101
-Ion_Type1_69	0.758602000	11.428571429	6.722853714	0 # molecule nr 102
-Ion_Type1_70	0.758602000	11.428571429	5.714285714	0 # molecule nr 103
-Ion_Type3_32	0.000000000	11.428571429	9.075712571	0 # molecule nr 104
-Ion_Type1_71	0.758602000	11.428571429	9.579996571	0 # molecule nr 105
-Ion_Type1_72	0.758602000	11.428571429	8.571428571	0 # molecule nr 106
-Ion_Type3_33	0.000000000	11.428571429	11.932855429	0 # molecule nr 107
-Ion_Type1_73	0.758602000	11.428571429	12.437139429	0 # molecule nr 108
-Ion_Type1_74	0.758602000	11.428571429	11.428571429	0 # molecule nr 109
-Ion_Type3_34	0.000000000	11.428571429	14.789998286	0 # molecule nr 110
-Ion_Type1_75	0.758602000	11.428571429	15.294282286	0 # molecule nr 111
-Ion_Type1_76	0.758602000	11.428571429	14.285714286	0 # molecule nr 112
-Ion_Type3_35	0.000000000	11.428571429	17.647141143	0 # molecule nr 113
-Ion_Type1_77	0.758602000	11.428571429	18.151425143	0 # molecule nr 114
-Ion_Type1_78	0.758602000	11.428571429	17.142857143	0 # molecule nr 115
-Ion_Type3_36	0.000000000	14.285714286	0.504284000	0 # molecule nr 116
-Ion_Type1_79	0.758602000	14.285714286	1.008568000	0 # molecule nr 117
-Ion_Type1_80	0.758602000	14.285714286	0.000000000	0 # molecule nr 118
-Ion_Type3_37	0.000000000	14.285714286	3.361426857	0 # molecule nr 119
-Ion_Type1_81	0.758602000	14.285714286	3.865710857	0 # molecule nr 120
-Ion_Type1_82	0.758602000	14.285714286	2.857142857	0 # molecule nr 121
-Ion_Type3_38	0.000000000	14.285714286	6.218569714	0 # molecule nr 122
-Ion_Type1_83	0.758602000	14.285714286	6.722853714	0 # molecule nr 123
-Ion_Type1_84	0.758602000	14.285714286	5.714285714	0 # molecule nr 124
-Ion_Type3_39	0.000000000	14.285714286	9.075712571	0 # molecule nr 125
-Ion_Type1_85	0.758602000	14.285714286	9.579996571	0 # molecule nr 126
-Ion_Type1_86	0.758602000	14.285714286	8.571428571	0 # molecule nr 127
-Ion_Type3_40	0.000000000	14.285714286	11.932855429	0 # molecule nr 128
-Ion_Type1_87	0.758602000	14.285714286	12.437139429	0 # molecule nr 129
-Ion_Type1_88	0.758602000	14.285714286	11.428571429	0 # molecule nr 130
-Ion_Type3_41	0.000000000	14.285714286	14.789998286	0 # molecule nr 131
-Ion_Type1_89	0.758602000	14.285714286	15.294282286	0 # molecule nr 132
-Ion_Type1_90	0.758602000	14.285714286	14.285714286	0 # molecule nr 133
-Ion_Type3_42	0.000000000	14.285714286	17.647141143	0 # molecule nr 134
-Ion_Type1_91	0.758602000	14.285714286	18.151425143	0 # molecule nr 135
-Ion_Type1_92	0.758602000	14.285714286	17.142857143	0 # molecule nr 136
-Ion_Type3_43	0.000000000	17.142857143	0.504284000	0 # molecule nr 137
-Ion_Type1_93	0.758602000	17.142857143	1.008568000	0 # molecule nr 138
-Ion_Type1_94	0.758602000	17.142857143	0.000000000	0 # molecule nr 139
-Ion_Type3_44	0.000000000	17.142857143	3.361426857	0 # molecule nr 140
-Ion_Type1_95	0.758602000	17.142857143	3.865710857	0 # molecule nr 141
-Ion_Type1_96	0.758602000	17.142857143	2.857142857	0 # molecule nr 142
-Ion_Type3_45	0.000000000	17.142857143	6.218569714	0 # molecule nr 143
-Ion_Type1_97	0.758602000	17.142857143	6.722853714	0 # molecule nr 144
-Ion_Type1_98	0.758602000	17.142857143	5.714285714	0 # molecule nr 145
-Ion_Type3_46	0.000000000	17.142857143	9.075712571	0 # molecule nr 146
-Ion_Type1_99	0.758602000	17.142857143	9.579996571	0 # molecule nr 147
-Ion_Type1_100	0.758602000	17.142857143	8.571428571	0 # molecule nr 148
-Ion_Type3_47	0.000000000	17.142857143	11.932855429	0 # molecule nr 149
-Ion_Type1_101	0.758602000	17.142857143	12.437139429	0 # molecule nr 150
-Ion_Type1_102	0.758602000	17.142857143	11.428571429	0 # molecule nr 151
-Ion_Type3_48	0.000000000	17.142857143	14.789998286	0 # molecule nr 152
-Ion_Type1_103	0.758602000	17.142857143	15.294282286	0 # molecule nr 153
-Ion_Type1_104	0.758602000	17.142857143	14.285714286	0 # molecule nr 154
-Ion_Type3_49	0.000000000	17.142857143	17.647141143	0 # molecule nr 155
-Ion_Type1_105	0.758602000	17.142857143	18.151425143	0 # molecule nr 156
-Ion_Type1_106	0.758602000	17.142857143	17.142857143	0 # molecule nr 157
-Ion_Type3_50	2.857142857	0.000000000	0.504284000	0 # molecule nr 158
-Ion_Type1_107	3.615744857	0.000000000	1.008568000	0 # molecule nr 159
-Ion_Type1_108	3.615744857	0.000000000	0.000000000	0 # molecule nr 160
-Ion_Type3_51	2.857142857	0.000000000	3.361426857	0 # molecule nr 161
-Ion_Type1_109	3.615744857	0.000000000	3.865710857	0 # molecule nr 162
-Ion_Type1_110	3.615744857	0.000000000	2.857142857	0 # molecule nr 163
-Ion_Type3_52	2.857142857	0.000000000	6.218569714	0 # molecule nr 164
-Ion_Type1_111	3.615744857	0.000000000	6.722853714	0 # molecule nr 165
-Ion_Type1_112	3.615744857	0.000000000	5.714285714	0 # molecule nr 166
-Ion_Type3_53	2.857142857	0.000000000	9.075712571	0 # molecule nr 167
-Ion_Type1_113	3.615744857	0.000000000	9.579996571	0 # molecule nr 168
-Ion_Type1_114	3.615744857	0.000000000	8.571428571	0 # molecule nr 169
-Ion_Type3_54	2.857142857	0.000000000	11.932855429	0 # molecule nr 170
-Ion_Type1_115	3.615744857	0.000000000	12.437139429	0 # molecule nr 171
-Ion_Type1_116	3.615744857	0.000000000	11.428571429	0 # molecule nr 172
-Ion_Type3_55	2.857142857	0.000000000	14.789998286	0 # molecule nr 173
-Ion_Type1_117	3.615744857	0.000000000	15.294282286	0 # molecule nr 174
-Ion_Type1_118	3.615744857	0.000000000	14.285714286	0 # molecule nr 175
-Ion_Type3_56	2.857142857	0.000000000	17.647141143	0 # molecule nr 176
-Ion_Type1_119	3.615744857	0.000000000	18.151425143	0 # molecule nr 177
-Ion_Type1_120	3.615744857	0.000000000	17.142857143	0 # molecule nr 178
-Ion_Type3_57	2.857142857	2.857142857	0.504284000	0 # molecule nr 179
-Ion_Type1_121	3.615744857	2.857142857	1.008568000	0 # molecule nr 180
-Ion_Type1_122	3.615744857	2.857142857	0.000000000	0 # molecule nr 181
-Ion_Type3_58	2.857142857	2.857142857	3.361426857	0 # molecule nr 182
-Ion_Type1_123	3.615744857	2.857142857	3.865710857	0 # molecule nr 183
-Ion_Type1_124	3.615744857	2.857142857	2.857142857	0 # molecule nr 184
-Ion_Type3_59	2.857142857	2.857142857	6.218569714	0 # molecule nr 185
-Ion_Type1_125	3.615744857	2.857142857	6.722853714	0 # molecule nr 186
-Ion_Type1_126	3.615744857	2.857142857	5.714285714	0 # molecule nr 187
-Ion_Type3_60	2.857142857	2.857142857	9.075712571	0 # molecule nr 188
-Ion_Type1_127	3.615744857	2.857142857	9.579996571	0 # molecule nr 189
-Ion_Type1_128	3.615744857	2.857142857	8.571428571	0 # molecule nr 190
-Ion_Type3_61	2.857142857	2.857142857	11.932855429	0 # molecule nr 191
-Ion_Type1_129	3.615744857	2.857142857	12.437139429	0 # molecule nr 192
-Ion_Type1_130	3.615744857	2.857142857	11.428571429	0 # molecule nr 193
-Ion_Type3_62	2.857142857	2.857142857	14.789998286	0 # molecule nr 194
-Ion_Type1_131	3.615744857	2.857142857	15.294282286	0 # molecule nr 195
-Ion_Type1_132	3.615744857	2.857142857	14.285714286	0 # molecule nr 196
-Ion_Type3_63	2.857142857	2.857142857	17.647141143	0 # molecule nr 197
-Ion_Type1_133	3.615744857	2.857142857	18.151425143	0 # molecule nr 198
-Ion_Type1_134	3.615744857	2.857142857	17.142857143	0 # molecule nr 199
-Ion_Type3_64	2.857142857	5.714285714	0.504284000	0 # molecule nr 200
-Ion_Type1_135	3.615744857	5.714285714	1.008568000	0 # molecule nr 201
-Ion_Type1_136	3.615744857	5.714285714	0.000000000	0 # molecule nr 202
-Ion_Type3_65	2.857142857	5.714285714	3.361426857	0 # molecule nr 203
-Ion_Type1_137	3.615744857	5.714285714	3.865710857	0 # molecule nr 204
-Ion_Type1_138	3.615744857	5.714285714	2.857142857	0 # molecule nr 205
-Ion_Type3_66	2.857142857	5.714285714	6.218569714	0 # molecule nr 206
-Ion_Type1_139	3.615744857	5.714285714	6.722853714	0 # molecule nr 207
-Ion_Type1_140	3.615744857	5.714285714	5.714285714	0 # molecule nr 208
-Ion_Type3_67	2.857142857	5.714285714	9.075712571	0 # molecule nr 209
-Ion_Type1_141	3.615744857	5.714285714	9.579996571	0 # molecule nr 210
-Ion_Type1_142	3.615744857	5.714285714	8.571428571	0 # molecule nr 211
-Ion_Type3_68	2.857142857	5.714285714	11.932855429	0 # molecule nr 212
-Ion_Type1_143	3.615744857	5.714285714	12.437139429	0 # molecule nr 213
-Ion_Type1_144	3.615744857	5.714285714	11.428571429	0 # molecule nr 214
-Ion_Type3_69	2.857142857	5.714285714	14.789998286	0 # molecule nr 215
-Ion_Type1_145	3.615744857	5.714285714	15.294282286	0 # molecule nr 216
-Ion_Type1_146	3.615744857	5.714285714	14.285714286	0 # molecule nr 217
-Ion_Type3_70	2.857142857	5.714285714	17.647141143	0 # molecule nr 218
-Ion_Type1_147	3.615744857	5.714285714	18.151425143	0 # molecule nr 219
-Ion_Type1_148	3.615744857	5.714285714	17.142857143	0 # molecule nr 220
-Ion_Type3_71	2.857142857	8.571428571	0.504284000	0 # molecule nr 221
-Ion_Type1_149	3.615744857	8.571428571	1.008568000	0 # molecule nr 222
-Ion_Type1_150	3.615744857	8.571428571	0.000000000	0 # molecule nr 223
-Ion_Type3_72	2.857142857	8.571428571	3.361426857	0 # molecule nr 224
-Ion_Type1_151	3.615744857	8.571428571	3.865710857	0 # molecule nr 225
-Ion_Type1_152	3.615744857	8.571428571	2.857142857	0 # molecule nr 226
-Ion_Type3_73	2.857142857	8.571428571	6.218569714	0 # molecule nr 227
-Ion_Type1_153	3.615744857	8.571428571	6.722853714	0 # molecule nr 228
-Ion_Type1_154	3.615744857	8.571428571	5.714285714	0 # molecule nr 229
-Ion_Type3_74	2.857142857	8.571428571	9.075712571	0 # molecule nr 230
-Ion_Type1_155	3.615744857	8.571428571	9.579996571	0 # molecule nr 231
-Ion_Type1_156	3.615744857	8.571428571	8.571428571	0 # molecule nr 232
-Ion_Type3_75	2.857142857	8.571428571	11.932855429	0 # molecule nr 233
-Ion_Type1_157	3.615744857	8.571428571	12.437139429	0 # molecule nr 234
-Ion_Type1_158	3.615744857	8.571428571	11.428571429	0 # molecule nr 235
-Ion_Type3_76	2.857142857	8.571428571	14.789998286	0 # molecule nr 236
-Ion_Type1_159	3.615744857	8.571428571	15.294282286	0 # molecule nr 237
-Ion_Type1_160	3.615744857	8.571428571	14.285714286	0 # molecule nr 238
-Ion_Type3_77	2.857142857	8.571428571	17.647141143	0 # molecule nr 239
-Ion_Type1_161	3.615744857	8.571428571	18.151425143	0 # molecule nr 240
-Ion_Type1_162	3.615744857	8.571428571	17.142857143	0 # molecule nr 241
-Ion_Type3_78	2.857142857	11.428571429	0.504284000	0 # molecule nr 242
-Ion_Type1_163	3.615744857	11.428571429	1.008568000	0 # molecule nr 243
-Ion_Type1_164	3.615744857	11.428571429	0.000000000	0 # molecule nr 244
-Ion_Type3_79	2.857142857	11.428571429	3.361426857	0 # molecule nr 245
-Ion_Type1_165	3.615744857	11.428571429	3.865710857	0 # molecule nr 246
-Ion_Type1_166	3.615744857	11.428571429	2.857142857	0 # molecule nr 247
-Ion_Type3_80	2.857142857	11.428571429	6.218569714	0 # molecule nr 248
-Ion_Type1_167	3.615744857	11.428571429	6.722853714	0 # molecule nr 249
-Ion_Type1_168	3.615744857	11.428571429	5.714285714	0 # molecule nr 250
-Ion_Type3_81	2.857142857	11.428571429	9.075712571	0 # molecule nr 251
-Ion_Type1_169	3.615744857	11.428571429	9.579996571	0 # molecule nr 252
-Ion_Type1_170	3.615744857	11.428571429	8.571428571	0 # molecule nr 253
-Ion_Type3_82	2.857142857	11.428571429	11.932855429	0 # molecule nr 254
-Ion_Type1_171	3.615744857	11.428571429	12.437139429	0 # molecule nr 255
-Ion_Type1_172	3.615744857	11.428571429	11.428571429	0 # molecule nr 256
-Ion_Type3_83	2.857142857	11.428571429	14.789998286	0 # molecule nr 257
-Ion_Type1_173	3.615744857	11.428571429	15.294282286	0 # molecule nr 258
-Ion_Type1_174	3.615744857	11.428571429	14.285714286	0 # molecule nr 259
-Ion_Type3_84	2.857142857	11.428571429	17.647141143	0 # molecule nr 260
-Ion_Type1_175	3.615744857	11.428571429	18.151425143	0 # molecule nr 261
-Ion_Type1_176	3.615744857	11.428571429	17.142857143	0 # molecule nr 262
-Ion_Type3_85	2.857142857	14.285714286	0.504284000	0 # molecule nr 263
-Ion_Type1_177	3.615744857	14.285714286	1.008568000	0 # molecule nr 264
-Ion_Type1_178	3.615744857	14.285714286	0.000000000	0 # molecule nr 265
-Ion_Type3_86	2.857142857	14.285714286	3.361426857	0 # molecule nr 266
-Ion_Type1_179	3.615744857	14.285714286	3.865710857	0 # molecule nr 267
-Ion_Type1_180	3.615744857	14.285714286	2.857142857	0 # molecule nr 268
-Ion_Type3_87	2.857142857	14.285714286	6.218569714	0 # molecule nr 269
-Ion_Type1_181	3.615744857	14.285714286	6.722853714	0 # molecule nr 270
-Ion_Type1_182	3.615744857	14.285714286	5.714285714	0 # molecule nr 271
-Ion_Type3_88	2.857142857	14.285714286	9.075712571	0 # molecule nr 272
-Ion_Type1_183	3.615744857	14.285714286	9.579996571	0 # molecule nr 273
-Ion_Type1_184	3.615744857	14.285714286	8.571428571	0 # molecule nr 274
-Ion_Type3_89	2.857142857	14.285714286	11.932855429	0 # molecule nr 275
-Ion_Type1_185	3.615744857	14.285714286	12.437139429	0 # molecule nr 276
-Ion_Type1_186	3.615744857	14.285714286	11.428571429	0 # molecule nr 277
-Ion_Type3_90	2.857142857	14.285714286	14.789998286	0 # molecule nr 278
-Ion_Type1_187	3.615744857	14.285714286	15.294282286	0 # molecule nr 279
-Ion_Type1_188	3.615744857	14.285714286	14.285714286	0 # molecule nr 280
-Ion_Type3_91	2.857142857	14.285714286	17.647141143	0 # molecule nr 281
-Ion_Type1_189	3.615744857	14.285714286	18.151425143	0 # molecule nr 282
-Ion_Type1_190	3.615744857	14.285714286	17.142857143	0 # molecule nr 283
-Ion_Type3_92	2.857142857	17.142857143	0.504284000	0 # molecule nr 284
-Ion_Type1_191	3.615744857	17.142857143	1.008568000	0 # molecule nr 285
-Ion_Type1_192	3.615744857	17.142857143	0.000000000	0 # molecule nr 286
-Ion_Type3_93	2.857142857	17.142857143	3.361426857	0 # molecule nr 287
-Ion_Type1_193	3.615744857	17.142857143	3.865710857	0 # molecule nr 288
-Ion_Type1_194	3.615744857	17.142857143	2.857142857	0 # molecule nr 289
-Ion_Type3_94	2.857142857	17.142857143	6.218569714	0 # molecule nr 290
-Ion_Type1_195	3.615744857	17.142857143	6.722853714	0 # molecule nr 291
-Ion_Type1_196	3.615744857	17.142857143	5.714285714	0 # molecule nr 292
-Ion_Type3_95	2.857142857	17.142857143	9.075712571	0 # molecule nr 293
-Ion_Type1_197	3.615744857	17.142857143	9.579996571	0 # molecule nr 294
-Ion_Type1_198	3.615744857	17.142857143	8.571428571	0 # molecule nr 295
-Ion_Type3_96	2.857142857	17.142857143	11.932855429	0 # molecule nr 296
-Ion_Type1_199	3.615744857	17.142857143	12.437139429	0 # molecule nr 297
-Ion_Type1_200	3.615744857	17.142857143	11.428571429	0 # molecule nr 298
-Ion_Type3_97	2.857142857	17.142857143	14.789998286	0 # molecule nr 299
-Ion_Type1_201	3.615744857	17.142857143	15.294282286	0 # molecule nr 300
-Ion_Type1_202	3.615744857	17.142857143	14.285714286	0 # molecule nr 301
-Ion_Type3_98	2.857142857	17.142857143	17.647141143	0 # molecule nr 302
-Ion_Type1_203	3.615744857	17.142857143	18.151425143	0 # molecule nr 303
-Ion_Type1_204	3.615744857	17.142857143	17.142857143	0 # molecule nr 304
-Ion_Type3_99	5.714285714	0.000000000	0.504284000	0 # molecule nr 305
-Ion_Type1_205	6.472887714	0.000000000	1.008568000	0 # molecule nr 306
-Ion_Type1_206	6.472887714	0.000000000	0.000000000	0 # molecule nr 307
-Ion_Type3_100	5.714285714	0.000000000	3.361426857	0 # molecule nr 308
-Ion_Type1_207	6.472887714	0.000000000	3.865710857	0 # molecule nr 309
-Ion_Type1_208	6.472887714	0.000000000	2.857142857	0 # molecule nr 310
-Ion_Type3_101	5.714285714	0.000000000	6.218569714	0 # molecule nr 311
-Ion_Type1_209	6.472887714	0.000000000	6.722853714	0 # molecule nr 312
-Ion_Type1_210	6.472887714	0.000000000	5.714285714	0 # molecule nr 313
-Ion_Type3_102	5.714285714	0.000000000	9.075712571	0 # molecule nr 314
-Ion_Type1_211	6.472887714	0.000000000	9.579996571	0 # molecule nr 315
-Ion_Type1_212	6.472887714	0.000000000	8.571428571	0 # molecule nr 316
-Ion_Type3_103	5.714285714	0.000000000	11.932855429	0 # molecule nr 317
-Ion_Type1_213	6.472887714	0.000000000	12.437139429	0 # molecule nr 318
-Ion_Type1_214	6.472887714	0.000000000	11.428571429	0 # molecule nr 319
-Ion_Type3_104	5.714285714	0.000000000	14.789998286	0 # molecule nr 320
-Ion_Type1_215	6.472887714	0.000000000	15.294282286	0 # molecule nr 321
-Ion_Type1_216	6.472887714	0.000000000	14.285714286	0 # molecule nr 322
-Ion_Type3_105	5.714285714	0.000000000	17.647141143	0 # molecule nr 323
-Ion_Type1_217	6.472887714	0.000000000	18.151425143	0 # molecule nr 324
-Ion_Type1_218	6.472887714	0.000000000	17.142857143	0 # molecule nr 325
-Ion_Type3_106	5.714285714	2.857142857	0.504284000	0 # molecule nr 326
-Ion_Type1_219	6.472887714	2.857142857	0.000000000	0 # molecule nr 327
-Ion_Type3_107	5.714285714	2.857142857	6.218569714	0 # molecule nr 328
-Ion_Type1_220	6.472887714	2.857142857	6.722853714	0 # molecule nr 329
-Ion_Type3_108	5.714285714	2.857142857	9.075712571	0 # molecule nr 330
-Ion_Type1_221	6.472887714	2.857142857	9.579996571	0 # molecule nr 331
-Ion_Type1_222	6.472887714	2.857142857	8.571428571	0 # molecule nr 332
-Ion_Type3_109	5.714285714	2.857142857	11.932855429	0 # molecule nr 333
-Ion_Type1_223	6.472887714	2.857142857	12.437139429	0 # molecule nr 334
-Ion_Type1_224	6.472887714	2.857142857	11.428571429	0 # molecule nr 335
-Ion_Type3_110	5.714285714	2.857142857	14.789998286	0 # molecule nr 336
-Ion_Type1_225	6.472887714	2.857142857	15.294282286	0 # molecule nr 337
-Ion_Type1_226	6.472887714	2.857142857	14.285714286	0 # molecule nr 338
-Ion_Type3_111	5.714285714	2.857142857	17.647141143	0 # molecule nr 339
-Ion_Type1_227	6.472887714	2.857142857	18.151425143	0 # molecule nr 340
-Ion_Type1_228	6.472887714	2.857142857	17.142857143	0 # molecule nr 341
-Ion_Type3_112	5.714285714	5.714285714	0.504284000	0 # molecule nr 342
-Ion_Type1_229	6.472887714	5.714285714	1.008568000	0 # molecule nr 343
-Ion_Type1_230	6.472887714	5.714285714	0.000000000	0 # molecule nr 344
-Ion_Type3_113	5.714285714	5.714285714	6.218569714	0 # molecule nr 345
-Ion_Type1_231	6.472887714	5.714285714	6.722853714	0 # molecule nr 346
-Ion_Type1_232	6.472887714	5.714285714	5.714285714	0 # molecule nr 347
-Ion_Type3_114	5.714285714	5.714285714	9.075712571	0 # molecule nr 348
-Ion_Type1_233	6.472887714	5.714285714	9.579996571	0 # molecule nr 349
-Ion_Type1_234	6.472887714	5.714285714	8.571428571	0 # molecule nr 350
-Ion_Type3_115	5.714285714	5.714285714	11.932855429	0 # molecule nr 351
-Ion_Type1_235	6.472887714	5.714285714	12.437139429	0 # molecule nr 352
-Ion_Type1_236	6.472887714	5.714285714	11.428571429	0 # molecule nr 353
-Ion_Type3_116	5.714285714	5.714285714	14.789998286	0 # molecule nr 354
-Ion_Type1_237	6.472887714	5.714285714	15.294282286	0 # molecule nr 355
-Ion_Type1_238	6.472887714	5.714285714	14.285714286	0 # molecule nr 356
-Ion_Type3_117	5.714285714	5.714285714	17.647141143	0 # molecule nr 357
-Ion_Type1_239	6.472887714	5.714285714	18.151425143	0 # molecule nr 358
-Ion_Type1_240	6.472887714	5.714285714	17.142857143	0 # molecule nr 359
-Ion_Type3_118	5.714285714	8.571428571	0.504284000	0 # molecule nr 360
-Ion_Type1_241	6.472887714	8.571428571	1.008568000	0 # molecule nr 361
-Ion_Type1_242	6.472887714	8.571428571	0.000000000	0 # molecule nr 362
-Ion_Type3_119	5.714285714	8.571428571	3.361426857	0 # molecule nr 363
-Ion_Type1_243	6.472887714	8.571428571	3.865710857	0 # molecule nr 364
-Ion_Type1_244	6.472887714	8.571428571	2.857142857	0 # molecule nr 365
-Ion_Type3_120	5.714285714	8.571428571	6.218569714	0 # molecule nr 366
-Ion_Type1_245	6.472887714	8.571428571	6.722853714	0 # molecule nr 367
-Ion_Type1_246	6.472887714	8.571428571	5.714285714	0 # molecule nr 368
-Ion_Type3_121	5.714285714	8.571428571	9.075712571	0 # molecule nr 369
-Ion_Type1_247	6.472887714	8.571428571	9.579996571	0 # molecule nr 370
-Ion_Type1_248	6.472887714	8.571428571	8.571428571	0 # molecule nr 371
-Ion_Type3_122	5.714285714	8.571428571	11.932855429	0 # molecule nr 372
-Ion_Type1_249	6.472887714	8.571428571	12.437139429	0 # molecule nr 373
-Ion_Type1_250	6.472887714	8.571428571	11.428571429	0 # molecule nr 374
-Ion_Type3_123	5.714285714	8.571428571	14.789998286	0 # molecule nr 375
-Ion_Type1_251	6.472887714	8.571428571	15.294282286	0 # molecule nr 376
-Ion_Type1_252	6.472887714	8.571428571	14.285714286	0 # molecule nr 377
-Ion_Type3_124	5.714285714	8.571428571	17.647141143	0 # molecule nr 378
-Ion_Type1_253	6.472887714	8.571428571	18.151425143	0 # molecule nr 379
-Ion_Type1_254	6.472887714	8.571428571	17.142857143	0 # molecule nr 380
-Ion_Type3_125	5.714285714	11.428571429	0.504284000	0 # molecule nr 381
-Ion_Type1_255	6.472887714	11.428571429	1.008568000	0 # molecule nr 382
-Ion_Type1_256	6.472887714	11.428571429	0.000000000	0 # molecule nr 383
-Ion_Type3_126	5.714285714	11.428571429	3.361426857	0 # molecule nr 384
-Ion_Type1_257	6.472887714	11.428571429	3.865710857	0 # molecule nr 385
-Ion_Type1_258	6.472887714	11.428571429	2.857142857	0 # molecule nr 386
-Ion_Type3_127	5.714285714	11.428571429	6.218569714	0 # molecule nr 387
-Ion_Type1_259	6.472887714	11.428571429	6.722853714	0 # molecule nr 388
-Ion_Type1_260	6.472887714	11.428571429	5.714285714	0 # molecule nr 389
-Ion_Type3_128	5.714285714	11.428571429	9.075712571	0 # molecule nr 390
-Ion_Type1_261	6.472887714	11.428571429	9.579996571	0 # molecule nr 391
-Ion_Type1_262	6.472887714	11.428571429	8.571428571	0 # molecule nr 392
-Ion_Type3_129	5.714285714	11.428571429	11.932855429	0 # molecule nr 393
-Ion_Type1_263	6.472887714	11.428571429	12.437139429	0 # molecule nr 394
-Ion_Type1_264	6.472887714	11.428571429	11.428571429	0 # molecule nr 395
-Ion_Type3_130	5.714285714	11.428571429	14.789998286	0 # molecule nr 396
-Ion_Type1_265	6.472887714	11.428571429	15.294282286	0 # molecule nr 397
-Ion_Type1_266	6.472887714	11.428571429	14.285714286	0 # molecule nr 398
-Ion_Type3_131	5.714285714	11.428571429	17.647141143	0 # molecule nr 399
-Ion_Type1_267	6.472887714	11.428571429	18.151425143	0 # molecule nr 400
-Ion_Type1_268	6.472887714	11.428571429	17.142857143	0 # molecule nr 401
-Ion_Type3_132	5.714285714	14.285714286	0.504284000	0 # molecule nr 402
-Ion_Type1_269	6.472887714	14.285714286	1.008568000	0 # molecule nr 403
-Ion_Type1_270	6.472887714	14.285714286	0.000000000	0 # molecule nr 404
-Ion_Type3_133	5.714285714	14.285714286	3.361426857	0 # molecule nr 405
-Ion_Type1_271	6.472887714	14.285714286	3.865710857	0 # molecule nr 406
-Ion_Type1_272	6.472887714	14.285714286	2.857142857	0 # molecule nr 407
-Ion_Type3_134	5.714285714	14.285714286	6.218569714	0 # molecule nr 408
-Ion_Type1_273	6.472887714	14.285714286	6.722853714	0 # molecule nr 409
-Ion_Type1_274	6.472887714	14.285714286	5.714285714	0 # molecule nr 410
-Ion_Type3_135	5.714285714	14.285714286	9.075712571	0 # molecule nr 411
-Ion_Type1_275	6.472887714	14.285714286	9.579996571	0 # molecule nr 412
-Ion_Type1_276	6.472887714	14.285714286	8.571428571	0 # molecule nr 413
-Ion_Type3_136	5.714285714	14.285714286	11.932855429	0 # molecule nr 414
-Ion_Type1_277	6.472887714	14.285714286	12.437139429	0 # molecule nr 415
-Ion_Type1_278	6.472887714	14.285714286	11.428571429	0 # molecule nr 416
-Ion_Type3_137	5.714285714	14.285714286	14.789998286	0 # molecule nr 417
-Ion_Type1_279	6.472887714	14.285714286	15.294282286	0 # molecule nr 418
-Ion_Type1_280	6.472887714	14.285714286	14.285714286	0 # molecule nr 419
-Ion_Type3_138	5.714285714	14.285714286	17.647141143	0 # molecule nr 420
-Ion_Type1_281	6.472887714	14.285714286	18.151425143	0 # molecule nr 421
-Ion_Type1_282	6.472887714	14.285714286	17.142857143	0 # molecule nr 422
-Ion_Type3_139	5.714285714	17.142857143	0.504284000	0 # molecule nr 423
-Ion_Type1_283	6.472887714	17.142857143	1.008568000	0 # molecule nr 424
-Ion_Type1_284	6.472887714	17.142857143	0.000000000	0 # molecule nr 425
-Ion_Type3_140	5.714285714	17.142857143	3.361426857	0 # molecule nr 426
-Ion_Type1_285	6.472887714	17.142857143	3.865710857	0 # molecule nr 427
-Ion_Type1_286	6.472887714	17.142857143	2.857142857	0 # molecule nr 428
-Ion_Type3_141	5.714285714	17.142857143	6.218569714	0 # molecule nr 429
-Ion_Type1_287	6.472887714	17.142857143	6.722853714	0 # molecule nr 430
-Ion_Type1_288	6.472887714	17.142857143	5.714285714	0 # molecule nr 431
-Ion_Type3_142	5.714285714	17.142857143	9.075712571	0 # molecule nr 432
-Ion_Type1_289	6.472887714	17.142857143	9.579996571	0 # molecule nr 433
-Ion_Type1_290	6.472887714	17.142857143	8.571428571	0 # molecule nr 434
-Ion_Type3_143	5.714285714	17.142857143	11.932855429	0 # molecule nr 435
-Ion_Type1_291	6.472887714	17.142857143	12.437139429	0 # molecule nr 436
-Ion_Type1_292	6.472887714	17.142857143	11.428571429	0 # molecule nr 437
-Ion_Type3_144	5.714285714	17.142857143	14.789998286	0 # molecule nr 438
-Ion_Type1_293	6.472887714	17.142857143	15.294282286	0 # molecule nr 439
-Ion_Type1_294	6.472887714	17.142857143	14.285714286	0 # molecule nr 440
-Ion_Type3_145	5.714285714	17.142857143	17.647141143	0 # molecule nr 441
-Ion_Type1_295	6.472887714	17.142857143	18.151425143	0 # molecule nr 442
-Ion_Type1_296	6.472887714	17.142857143	17.142857143	0 # molecule nr 443
-Ion_Type3_146	8.571428571	0.000000000	0.504284000	0 # molecule nr 444
-Ion_Type1_297	9.330030571	0.000000000	1.008568000	0 # molecule nr 445
-Ion_Type1_298	9.330030571	0.000000000	0.000000000	0 # molecule nr 446
-Ion_Type3_147	8.571428571	0.000000000	3.361426857	0 # molecule nr 447
-Ion_Type1_299	9.330030571	0.000000000	3.865710857	0 # molecule nr 448
-Ion_Type1_300	9.330030571	0.000000000	2.857142857	0 # molecule nr 449
-Ion_Type3_148	8.571428571	0.000000000	6.218569714	0 # molecule nr 450
-Ion_Type1_301	9.330030571	0.000000000	6.722853714	0 # molecule nr 451
-Ion_Type1_302	9.330030571	0.000000000	5.714285714	0 # molecule nr 452
-Ion_Type3_149	8.571428571	0.000000000	9.075712571	0 # molecule nr 453
-Ion_Type1_303	9.330030571	0.000000000	9.579996571	0 # molecule nr 454
-Ion_Type1_304	9.330030571	0.000000000	8.571428571	0 # molecule nr 455
-Ion_Type3_150	8.571428571	0.000000000	11.932855429	0 # molecule nr 456
-Ion_Type1_305	9.330030571	0.000000000	12.437139429	0 # molecule nr 457
-Ion_Type1_306	9.330030571	0.000000000	11.428571429	0 # molecule nr 458
-Ion_Type3_151	8.571428571	0.000000000	14.789998286	0 # molecule nr 459
-Ion_Type1_307	9.330030571	0.000000000	15.294282286	0 # molecule nr 460
-Ion_Type1_308	9.330030571	0.000000000	14.285714286	0 # molecule nr 461
-Ion_Type3_152	8.571428571	0.000000000	17.647141143	0 # molecule nr 462
-Ion_Type1_309	9.330030571	0.000000000	18.151425143	0 # molecule nr 463
-Ion_Type1_310	9.330030571	0.000000000	17.142857143	0 # molecule nr 464
-Ion_Type3_153	8.571428571	2.857142857	0.504284000	0 # molecule nr 465
-Ion_Type1_311	9.330030571	2.857142857	0.000000000	0 # molecule nr 466
-Ion_Type1_312	9.330030571	2.857142857	6.722853714	0 # molecule nr 467
-Ion_Type3_154	8.571428571	2.857142857	9.075712571	0 # molecule nr 468
-Ion_Type1_313	9.330030571	2.857142857	9.579996571	0 # molecule nr 469
-Ion_Type1_314	9.330030571	2.857142857	8.571428571	0 # molecule nr 470
-Ion_Type3_155	8.571428571	2.857142857	11.932855429	0 # molecule nr 471
-Ion_Type1_315	9.330030571	2.857142857	12.437139429	0 # molecule nr 472
-Ion_Type1_316	9.330030571	2.857142857	11.428571429	0 # molecule nr 473
-Ion_Type3_156	8.571428571	2.857142857	14.789998286	0 # molecule nr 474
-Ion_Type1_317	9.330030571	2.857142857	15.294282286	0 # molecule nr 475
-Ion_Type1_318	9.330030571	2.857142857	14.285714286	0 # molecule nr 476
-Ion_Type3_157	8.571428571	2.857142857	17.647141143	0 # molecule nr 477
-Ion_Type1_319	9.330030571	2.857142857	18.151425143	0 # molecule nr 478
-Ion_Type1_320	9.330030571	2.857142857	17.142857143	0 # molecule nr 479
-Ion_Type3_158	8.571428571	5.714285714	0.504284000	0 # molecule nr 480
-Ion_Type1_321	9.330030571	5.714285714	0.000000000	0 # molecule nr 481
-Ion_Type1_322	9.330030571	5.714285714	6.722853714	0 # molecule nr 482
-Ion_Type3_159	8.571428571	5.714285714	9.075712571	0 # molecule nr 483
-Ion_Type1_323	9.330030571	5.714285714	9.579996571	0 # molecule nr 484
-Ion_Type1_324	9.330030571	5.714285714	8.571428571	0 # molecule nr 485
-Ion_Type3_160	8.571428571	5.714285714	11.932855429	0 # molecule nr 486
-Ion_Type1_325	9.330030571	5.714285714	12.437139429	0 # molecule nr 487
-Ion_Type1_326	9.330030571	5.714285714	11.428571429	0 # molecule nr 488
-Ion_Type3_161	8.571428571	5.714285714	14.789998286	0 # molecule nr 489
-Ion_Type1_327	9.330030571	5.714285714	15.294282286	0 # molecule nr 490
-Ion_Type1_328	9.330030571	5.714285714	14.285714286	0 # molecule nr 491
-Ion_Type3_162	8.571428571	5.714285714	17.647141143	0 # molecule nr 492
-Ion_Type1_329	9.330030571	5.714285714	18.151425143	0 # molecule nr 493
-Ion_Type1_330	9.330030571	5.714285714	17.142857143	0 # molecule nr 494
-Ion_Type3_163	8.571428571	8.571428571	0.504284000	0 # molecule nr 495
-Ion_Type1_331	9.330030571	8.571428571	1.008568000	0 # molecule nr 496
-Ion_Type1_332	9.330030571	8.571428571	0.000000000	0 # molecule nr 497
-Ion_Type3_164	8.571428571	8.571428571	3.361426857	0 # molecule nr 498
-Ion_Type1_333	9.330030571	8.571428571	3.865710857	0 # molecule nr 499
-Ion_Type1_334	9.330030571	8.571428571	2.857142857	0 # molecule nr 500
-Ion_Type3_165	8.571428571	8.571428571	6.218569714	0 # molecule nr 501
-Ion_Type1_335	9.330030571	8.571428571	6.722853714	0 # molecule nr 502
-Ion_Type1_336	9.330030571	8.571428571	5.714285714	0 # molecule nr 503
-Ion_Type3_166	8.571428571	8.571428571	9.075712571	0 # molecule nr 504
-Ion_Type1_337	9.330030571	8.571428571	9.579996571	0 # molecule nr 505
-Ion_Type1_338	9.330030571	8.571428571	8.571428571	0 # molecule nr 506
-Ion_Type3_167	8.571428571	8.571428571	11.932855429	0 # molecule nr 507
-Ion_Type1_339	9.330030571	8.571428571	12.437139429	0 # molecule nr 508
-Ion_Type1_340	9.330030571	8.571428571	11.428571429	0 # molecule nr 509
-Ion_Type3_168	8.571428571	8.571428571	14.789998286	0 # molecule nr 510
-Ion_Type1_341	9.330030571	8.571428571	15.294282286	0 # molecule nr 511
-Ion_Type1_342	9.330030571	8.571428571	14.285714286	0 # molecule nr 512
-Ion_Type3_169	8.571428571	8.571428571	17.647141143	0 # molecule nr 513
-Ion_Type1_343	9.330030571	8.571428571	18.151425143	0 # molecule nr 514
-Ion_Type1_344	9.330030571	8.571428571	17.142857143	0 # molecule nr 515
-Ion_Type3_170	8.571428571	11.428571429	0.504284000	0 # molecule nr 516
-Ion_Type1_345	9.330030571	11.428571429	1.008568000	0 # molecule nr 517
-Ion_Type1_346	9.330030571	11.428571429	0.000000000	0 # molecule nr 518
-Ion_Type3_171	8.571428571	11.428571429	3.361426857	0 # molecule nr 519
-Ion_Type1_347	9.330030571	11.428571429	3.865710857	0 # molecule nr 520
-Ion_Type1_348	9.330030571	11.428571429	2.857142857	0 # molecule nr 521
-Ion_Type3_172	8.571428571	11.428571429	6.218569714	0 # molecule nr 522
-Ion_Type1_349	9.330030571	11.428571429	6.722853714	0 # molecule nr 523
-Ion_Type1_350	9.330030571	11.428571429	5.714285714	0 # molecule nr 524
-Ion_Type3_173	8.571428571	11.428571429	9.075712571	0 # molecule nr 525
-Ion_Type1_351	9.330030571	11.428571429	9.579996571	0 # molecule nr 526
-Ion_Type1_352	9.330030571	11.428571429	8.571428571	0 # molecule nr 527
-Ion_Type3_174	8.571428571	11.428571429	11.932855429	0 # molecule nr 528
-Ion_Type1_353	9.330030571	11.428571429	12.437139429	0 # molecule nr 529
-Ion_Type1_354	9.330030571	11.428571429	11.428571429	0 # molecule nr 530
-Ion_Type3_175	8.571428571	11.428571429	14.789998286	0 # molecule nr 531
-Ion_Type1_355	9.330030571	11.428571429	15.294282286	0 # molecule nr 532
-Ion_Type1_356	9.330030571	11.428571429	14.285714286	0 # molecule nr 533
-Ion_Type3_176	8.571428571	11.428571429	17.647141143	0 # molecule nr 534
-Ion_Type1_357	9.330030571	11.428571429	18.151425143	0 # molecule nr 535
-Ion_Type1_358	9.330030571	11.428571429	17.142857143	0 # molecule nr 536
-Ion_Type3_177	8.571428571	14.285714286	0.504284000	0 # molecule nr 537
-Ion_Type1_359	9.330030571	14.285714286	1.008568000	0 # molecule nr 538
-Ion_Type1_360	9.330030571	14.285714286	0.000000000	0 # molecule nr 539
-Ion_Type3_178	8.571428571	14.285714286	3.361426857	0 # molecule nr 540
-Ion_Type1_361	9.330030571	14.285714286	3.865710857	0 # molecule nr 541
-Ion_Type1_362	9.330030571	14.285714286	2.857142857	0 # molecule nr 542
-Ion_Type3_179	8.571428571	14.285714286	6.218569714	0 # molecule nr 543
-Ion_Type1_363	9.330030571	14.285714286	6.722853714	0 # molecule nr 544
-Ion_Type1_364	9.330030571	14.285714286	5.714285714	0 # molecule nr 545
-Ion_Type3_180	8.571428571	14.285714286	9.075712571	0 # molecule nr 546
-Ion_Type1_365	9.330030571	14.285714286	9.579996571	0 # molecule nr 547
-Ion_Type1_366	9.330030571	14.285714286	8.571428571	0 # molecule nr 548
-Ion_Type3_181	8.571428571	14.285714286	11.932855429	0 # molecule nr 549
-Ion_Type1_367	9.330030571	14.285714286	12.437139429	0 # molecule nr 550
-Ion_Type1_368	9.330030571	14.285714286	11.428571429	0 # molecule nr 551
-Ion_Type3_182	8.571428571	14.285714286	14.789998286	0 # molecule nr 552
-Ion_Type1_369	9.330030571	14.285714286	15.294282286	0 # molecule nr 553
-Ion_Type1_370	9.330030571	14.285714286	14.285714286	0 # molecule nr 554
-Ion_Type3_183	8.571428571	14.285714286	17.647141143	0 # molecule nr 555
-Ion_Type1_371	9.330030571	14.285714286	18.151425143	0 # molecule nr 556
-Ion_Type1_372	9.330030571	14.285714286	17.142857143	0 # molecule nr 557
-Ion_Type3_184	8.571428571	17.142857143	0.504284000	0 # molecule nr 558
-Ion_Type1_373	9.330030571	17.142857143	1.008568000	0 # molecule nr 559
-Ion_Type1_374	9.330030571	17.142857143	0.000000000	0 # molecule nr 560
-Ion_Type3_185	8.571428571	17.142857143	3.361426857	0 # molecule nr 561
-Ion_Type1_375	9.330030571	17.142857143	3.865710857	0 # molecule nr 562
-Ion_Type1_376	9.330030571	17.142857143	2.857142857	0 # molecule nr 563
-Ion_Type3_186	8.571428571	17.142857143	6.218569714	0 # molecule nr 564
-Ion_Type1_377	9.330030571	17.142857143	6.722853714	0 # molecule nr 565
-Ion_Type1_378	9.330030571	17.142857143	5.714285714	0 # molecule nr 566
-Ion_Type3_187	8.571428571	17.142857143	9.075712571	0 # molecule nr 567
-Ion_Type1_379	9.330030571	17.142857143	9.579996571	0 # molecule nr 568
-Ion_Type1_380	9.330030571	17.142857143	8.571428571	0 # molecule nr 569
-Ion_Type3_188	8.571428571	17.142857143	11.932855429	0 # molecule nr 570
-Ion_Type1_381	9.330030571	17.142857143	12.437139429	0 # molecule nr 571
-Ion_Type1_382	9.330030571	17.142857143	11.428571429	0 # molecule nr 572
-Ion_Type3_189	8.571428571	17.142857143	14.789998286	0 # molecule nr 573
-Ion_Type1_383	9.330030571	17.142857143	15.294282286	0 # molecule nr 574
-Ion_Type1_384	9.330030571	17.142857143	14.285714286	0 # molecule nr 575
-Ion_Type3_190	8.571428571	17.142857143	17.647141143	0 # molecule nr 576
-Ion_Type1_385	9.330030571	17.142857143	18.151425143	0 # molecule nr 577
-Ion_Type1_386	9.330030571	17.142857143	17.142857143	0 # molecule nr 578
-Ion_Type3_191	11.428571429	0.000000000	0.504284000	0 # molecule nr 579
-Ion_Type1_387	12.187173429	0.000000000	1.008568000	0 # molecule nr 580
-Ion_Type1_388	12.187173429	0.000000000	0.000000000	0 # molecule nr 581
-Ion_Type3_192	11.428571429	0.000000000	3.361426857	0 # molecule nr 582
-Ion_Type1_389	12.187173429	0.000000000	3.865710857	0 # molecule nr 583
-Ion_Type1_390	12.187173429	0.000000000	2.857142857	0 # molecule nr 584
-Ion_Type3_193	11.428571429	0.000000000	6.218569714	0 # molecule nr 585
-Ion_Type1_391	12.187173429	0.000000000	6.722853714	0 # molecule nr 586
-Ion_Type1_392	12.187173429	0.000000000	5.714285714	0 # molecule nr 587
-Ion_Type3_194	11.428571429	0.000000000	9.075712571	0 # molecule nr 588
-Ion_Type1_393	12.187173429	0.000000000	9.579996571	0 # molecule nr 589
-Ion_Type1_394	12.187173429	0.000000000	8.571428571	0 # molecule nr 590
-Ion_Type3_195	11.428571429	0.000000000	11.932855429	0 # molecule nr 591
-Ion_Type1_395	12.187173429	0.000000000	12.437139429	0 # molecule nr 592
-Ion_Type1_396	12.187173429	0.000000000	11.428571429	0 # molecule nr 593
-Ion_Type3_196	11.428571429	0.000000000	14.789998286	0 # molecule nr 594
-Ion_Type1_397	12.187173429	0.000000000	15.294282286	0 # molecule nr 595
-Ion_Type1_398	12.187173429	0.000000000	14.285714286	0 # molecule nr 596
-Ion_Type3_197	11.428571429	0.000000000	17.647141143	0 # molecule nr 597
-Ion_Type1_399	12.187173429	0.000000000	18.151425143	0 # molecule nr 598
-Ion_Type1_400	12.187173429	0.000000000	17.142857143	0 # molecule nr 599
-Ion_Type3_198	11.428571429	2.857142857	0.504284000	0 # molecule nr 600
-Ion_Type1_401	12.187173429	2.857142857	1.008568000	0 # molecule nr 601
-Ion_Type1_402	12.187173429	2.857142857	0.000000000	0 # molecule nr 602
-Ion_Type3_199	11.428571429	2.857142857	6.218569714	0 # molecule nr 603
-Ion_Type1_403	12.187173429	2.857142857	6.722853714	0 # molecule nr 604
-Ion_Type1_404	12.187173429	2.857142857	5.714285714	0 # molecule nr 605
-Ion_Type3_200	11.428571429	2.857142857	9.075712571	0 # molecule nr 606
-Ion_Type1_405	12.187173429	2.857142857	9.579996571	0 # molecule nr 607
-Ion_Type1_406	12.187173429	2.857142857	8.571428571	0 # molecule nr 608
-Ion_Type3_201	11.428571429	2.857142857	11.932855429	0 # molecule nr 609
-Ion_Type1_407	12.187173429	2.857142857	12.437139429	0 # molecule nr 610
-Ion_Type1_408	12.187173429	2.857142857	11.428571429	0 # molecule nr 611
-Ion_Type3_202	11.428571429	2.857142857	14.789998286	0 # molecule nr 612
-Ion_Type1_409	12.187173429	2.857142857	15.294282286	0 # molecule nr 613
-Ion_Type1_410	12.187173429	2.857142857	14.285714286	0 # molecule nr 614
-Ion_Type3_203	11.428571429	2.857142857	17.647141143	0 # molecule nr 615
-Ion_Type1_411	12.187173429	2.857142857	18.151425143	0 # molecule nr 616
-Ion_Type1_412	12.187173429	2.857142857	17.142857143	0 # molecule nr 617
-Ion_Type3_204	11.428571429	5.714285714	0.504284000	0 # molecule nr 618
-Ion_Type1_413	12.187173429	5.714285714	1.008568000	0 # molecule nr 619
-Ion_Type1_414	12.187173429	5.714285714	0.000000000	0 # molecule nr 620
-Ion_Type1_415	12.187173429	5.714285714	3.865710857	0 # molecule nr 621
-Ion_Type1_416	12.187173429	5.714285714	2.857142857	0 # molecule nr 622
-Ion_Type3_205	11.428571429	5.714285714	6.218569714	0 # molecule nr 623
-Ion_Type1_417	12.187173429	5.714285714	6.722853714	0 # molecule nr 624
-Ion_Type1_418	12.187173429	5.714285714	5.714285714	0 # molecule nr 625
-Ion_Type3_206	11.428571429	5.714285714	9.075712571	0 # molecule nr 626
-Ion_Type1_419	12.187173429	5.714285714	9.579996571	0 # molecule nr 627
-Ion_Type1_420	12.187173429	5.714285714	8.571428571	0 # molecule nr 628
-Ion_Type3_207	11.428571429	5.714285714	11.932855429	0 # molecule nr 629
-Ion_Type1_421	12.187173429	5.714285714	12.437139429	0 # molecule nr 630
-Ion_Type1_422	12.187173429	5.714285714	11.428571429	0 # molecule nr 631
-Ion_Type3_208	11.428571429	5.714285714	14.789998286	0 # molecule nr 632
-Ion_Type1_423	12.187173429	5.714285714	15.294282286	0 # molecule nr 633
-Ion_Type1_424	12.187173429	5.714285714	14.285714286	0 # molecule nr 634
-Ion_Type3_209	11.428571429	5.714285714	17.647141143	0 # molecule nr 635
-Ion_Type1_425	12.187173429	5.714285714	18.151425143	0 # molecule nr 636
-Ion_Type1_426	12.187173429	5.714285714	17.142857143	0 # molecule nr 637
-Ion_Type3_210	11.428571429	8.571428571	0.504284000	0 # molecule nr 638
-Ion_Type1_427	12.187173429	8.571428571	1.008568000	0 # molecule nr 639
-Ion_Type1_428	12.187173429	8.571428571	0.000000000	0 # molecule nr 640
-Ion_Type3_211	11.428571429	8.571428571	3.361426857	0 # molecule nr 641
-Ion_Type1_429	12.187173429	8.571428571	3.865710857	0 # molecule nr 642
-Ion_Type1_430	12.187173429	8.571428571	2.857142857	0 # molecule nr 643
-Ion_Type3_212	11.428571429	8.571428571	6.218569714	0 # molecule nr 644
-Ion_Type1_431	12.187173429	8.571428571	6.722853714	0 # molecule nr 645
-Ion_Type1_432	12.187173429	8.571428571	5.714285714	0 # molecule nr 646
-Ion_Type3_213	11.428571429	8.571428571	9.075712571	0 # molecule nr 647
-Ion_Type1_433	12.187173429	8.571428571	9.579996571	0 # molecule nr 648
-Ion_Type1_434	12.187173429	8.571428571	8.571428571	0 # molecule nr 649
-Ion_Type3_214	11.428571429	8.571428571	11.932855429	0 # molecule nr 650
-Ion_Type1_435	12.187173429	8.571428571	12.437139429	0 # molecule nr 651
-Ion_Type1_436	12.187173429	8.571428571	11.428571429	0 # molecule nr 652
-Ion_Type3_215	11.428571429	8.571428571	14.789998286	0 # molecule nr 653
-Ion_Type1_437	12.187173429	8.571428571	15.294282286	0 # molecule nr 654
-Ion_Type1_438	12.187173429	8.571428571	14.285714286	0 # molecule nr 655
-Ion_Type3_216	11.428571429	8.571428571	17.647141143	0 # molecule nr 656
-Ion_Type1_439	12.187173429	8.571428571	18.151425143	0 # molecule nr 657
-Ion_Type1_440	12.187173429	8.571428571	17.142857143	0 # molecule nr 658
-Ion_Type3_217	11.428571429	11.428571429	0.504284000	0 # molecule nr 659
-Ion_Type1_441	12.187173429	11.428571429	1.008568000	0 # molecule nr 660
-Ion_Type1_442	12.187173429	11.428571429	0.000000000	0 # molecule nr 661
-Ion_Type3_218	11.428571429	11.428571429	3.361426857	0 # molecule nr 662
-Ion_Type1_443	12.187173429	11.428571429	3.865710857	0 # molecule nr 663
-Ion_Type1_444	12.187173429	11.428571429	2.857142857	0 # molecule nr 664
-Ion_Type3_219	11.428571429	11.428571429	6.218569714	0 # molecule nr 665
-Ion_Type1_445	12.187173429	11.428571429	6.722853714	0 # molecule nr 666
-Ion_Type1_446	12.187173429	11.428571429	5.714285714	0 # molecule nr 667
-Ion_Type3_220	11.428571429	11.428571429	9.075712571	0 # molecule nr 668
-Ion_Type1_447	12.187173429	11.428571429	9.579996571	0 # molecule nr 669
-Ion_Type1_448	12.187173429	11.428571429	8.571428571	0 # molecule nr 670
-Ion_Type3_221	11.428571429	11.428571429	11.932855429	0 # molecule nr 671
-Ion_Type1_449	12.187173429	11.428571429	12.437139429	0 # molecule nr 672
-Ion_Type1_450	12.187173429	11.428571429	11.428571429	0 # molecule nr 673
-Ion_Type3_222	11.428571429	11.428571429	14.789998286	0 # molecule nr 674
-Ion_Type1_451	12.187173429	11.428571429	15.294282286	0 # molecule nr 675
-Ion_Type1_452	12.187173429	11.428571429	14.285714286	0 # molecule nr 676
-Ion_Type3_223	11.428571429	11.428571429	17.647141143	0 # molecule nr 677
-Ion_Type1_453	12.187173429	11.428571429	18.151425143	0 # molecule nr 678
-Ion_Type1_454	12.187173429	11.428571429	17.142857143	0 # molecule nr 679
-Ion_Type3_224	11.428571429	14.285714286	0.504284000	0 # molecule nr 680
-Ion_Type1_455	12.187173429	14.285714286	1.008568000	0 # molecule nr 681
-Ion_Type1_456	12.187173429	14.285714286	0.000000000	0 # molecule nr 682
-Ion_Type3_225	11.428571429	14.285714286	3.361426857	0 # molecule nr 683
-Ion_Type1_457	12.187173429	14.285714286	3.865710857	0 # molecule nr 684
-Ion_Type1_458	12.187173429	14.285714286	2.857142857	0 # molecule nr 685
-Ion_Type3_226	11.428571429	14.285714286	6.218569714	0 # molecule nr 686
-Ion_Type1_459	12.187173429	14.285714286	6.722853714	0 # molecule nr 687
-Ion_Type1_460	12.187173429	14.285714286	5.714285714	0 # molecule nr 688
-Ion_Type3_227	11.428571429	14.285714286	9.075712571	0 # molecule nr 689
-Ion_Type1_461	12.187173429	14.285714286	9.579996571	0 # molecule nr 690
-Ion_Type1_462	12.187173429	14.285714286	8.571428571	0 # molecule nr 691
-Ion_Type3_228	11.428571429	14.285714286	11.932855429	0 # molecule nr 692
-Ion_Type1_463	12.187173429	14.285714286	12.437139429	0 # molecule nr 693
-Ion_Type1_464	12.187173429	14.285714286	11.428571429	0 # molecule nr 694
-Ion_Type3_229	11.428571429	14.285714286	14.789998286	0 # molecule nr 695
-Ion_Type1_465	12.187173429	14.285714286	15.294282286	0 # molecule nr 696
-Ion_Type1_466	12.187173429	14.285714286	14.285714286	0 # molecule nr 697
-Ion_Type3_230	11.428571429	14.285714286	17.647141143	0 # molecule nr 698
-Ion_Type1_467	12.187173429	14.285714286	18.151425143	0 # molecule nr 699
-Ion_Type1_468	12.187173429	14.285714286	17.142857143	0 # molecule nr 700
-Ion_Type3_231	11.428571429	17.142857143	0.504284000	0 # molecule nr 701
-Ion_Type1_469	12.187173429	17.142857143	1.008568000	0 # molecule nr 702
-Ion_Type1_470	12.187173429	17.142857143	0.000000000	0 # molecule nr 703
-Ion_Type3_232	11.428571429	17.142857143	3.361426857	0 # molecule nr 704
-Ion_Type1_471	12.187173429	17.142857143	3.865710857	0 # molecule nr 705
-Ion_Type1_472	12.187173429	17.142857143	2.857142857	0 # molecule nr 706
-Ion_Type3_233	11.428571429	17.142857143	6.218569714	0 # molecule nr 707
-Ion_Type1_473	12.187173429	17.142857143	6.722853714	0 # molecule nr 708
-Ion_Type1_474	12.187173429	17.142857143	5.714285714	0 # molecule nr 709
-Ion_Type3_234	11.428571429	17.142857143	9.075712571	0 # molecule nr 710
-Ion_Type1_475	12.187173429	17.142857143	9.579996571	0 # molecule nr 711
-Ion_Type1_476	12.187173429	17.142857143	8.571428571	0 # molecule nr 712
-Ion_Type3_235	11.428571429	17.142857143	11.932855429	0 # molecule nr 713
-Ion_Type1_477	12.187173429	17.142857143	12.437139429	0 # molecule nr 714
-Ion_Type1_478	12.187173429	17.142857143	11.428571429	0 # molecule nr 715
-Ion_Type3_236	11.428571429	17.142857143	14.789998286	0 # molecule nr 716
-Ion_Type1_479	12.187173429	17.142857143	15.294282286	0 # molecule nr 717
-Ion_Type1_480	12.187173429	17.142857143	14.285714286	0 # molecule nr 718
-Ion_Type3_237	11.428571429	17.142857143	17.647141143	0 # molecule nr 719
-Ion_Type1_481	12.187173429	17.142857143	18.151425143	0 # molecule nr 720
-Ion_Type1_482	12.187173429	17.142857143	17.142857143	0 # molecule nr 721
-Ion_Type3_238	14.285714286	0.000000000	0.504284000	0 # molecule nr 722
-Ion_Type1_483	15.044316286	0.000000000	1.008568000	0 # molecule nr 723
-Ion_Type1_484	15.044316286	0.000000000	0.000000000	0 # molecule nr 724
-Ion_Type3_239	14.285714286	0.000000000	3.361426857	0 # molecule nr 725
-Ion_Type1_485	15.044316286	0.000000000	3.865710857	0 # molecule nr 726
-Ion_Type1_486	15.044316286	0.000000000	2.857142857	0 # molecule nr 727
-Ion_Type3_240	14.285714286	0.000000000	6.218569714	0 # molecule nr 728
-Ion_Type1_487	15.044316286	0.000000000	6.722853714	0 # molecule nr 729
-Ion_Type1_488	15.044316286	0.000000000	5.714285714	0 # molecule nr 730
-Ion_Type3_241	14.285714286	0.000000000	9.075712571	0 # molecule nr 731
-Ion_Type1_489	15.044316286	0.000000000	9.579996571	0 # molecule nr 732
-Ion_Type1_490	15.044316286	0.000000000	8.571428571	0 # molecule nr 733
-Ion_Type3_242	14.285714286	0.000000000	11.932855429	0 # molecule nr 734
-Ion_Type1_491	15.044316286	0.000000000	12.437139429	0 # molecule nr 735
-Ion_Type1_492	15.044316286	0.000000000	11.428571429	0 # molecule nr 736
-Ion_Type3_243	14.285714286	0.000000000	14.789998286	0 # molecule nr 737
-Ion_Type1_493	15.044316286	0.000000000	15.294282286	0 # molecule nr 738
-Ion_Type1_494	15.044316286	0.000000000	14.285714286	0 # molecule nr 739
-Ion_Type3_244	14.285714286	0.000000000	17.647141143	0 # molecule nr 740
-Ion_Type1_495	15.044316286	0.000000000	18.151425143	0 # molecule nr 741
-Ion_Type1_496	15.044316286	0.000000000	17.142857143	0 # molecule nr 742
-Ion_Type3_245	14.285714286	2.857142857	0.504284000	0 # molecule nr 743
-Ion_Type1_497	15.044316286	2.857142857	1.008568000	0 # molecule nr 744
-Ion_Type1_498	15.044316286	2.857142857	0.000000000	0 # molecule nr 745
-Ion_Type3_246	14.285714286	2.857142857	3.361426857	0 # molecule nr 746
-Ion_Type1_499	15.044316286	2.857142857	3.865710857	0 # molecule nr 747
-Ion_Type1_500	15.044316286	2.857142857	2.857142857	0 # molecule nr 748
-Ion_Type3_247	14.285714286	2.857142857	6.218569714	0 # molecule nr 749
-Ion_Type1_501	15.044316286	2.857142857	6.722853714	0 # molecule nr 750
-Ion_Type1_502	15.044316286	2.857142857	5.714285714	0 # molecule nr 751
-Ion_Type3_248	14.285714286	2.857142857	9.075712571	0 # molecule nr 752
-Ion_Type1_503	15.044316286	2.857142857	9.579996571	0 # molecule nr 753
-Ion_Type1_504	15.044316286	2.857142857	8.571428571	0 # molecule nr 754
-Ion_Type3_249	14.285714286	2.857142857	11.932855429	0 # molecule nr 755
-Ion_Type1_505	15.044316286	2.857142857	12.437139429	0 # molecule nr 756
-Ion_Type1_506	15.044316286	2.857142857	11.428571429	0 # molecule nr 757
-Ion_Type3_250	14.285714286	2.857142857	14.789998286	0 # molecule nr 758
-Ion_Type1_507	15.044316286	2.857142857	15.294282286	0 # molecule nr 759
-Ion_Type1_508	15.044316286	2.857142857	14.285714286	0 # molecule nr 760
-Ion_Type3_251	14.285714286	2.857142857	17.647141143	0 # molecule nr 761
-Ion_Type1_509	15.044316286	2.857142857	18.151425143	0 # molecule nr 762
-Ion_Type1_510	15.044316286	2.857142857	17.142857143	0 # molecule nr 763
-Ion_Type3_252	14.285714286	5.714285714	0.504284000	0 # molecule nr 764
-Ion_Type1_511	15.044316286	5.714285714	1.008568000	0 # molecule nr 765
-Ion_Type1_512	15.044316286	5.714285714	0.000000000	0 # molecule nr 766
-Ion_Type3_253	14.285714286	5.714285714	3.361426857	0 # molecule nr 767
-Ion_Type1_513	15.044316286	5.714285714	3.865710857	0 # molecule nr 768
-Ion_Type1_514	15.044316286	5.714285714	2.857142857	0 # molecule nr 769
-Ion_Type3_254	14.285714286	5.714285714	6.218569714	0 # molecule nr 770
-Ion_Type1_515	15.044316286	5.714285714	6.722853714	0 # molecule nr 771
-Ion_Type1_516	15.044316286	5.714285714	5.714285714	0 # molecule nr 772
-Ion_Type3_255	14.285714286	5.714285714	9.075712571	0 # molecule nr 773
-Ion_Type1_517	15.044316286	5.714285714	9.579996571	0 # molecule nr 774
-Ion_Type1_518	15.044316286	5.714285714	8.571428571	0 # molecule nr 775
-Ion_Type3_256	14.285714286	5.714285714	11.932855429	0 # molecule nr 776
-Ion_Type1_519	15.044316286	5.714285714	12.437139429	0 # molecule nr 777
-Ion_Type1_520	15.044316286	5.714285714	11.428571429	0 # molecule nr 778
-Ion_Type3_257	14.285714286	5.714285714	14.789998286	0 # molecule nr 779
-Ion_Type1_521	15.044316286	5.714285714	15.294282286	0 # molecule nr 780
-Ion_Type1_522	15.044316286	5.714285714	14.285714286	0 # molecule nr 781
-Ion_Type3_258	14.285714286	5.714285714	17.647141143	0 # molecule nr 782
-Ion_Type1_523	15.044316286	5.714285714	18.151425143	0 # molecule nr 783
-Ion_Type1_524	15.044316286	5.714285714	17.142857143	0 # molecule nr 784
-Ion_Type3_259	14.285714286	8.571428571	0.504284000	0 # molecule nr 785
-Ion_Type1_525	15.044316286	8.571428571	1.008568000	0 # molecule nr 786
-Ion_Type1_526	15.044316286	8.571428571	0.000000000	0 # molecule nr 787
-Ion_Type3_260	14.285714286	8.571428571	3.361426857	0 # molecule nr 788
-Ion_Type1_527	15.044316286	8.571428571	3.865710857	0 # molecule nr 789
-Ion_Type1_528	15.044316286	8.571428571	2.857142857	0 # molecule nr 790
-Ion_Type3_261	14.285714286	8.571428571	6.218569714	0 # molecule nr 791
-Ion_Type1_529	15.044316286	8.571428571	6.722853714	0 # molecule nr 792
-Ion_Type1_530	15.044316286	8.571428571	5.714285714	0 # molecule nr 793
-Ion_Type3_262	14.285714286	8.571428571	9.075712571	0 # molecule nr 794
-Ion_Type1_531	15.044316286	8.571428571	9.579996571	0 # molecule nr 795
-Ion_Type1_532	15.044316286	8.571428571	8.571428571	0 # molecule nr 796
-Ion_Type3_263	14.285714286	8.571428571	11.932855429	0 # molecule nr 797
-Ion_Type1_533	15.044316286	8.571428571	12.437139429	0 # molecule nr 798
-Ion_Type1_534	15.044316286	8.571428571	11.428571429	0 # molecule nr 799
-Ion_Type3_264	14.285714286	8.571428571	14.789998286	0 # molecule nr 800
-Ion_Type1_535	15.044316286	8.571428571	15.294282286	0 # molecule nr 801
-Ion_Type1_536	15.044316286	8.571428571	14.285714286	0 # molecule nr 802
-Ion_Type3_265	14.285714286	8.571428571	17.647141143	0 # molecule nr 803
-Ion_Type1_537	15.044316286	8.571428571	18.151425143	0 # molecule nr 804
-Ion_Type1_538	15.044316286	8.571428571	17.142857143	0 # molecule nr 805
-Ion_Type3_266	14.285714286	11.428571429	0.504284000	0 # molecule nr 806
-Ion_Type1_539	15.044316286	11.428571429	1.008568000	0 # molecule nr 807
-Ion_Type1_540	15.044316286	11.428571429	0.000000000	0 # molecule nr 808
-Ion_Type3_267	14.285714286	11.428571429	3.361426857	0 # molecule nr 809
-Ion_Type1_541	15.044316286	11.428571429	3.865710857	0 # molecule nr 810
-Ion_Type1_542	15.044316286	11.428571429	2.857142857	0 # molecule nr 811
-Ion_Type3_268	14.285714286	11.428571429	6.218569714	0 # molecule nr 812
-Ion_Type1_543	15.044316286	11.428571429	6.722853714	0 # molecule nr 813
-Ion_Type1_544	15.044316286	11.428571429	5.714285714	0 # molecule nr 814
-Ion_Type3_269	14.285714286	11.428571429	9.075712571	0 # molecule nr 815
-Ion_Type1_545	15.044316286	11.428571429	9.579996571	0 # molecule nr 816
-Ion_Type1_546	15.044316286	11.428571429	8.571428571	0 # molecule nr 817
-Ion_Type3_270	14.285714286	11.428571429	11.932855429	0 # molecule nr 818
-Ion_Type1_547	15.044316286	11.428571429	12.437139429	0 # molecule nr 819
-Ion_Type1_548	15.044316286	11.428571429	11.428571429	0 # molecule nr 820
-Ion_Type3_271	14.285714286	11.428571429	14.789998286	0 # molecule nr 821
-Ion_Type1_549	15.044316286	11.428571429	15.294282286	0 # molecule nr 822
-Ion_Type1_550	15.044316286	11.428571429	14.285714286	0 # molecule nr 823
-Ion_Type3_272	14.285714286	11.428571429	17.647141143	0 # molecule nr 824
-Ion_Type1_551	15.044316286	11.428571429	18.151425143	0 # molecule nr 825
-Ion_Type1_552	15.044316286	11.428571429	17.142857143	0 # molecule nr 826
-Ion_Type3_273	14.285714286	14.285714286	0.504284000	0 # molecule nr 827
-Ion_Type1_553	15.044316286	14.285714286	1.008568000	0 # molecule nr 828
-Ion_Type1_554	15.044316286	14.285714286	0.000000000	0 # molecule nr 829
-Ion_Type3_274	14.285714286	14.285714286	3.361426857	0 # molecule nr 830
-Ion_Type1_555	15.044316286	14.285714286	3.865710857	0 # molecule nr 831
-Ion_Type1_556	15.044316286	14.285714286	2.857142857	0 # molecule nr 832
-Ion_Type3_275	14.285714286	14.285714286	6.218569714	0 # molecule nr 833
-Ion_Type1_557	15.044316286	14.285714286	6.722853714	0 # molecule nr 834
-Ion_Type1_558	15.044316286	14.285714286	5.714285714	0 # molecule nr 835
-Ion_Type3_276	14.285714286	14.285714286	9.075712571	0 # molecule nr 836
-Ion_Type1_559	15.044316286	14.285714286	9.579996571	0 # molecule nr 837
-Ion_Type1_560	15.044316286	14.285714286	8.571428571	0 # molecule nr 838
-Ion_Type3_277	14.285714286	14.285714286	11.932855429	0 # molecule nr 839
-Ion_Type1_561	15.044316286	14.285714286	12.437139429	0 # molecule nr 840
-Ion_Type1_562	15.044316286	14.285714286	11.428571429	0 # molecule nr 841
-Ion_Type3_278	14.285714286	14.285714286	14.789998286	0 # molecule nr 842
-Ion_Type1_563	15.044316286	14.285714286	15.294282286	0 # molecule nr 843
-Ion_Type1_564	15.044316286	14.285714286	14.285714286	0 # molecule nr 844
-Ion_Type3_279	14.285714286	14.285714286	17.647141143	0 # molecule nr 845
-Ion_Type1_565	15.044316286	14.285714286	18.151425143	0 # molecule nr 846
-Ion_Type1_566	15.044316286	14.285714286	17.142857143	0 # molecule nr 847
-Ion_Type3_280	14.285714286	17.142857143	0.504284000	0 # molecule nr 848
-Ion_Type1_567	15.044316286	17.142857143	1.008568000	0 # molecule nr 849
-Ion_Type1_568	15.044316286	17.142857143	0.000000000	0 # molecule nr 850
-Ion_Type3_281	14.285714286	17.142857143	3.361426857	0 # molecule nr 851
-Ion_Type1_569	15.044316286	17.142857143	3.865710857	0 # molecule nr 852
-Ion_Type1_570	15.044316286	17.142857143	2.857142857	0 # molecule nr 853
-Ion_Type3_282	14.285714286	17.142857143	6.218569714	0 # molecule nr 854
-Ion_Type1_571	15.044316286	17.142857143	6.722853714	0 # molecule nr 855
-Ion_Type1_572	15.044316286	17.142857143	5.714285714	0 # molecule nr 856
-Ion_Type3_283	14.285714286	17.142857143	9.075712571	0 # molecule nr 857
-Ion_Type1_573	15.044316286	17.142857143	9.579996571	0 # molecule nr 858
-Ion_Type1_574	15.044316286	17.142857143	8.571428571	0 # molecule nr 859
-Ion_Type3_284	14.285714286	17.142857143	11.932855429	0 # molecule nr 860
-Ion_Type1_575	15.044316286	17.142857143	12.437139429	0 # molecule nr 861
-Ion_Type1_576	15.044316286	17.142857143	11.428571429	0 # molecule nr 862
-Ion_Type3_285	14.285714286	17.142857143	14.789998286	0 # molecule nr 863
-Ion_Type1_577	15.044316286	17.142857143	15.294282286	0 # molecule nr 864
-Ion_Type1_578	15.044316286	17.142857143	14.285714286	0 # molecule nr 865
-Ion_Type3_286	14.285714286	17.142857143	17.647141143	0 # molecule nr 866
-Ion_Type1_579	15.044316286	17.142857143	18.151425143	0 # molecule nr 867
-Ion_Type1_580	15.044316286	17.142857143	17.142857143	0 # molecule nr 868
-Ion_Type3_287	17.142857143	0.000000000	0.504284000	0 # molecule nr 869
-Ion_Type1_581	17.901459143	0.000000000	1.008568000	0 # molecule nr 870
-Ion_Type1_582	17.901459143	0.000000000	0.000000000	0 # molecule nr 871
-Ion_Type3_288	17.142857143	0.000000000	3.361426857	0 # molecule nr 872
-Ion_Type1_583	17.901459143	0.000000000	3.865710857	0 # molecule nr 873
-Ion_Type1_584	17.901459143	0.000000000	2.857142857	0 # molecule nr 874
-Ion_Type3_289	17.142857143	0.000000000	6.218569714	0 # molecule nr 875
-Ion_Type1_585	17.901459143	0.000000000	6.722853714	0 # molecule nr 876
-Ion_Type1_586	17.901459143	0.000000000	5.714285714	0 # molecule nr 877
-Ion_Type3_290	17.142857143	0.000000000	9.075712571	0 # molecule nr 878
-Ion_Type1_587	17.901459143	0.000000000	9.579996571	0 # molecule nr 879
-Ion_Type1_588	17.901459143	0.000000000	8.571428571	0 # molecule nr 880
-Ion_Type3_291	17.142857143	0.000000000	11.932855429	0 # molecule nr 881
-Ion_Type1_589	17.901459143	0.000000000	12.437139429	0 # molecule nr 882
-Ion_Type1_590	17.901459143	0.000000000	11.428571429	0 # molecule nr 883
-Ion_Type3_292	17.142857143	0.000000000	14.789998286	0 # molecule nr 884
-Ion_Type1_591	17.901459143	0.000000000	15.294282286	0 # molecule nr 885
-Ion_Type1_592	17.901459143	0.000000000	14.285714286	0 # molecule nr 886
-Ion_Type3_293	17.142857143	0.000000000	17.647141143	0 # molecule nr 887
-Ion_Type1_593	17.901459143	0.000000000	18.151425143	0 # molecule nr 888
-Ion_Type1_594	17.901459143	0.000000000	17.142857143	0 # molecule nr 889
-Ion_Type3_294	17.142857143	2.857142857	0.504284000	0 # molecule nr 890
-Ion_Type1_595	17.901459143	2.857142857	1.008568000	0 # molecule nr 891
-Ion_Type1_596	17.901459143	2.857142857	0.000000000	0 # molecule nr 892
-Ion_Type3_295	17.142857143	2.857142857	3.361426857	0 # molecule nr 893
-Ion_Type1_597	17.901459143	2.857142857	3.865710857	0 # molecule nr 894
-Ion_Type1_598	17.901459143	2.857142857	2.857142857	0 # molecule nr 895
-Ion_Type3_296	17.142857143	2.857142857	6.218569714	0 # molecule nr 896
-Ion_Type1_599	17.901459143	2.857142857	6.722853714	0 # molecule nr 897
-Ion_Type1_600	17.901459143	2.857142857	5.714285714	0 # molecule nr 898
-Ion_Type3_297	17.142857143	2.857142857	9.075712571	0 # molecule nr 899
-Ion_Type1_601	17.901459143	2.857142857	9.579996571	0 # molecule nr 900
-Ion_Type1_602	17.901459143	2.857142857	8.571428571	0 # molecule nr 901
-Ion_Type3_298	17.142857143	2.857142857	11.932855429	0 # molecule nr 902
-Ion_Type1_603	17.901459143	2.857142857	12.437139429	0 # molecule nr 903
-Ion_Type1_604	17.901459143	2.857142857	11.428571429	0 # molecule nr 904
-Ion_Type3_299	17.142857143	2.857142857	14.789998286	0 # molecule nr 905
-Ion_Type1_605	17.901459143	2.857142857	15.294282286	0 # molecule nr 906
-Ion_Type1_606	17.901459143	2.857142857	14.285714286	0 # molecule nr 907
-Ion_Type3_300	17.142857143	2.857142857	17.647141143	0 # molecule nr 908
-Ion_Type1_607	17.901459143	2.857142857	18.151425143	0 # molecule nr 909
-Ion_Type1_608	17.901459143	2.857142857	17.142857143	0 # molecule nr 910
-Ion_Type3_301	17.142857143	5.714285714	0.504284000	0 # molecule nr 911
-Ion_Type1_609	17.901459143	5.714285714	1.008568000	0 # molecule nr 912
-Ion_Type1_610	17.901459143	5.714285714	0.000000000	0 # molecule nr 913
-Ion_Type3_302	17.142857143	5.714285714	3.361426857	0 # molecule nr 914
-Ion_Type1_611	17.901459143	5.714285714	3.865710857	0 # molecule nr 915
-Ion_Type1_612	17.901459143	5.714285714	2.857142857	0 # molecule nr 916
-Ion_Type3_303	17.142857143	5.714285714	6.218569714	0 # molecule nr 917
-Ion_Type1_613	17.901459143	5.714285714	6.722853714	0 # molecule nr 918
-Ion_Type1_614	17.901459143	5.714285714	5.714285714	0 # molecule nr 919
-Ion_Type3_304	17.142857143	5.714285714	9.075712571	0 # molecule nr 920
-Ion_Type1_615	17.901459143	5.714285714	9.579996571	0 # molecule nr 921
-Ion_Type1_616	17.901459143	5.714285714	8.571428571	0 # molecule nr 922
-Ion_Type3_305	17.142857143	5.714285714	11.932855429	0 # molecule nr 923
-Ion_Type1_617	17.901459143	5.714285714	12.437139429	0 # molecule nr 924
-Ion_Type1_618	17.901459143	5.714285714	11.428571429	0 # molecule nr 925
-Ion_Type3_306	17.142857143	5.714285714	14.789998286	0 # molecule nr 926
-Ion_Type1_619	17.901459143	5.714285714	15.294282286	0 # molecule nr 927
-Ion_Type1_620	17.901459143	5.714285714	14.285714286	0 # molecule nr 928
-Ion_Type3_307	17.142857143	5.714285714	17.647141143	0 # molecule nr 929
-Ion_Type1_621	17.901459143	5.714285714	18.151425143	0 # molecule nr 930
-Ion_Type1_622	17.901459143	5.714285714	17.142857143	0 # molecule nr 931
-Ion_Type3_308	17.142857143	8.571428571	0.504284000	0 # molecule nr 932
-Ion_Type1_623	17.901459143	8.571428571	1.008568000	0 # molecule nr 933
-Ion_Type1_624	17.901459143	8.571428571	0.000000000	0 # molecule nr 934
-Ion_Type3_309	17.142857143	8.571428571	3.361426857	0 # molecule nr 935
-Ion_Type1_625	17.901459143	8.571428571	3.865710857	0 # molecule nr 936
-Ion_Type1_626	17.901459143	8.571428571	2.857142857	0 # molecule nr 937
-Ion_Type3_310	17.142857143	8.571428571	6.218569714	0 # molecule nr 938
-Ion_Type1_627	17.901459143	8.571428571	6.722853714	0 # molecule nr 939
-Ion_Type1_628	17.901459143	8.571428571	5.714285714	0 # molecule nr 940
-Ion_Type3_311	17.142857143	8.571428571	9.075712571	0 # molecule nr 941
-Ion_Type1_629	17.901459143	8.571428571	9.579996571	0 # molecule nr 942
-Ion_Type1_630	17.901459143	8.571428571	8.571428571	0 # molecule nr 943
-Ion_Type3_312	17.142857143	8.571428571	11.932855429	0 # molecule nr 944
-Ion_Type1_631	17.901459143	8.571428571	12.437139429	0 # molecule nr 945
-Ion_Type1_632	17.901459143	8.571428571	11.428571429	0 # molecule nr 946
-Ion_Type3_313	17.142857143	8.571428571	14.789998286	0 # molecule nr 947
-Ion_Type1_633	17.901459143	8.571428571	15.294282286	0 # molecule nr 948
-Ion_Type1_634	17.901459143	8.571428571	14.285714286	0 # molecule nr 949
-Ion_Type3_314	17.142857143	8.571428571	17.647141143	0 # molecule nr 950
-Ion_Type1_635	17.901459143	8.571428571	18.151425143	0 # molecule nr 951
-Ion_Type1_636	17.901459143	8.571428571	17.142857143	0 # molecule nr 952
-Ion_Type3_315	17.142857143	11.428571429	0.504284000	0 # molecule nr 953
-Ion_Type1_637	17.901459143	11.428571429	1.008568000	0 # molecule nr 954
-Ion_Type1_638	17.901459143	11.428571429	0.000000000	0 # molecule nr 955
-Ion_Type3_316	17.142857143	11.428571429	3.361426857	0 # molecule nr 956
-Ion_Type1_639	17.901459143	11.428571429	3.865710857	0 # molecule nr 957
-Ion_Type1_640	17.901459143	11.428571429	2.857142857	0 # molecule nr 958
-Ion_Type3_317	17.142857143	11.428571429	6.218569714	0 # molecule nr 959
-Ion_Type1_641	17.901459143	11.428571429	6.722853714	0 # molecule nr 960
-Ion_Type1_642	17.901459143	11.428571429	5.714285714	0 # molecule nr 961
-Ion_Type3_318	17.142857143	11.428571429	9.075712571	0 # molecule nr 962
-Ion_Type1_643	17.901459143	11.428571429	9.579996571	0 # molecule nr 963
-Ion_Type1_644	17.901459143	11.428571429	8.571428571	0 # molecule nr 964
-Ion_Type3_319	17.142857143	11.428571429	11.932855429	0 # molecule nr 965
-Ion_Type1_645	17.901459143	11.428571429	12.437139429	0 # molecule nr 966
-Ion_Type1_646	17.901459143	11.428571429	11.428571429	0 # molecule nr 967
-Ion_Type3_320	17.142857143	11.428571429	14.789998286	0 # molecule nr 968
-Ion_Type1_647	17.901459143	11.428571429	15.294282286	0 # molecule nr 969
-Ion_Type1_648	17.901459143	11.428571429	14.285714286	0 # molecule nr 970
-Ion_Type3_321	17.142857143	11.428571429	17.647141143	0 # molecule nr 971
-Ion_Type1_649	17.901459143	11.428571429	18.151425143	0 # molecule nr 972
-Ion_Type1_650	17.901459143	11.428571429	17.142857143	0 # molecule nr 973
-Ion_Type3_322	17.142857143	14.285714286	0.504284000	0 # molecule nr 974
-Ion_Type1_651	17.901459143	14.285714286	1.008568000	0 # molecule nr 975
-Ion_Type1_652	17.901459143	14.285714286	0.000000000	0 # molecule nr 976
-Ion_Type3_323	17.142857143	14.285714286	3.361426857	0 # molecule nr 977
-Ion_Type1_653	17.901459143	14.285714286	3.865710857	0 # molecule nr 978
-Ion_Type1_654	17.901459143	14.285714286	2.857142857	0 # molecule nr 979
-Ion_Type3_324	17.142857143	14.285714286	6.218569714	0 # molecule nr 980
-Ion_Type1_655	17.901459143	14.285714286	6.722853714	0 # molecule nr 981
-Ion_Type1_656	17.901459143	14.285714286	5.714285714	0 # molecule nr 982
-Ion_Type3_325	17.142857143	14.285714286	9.075712571	0 # molecule nr 983
-Ion_Type1_657	17.901459143	14.285714286	9.579996571	0 # molecule nr 984
-Ion_Type1_658	17.901459143	14.285714286	8.571428571	0 # molecule nr 985
-Ion_Type3_326	17.142857143	14.285714286	11.932855429	0 # molecule nr 986
-Ion_Type1_659	17.901459143	14.285714286	12.437139429	0 # molecule nr 987
-Ion_Type1_660	17.901459143	14.285714286	11.428571429	0 # molecule nr 988
-Ion_Type3_327	17.142857143	14.285714286	14.789998286	0 # molecule nr 989
-Ion_Type1_661	17.901459143	14.285714286	15.294282286	0 # molecule nr 990
-Ion_Type1_662	17.901459143	14.285714286	14.285714286	0 # molecule nr 991
-Ion_Type3_328	17.142857143	14.285714286	17.647141143	0 # molecule nr 992
-Ion_Type1_663	17.901459143	14.285714286	18.151425143	0 # molecule nr 993
-Ion_Type1_664	17.901459143	14.285714286	17.142857143	0 # molecule nr 994
-Ion_Type3_329	17.142857143	17.142857143	0.504284000	0 # molecule nr 995
-Ion_Type1_665	17.901459143	17.142857143	1.008568000	0 # molecule nr 996
-Ion_Type1_666	17.901459143	17.142857143	0.000000000	0 # molecule nr 997
-Ion_Type3_330	17.142857143	17.142857143	3.361426857	0 # molecule nr 998
-Ion_Type1_667	17.901459143	17.142857143	3.865710857	0 # molecule nr 999
-Ion_Type1_668	17.901459143	17.142857143	2.857142857	0 # molecule nr 1000
-Ion_Type3_331	17.142857143	17.142857143	6.218569714	0 # molecule nr 1001
-Ion_Type1_669	17.901459143	17.142857143	6.722853714	0 # molecule nr 1002
-Ion_Type1_670	17.901459143	17.142857143	5.714285714	0 # molecule nr 1003
-Ion_Type3_332	17.142857143	17.142857143	9.075712571	0 # molecule nr 1004
-Ion_Type1_671	17.901459143	17.142857143	9.579996571	0 # molecule nr 1005
-Ion_Type1_672	17.901459143	17.142857143	8.571428571	0 # molecule nr 1006
-Ion_Type3_333	17.142857143	17.142857143	11.932855429	0 # molecule nr 1007
-Ion_Type1_673	17.901459143	17.142857143	12.437139429	0 # molecule nr 1008
-Ion_Type1_674	17.901459143	17.142857143	11.428571429	0 # molecule nr 1009
-Ion_Type3_334	17.142857143	17.142857143	14.789998286	0 # molecule nr 1010
-Ion_Type1_675	17.901459143	17.142857143	15.294282286	0 # molecule nr 1011
-Ion_Type1_676	17.901459143	17.142857143	14.285714286	0 # molecule nr 1012
-Ion_Type3_335	17.142857143	17.142857143	17.647141143	0 # molecule nr 1013
-Ion_Type1_677	17.901459143	17.142857143	18.151425143	0 # molecule nr 1014
-Ion_Type1_678	17.901459143	17.142857143	17.142857143	0 # molecule nr 1015
Index: tests/regression/Simple_configuration/8/pre/test.xyz
===================================================================
--- tests/regression/Simple_configuration/8/pre/test.xyz	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
+++ tests/regression/Simple_configuration/8/pre/test.xyz	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -0,0 +1,1018 @@
+1016
+	Created by molecuilder on Mon Aug  9 19:15:41 2010
+H	9.78209	2.64589	2.64589
+H	9.78209	2.64589	4.42589
+H	10.672	3.90454	3.53589
+H	8.53279	4.78789	2.64589
+H	8.53279	4.78789	4.42589
+H	6.39363	3.90454	3.53589
+H	7.28359	2.64589	2.64589
+H	7.28359	2.64589	4.42589
+H	0.758602	0	1.00857
+H	0.758602	0	0
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+H	3.61574	0	1.00857
+H	3.61574	0	0
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+H	6.47289	0	1.00857
+H	6.47289	0	0
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+H	6.47289	2.85714	0
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+H	9.33003	0	1.00857
+H	9.33003	0	0
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+H	9.33003	2.85714	0
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+H	9.33003	5.71429	0
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+H	12.1872	0	1.00857
+H	12.1872	0	0
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+H	15.0443	0	1.00857
+H	15.0443	0	0
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+H	17.9015	0	1.00857
+H	17.9015	0	0
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
+C	9.78209	3.27519	3.53589
+C	8.53279	4.15859	3.53589
+C	7.28359	3.27519	3.53589
+O	0	0	0.504284
+O	0	0	3.36143
+O	0	0	6.21857
+O	0	0	9.07571
+O	0	0	11.9329
+O	0	0	14.79
+O	0	0	17.6471
+O	0	2.85714	0.504284
+O	0	2.85714	3.36143
+O	0	2.85714	6.21857
+O	0	2.85714	9.07571
+O	0	2.85714	11.9329
+O	0	2.85714	14.79
+O	0	2.85714	17.6471
+O	0	5.71429	0.504284
+O	0	5.71429	3.36143
+O	0	5.71429	6.21857
+O	0	5.71429	9.07571
+O	0	5.71429	11.9329
+O	0	5.71429	14.79
+O	0	5.71429	17.6471
+O	0	8.57143	0.504284
+O	0	8.57143	3.36143
+O	0	8.57143	6.21857
+O	0	8.57143	9.07571
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+O	0	8.57143	17.6471
+O	0	11.4286	0.504284
+O	0	11.4286	3.36143
+O	0	11.4286	6.21857
+O	0	11.4286	9.07571
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+O	0	11.4286	17.6471
+O	0	14.2857	0.504284
+O	0	14.2857	3.36143
+O	0	14.2857	6.21857
+O	0	14.2857	9.07571
+O	0	14.2857	11.9329
+O	0	14.2857	14.79
+O	0	14.2857	17.6471
+O	0	17.1429	0.504284
+O	0	17.1429	3.36143
+O	0	17.1429	6.21857
+O	0	17.1429	9.07571
+O	0	17.1429	11.9329
+O	0	17.1429	14.79
+O	0	17.1429	17.6471
+O	2.85714	0	0.504284
+O	2.85714	0	3.36143
+O	2.85714	0	6.21857
+O	2.85714	0	9.07571
+O	2.85714	0	11.9329
+O	2.85714	0	14.79
+O	2.85714	0	17.6471
+O	2.85714	2.85714	0.504284
+O	2.85714	2.85714	3.36143
+O	2.85714	2.85714	6.21857
+O	2.85714	2.85714	9.07571
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+O	2.85714	2.85714	17.6471
+O	2.85714	5.71429	0.504284
+O	2.85714	5.71429	3.36143
+O	2.85714	5.71429	6.21857
+O	2.85714	5.71429	9.07571
+O	2.85714	5.71429	11.9329
+O	2.85714	5.71429	14.79
+O	2.85714	5.71429	17.6471
+O	2.85714	8.57143	0.504284
+O	2.85714	8.57143	3.36143
+O	2.85714	8.57143	6.21857
+O	2.85714	8.57143	9.07571
+O	2.85714	8.57143	11.9329
+O	2.85714	8.57143	14.79
+O	2.85714	8.57143	17.6471
+O	2.85714	11.4286	0.504284
+O	2.85714	11.4286	3.36143
+O	2.85714	11.4286	6.21857
+O	2.85714	11.4286	9.07571
+O	2.85714	11.4286	11.9329
+O	2.85714	11.4286	14.79
+O	2.85714	11.4286	17.6471
+O	2.85714	14.2857	0.504284
+O	2.85714	14.2857	3.36143
+O	2.85714	14.2857	6.21857
+O	2.85714	14.2857	9.07571
+O	2.85714	14.2857	11.9329
+O	2.85714	14.2857	14.79
+O	2.85714	14.2857	17.6471
+O	2.85714	17.1429	0.504284
+O	2.85714	17.1429	3.36143
+O	2.85714	17.1429	6.21857
+O	2.85714	17.1429	9.07571
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+O	2.85714	17.1429	17.6471
+O	5.71429	0	0.504284
+O	5.71429	0	3.36143
+O	5.71429	0	6.21857
+O	5.71429	0	9.07571
+O	5.71429	0	11.9329
+O	5.71429	0	14.79
+O	5.71429	0	17.6471
+O	5.71429	2.85714	0.504284
+O	5.71429	2.85714	6.21857
+O	5.71429	2.85714	9.07571
+O	5.71429	2.85714	11.9329
+O	5.71429	2.85714	14.79
+O	5.71429	2.85714	17.6471
+O	5.71429	5.71429	0.504284
+O	5.71429	5.71429	6.21857
+O	5.71429	5.71429	9.07571
+O	5.71429	5.71429	11.9329
+O	5.71429	5.71429	14.79
+O	5.71429	5.71429	17.6471
+O	5.71429	8.57143	0.504284
+O	5.71429	8.57143	3.36143
+O	5.71429	8.57143	6.21857
+O	5.71429	8.57143	9.07571
+O	5.71429	8.57143	11.9329
+O	5.71429	8.57143	14.79
+O	5.71429	8.57143	17.6471
+O	5.71429	11.4286	0.504284
+O	5.71429	11.4286	3.36143
+O	5.71429	11.4286	6.21857
+O	5.71429	11.4286	9.07571
+O	5.71429	11.4286	11.9329
+O	5.71429	11.4286	14.79
+O	5.71429	11.4286	17.6471
+O	5.71429	14.2857	0.504284
+O	5.71429	14.2857	3.36143
+O	5.71429	14.2857	6.21857
+O	5.71429	14.2857	9.07571
+O	5.71429	14.2857	11.9329
+O	5.71429	14.2857	14.79
+O	5.71429	14.2857	17.6471
+O	5.71429	17.1429	0.504284
+O	5.71429	17.1429	3.36143
+O	5.71429	17.1429	6.21857
+O	5.71429	17.1429	9.07571
+O	5.71429	17.1429	11.9329
+O	5.71429	17.1429	14.79
+O	5.71429	17.1429	17.6471
+O	8.57143	0	0.504284
+O	8.57143	0	3.36143
+O	8.57143	0	6.21857
+O	8.57143	0	9.07571
+O	8.57143	0	11.9329
+O	8.57143	0	14.79
+O	8.57143	0	17.6471
+O	8.57143	2.85714	0.504284
+O	8.57143	2.85714	9.07571
+O	8.57143	2.85714	11.9329
+O	8.57143	2.85714	14.79
+O	8.57143	2.85714	17.6471
+O	8.57143	5.71429	0.504284
+O	8.57143	5.71429	9.07571
+O	8.57143	5.71429	11.9329
+O	8.57143	5.71429	14.79
+O	8.57143	5.71429	17.6471
+O	8.57143	8.57143	0.504284
+O	8.57143	8.57143	3.36143
+O	8.57143	8.57143	6.21857
+O	8.57143	8.57143	9.07571
+O	8.57143	8.57143	11.9329
+O	8.57143	8.57143	14.79
+O	8.57143	8.57143	17.6471
+O	8.57143	11.4286	0.504284
+O	8.57143	11.4286	3.36143
+O	8.57143	11.4286	6.21857
+O	8.57143	11.4286	9.07571
+O	8.57143	11.4286	11.9329
+O	8.57143	11.4286	14.79
+O	8.57143	11.4286	17.6471
+O	8.57143	14.2857	0.504284
+O	8.57143	14.2857	3.36143
+O	8.57143	14.2857	6.21857
+O	8.57143	14.2857	9.07571
+O	8.57143	14.2857	11.9329
+O	8.57143	14.2857	14.79
+O	8.57143	14.2857	17.6471
+O	8.57143	17.1429	0.504284
+O	8.57143	17.1429	3.36143
+O	8.57143	17.1429	6.21857
+O	8.57143	17.1429	9.07571
+O	8.57143	17.1429	11.9329
+O	8.57143	17.1429	14.79
+O	8.57143	17.1429	17.6471
+O	11.4286	0	0.504284
+O	11.4286	0	3.36143
+O	11.4286	0	6.21857
+O	11.4286	0	9.07571
+O	11.4286	0	11.9329
+O	11.4286	0	14.79
+O	11.4286	0	17.6471
+O	11.4286	2.85714	0.504284
+O	11.4286	2.85714	6.21857
+O	11.4286	2.85714	9.07571
+O	11.4286	2.85714	11.9329
+O	11.4286	2.85714	14.79
+O	11.4286	2.85714	17.6471
+O	11.4286	5.71429	0.504284
+O	11.4286	5.71429	6.21857
+O	11.4286	5.71429	9.07571
+O	11.4286	5.71429	11.9329
+O	11.4286	5.71429	14.79
+O	11.4286	5.71429	17.6471
+O	11.4286	8.57143	0.504284
+O	11.4286	8.57143	3.36143
+O	11.4286	8.57143	6.21857
+O	11.4286	8.57143	9.07571
+O	11.4286	8.57143	11.9329
+O	11.4286	8.57143	14.79
+O	11.4286	8.57143	17.6471
+O	11.4286	11.4286	0.504284
+O	11.4286	11.4286	3.36143
+O	11.4286	11.4286	6.21857
+O	11.4286	11.4286	9.07571
+O	11.4286	11.4286	11.9329
+O	11.4286	11.4286	14.79
+O	11.4286	11.4286	17.6471
+O	11.4286	14.2857	0.504284
+O	11.4286	14.2857	3.36143
+O	11.4286	14.2857	6.21857
+O	11.4286	14.2857	9.07571
+O	11.4286	14.2857	11.9329
+O	11.4286	14.2857	14.79
+O	11.4286	14.2857	17.6471
+O	11.4286	17.1429	0.504284
+O	11.4286	17.1429	3.36143
+O	11.4286	17.1429	6.21857
+O	11.4286	17.1429	9.07571
+O	11.4286	17.1429	11.9329
+O	11.4286	17.1429	14.79
+O	11.4286	17.1429	17.6471
+O	14.2857	0	0.504284
+O	14.2857	0	3.36143
+O	14.2857	0	6.21857
+O	14.2857	0	9.07571
+O	14.2857	0	11.9329
+O	14.2857	0	14.79
+O	14.2857	0	17.6471
+O	14.2857	2.85714	0.504284
+O	14.2857	2.85714	3.36143
+O	14.2857	2.85714	6.21857
+O	14.2857	2.85714	9.07571
+O	14.2857	2.85714	11.9329
+O	14.2857	2.85714	14.79
+O	14.2857	2.85714	17.6471
+O	14.2857	5.71429	0.504284
+O	14.2857	5.71429	3.36143
+O	14.2857	5.71429	6.21857
+O	14.2857	5.71429	9.07571
+O	14.2857	5.71429	11.9329
+O	14.2857	5.71429	14.79
+O	14.2857	5.71429	17.6471
+O	14.2857	8.57143	0.504284
+O	14.2857	8.57143	3.36143
+O	14.2857	8.57143	6.21857
+O	14.2857	8.57143	9.07571
+O	14.2857	8.57143	11.9329
+O	14.2857	8.57143	14.79
+O	14.2857	8.57143	17.6471
+O	14.2857	11.4286	0.504284
+O	14.2857	11.4286	3.36143
+O	14.2857	11.4286	6.21857
+O	14.2857	11.4286	9.07571
+O	14.2857	11.4286	11.9329
+O	14.2857	11.4286	14.79
+O	14.2857	11.4286	17.6471
+O	14.2857	14.2857	0.504284
+O	14.2857	14.2857	3.36143
+O	14.2857	14.2857	6.21857
+O	14.2857	14.2857	9.07571
+O	14.2857	14.2857	11.9329
+O	14.2857	14.2857	14.79
+O	14.2857	14.2857	17.6471
+O	14.2857	17.1429	0.504284
+O	14.2857	17.1429	3.36143
+O	14.2857	17.1429	6.21857
+O	14.2857	17.1429	9.07571
+O	14.2857	17.1429	11.9329
+O	14.2857	17.1429	14.79
+O	14.2857	17.1429	17.6471
+O	17.1429	0	0.504284
+O	17.1429	0	3.36143
+O	17.1429	0	6.21857
+O	17.1429	0	9.07571
+O	17.1429	0	11.9329
+O	17.1429	0	14.79
+O	17.1429	0	17.6471
+O	17.1429	2.85714	0.504284
+O	17.1429	2.85714	3.36143
+O	17.1429	2.85714	6.21857
+O	17.1429	2.85714	9.07571
+O	17.1429	2.85714	11.9329
+O	17.1429	2.85714	14.79
+O	17.1429	2.85714	17.6471
+O	17.1429	5.71429	0.504284
+O	17.1429	5.71429	3.36143
+O	17.1429	5.71429	6.21857
+O	17.1429	5.71429	9.07571
+O	17.1429	5.71429	11.9329
+O	17.1429	5.71429	14.79
+O	17.1429	5.71429	17.6471
+O	17.1429	8.57143	0.504284
+O	17.1429	8.57143	3.36143
+O	17.1429	8.57143	6.21857
+O	17.1429	8.57143	9.07571
+O	17.1429	8.57143	11.9329
+O	17.1429	8.57143	14.79
+O	17.1429	8.57143	17.6471
+O	17.1429	11.4286	0.504284
+O	17.1429	11.4286	3.36143
+O	17.1429	11.4286	6.21857
+O	17.1429	11.4286	9.07571
+O	17.1429	11.4286	11.9329
+O	17.1429	11.4286	14.79
+O	17.1429	11.4286	17.6471
+O	17.1429	14.2857	0.504284
+O	17.1429	14.2857	3.36143
+O	17.1429	14.2857	6.21857
+O	17.1429	14.2857	9.07571
+O	17.1429	14.2857	11.9329
+O	17.1429	14.2857	14.79
+O	17.1429	14.2857	17.6471
+O	17.1429	17.1429	0.504284
+O	17.1429	17.1429	3.36143
+O	17.1429	17.1429	6.21857
+O	17.1429	17.1429	9.07571
+O	17.1429	17.1429	11.9329
+O	17.1429	17.1429	14.79
+O	17.1429	17.1429	17.6471
Index: tests/regression/atlocal.in
===================================================================
--- tests/regression/atlocal.in	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/atlocal.in	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -1,4 +1,5 @@
 prefix='@prefix@'
 exec_prefix='@prefix@'
-topdir='@topdir@'
+topdir='@abs_top_builddir@'
 bindir='@bindir@'
+valgrind='@VALGRIND@'
Index: tests/regression/molecuilder.in
===================================================================
--- tests/regression/molecuilder.in	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/molecuilder.in	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -3,8 +3,28 @@
 # wrapper for testing molecuilder
 
-. ../../atconfig
+. ../../atlocal
 
-"${abs_top_builddir}/src/molecuilder" \
-	${1+"$@"}
+if test ! -z ${valgrind}
+then
+G_SLICE=always-malloc G_DEBUG=gc-friendly \
+libtool --mode=execute \
+${valgrind} -v \
+--log-file=valgrind.log \
+--xml=yes \
+--xml-file=valgrind.err \
+--time-stamp=yes \
+--error-exitcode=255 \
+--leak-check=full \
+--leak-resolution=high \
+--num-callers=20 \
+--track-origins=yes \
+--show-reachable=yes \
+"${topdir}/src/molecuilder" \
+${1+"$@"}
+else
+"${topdir}/src/molecuilder" \
+${1+"$@"}
+fi
+
 status=$?
 
Index: tests/regression/testsuite-analysis.at
===================================================================
--- tests/regression/testsuite-analysis.at	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/testsuite-analysis.at	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -39,5 +39,5 @@
 AT_KEYWORDS([analysis])
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Analysis/4/pre/test.conf .], 0)
-AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -v 3 -I --select-all-molecules --unselect-molecule-by-id 207 --surface-correlation --elements 1 --output-file output.csv --bin-output-file bin_output.csv --bin-start 0 --bin-width 1. --bin-end 20 --molecule-by-id 207], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -v 3 -I --select-all-molecules --unselect-molecule-by-formula C3H8 --surface-correlation --elements 1 --output-file output.csv --bin-output-file bin_output.csv --bin-start 0 --bin-width 1. --bin-end 20 --molecule-by-id 1], 0, [stdout], [stderr])
 AT_CHECK([fgrep "Begin of CorrelationToSurface" stdout], 0, [ignore], [ignore])
 #AT_CHECK([file=output.csv; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Analysis/4/post/$file], 0, [ignore], [ignore])
Index: tests/regression/testsuite-graph.at
===================================================================
--- tests/regression/testsuite-graph.at	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/testsuite-graph.at	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -16,2 +16,16 @@
 AT_CLEANUP
 
+AT_SETUP([Graph - subgraph dissection with Undo/Redo])
+AT_KEYWORDS([graph])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Graph/2/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -v 3 -I], 0, [stdout], [stderr])
+AT_CHECK([fgrep "I scanned 31 molecules." stdout], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Graph/2/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -v 3 -I --undo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "I scanned 31 molecules." stdout], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Graph/2/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -v 3 -I --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([grep -c "I scanned 31 molecules." stdout], 0, [2
+], [ignore])
+AT_CLEANUP
+
Index: tests/regression/testsuite-simple_configuration.at
===================================================================
--- tests/regression/testsuite-simple_configuration.at	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/testsuite-simple_configuration.at	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -31,4 +31,13 @@
 AT_CHECK([../../molecuilder -i test2.conf -e ${abs_top_srcdir}/src/ -o mpqc pcp xyz -a 1 --position "0., 0., -1."], 134, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Simple configuration - adding atom with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([../../molecuilder -i empty.conf -o pcp -a 1 --position "10., 10., 10." --undo], 0, [ignore], [ignore])
+AT_CHECK([file=empty.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -o mpqc pcp xyz -a 1 --position "10., 10., 10." --undo --redo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([file=test.in; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
 
 # 4. change the element
@@ -37,4 +46,13 @@
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
 AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 ], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Changing element with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo --redo], 0, [ignore], [ignore])
 AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
@@ -48,4 +66,13 @@
 AT_CHECK([file=test.in; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
 AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Atom removal with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf --select-atom-by-id 0 -r --undo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf --select-atom-by-id 0 -r --undo --redo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
 
@@ -72,11 +99,68 @@
 AT_CLEANUP
 
-# 8. Removing sphere of atoms
+# 8. Removing _shape_ of atoms
 AT_SETUP([Simple configuration - Removing sphere of atoms])
 AT_KEYWORDS([configuration])
-AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.* .], 0)
-AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -o xyz -R 7. --position "7.283585982, 3.275186040, 3.535886037"], 0, [stdout], [stderr])
-AT_CHECK([sort -n test.xyz | grep -v "Created by" >test.xyz-sorted], 0, [ignore], [ignore])
-AT_CHECK([sort -n ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/test.xyz  | grep -v "Created by" >${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutsphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutsphere.xyz --select-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutsphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutsphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutsphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-sphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-sphere.xyz --select-all-atoms --unselect-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-sphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-sphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-sphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-sphere.xyz-sorted test-withoutsphere.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Removing sphere of atoms with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutsphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutsphere.xyz --select-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutsphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutsphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutsphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-all-atoms --unselect-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-sphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-sphere.xyz --select-all-atoms --unselect-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-sphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-sphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-sphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-sphere.xyz-sorted test-withoutsphere.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Simple configuration - Removing cuboid of atoms])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutcuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutcuboid.xyz --select-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutcuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutcuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutcuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-cuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-cuboid.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-cuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-cuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-cuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-cuboid.xyz-sorted test-withoutcuboid.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Removing cuboid of atoms with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutcuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutcuboid.xyz --select-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutcuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutcuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutcuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-cuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-cuboid.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-cuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-cuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-cuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-cuboid.xyz-sorted test-withoutcuboid.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
 AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
Index: tests/regression/testsuite-standard_options.at
===================================================================
--- tests/regression/testsuite-standard_options.at	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/testsuite-standard_options.at	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -5,5 +5,12 @@
 AT_CHECK([pwd],[ignore],[ignore])
 AT_CHECK([../../molecuilder -v 1], 0, [stdout], [ignore])
-AT_CHECK([fgrep olecuilder stdout], 0, [ignore], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Standard Options - verbosity with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -v 1 --undo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from 1 to .*" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -v 1 --undo --redo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
 
@@ -53,4 +60,12 @@
 AT_CHECK([fgrep "I won't parse trajectories" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Standard Options - fast trajectories with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -i test.conf -n 1 --undo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "I will parse trajectories." stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -n 1 --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([grep -c "I won't parse trajectories" stdout], 0, 2
+, [ignore])
+AT_CLEANUP
 
 # 7. molecule default name
@@ -60,2 +75,9 @@
 AT_CHECK([fgrep "Default name of new molecules set to test." stdout], 0, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Standard Options - molecule default name with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -i test.conf -X test --undo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "Default name of new molecules set to none." stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -X test --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "Default name of new molecules set to test." stdout], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/testsuite.at
===================================================================
--- tests/regression/testsuite.at	(revision 8006eed2788de714f5d76c85a5cb7d0c5891ef58)
+++ tests/regression/testsuite.at	(revision 994713afde7cd130d68e8417cfee8669e3d96182)
@@ -7,4 +7,6 @@
 AT_TESTED(diff fgrep grep)
 
+# Use colored output with new-enough Autotest.
+m4_ifdef([AT_COLOR_TESTS], [AT_COLOR_TESTS])
 
 m4_include(testsuite-standard_options.at)
